- Update App Group IDs from group.com.tt.feels to group.com.88oakapps.feels - Update iCloud container IDs from iCloud.com.tt.feels to iCloud.com.88oakapps.feels - Sync code constants with entitlements across all targets (iOS, Watch, Widget) - Update documentation in CLAUDE.md and PROJECT_OVERVIEW.md Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1.9 KiB
1.9 KiB
Feels - Claude Code Context
Project Summary
Feels is an iOS mood tracking app. Users rate their day on a 5-point scale (Horrible → Great) and view patterns via Day, Month, and Year views.
Architecture
- Pattern: MVVM with SwiftUI
- Data: Core Data with CloudKit sync
- Monetization: StoreKit 2 subscriptions (30-day trial, monthly/yearly plans)
Key Directories
Shared/ # Core app code (Models, Views, Persistence)
FeelsWidget2/ # Widget extension
Feels Watch App/ # watchOS companion
docs/ # ASO and competitive analysis
Data Layer
Core Data operations are split across files in Shared/Persistence/:
Persistence.swift- Core Data stack setupPersistenceGET.swift- Fetch operationsPersistenceADD.swift- Create entriesPersistenceUPDATE.swift- Update operationsPersistenceDELETE.swift- Delete operations
App Groups
- Production:
group.com.88oakapps.feels - Debug:
group.com.88oakapps.feels.debug
Build & Run
# Build the app
xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' build
# Run tests
xcodebuild -project Feels.xcodeproj -scheme "Feels (iOS)" -destination 'platform=iOS Simulator,name=iPhone 16 Pro' test
Mood Values
enum Mood: Int {
case horrible = 0
case bad = 1
case average = 2
case good = 3
case great = 4
case missing = 5 // Unfilled day
case placeholder = 6 // System-generated
}
Localization
- English:
en.lproj/Localizable.strings - Spanish:
es.lproj/Localizable.strings
Important Patterns
- Widgets update via
WidgetCenter.shared.reloadAllTimelines() - Missing dates are auto-filled by background task (
BGTask.swift) - Entry types distinguish user entries from system-generated ones
- Customization uses protocols:
Themeable,MoodTintable,MoodImagable,PersonalityPackable