Greenfield-Repo aus Initial-Commit zur Live-App in einer Session.
Strategie D aus MANAMEME_GREENFIELD.md — eigenständige Peer-App,
nicht Subprojekt von cards/mana. Phase 0 → Phase 9d an einem Tag,
weil große Teile der Bild-Pipeline aus dem Verein-Stack
(mana-media + mana-share + mana-auth) plus dem manaspur-Setup
wiederverwendbar waren.
Stats
15 Commits, +10 570 / −40 LoC, 85 Files (51× .ts, 14× .svelte).
Aktiv 122 Minuten in zwei Blöcken, längster Fokus 112 Min.
Top-Dirs Routes/lib/db — also Wire-Format und Datenmodell waren der
Schwerpunkt, nicht UI-Tinkerei.
Phasen-Schritte des Tages
- Initial commit (Phase 0–8-prep) — Repo-Skeleton + Domain-Modell
- Manifest-Route + Posts-CRUD. Auth, Schema, Drizzle-Migrationen,
SvelteKit-Frontend, Docker-Compose alles in einem Wurf.
- Phase 8 LIVE — STATUS.md mit Live-Cut-Chronik. Container
healthy auf mana-server, DNS + Cloudflared-Tunnel up.
- Phase 9a —
posts.attribution-Spalte + import-batch.ts CLI
- erster Karikaturen-Archiv-Theme. Attribution sichtbar auf
PostCard.
- 9a Scale-Up — 22 Posts Karikaturen-Archiv live, kuratierter
Wikimedia-Korpus.
- 9b — Importer-Run für Busch / Struwwelpeter / Zille / Daumier
/ Nast+Tenniel. 57 Posts total.
- Image-Loading-Fix — Stream-Proxy statt presigned URLs. Browser
hatten CORP=
same-origin als Default vom mana-media-Bucket
bekommen; presigned-URL-Direct-Loading scheiterte daran. Server-
seitiger Proxy schickt CORP: cross-origin mit.
- UX-Pass — verein-bot wird zum 🏛 Verein-Import-Label,
Attribution-Block auf Detail-Seite.
- CORP-Header-Fix — gleiche Klasse, anderer Ort: Sharp-Thumbnails
hatten den Header auch nicht.
- Phase 9c — 7 Wikimedia-Batches mehr (Thöny/Heine/Kley/
Gillray/Cruikshank/Rowlandson/Jugend). Karikaturen international.
- Phase 9d — 2 moderne Internet-Meme-Batches (This-is-fine,
HYCAAA, Morgan-Freeman-Reaction, NASA-Ingenuity-Spirit-Last-
Message). CC0 / freie Lizenzen geprüft.
Endstand: 112 Posts in 5 Themen.
Architektur-Entscheidungen
- Strategie D (eigene App, nicht cards-Subprojekt). Begründet in
MANAMEME_GREENFIELD.md: Bild-Pipeline und Feed-Mechanik haben
zu wenig Overlap mit Cards. Peer-App ist sauberer.
- Server-authoritative MVP. Keine Dexie, kein Local-First.
Web = HTTP-Client gegen
manameme-api. Local-First via mana-sync
später.
- EXIF-Strip beim Upload Pflicht. Privacy vor Bequemlichkeit
(CLAUDE.md Invariante 7). GPS/Kamera/Zeit raus, neuer Hash,
Re-Upload als kanonisch.
- content_hash via BLAKE3 für Dedupe. Repost wird sichtbar
gemacht, nicht verhindert.
pgSchema('manameme') auf der geteilten Mana-Postgres-Instanz.
Schema-Isolation statt eigener Cluster.
- Stream-Proxy statt presigned URLs. Mana-media-Bucket setzt
Cross-Origin-Resource-Policy auf
same-origin als Default;
Browser blocken Direct-Loading. Proxy ist hin/zurück ein
zusätzlicher Hop, dafür kein Bucket-CORP-Reconfig.
- Importer als CLI, nicht Admin-UI.
import-batch.ts mit
Wikimedia-Slugs in JSON. Schneller zu iterieren, einfacher zu
kuratieren — die UX-Frage „wie wird ein normaler Mensch sowas
bedienen" stellt sich beim Verein-Import noch nicht.
Trade-offs
- 15 Commits in 3 Stunden ist messy-glücklich. Hätte ich
Phase 9a-d zusammengefasst, wäre die Chronik schöner — aber die
Probleme tauchten genau in der Reihenfolge auf, in der die
Commits stehen. Linearität schlägt Kosmetik.
- +10 530 netto in einer Session geht nur, weil das Domain-
Modell aus
manaspur (Post + Lineage + Attribution) und die
Bild-Pipeline aus mana-media per Copy-Adapt kamen.
- Stream-Proxy frisst CPU pro Bild-Request. Bei 100 Posts heute
irrelevant, bei 10 000 muss CORP-Header am Bucket gefixt werden.
Offene Punkte
- User-Uploads nicht produktiv. Posts-CRUD-Route da, aber
Upload-Flow (signed-PUT zu mana-media → Probe → Strip → Thumbs)
hat in der ersten Live-Session nur stub-getestet.
- Crop-Tool fehlt. β-3-Block aus STATUS.md, vor User-Upload
zwingend.
- 5 Submit-Blocker offen (STATUS.md): u.a. AI-Label-Default,
Repost-Flow, Moderation-Surface, Manifest-Self-Test.
- Native-Schwester (
manameme-native) parallel gestartet,
Wire-Format-Drift muss überwacht werden — derzeit identisch.
- CORP-Bucket-Setup als Bauanleitung in
mana/docs/playbooks/
noch nicht abgelegt — der nächste Bild-Service stolpert sonst
drüber.