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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user