Generated output — this is a static snapshot rendered from .vibekb/. The .vibekb/ content is the source of truth. See Reference for provenance.

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: /docs generated 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.