Flutter web monorepo with two applications: a public-facing CV/portfolio website (cv_app) and an admin dashboard (admin_app) for managing content. Firebase backend (Firestore, Auth, Hosting) with separate dev/prod projects. Clean Architecture, Melos workspace management, Dart 3.10+.
| Tool | Install |
|---|---|
| FVM | fvm.app |
| Firebase CLI | firebase.google.com/docs/cli |
| FlutterFire CLI | dart pub global activate flutterfire_cli |
git clone https://github.com/macstarosielec/cv-web-app.git
cd cv-web-app
fvm install
fvm flutter pub get
fvm dart run melos build
fvm dart run melos l10n
fvm dart run melos run run:cv:devcv-web-app/
├── apps/
│ ├── cv_app/ # Public CV/portfolio web app
│ └── admin_app/ # Admin dashboard (desktop-only, auth, animated transitions, CRUD)
├── packages/
│ ├── core/
│ │ ├── domain/ # Entities (Freezed), repository interfaces
│ │ ├── data/ # Repository implementations, Firestore + mock datasources
│ │ └── shared/ # Theme, DI, localization, shared widgets, config interfaces
│ └── features/
│ ├── cv_content/ # CV display: responsive layouts, animations, detail panels
│ ├── admin_content/ # Admin: profile editor, projects + experience two-column CRUD
│ └── auth/ # Authentication: login card, form validation, sanitization
├── .github/workflows/ # CI/CD for both apps (dev, prod, PR previews)
└── docs/ # Detailed documentation
| Command | Description |
|---|---|
melos run run:cv:dev |
Launch CV app (dev) in Chrome |
melos analyze |
Lint all packages |
melos test |
Test all packages |
melos build |
Code generation (sequential) |
melos build:concurrent |
Code generation (parallel) |
melos l10n |
Generate localization files |
Prefix with
fvm dart runifmelosisn't aliased.
Feature Packages (presentation) --> core/domain <-- core/data
^
|
core/shared (theme, DI, widgets, config)
| Layer | Package | Contains |
|---|---|---|
| Domain | core/domain |
Entities (Freezed), repository interfaces |
| Data | core/data |
Firestore datasources (@prod), mock datasources (@dev), repositories |
| Shared | core/shared |
AppTheme, localization, DI, shared widgets (GradientCard, MatrixRain, NavigationChip, ActionChip) |
| Features | features/* |
Presentation layers with cubits, pages, widgets, micro-routers |
| Apps | apps/* |
Thin shells: DI wiring, Firebase init, theme config, entry points |
| Concern | Library |
|---|---|
| DI | get_it + injectable (@dev/@prod environments) |
| State | flutter_bloc (Cubits + Freezed union states) |
| Routing | auto_route v11 (micro-router pattern) |
| Models | freezed + json_serializable |
| UI | flutter_hooks (pages), StatefulWidget (multi-controller animations) |
| Backend | Firebase (Firestore, Auth, Hosting, Analytics) |
| Error Reporting | Sentry (sentry_flutter) |
| Linting | very_good_analysis |
Both apps are built and deployed via GitHub Actions:
| Trigger | Flavor | Deploys |
|---|---|---|
Push to develop |
Dev | Both apps to dev hosting (live) |
Push to main |
Prod | Both apps to prod hosting (live) |
| Pull request | Dev | Both apps to preview channels |
AppTheme.dark() accepts accent color parameters. Each app passes its own accent:
- cv_app: Red accent (
ColorName.accent) - admin_app: Electric blue (
#2563EB)
All widgets read colors from Theme.of(context).colorScheme — no hardcoded color references.
Detailed docs are in the /docs folder:
- Architecture & DI — layers, DI flow, bootstrap sequence
- Domain Model — entities, enums, repository interfaces
- Data Layer — Firestore and mock datasources
- CV Content Feature — responsive layouts, animations, cubits
- Admin App — auth flow, animated transitions, dashboard
- Environment Setup — dev/prod flavors, Firebase projects
- Code Generation — build_runner, generated file patterns
- Routing — AutoRoute v11 micro-router pattern
- Adding a Feature — step-by-step guide
- Firebase — project setup, hosting, services, Firestore rules
- Localization — ARB files, generation, usage
- VS Code — SDK setup, launch configs