Repo-Skelett für cards-native, native SwiftUI-Universal-App für Cardecky (mana e.V.). Web-Parität zu cardecky.mana.how. - project.yml mit Bundle ev.mana.cards, ManaSwiftCore-Dep via path - AppConfig: auth.mana.how + cardecky-api.mana.how, Keychain ev.mana.cards - CardsTheme: forest-Werte aus mana/packages/themes/.../forest.css - LoginView (Email/PW gegen mana-auth via ManaCore.AuthClient) - DashboardView als β-1-Placeholder mit cardecky-api-Reachability-Probe - Log unter Subsystem ev.mana.cards - 3 AppConfig-Tests - iOS-Simulator-Build grün Phasen-Plan: mana/docs/playbooks/CARDS_NATIVE_GREENFIELD.md Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
63 lines
2.4 KiB
Markdown
63 lines
2.4 KiB
Markdown
# Plan — cards-native (SwiftUI Universal)
|
|
|
|
**Stand: 2026-05-12 — Phase β-0 abgeschlossen.** Repo lebt lokal,
|
|
ManaCore + ManaTokens als Package-Dependency, Login funktioniert,
|
|
Cardecky-API-Reachability-Probe.
|
|
|
|
> **SOT:** `../mana/docs/playbooks/CARDS_NATIVE_GREENFIELD.md`.
|
|
> Dieses File ist die App-lokale Status-Spur, das Greenfield-Doc
|
|
> hat die ganze Architektur-Begründung.
|
|
|
|
## Aktueller Stand
|
|
|
|
✅ **β-0 — Setup**
|
|
- Repo-Skelett unter `git.mana.how/till/cards-native`
|
|
- `project.yml` mit Bundle-ID `ev.mana.cards`, ManaSwiftCore via
|
|
`path: ../mana-swift-core`
|
|
- `AppConfig` als `ManaAppConfig`-Provider:
|
|
- Auth: `https://auth.mana.how`
|
|
- API: `https://cardecky-api.mana.how`
|
|
- Keychain-Service: `ev.mana.cards`
|
|
- `CardsTheme.swift` mit forest-Werten (lokal nachgebaut aus
|
|
`mana/packages/themes/src/variants/forest.css`)
|
|
- `LoginView` (Email/PW gegen mana-auth)
|
|
- `DashboardView` als β-1-Placeholder mit API-Reachability-Indikator
|
|
- 3 Unit-Tests (AppConfig)
|
|
- iOS-Simulator-Build grün
|
|
|
|
## Phasen (Detail in Greenfield-Plan)
|
|
|
|
| Phase | Status | Inhalt |
|
|
|---|---|---|
|
|
| β-0 | ✅ 2026-05-12 | Setup, Login, API-Probe |
|
|
| β-1 | ⏳ | Decks lesen, SwiftData-Cache |
|
|
| β-2 | — | Study-Loop, Offline-Grade-Queue, Endurance-Test |
|
|
| β-3 | — | Card-/Deck-Editor (basic, cloze, typing, multiple-choice) |
|
|
| β-4 | — | Media, image-occlusion (PencilKit), audio-front |
|
|
| β-5 | — | Marketplace, Universal-Links |
|
|
| β-6 | — | Native-Polish (Widgets, Notifications, Share-Extension) |
|
|
| β-7 | — | App-Store-Submission |
|
|
|
|
## Nächste Schritte für β-1
|
|
|
|
Aus Greenfield-Plan-Sektion "Phase β-1 — Decks lesen":
|
|
|
|
1. `Deck`-`Codable`-Struct nach Wire-Format aus
|
|
`../cards/apps/api/src/routes/decks.ts` + `cards/packages/cards-domain/src/schemas/`
|
|
2. `CardsAPI.decks() -> [Deck]` mit `GET /api/v1/decks`
|
|
3. `DeckListView` mit Pull-to-Refresh, Card/Due-Counts
|
|
4. `CachedDeck` als SwiftData-Model mit `lastFetchedAt`
|
|
5. Offline-Display bei fehlendem Netz
|
|
6. Inbox-Banner aus `?forked_from_marketplace=true`-Query
|
|
|
|
**Erfolgskriterium:** Web-Account-Decks vollständig in identischer
|
|
Reihenfolge sichtbar, Pull-to-Refresh aktualisiert Counts.
|
|
|
|
## Cross-Refs
|
|
|
|
- `../mana/docs/playbooks/CARDS_NATIVE_GREENFIELD.md` — Greenfield-Plan SOT
|
|
- `../mana/docs/MANA_SWIFT.md` — Plattform-SOT
|
|
- `../cards/CLAUDE.md` — Cards-Repo
|
|
- `../cards/STATUS.md` — Web-Phasenstand (Referenz)
|
|
- `../mana-swift-core/CLAUDE.md` — ManaCore-Konventionen
|
|
- `CLAUDE.md` — Repo-Konventionen
|