Architecture Overview
The app is a Flutter client backed by Supabase (auth + Postgres + edge functions). Practice tracking, profiles, and calendar data flow through Supabase, with local notifications for reminders. Below is a high-level architecture diagram:
Release requirements (from current code)
- Supabase project with URL + anon key (baked defaults in
main.dart; overridable via--dart-define). - Supabase tables:
devotees(familyMembers JSON, mentor/guide info),daily_tracking(practice logs),mentors,seva_services, and any edge function forvaishnava_calendardata. - Supabase Auth: email/password + optional TOTP MFA (GoTrue); factors enrollment/verification supported in Settings.
- Local notifications: daily reminder + calendar alerts; on Android falls back to inexact alarms if exact alarms are not permitted.
- iOS/Android build: iOS 13+; Android minSdk from Flutter defaults; App Store/Play builds include Supabase defaults; Android release signing configured via
key.properties. - Data deletion: publish
data-deletion.htmllink for Play/App Store forms.
Flutter UI
├─ Screens (stateful widgets)
│ ├─ Onboarding, Contact, Mentor/Children
│ ├─ Home (Practice/Overview/Calendar)
│ └─ Settings (MFA, notifications)
├─ Widgets (practice rows, cards, pickers)
└─ State mgmt: local setState + async calls
Domain/Models
├─ Devotee, DevoteeContext, DevoteeDraft
├─ DailyTargets (target catalog)
└─ DailyTracking (per-day saved entries)
Services
├─ Supabase (auth, db, functions, MFA)
├─ NotificationService (local notifications)
└─ StatisticsRepository (charts/stats)
Backend (Supabase)
├─ Tables: devotees, daily_tracking, mentors, seva_services
├─ MFA via Supabase Auth (GoTrue)
└─ Edge functions: vaishnava_calendar