Vierter Modus 'Idee': Produkt-Idee durchdenken statt Projekt starten

Fuer echte Software-Ideen (z.B. Game-Server-Management), die weder MC2/Lucy-
Umbau noch schon ein Zed-Projekt sind. Volle Denk-Kaskade mit PRODUKT-Blick
(was, fuer wen, was gibt es schon, kleinster Wurf, was spricht dagegen) statt
Umsetzungs-Blick. Ergebnis: NUR KONZEPT.md — keine Roadmap, kein Geruest, keine
Bau-Aufforderung; der Commander entscheidet danach. Kein Ziel-Schalter (eine
Idee braucht noch keine Plattform). Eigene Farbe (sky), Button 'Durchdenken'.
Nebenbei: projektstart-SOUL.md ist jetzt versioniert + deploy-fest (lag bisher
nur auf der Box).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-20 22:57:06 +02:00
parent 40c8ed4754
commit 7389386791
30 changed files with 247 additions and 98 deletions
+32 -8
View File
@@ -164,9 +164,11 @@ function IdeenSection() {
const qc = useQueryClient()
const { showAlert, showConfirm, dialogElement } = useDialog()
const [text, setText] = useState("")
// 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"
// Intake-Modus: Box baut · Idee (nur durchdenken) · IDE simpel/gründlich (Projekt vorbereiten).
const [modus, setModus] = useState<"box" | "idee" | "simpel" | "gruendlich">("box")
const isIdee = modus === "idee" // Produkt-Idee prüfen
const isProjekt = modus === "simpel" || modus === "gruendlich" // Projekt für Zed
const isIde = isIdee || isProjekt // beides → projektstart
// 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)
@@ -190,7 +192,13 @@ 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 : "", ziel: isIde ? ziel : "" }) })
await api("/api/ideen", { method: "POST", body: JSON.stringify({
titel, notiz: t.length > 160 ? t : "",
welt: isIde ? "ide" : "box",
tiefe: isProjekt ? modus : "",
ziel: isProjekt ? ziel : "", // eine Idee braucht noch keine Plattform
art: isIdee ? "idee" : "projekt",
}) })
setText("")
reload()
} catch (e: any) {
@@ -443,9 +451,10 @@ function IdeenSection() {
className={cn("flex h-9 shrink-0 items-center gap-1.5 rounded-lg border px-3 text-[11px] font-bold uppercase tracking-wide transition-all cursor-pointer disabled:opacity-50",
modus === "gruendlich" ? "border-amber-500/40 bg-amber-500/10 text-amber-300 hover:bg-amber-500/20"
: modus === "simpel" ? "border-violet-500/40 bg-violet-500/10 text-violet-300 hover:bg-violet-500/20"
: isIdee ? "border-sky-500/40 bg-sky-500/10 text-sky-300 hover:bg-sky-500/20"
: "border-primary/40 bg-primary/10 text-primary hover:bg-primary/20")}>
{sending ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : isIde ? <Code2 className="h-3.5 w-3.5" /> : <Send className="h-3.5 w-3.5" />}
{isIde ? "Vorbereiten" : "In die Queue"}
{sending ? <Loader2 className="h-3.5 w-3.5 animate-spin" /> : isIdee ? <Lightbulb className="h-3.5 w-3.5" /> : isProjekt ? <Code2 className="h-3.5 w-3.5" /> : <Send className="h-3.5 w-3.5" />}
{isIdee ? "Durchdenken" : isProjekt ? "Vorbereiten" : "In die Queue"}
</button>
</div>
<div className="flex items-center gap-1.5">
@@ -457,6 +466,13 @@ function IdeenSection() {
modus === "box" ? "bg-primary/15 text-primary" : "text-muted-foreground/60 hover:text-foreground")}>
<Hammer className="h-3 w-3" /> Box
</button>
<button
onClick={() => setModus("idee")}
title="Produkt-Idee erst einmal durchdenken lassen: Was ist es, für wen, was gibt es schon, was spricht dagegen? Ergebnis ist ein Konzept — kein Projekt, kein Bau-Druck."
className={cn("flex items-center gap-1 rounded px-2 py-1 text-[10px] font-bold uppercase tracking-wide transition-all cursor-pointer",
modus === "idee" ? "bg-sky-500/15 text-sky-300" : "text-muted-foreground/60 hover:text-foreground")}>
<Lightbulb className="h-3 w-3" /> Idee
</button>
<button
onClick={() => setModus("simpel")}
title="IDE-Projekt, schnell vorbereitet: knappes Konzept, wenige Denk-Runden. Für kleine, klar umrissene Sachen."
@@ -473,7 +489,7 @@ function IdeenSection() {
</button>
</div>
</div>
{isIde && (
{isProjekt && (
<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">
@@ -498,7 +514,15 @@ function IdeenSection() {
</div>
)}
<p className="text-[11px] text-muted-foreground">
{isIde ? (
{isIdee ? (
<>
<b className="text-sky-300/90">Idee durchdenken:</b> Die Box arbeitet deine Produkt-Idee
mit Produkt-Blick aus was ist es genau, für wen, was gibt es dafür schon, was wäre der
kleinste sinnvolle Wurf und was spricht dagegen. Volle Denk-Kaskade mit Kritiker, Ergebnis
ist <b>nur ein Konzept</b> (kein Gerüst, keine Roadmap, kein Bau-Druck) du liest es hier
und entscheidest danach, ob ein Projekt draus wird.
</>
) : isProjekt ? (
<>
<b className={modus === "gruendlich" ? "text-amber-300/90" : "text-violet-300/90"}>IDE-Welt{modus === "gruendlich" ? " · gründlich" : " · simpel"}:</b>{" "}
Die Box denkt das Konzept durch{modus === "gruendlich"