Architecture
How the software works
A paced, system-level explanation — the mental model first, then the parts, the request lifecycle, and how it ships.
Mental model
Picture this
Stoppr is a phone app. On launch it wakes Firebase and purchase SDKs, figures out whether you finished onboarding and whether you are paid, then either continues onboarding, shows the paywall, or opens the home hub.
Daily life happens on Home: streak, pledge, panic. Deeper tools (community, learn, nutrition, challenge) hang off navigation. Money questions always go through Superwall UI and RevenueCat entitlements — Firestore remembers subscription fields but does not decide access.
Components
Major components
| Component | Role | Primary path |
|---|---|---|
| Bootstrap | SDK init + first route | lib/main.dart |
| Auth | Firebase identity + AuthCubit | lib/core/auth/ |
| Onboarding | Funnel + progress service | lib/features/onboarding/ |
| Subscription | RevenueCat + Superwall | lib/core/subscription/, lib/core/superwall/ |
| Home / panic / pledge | Daily loop | lib/features/app/ |
| Community / accountability | Social | lib/features/community/, lib/features/accountability/ |
| Nutrition / recipes | Food tools | lib/features/nutrition/, lib/features/recipes/ |
| Learn | Videos + articles | lib/features/learn/ |
| Widgets | iOS/Android home widgets | ios/StreakWidget/, Android providers |
| Config | Env accessors | lib/core/config/env_config.dart |
Request and navigation flow
How control moves
Stoppr does not use a single declarative router for the whole app. main.dart
computes an initial widget tree, then screens push/replace via Flutter
Navigator. Deep links and widget URIs call into _processDeepLink or set
pending navigation flags.
Paid checks run at startup, onboarding completion, and feature gates via
SubscriptionService / AuthCubit.
Deployment
Application
Built with Flutter for iOS and Android. Store credentials and Firebase configs
are supplied outside git via env / ignored platform files; .local templates
document required keys without secrets.
VibeKB documentation
- Source of truth:
.vibekb/ - Runtime / templates:
.vibekb/runtime/ - Public site:
/docsgenerated by
php .vibekb/runtime/tools/vibekb.php generate
- GitHub Pages: Settings → Pages → folder
/docs - Entry:
docs/index.html - The guide templates under
.vibekb/runtime/guide/power generation; public
deployment for this repository remains the static snapshot.