Spezialisierung je Thema: begrenzt den Umfang auf einen Ausschnitt

Drittes Feld neben Thema und Hinweisen. Hinweise fügen hinzu, die
Spezialisierung nimmt weg: Recherche, Gliederung, Kapitel und Prüfung
bekommen sie als verbindliche Grenze; nur Stoff, der dafür gebraucht
wird, Grundlagen nur soweit nötig.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
team3
2026-10-12 15:20:10 +02:00
parent efd3bc8598
commit 7538812cfd
13 changed files with 49 additions and 32 deletions

View File

@@ -35,6 +35,7 @@ const state = ref(null)
const fehler = ref('')
const neuName = ref('')
const neuHinweise = ref('')
const neuSpezialisierung = ref('')
const navAuf = ref(false)
let timer = null
@@ -104,9 +105,10 @@ async function anlegen() {
const name = neuName.value.trim()
if (!name) return
try {
const t = await api.anlegen(name, neuHinweise.value.trim())
const t = await api.anlegen(name, neuHinweise.value.trim(), neuSpezialisierung.value.trim())
neuName.value = ''
neuHinweise.value = ''
neuSpezialisierung.value = ''
await topicsLaden()
themaWaehlen(t.slug)
} catch (e) { fehler.value = String(e.message || e) }
@@ -170,6 +172,7 @@ function tokens(n) { return n >= 1e6 ? (n / 1e6).toFixed(1) + 'M' : n >= 1e3 ? M
<div class="neu">
<input v-model="neuName" placeholder="Thema, z. B. Godot 4" @keyup.enter="anlegen" />
<input v-model="neuHinweise" placeholder="Hinweise (optional), z. B. für Entwickler, ab Version 4.6" @keyup.enter="anlegen" />
<input v-model="neuSpezialisierung" placeholder="Spezialisierung (optional), z. B. Kartenspiel gegen KI" title="Begrenzt den Umfang: nur, was dafür gebraucht wird" @keyup.enter="anlegen" />
<button @click="anlegen">Anlegen</button>
</div>
</aside>

View File

@@ -18,7 +18,7 @@ const e = encodeURIComponent
const v = (slug, n) => `/themen/${e(slug)}/v${n}`
export const api = {
themen: () => req('/themen'),
anlegen: (name, hinweise = '') => req('/themen', { method: 'POST', body: { name, hinweise } }),
anlegen: (name, hinweise = '', spezialisierung = '') => req('/themen', { method: 'POST', body: { name, hinweise, spezialisierung } }),
loeschen: (slug) => req(`/themen/${e(slug)}`, { method: 'DELETE' }),
versionAnlegen: (slug) => req(`/themen/${e(slug)}/versionen`, { method: 'POST' }),
versionLoeschen: (slug, n) => req(v(slug, n), { method: 'DELETE' }),

View File

@@ -45,7 +45,7 @@ function neueVersion() { if (confirm('Neue Version erzeugen? Gleiche Eingaben, k
<button v-if="!laeuft && !fertig" @click="emit('start')">{{ begonnen ? 'Fortsetzen' : 'Buch erzeugen' }}</button>
<button v-if="laeuft" class="sekundaer" @click="emit('pause')">Pause</button>
<button v-if="!laeuft && begonnen && !fertig" class="sekundaer" @click="reset">Zurücksetzen</button>
<button v-if="!laeuft && begonnen" class="sekundaer" title="Gleiches Thema, gleiche Hinweise, neuer Lauf" @click="neueVersion">Neue Version</button>
<button v-if="!laeuft && begonnen" class="sekundaer" title="Gleiches Thema, gleiche Hinweise und Spezialisierung, neuer Lauf" @click="neueVersion">Neue Version</button>
<span class="spacer"></span>
<span class="badge" :class="statusFarbe[state.status]">{{ statusText[state.status] || state.status }}<template v-if="state.stufe && laeuft"> · {{ state.stufe }}</template></span>
<span class="badge">{{ usd(state.kosten_usd) }}</span>