| Andromida | ||
| Andromida.xcodeproj | ||
| AndromidaTests | ||
| AndromidaUITests | ||
| .gitignore | ||
| AGENTS.md | ||
| README.md | ||
| TODO.md | ||
Rituals (Andromida)
Rituals is a paid, offline-first habit tracker built around 4-week "ritual" arcs. It focuses on steady, daily check-ins with a calm visual language, zero paid backend dependencies, and optional iCloud sync for settings.
Overview
- Concept: Habits are grouped into 4-week ritual arcs ("chapters") rather than endless streaks.
- Tech: SwiftUI + SwiftData, Clean Architecture layering, Bedrock design system.
- Data: Local persistence with SwiftData; settings sync via Bedrock CloudSyncManager (NSUbiquitousKeyValueStore).
- No paid APIs: No external services required.
Feature Set
- Today dashboard: Focus ritual, progress ring, and tap-to-complete habits.
- Ritual library: View active and recent rituals.
- Ritual detail: Full ritual summary + habit check-ins.
- Insights: Lightweight metrics generated locally.
- Settings:
- Reminders, haptics, sound toggles
- Ritual pacing options (focus style + length)
- iCloud settings sync
- DEBUG tools for icon generation and branding preview
- Branding:
- Bedrock AppLaunchView with custom theme
- Native LaunchScreen.storyboard to prevent flash
- Centralized branding config (colors, icons, launch)
Architecture
This project follows Clean Architecture and protocol-first design:
- Views: SwiftUI UI only, no business logic
- State: @Observable stores with app logic
- Services: Stateless logic and data seeding
- Models: SwiftData models and plain structs
- Protocols: Abstractions for stores/services
Project Structure
Andromida/
├── Andromida/ # App target
│ ├── App/
│ │ ├── Models/ # SwiftData + DTOs
│ │ ├── Protocols/ # Interfaces for stores/services
│ │ ├── Services/ # Stateless logic
│ │ ├── State/ # @Observable stores
│ │ └── Views/ # SwiftUI features + components
│ ├── Shared/ # Bedrock theme + branding config
│ └── Resources/ # LaunchScreen.storyboard
├── AndromidaTests/ # Unit tests
└── AndromidaUITests/ # UI tests
Key Files
- App entry & launch:
Andromida/Andromida/AndromidaApp.swift - Bedrock theme:
Andromida/Andromida/Shared/Theme/RitualsTheme.swift - Branding config:
Andromida/Andromida/Shared/BrandingConfig.swift - Launch screen:
Andromida/Andromida/Resources/LaunchScreen.storyboard - Ritual store:
Andromida/Andromida/App/State/RitualStore.swift - Settings store:
Andromida/Andromida/App/State/SettingsStore.swift - Settings UI:
Andromida/Andromida/App/Views/Settings/SettingsView.swift
Data Model
- Ritual: Title, theme, start date, duration (days), notes, habits
- Habit: Title, symbol, goal, completion by day IDs
- Settings: Stored via Bedrock CloudSyncManager (NSUbiquitousKeyValueStore)
Bedrock Integration
- Theming: App-specific color providers +
AppSurface,AppAccent, etc. - Branding: AppLaunchView, AppIconConfig, LaunchScreenConfig
- Settings UI: SettingsToggle, SettingsSlider, SettingsSegmentedPicker, SettingsCard
- Cloud Sync: iCloud sync for settings using CloudSyncManager
Localization
String catalogs are used for English, Spanish (Mexico), and French (Canada):
Andromida/Andromida/App/Localization/Localizable.xcstrings
Requirements
- iOS 18.0+
- Swift 5 (Bedrock requires Swift 6 in package; app builds under Swift 5 with modern concurrency)
Running
- Open
Andromida.xcodeprojin Xcode. - Build and run on iOS 18+ simulator or device.
Tests
- Unit tests in
AndromidaTests/ - Run via Xcode Test navigator or:
xcodebuild test -scheme Andromida -destination 'platform=iOS Simulator,name=iPhone 15'
Notes
- App is configured with a dark theme; the root view enforces
.preferredColorScheme(.dark)to ensure semantic text legibility. - The launch storyboard matches the branding primary color to avoid a white flash.
- App icon generation is available in DEBUG builds from Settings.