Verein-Doktrin (THEMING.md 2026-05-31): jede App unterstützt alle Variants + Light/Dark/System. Visuelle Galerie aus Live-Vorschau-Karten (LazyVGrid) je Variant + segmentierter Appearance-Picker, im iOS-Konto-Tab und in den macOS-Settings. - PagetaTheme löst gegen ManaTheme.current (@AppStorage, Default paper) statt hartkodiert; alle ~40 Call-Sites unverändert. - PagetaBrand.config(for:) macht auch die Auth-Reise variant-bewusst. - Variant × Light/Dark orthogonal (Variant-Farben sind schon adaptiv, .preferredColorScheme steuert weiter Hell/Dunkel). - CLAUDE.md Invariante 6 von "fixe paper-Brand" auf "paper als Default, alle Themes wählbar" korrigiert. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.9 KiB
CLAUDE.md — pageta-native
Guidance für Claude Code in diesem Repo.
Wenn du gerade neu bist: lies zuerst
STATUS.md. Der vollständige Plan lebt in../mana/docs/playbooks/PAGETA_NATIVE_GREENFIELD.md.
Was dieses Repo ist
Pageta Native — iOS + iPadOS + macOS Universal-App für die
Reader-App des Vereins mana e.V. Pendant zur SvelteKit-Web-App in
../pageta/. Konsumiert ManaCore / ManaAuthUI aus dem
mana-swift-core + mana-swift-ui SwiftPM-Workspace, redet mit
api.pageta.com.
Vorbild: herbatrium-native (gleiche SwiftUI-Universal-Architektur
mit Tab-Navigation + ManaAuthGate). Bewusst kein Hybrid-Pattern wie
zitare-native — Pageta rendert den Reader nativ (Begründung im Playbook).
Architektonische Invarianten
Beschlossen. Nicht ohne explizite Diskussion antasten.
- SwiftUI Universal, Single-Repo. iOS + macOS aus demselben Code.
Plattform-Spezifika via
#if os(iOS)/#if os(macOS). - mana-auth via ManaAuthUI. Kein eigener Login-Flow.
ManaAuthGateumhüllt dasRootView. - Pure-Native, kein WKWebView. Reader-Detail wird in SwiftUI gerendert (kommt mit π-3). Begründung im Playbook §Leitprinzip.
- Server-authoritative. Kein SwiftData-Caching im MVP — App ist
thin Client zu
pageta-api. Offline-Cache + Sync kommt frühestens mit π-7 (Widget-Snapshot in App-Group). - pageta.com ist Lead-Domain für Native. AASA + Universal-Links
leben auf
pageta.com.pageta.mana.how(Web-Alternative) wird Native-seitig nicht angesprochen. - paper als Default-Variant, aber alle Themes wählbar. Pageta
startet mit
ManaTheme.paper(passt zur Reader-Identität), zwingt den User aber nicht darauf fest. Verein-Doktrin: jede App unterstützt alleManaTheme-Variants (forest, twilight, lume, … ausManaTokens) plus immer Light/Dark/System. Der User wählt frei im Konto-Tab; die Wahl bindet an@AppStorageund treibt.manaTheme(_:)an der App-Root.PagetaBrandzieht bereits ausManaTheme.paper(Cross-App-Bezug vollzogen) — der Theme-Picker verallgemeinert das auf die übrigen Variants. Hell/Dunkel/Automatik ist überAppearanceModeschon umgesetzt. SOT:../mana/docs/THEMING.md.
Stack
- SwiftUI Universal (iOS 18 / macOS 15)
- Swift 6,
SWIFT_STRICT_CONCURRENCY=complete mana-swift-core(ManaCore + ManaTokens)mana-swift-ui(ManaAuthUI)- XcodeGen für Projekt-Datei
- Bundle
ev.mana.pageta, TeamQP3GLU8PH3
Repo-Struktur
pageta-native/
├── Sources/
│ ├── App/ PagetaNativeApp + RootView (TabView)
│ ├── Core/
│ │ ├── AppConfig.swift URLs + KeychainGroup
│ │ ├── API/ PagetaAPI (kommt mit π-1)
│ │ ├── Domain/ DTOs (kommt mit π-1)
│ │ └── Theme/ PagetaTheme (paper-Tokens inline)
│ ├── Features/
│ │ ├── FeedTabView.swift Placeholder bis π-1
│ │ ├── LeseListeTabView.swift Placeholder bis π-2
│ │ └── AccountTabView.swift ManaAccountView
│ └── Resources/ Info.plist + Entitlements + Assets
├── Tests/UnitTests/
├── project.yml XcodeGen-Manifest
├── README.md
├── STATUS.md
└── CLAUDE.md (diese Datei)
Konventionen
- Tabs für Indent (siehe
.swiftformat) - Single quotes wo möglich (SwiftUI-Strings via
Text()-Init, selten Doppelquote-Pflicht) - DE als Primary-Locale, EN als Fallback (
developmentLanguage: dein project.yml) - Naming: Features als
<Name>TabViewfür Tab-Views,<Name>Viewfür Detail-Surfaces
Wichtige Cross-Repo-Doks
../mana/docs/playbooks/PAGETA_NATIVE_GREENFIELD.md— Plan + Phasen../mana/docs/MANA_SWIFT.md— Native-Koordination (Keychain, Session)../mana-swift-core/CLAUDE.md— Core-Package../mana-swift-ui/CLAUDE.md— UI-Package../pageta/STATUS.md— Web-App-Stand../pageta/apps/api/src/routes/— Wire-Format-SOT
Lokal entwickeln
Voraussetzungen:
- Xcode 16+
mana-swift-core+mana-swift-uials Schwester-Repos ausgecheckt- Apple-Developer-Account mit Team
QP3GLU8PH3-Mitgliedschaft
scripts/xcodegen # → PagetaNative.xcodeproj
open PagetaNative.xcodeproj
# Cmd+R im Simulator
Wichtig:
scripts/xcodegenstatt plainxcodegenbenutzen — der Wrapper patcht den XcodeGen-Bug, derplatformFilter: macOSalsmaccatalystin die pbxproj schreibt. Ohne den Patch wird die macOS-Share-Extension (PagetaShareExtensionMac.appex) auf echten macOS-Builds nicht inPlugIns/embeddet.