Skip to content

Latest commit

 

History

History
171 lines (145 loc) · 6.08 KB

File metadata and controls

171 lines (145 loc) · 6.08 KB

FEATURES.md — Foodiary

Feature inventory: implemented, planned, and explicitly out of scope. Last updated: 2026-07-04

Implemented

Profile & Calorie Calculation

  • Collect age, biological sex, height, weight, activity level, goal
  • Mifflin-St Jeor BMR calculation
  • Activity level multipliers (sedentary 1.2 → very active 1.725)
  • Goal adjustments (maintain 1.0, lose 0.90, gain 1.10)
  • Round final target to nearest 10 kcal
  • Full onboarding-style profile edit flow (reuses ProfileSetup → GoalSetup → CalorieResult)
  • Calorie disclaimer on result screen and profile
  • Profile data persisted via SwiftData

Meal Planning

  • Create daily meal plan with 4 default slots: Breakfast, Lunch, Snack, Dinner
  • Add food items manually (name, calories, optional note)
  • Food search via FatSecret + USDA + Custom API providers
  • Delete food items
  • Meal total calories computed automatically
  • Daily total calories computed automatically
  • Validation: food name required, calories must be whole number ≥ 0
  • Meal plans persisted via SwiftData
  • Meal slots sorted chronologically (sortedMeals — SwiftData relationship ordering fix)

Today Dashboard

  • Hero card with remaining estimate, progress %, aurora gradient background
  • Planned calories vs remaining calories summary
  • Calorie progress visualization
  • Status message with neutral language
  • Meal timeline with emoji tiles and calorie totals
  • Next best action strip with meal type picker
  • Empty state: "No meal plan for today — Create one"

Weekly Plan

  • Week navigation with date range label
  • Day cards with meal slot summary and calorie totals
  • Past/future date support (read-only for past dates)
  • Plan and add food for any date

Insights

  • Calorie trend visualization
  • Observations summary

Macro Tracking

  • Protein, carbs, fat breakdown on Today dashboard

Navigation

  • 4-tab bottom bar: Today / Plan / Insights / Profile
  • Onboarding flow: Welcome → Profile Setup → Goal Setup → Calorie Result
  • Meal Detail screen with food item list
  • Add Food Item sheet (manual entry + search)
  • Profile Edit flow (full onboarding-style, pre-filled)
  • Settings screen (theme + language)
  • Meal type picker sheet from action strip

Design System (Pulse v2)

  • Modern planning cockpit aesthetic — soft shadows, rounded surfaces
  • Dynamic accent color #4BB8FA
  • Full dark mode support via UIColor { tc in ... } dynamic tokens
  • Gradient hero card with animated aurora blobs
  • Ruler-based input for onboarding (age, height, weight)
  • Energy balance bar on calorie result
  • Colored meal icon tiles with type-specific tints
  • Pulse button styles (primary, secondary, icon, stepper)
  • PulseTopbar component
  • Opaque nav bar (iOS 26 Liquid Glass safe)

Theming

  • Light / Dark / System theme toggle in Settings
  • ThemeManager ObservableObject
  • Live theme switching (no restart)
  • .preferredColorScheme() applied at root

Localization

  • String Catalogs (.xcstrings) — Indonesian + English
  • Runtime language switching via Settings
  • L10n type-safe lookup with bundle caching
  • LocaleManager ObservableObject
  • Localized dates (DateFormatter follows selected language)
  • Localized model display names (activity, goal, meal types)

Data Persistence

  • SwiftData @Model classes for all data
  • PersistenceService protocol abstraction
  • MigrationService (legacy JSON → SwiftData migration)
  • Reset all data action
  • Data survives app restarts

States Covered

  • First launch (no profile) → onboarding
  • Returning user (profile exists) → Today dashboard
  • No meal plan today → empty state with CTA
  • Meal plan exists, no food items → meal cards show "0 items, 0 kcal"
  • Meal plan with food → calorie totals display
  • Under target → neutral status message
  • At target → neutral status message
  • Over target → neutral language ("X kcal over your estimated target")
  • Empty meal → "No food added yet"
  • Past dates → read-only meal plans
  • Dark mode → all screens adapt

Planned (Post-MVP)

High Priority

  • Unit tests — CalorieCalculator, MealPlanService, AppState
  • Food item editing — currently delete + re-add; add inline edit
  • Proper error handling — replace try? with do/catch + user-visible errors
  • Accessibility — VoiceOver labels, dynamic type support, reduced motion
  • App icon — replace solid coral placeholder with proper icon

Medium Priority

  • Copy yesterday's meal plan
  • Favorite food items (quick-add from history)
  • Swipe-to-delete on meal cards and food items
  • Haptic feedback on button presses and deletions
  • iPad layout (max content width 680px)
  • Undo delete (toast: "Item removed. Undo?")

Low Priority

  • Weight tracking over time
  • Export meal plan (PDF, text)
  • Reminder notifications
  • Multiple profiles

Explicitly Out of Scope (v1)

These are intentionally excluded from the MVP per the PRD:

  • ❌ Login / account system
  • ❌ Cloud sync / backend
  • ❌ Barcode scanning
  • ❌ Food image recognition
  • ❌ AI meal generation
  • ❌ Social features / sharing
  • ❌ Subscription / payments
  • ❌ Exercise tracking
  • ❌ Water tracking
  • ❌ Recipe builder
  • ❌ Shopping list
  • ❌ Medical / nutrition diagnosis

Feature Status Summary

Category Implemented Planned Out of Scope
Profile & Onboarding 8 0 0
Calorie Calculation 5 0 0
Meal Planning 9 2 0
Today Dashboard 7 0 0
Weekly Plan 4 0 0
Insights 2 0 0
Macro Tracking 1 0 0
Navigation 7 0 0
Design System 11 0 0
Theming 4 0 0
Localization 6 0 0
Data Persistence 5 0 0
Testing 0 1 0
Accessibility 0 1 0
Advanced Features 0 6 12
Total 69 10 12