IDE-Intake: Ziel-Plattform waehlbar (LXC oder Docker) + Infrastruktur-Steckbrief

Zweiter, dezenter Schalter (nur bei IDE): Ziel = LXC (Standard) oder Docker.
Die Wahl fliesst als 'ZIEL-PLATTFORM'-Zeile in den Auftrag, dazu immer ein
Infrastruktur-Steckbrief (Proxmox/LXC, PBS-Backups, systemd, self-hosted Gitea,
alles lokal) — sonst plant jedes Modell nach Industrie-Default Docker/Cloud.
Skill: Ziel + Infrastruktur sind bindend; traegt die Wahl nicht, muss das
Konzept es ausdruecklich sagen statt sie still zu ignorieren.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-20 22:18:20 +02:00
parent 7b9752261a
commit d5da853db2
29 changed files with 144 additions and 83 deletions
+27 -1
View File
@@ -167,6 +167,8 @@ function IdeenSection() {
// Intake-Modus: Box baut · IDE simpel (schnelles Konzept) · IDE gründlich (volle Kaskade).
const [modus, setModus] = useState<"box" | "simpel" | "gruendlich">("box")
const isIde = modus !== "box"
// Ziel-Plattform des Projekts (nur IDE-Welt): läuft es als LXC-Dienst oder in Docker?
const [ziel, setZiel] = useState<"lxc" | "docker">("lxc")
const [sending, setSending] = useState(false)
const [busy, setBusy] = useState<Record<string, boolean>>({})
const [openLog, setOpenLog] = useState<string | null>(null)
@@ -188,7 +190,7 @@ function IdeenSection() {
// Lange Eingaben: Kurzfassung als Titel, alles als Notiz — der Specifier der Box
// macht daraus ohnehin einen sauberen Auftrag.
const titel = t.length > 160 ? t.slice(0, 157) + "…" : t
await api("/api/ideen", { method: "POST", body: JSON.stringify({ titel, notiz: t.length > 160 ? t : "", welt: isIde ? "ide" : "box", tiefe: isIde ? modus : "" }) })
await api("/api/ideen", { method: "POST", body: JSON.stringify({ titel, notiz: t.length > 160 ? t : "", welt: isIde ? "ide" : "box", tiefe: isIde ? modus : "", ziel: isIde ? ziel : "" }) })
setText("")
reload()
} catch (e: any) {
@@ -471,6 +473,30 @@ function IdeenSection() {
</button>
</div>
</div>
{isIde && (
<div className="flex items-center gap-1.5">
<span className="text-[11px] text-muted-foreground/70">Ziel</span>
<div className="flex rounded-lg border border-border/40 p-0.5">
<button
onClick={() => setZiel("lxc")}
title="Läuft als Dienst in einem eigenen Proxmox-LXC (systemd, kein Docker). Wird vom Backup-Server automatisch mitgesichert."
className={cn("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",
ziel === "lxc" ? "bg-foreground/10 text-foreground" : "text-muted-foreground/50 hover:text-foreground/80")}>
LXC
</button>
<button
onClick={() => setZiel("docker")}
title="Läuft als docker compose — innerhalb eines LXC mit Nesting, kein separater Docker-Host. Für Software, die es nur als Image gibt."
className={cn("rounded px-2 py-0.5 text-[10px] font-semibold transition-all cursor-pointer",
ziel === "docker" ? "bg-foreground/10 text-foreground" : "text-muted-foreground/50 hover:text-foreground/80")}>
Docker
</button>
</div>
<span className="text-[10px] text-muted-foreground/50">
{ziel === "lxc" ? "Dienst im Proxmox-Container (deine Heimat)" : "compose im LXC mit Nesting"}
</span>
</div>
)}
<p className="text-[11px] text-muted-foreground">
{isIde ? (
<>