Monorepo for the FlutterKaigi 2026 website, app, and dashboard.
apps/website/— jaspr static siteapps/app/— Flutter app (iOS / Android)apps/dashboard/— Flutter web app (dashboard)packages/— shared Dart packages
Managed with melos (v7) on top of Dart pub workspaces, with Flutter pinned by FVM.
- FVM — pins the Flutter version used by this repo
- Node.js/npm — used to run Firebase Emulator Suite through
npx - jaspr_cli — needed only if you regenerate the website scaffold outside melos
All other Dart/Flutter tooling is provided by FVM once installed.
# 1. Install FVM (one-time, global)
dart pub global activate fvm
# 2. Install the Flutter version pinned in .fvmrc
fvm install
# 3. Resolve workspace dependencies (installs melos + all package deps)
fvm dart pub get
# 4. Bootstrap melos (generates IDE files; dependency resolution is already done by step 3)
fvm dart run melos bootstrapThe pinned Flutter version is 3.41.7 (see .fvmrc).
| Command | What it does |
|---|---|
fvm dart run melos website:serve |
Run the jaspr website dev server on http://localhost:8080 |
fvm dart run melos website:build |
Build the jaspr website to apps/website/build/jaspr/ |
fvm dart run melos dashboard:run:dev |
Run the dashboard app in Chrome (dev / emulator) |
fvm dart run melos dashboard:run:stg |
Run the dashboard app in Chrome (stg) |
fvm dart run melos dashboard:run:prod |
Run the dashboard app in Chrome (prod) |
fvm dart run melos dashboard:build:dev |
Build the dashboard app for web (dev / emulator) |
fvm dart run melos dashboard:build:stg |
Build the dashboard app for web (stg) |
fvm dart run melos dashboard:build:prod |
Build the dashboard app for web (prod) |
fvm dart run melos firebase:emulators |
Run Firebase Emulator Suite for local development |
fvm dart run melos firebase:schema:validate |
Validate Firebase seed data against the sample schema |
fvm dart run melos firebase:seed |
Seed the running Firestore emulator with sample data |
fvm dart run melos firebase:test |
Start Firestore Emulator and load local seed data |
cp apps/app/lib/firebase_options.stub.dart apps/app/lib/firebase_options.dart |
Prepare the ignored Web Firebase stub for local app development |
cd apps/app && fvm flutter run -d chrome --dart-define-from-file environments/.env.dev |
Run the Flutter app with dev environment variables |
fvm dart run melos gen |
Regenerate Freezed/build_runner outputs for apps/app and packages/data |
fvm dart run melos analyze |
Analyze all packages (website with dart analyze; app, dashboard, and packages/data with flutter analyze) |
fvm dart run melos format |
dart format across all packages |
fvm dart run melos test |
Run tests across all packages (website with dart test; app, dashboard, and packages/data with flutter test) |
Per-target variants are also available: analyze:website, analyze:app, analyze:dashboard, test:website, test:app, test:dashboard.
Firebase configuration lives at the repository root and under packages/data/firebase/.
.firebasercis intentionally not committed. Local emulator commands pass the dev project ID explicitly.firebase.jsonis kept at the repository root for Firebase CLI discovery.- Firestore/Storage rules, indexes, schemas, and seed data live under
packages/data/firebase/. - App dev environment variables live in
apps/app/environments/.env.devand are passed with--dart-define-from-file. - VS Code launch/tasks live in
.vscode/and only define local/dev commands. packages/data/firebase/schemas/firestore/news.schema.jsonis the only sample schema for now. Add more schemas only when product code needs them.packages/data/firebase/seed/firestore/default.jsoncontains reviewable local sample data.
See packages/data/firebase/README.md for emulator, schema, and seed details.
- Melos config lives in the root
pubspec.yamlunder themelos:key (melos 7 convention). Package membership is controlled by the rootworkspace:list, and scripts are defined undermelos.scripts:. There is intentionally no separatemelos.yaml. analysis_options.yamlat the repo root declares analyzer plugins (e.g.,jaspr_lints). Dart pub workspaces require plugins at the workspace root, not inside sub-packages.pubspec.lockis a single file at the repo root (pub workspaces merges resolution). Sub-packages should not have their ownpubspec.lock; delete it if one gets generated.- Firebase local state is not committed. Rules, indexes, schemas, and seed fixtures are committed;
.firebaserc, emulator exports, debug logs,.envfiles, and service account JSON files are not.