Files
FamilyMealPlanner/CLAUDE.md
T
alexandrev-tibco 6c7e12b41f 1.0.4: Smarter auto-assign, quick dish entry, calendar fix, frictionless onboarding
- AutocompleteEngine: no-repeat rule now applies to all dishes (not just tagless ones); fallback still allows repeats when no alternative exists
- CalendarService: update existing events instead of delete+create to prevent duplicates; fix weekStartDate using plan date instead of currentWeekStart
- DishFormView: form stays open after saving in create mode for quick multi-dish entry; Done button to close; saved feedback banner
- OnboardingViewModel/FirstDishesStepView: dishes are now optional during onboarding; Finish button always enabled
- AnalyticsService: new events — onboarding_step_viewed(step) and auto_assign_used(filled, unfilled)
- Localization: dish_done and first_dishes_optional_hint added in 6 languages; release notes updated in all 6 languages
- Version bump: 1.0.3 → 1.0.4 (build 19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-19 11:35:50 +02:00

2.5 KiB

MealMood — Project Context for Claude Code

App

  • Name: MealMood: Family Meal Planner
  • Bundle ID: com.alexandrevazquez.mealmood
  • Platform: iOS/iPadOS (also runs as iOS app on Mac)
  • Current version: 1.0.4
  • Main branch: 1.0.1 (production), feature branches named after versions

Credentials — all managed via pass (GPG-encrypted, syncs to Gitea)

Never hardcode credentials. Always read from pass:

# Apple
pass show apple/mealmood/apple-id                          # alexandre.vazquez@gmail.com
pass show apple/mealmood/developer-team-id                 # 2825Q76T7H
pass show apple/mealmood/appstore-connect-team-id          # 128443966
pass show apple/mealmood/app-store-app-id                  # 6759255553
pass show apple/mealmood/app-specific-password-fastlane    # for fastlane uploads

# Firebase
pass show firebase/mealmood/api-key
pass show firebase/mealmood/project-id
pass show firebase/mealmood/google-app-id

# AdMob
pass show admob/mealmood/app-id
pass show admob/mealmood/banner-home-unit-id

TestFlight upload

export FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD=$(pass show apple/mealmood/app-specific-password-fastlane)
fastlane beta

Stack

  • SwiftUI + SwiftData (iOS 17+)
  • Firebase Analytics (AnalyticsService.swift)
  • Google AdMob (banner, free tier only, hidden on Mac)
  • StoreKit 2 (subscription com.mealmood.premium.monthly)
  • iCloud KV sync (ICloudSyncService.swift) — does NOT sync isPremium
  • Widget extension (MealMoodWidget/) — requires App Group group.com.alexandrevazquez.mealmood
  • Fastlane for CI/CD

Premium logic

  • PremiumSyncService is the source of truth for premium state transitions
  • isPremium is determined only by StoreKit — never by iCloud sync
  • Transaction.updates listener in ContentView catches purchases in real-time
  • Tests: MealMoodTests/PremiumSyncServiceTests.swift

Key files

File Purpose
MealMood/ContentView.swift App root, premium sync, Transaction.updates listener
MealMood/Services/PremiumSyncService.swift Premium state machine (testable)
MealMood/Services/StoreManager.swift StoreKit 2 purchase/restore
MealMood/Services/ICloudSyncService.swift Cross-device sync (dishes, tags, plans — NOT isPremium)
MealMood/Views/Home/WeekPlanShareView.swift Export styles (default, school, vertical A4)
MealMoodWidget/MealMoodWidget.swift Home screen widget
fastlane/Fastfile beta and release lanes
fastlane/metadata/ App Store metadata in 6 languages