Tag 1: β-0 bis β-7 Marathon (Skelett → App-Store-Vorbereitung). Tag 2: Cardecky-Web-Look + alle 7 Card-Types + ManaAuthUI + Guest-Mode + γ-1 bis γ-8 (AI/CSV-Import, Marketplace, PDF). Tag 3: kleiner Style-Polish. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.4 KiB
5.4 KiB
| date | day | view | weekday | commits | review |
|---|---|---|---|---|---|
| 2026-05-13 | 2 | macher | Mittwoch | 22 | written |
Mittwoch, 2026-05-13 — Tag 2 (Macher-Sicht)
Großer Polish-Tag mit Funktions-Vollausbau. Web-Design adaptiert, alle 7 Karten-Typen rendern, ManaAuthUI-Migration zog die Auth-Reise nativ, Guest-Mode landete, und der γ-1-bis-γ-8-Block brachte AI-/ CSV-Import, Card-Edit, Pull-Update, Marketplace-Publish, Moderation und PDF-Export — alles in einer Schicht.
Stats
22 Commits, +6 206 / −1 511 LoC, 87 Files. 115× .swift. Session
11:17 → 02:04, 167 aktive Minuten in 7 Blöcken, längster Fokus
65 Min. Top-Dirs: Domain (11 %), project.yml (9 %), Decks (9 %),
Study (8 %), Sync (6 %). Tags: decks, auth, study, editor, ui.
Schritte (chronologisch)
- DEVELOPMENT_TEAM=QP3GLU8PH3 für Code-Signing. Erstmal Apple-Konto-Setup.
- Rebrand auf
ev.mana.cardecky. Bundle-ID, DisplayName, Strings, Icon-Asset. Vorher hieß die App intern „Cards", öffentlich aber „Cardecky". - Archive-Polish — Versions-Sync, Orientations, Mac-Icon.
- Sendable-Warnings: PhotosPicker zog Sub-View struct (Sendable-
Compliance für
PHPickerViewController). - ITMS-90129 (Apple-Validation): DisplayName Cards → Cardecky in Info.plist, Build 2.
- User-facing Strings Cards → Cardecky komplett, Build 3.
- PublicDeckOwner.pseudonym ist Bool, nicht
String?— Wire-Format-Drift gegen Server-Schema gefangen. - Card-Liste im DeckDetailView + listCards-API. Vorher zeigte Detail nur Metadaten.
- ManaCore v1.0.1 pull — 404 auf Query-Endpoints (URL-Encoding
von
?, siehe mana-swift-core Tag 2). - Cardecky-Web-Design — Fan-Stack-Tiles + CardSurface. Tiles fächern Karten auf, einheitlicher Card-Frame über Front/Back/ Cloze.
- Multiple-Choice-Karten rendern. UI-Render-Layer für MC, Server liefert Choices + correctIndex.
- Typing-Karten + Levenshtein-Match. Antwort-Vergleich verzeiht kleine Tippfehler (Edit-Distance ≤ 2).
- DEBUG-Auto-Login wie in Memoro-Native — schneller Iteration.
- Tile-Redesign — Tap=Study, Edit-Icon, Explore-Konsistenz. Vorher war Tap = Edit, was niemandes Erwartung war.
- iOS-26
tabViewBottomAccessoryfür „Neues Deck"-Pille. Nutzt den neuen iOS-26-API. - code:nil bei AuthError.serverError-Fix in API-Wrapper.
- ManaAuthUI-Migration — alle Auth-Surfaces (Login/Signup/Verify/
Reset/Account/Delete) auf das frische
mana-swift-ui-Package. Eigene Views weg. - Guest-Mode + Login-optionale Surface. Public-Marketplace-Decks
- Read-only Study ohne Account. ManaAuthGate eskaliert pro Aktion.
- γ-1 bis γ-8 — AI-Import-Sheet (Text-Prompt → mana-llm-Deck- Generator), CSV-Import (Header-Parser + Map-Field), Card-Edit- Sheet inkl. Image/Audio, Pull-Update (subscribed deck → new version), Marketplace-Publish (Pseudonym oder echter Name), Moderation-Surface (Report-Reason-Picker), PDF-Export (PDFKit-Renderer). 3 412 / −435 LoC in einem Commit — viel generierter Sheet-Code, viel Wire-Format-Codable.
- SwiftLint-Config + 0-Warnings-Pass + Swift-6-Concurrency-Fixes. CI-Bremse weg.
Architektur-Entscheidungen
- Auth-UI extern, nicht selbst gebaut. Migration auf ManaAuthUI (mana-swift-ui v0.1+) sparte ~600 LoC eigene Auth-Views und zwang die anderen Apps in dieselbe Optik.
- Guest-Mode als eigene Surface-Schicht, nicht „signed-out". Marketplace + Public-Study laufen ohne Account, ManaAuthGate eskaliert pro Aktion (z.B. „Deck speichern").
- Levenshtein für Typing-Match. Edit-Distance ≤ 2 verzeiht Tippfehler ohne triviale Lösungen zu akzeptieren. Server kennt diese Logik nicht (Web hat sie ebenfalls clientseitig).
- Card-Surface als shared View, statt 7× Custom-Layout. Ein Frame, in den 7 Content-Types einsteigen.
- iOS-26-Features als progressive enhancement —
tabViewBottomAccessoryist nur ab iOS 26 verfügbar.#available-Gate. - PDF-Export client-side mit PDFKit, nicht Server. Server- Render würde mana-pdf-Service nötig machen; client-Side ist einfacher und privater.
- DEBUG-Auto-Login-Pattern aus Memoro übernommen — Iteration ist 10× schneller wenn der Login-Step weg ist.
Trade-offs
- 22 Commits in einer Session ist viele Sinn-Abschnitte. Jeder
einzeln klein genug, dass
git loglesbar bleibt. PR-Review würde leiden, aber als Solo-Sprint OK. - AI-Import braucht mana-llm online. Kein Offline-Fallback.
- PublicDeckOwner.pseudonym=Bool ist Web-Schema-Verschwurbel
(Server liefert
Boolean ‚use_pseudonym', nicht den Pseudonym- String — der ist anderswo). Hatte 30 Min Fehlersuche, weil Codable silent failed. - Web gewinnt bei Konflikt zwingt Native zu nachzuziehen. Wenn Web vorab Refactor macht, hat Native immer 1-Tag-Delay.
- iOS-26-only-Features für Sub-Surfaces ist Verstoss gegen „iOS 18 Minimum"-Politik aus CLAUDE.md. Akzeptiert via Gate.
Offene Punkte
- Endurance-Test echtes iPhone: ReviewQueue-Drift bei langem Offline, Battery-Drain, Memory unter Pull-Update.
- PDF-Export-Quality für Image-Occlusion-Karten — Maske wird zurzeit ohne Pencil-Trace gerendert.
- AI-Import-Token-Budget sichtbar machen (Credits-Anzeige).
- Wire-Format-Drift-Detection: Pseudonym-Bool-Fall war silent-failure; sollte ein zod-Schema-Mismatch-Smoke-Test fangen.
- Localizable.xcstrings EN-Fallback angelegt, aber nicht übersetzt.