managarten/packages/shared-branding/src
Till JS 27c1860f82 feat(comic): M1 — Datenschicht + Modul-Registrierung
Neues Comic-Modul: aus Text-Inputs (Journal / Notes / Writing / Library
/ Calendar) entsteht ein mehrseitiger Comic, generiert mit gpt-image-2
über die bestehende /picture/generate-with-reference-Route. Plan in
docs/plans/comic-module.md (M1–M5 + optional M6–M8).

M1 schafft die Datenschicht ohne UI:
- Dexie v44 `comicStories` (space-scoped, Indices createdAt/style/
  isFavorite/isArchived). Story hält `panelImageIds: string[]` und
  `panelMeta: Record<panelImageId, {caption, dialogue, promptUsed,
  sourceInput?}>` — Panels selbst sind picture.images-Rows mit
  comicStoryId + comicPanelIndex Back-Refs.
- Fünf Stil-Presets (comic / manga / cartoon / graphic-novel / webtoon)
  mit Prompt-Prefix-Templates in styles.ts; composePanelPrompt webt
  Stil + Panel-Prompt + Caption + Dialog zusammen. Sprechblasen
  werden von gpt-image-2 direkt ins Bild gerendert — kein SVG-Overlay.
- Encryption-Registry-Eintrag: title / description / storyContext /
  tags / panelMeta als JSON-Blob. Struktur (id, style, character-
  MediaIds, panelImageIds, Flags, visibility) bleibt plaintext.
- Module-Registry registriert appId='comic', verifyMediaOwnership auf
  der /picture/generate-with-reference-Route akzeptiert jetzt
  ['me', 'wardrobe', 'comic'] — 'comic'-Slot ist reserviert für M6+
  Anchor-/Backdrop-Uploads.
- Space-Allowlist: comic in brand (Marken-Storys), club (Vereins-
  geschichte), family (Kinder-Abenteuer), team (Release-Comics),
  practice (Patienten-Aufklärung). Personal via '*'-Sentinel.
- mana-apps.ts Eintrag mit comic-Icon (Sprechblase + Lightning-Bolt,
  f97316→dc2626 Gradient). Lokal tier='guest' mit LOCAL TIER PATCH-
  Comment wie Wardrobe, canonical ist 'beta'.

Visibility-System von Anfang an adopted (setVisibility-Methode im
Store, unlistedToken-Generierung inklusive). appendPanel() als
Vorarbeit für M2 bereits da, ohne Aufrufer.

5 Encryption-Roundtrip-Tests grün (panelMeta nested JSON, leeres
panelMeta, partielle panelMeta ohne sourceInput, null-description).
pnpm run check + validate:all sauber (207 Dexie-Tabellen klassifiziert,
comicStories unter den 106 encrypted).

Kein UI, keine Panel-Generierung, keine MCP-Tools — alles M2/M3/M5.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 15:29:51 +02:00
..
logos refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
app-icons.ts feat(comic): M1 — Datenschicht + Modul-Registrierung 2026-04-24 15:29:51 +02:00
AppLogo.svelte style: auto-format codebase with Prettier 2025-11-27 18:33:16 +01:00
AppLogoWithName.svelte style: auto-format codebase with Prettier 2025-11-27 18:33:16 +01:00
config.ts refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00
index.ts feat(onboarding): M4 — Screen 3 (Templates) + finish handler 2026-04-23 23:03:00 +02:00
mana-apps.spec.ts refactor(shared-branding): derive APP_URLS from APP_ICONS 2026-04-09 15:14:52 +02:00
mana-apps.ts feat(comic): M1 — Datenschicht + Modul-Registrierung 2026-04-24 15:29:51 +02:00
ManaIcon.svelte style: auto-format codebase with Prettier 2025-11-27 18:33:16 +01:00
onboarding-templates.spec.ts feat(onboarding): M4 — Screen 3 (Templates) + finish handler 2026-04-23 23:03:00 +02:00
onboarding-templates.ts feat(onboarding): M4 — Screen 3 (Templates) + finish handler 2026-04-23 23:03:00 +02:00
spaces.ts feat(spaces): validate space metadata on Better Auth organization hooks 2026-04-20 16:05:38 +02:00
types.ts refactor: rename zitare -> quotes (Zitate) 2026-04-14 20:59:16 +02:00