BowlerKitBowlerKit

Project Structure

10/11/2026

Map the generated Flutter project and identify the source of truth for each concern.

The CLI generates a profile-specific project rather than exposing the private source repository.

Generated root

my-flutter-app/
├── mobile-app/                 # Shared Flutter/Dart source
├── landing-page/               # Guest-only TanStack Start marketing/legal site
├── api-collections/            # Account-only API examples
├── admin-panel/                # Account-only Laravel/Filament + landing/SEO service
├── api-backend/                # Account-only Go mobile API
├── .bowlerkit/project.json     # Framework/profile manifest
├── AGENTS.md                   # Project-local agent instructions
├── BOWLERKIT.md                # Generated architecture/validation guide
└── docs/
    ├── AI-GUEST-CLEANUP.md
    └── DEEP-CLEANUP-MAP.md

Guest archives omit api-collections/, admin-panel/, and api-backend/, but include the standalone landing-page/. Account archives use the public landing and SEO routes built into admin-panel and omit the duplicate standalone app.

Flutter app

mobile-app/
├── lib/
│   ├── config/                 # profile, app mode, notifications, billing
│   ├── constants/              # API paths, version, deep-link scheme
│   ├── bootstrap/              # Account session/push/sync wiring
│   ├── helpers/                # storage, logs, local/remote notifications
│   ├── models/                 # Freezed/JSON models and generated files
│   ├── pages/                  # auth, wizard, home, profile, settings, billing
│   ├── providers/              # Riverpod state and generated providers
│   ├── services/               # Dio/API, FCM, history, RevenueCat
│   ├── components/             # UI/theme/design tokens
│   ├── l10n/                   # ARB and generated localizations
│   ├── app_router.dart         # AutoRoute declarations
│   └── main.dart               # startup/providers/router
├── assets/                     # icons, splash, images, fonts
├── android/ and ios/           # native projects/configuration
├── pubspec.yaml
├── flutter_launcher_icons.yaml
├── flutter_native_splash.yaml
├── l10n.yaml
└── analysis_options.yaml

Generated .g.dart, .freezed.dart, and l10n/generated/ files come from build_runner/Flutter generation. Update annotations/source and regenerate instead of editing generated output.

Profile source of truth

  • lib/config/bowlerkit_profile.dart — generated account/guest value.
  • lib/config/app_mode.dart — isAccountOnline and isGuestLocal gates.
  • .bowlerkit/project.json — selected framework/profile and cleanup baseline.

Guest must retain Paywall/AdMob, local settings, local help/about, and local notification behavior; it must not perform Account API calls, remote preference sync, FCM token sync, or server entitlement checks.

Account services

Laravel owns migrations, Sanctum auth issuance, uploads, webhooks, admin resources, and the Account profile's public landing/SEO routes. Go validates Laravel tokens and serves protected /api/v1/app/* resources using the shared PostgreSQL schema; Go never runs migrations.

See Core Concepts, Backend Architecture, and the generated BOWLERKIT.md before changing cross-service behavior.