Project structure¶
The code is grouped by who uses it (customer, staff, admin), with shared startup and helpers in core/.
All Dart files use lower_snake_case names, and imports use the package:mealmind/... form.
lib/
├── main.dart # Developer hub → DemoScreen (every screen in one list)
├── main_user.dart # Customer app entry (flavor: user)
├── main_chef.dart # Kitchen app entry (flavor: chef)
├── main_admin.dart # Admin app entry (flavor: admin)
├── firebase_options.dart # Generated by `flutterfire configure`
│
├── core/ # Shared by all apps
│ ├── app_bootstrap.dart # Firebase init + Provider + MaterialApp
│ ├── auth_guard.dart # Login / role route guard
│ ├── table_state.dart # Current table number (global)
│ └── snackbar_helper.dart
│
├── auth/ # Customer sign-in
│ ├── login_screen.dart # Email + Google
│ └── signup_screen.dart
│
├── staff/
│ └── role_gate.dart # Role-checked login for the chef + admin apps
│
├── user/ # Customer app
│ ├── screens/
│ │ ├── qr_table_scan_screen.dart
│ │ ├── menu_screen.dart
│ │ ├── item_detail_screen.dart
│ │ ├── liked_items_screen.dart
│ │ ├── cart_screen.dart
│ │ ├── order_status_screen.dart # Tracking + bill generation
│ │ ├── past_orders_screen.dart
│ │ ├── profile_screen.dart
│ │ ├── razorpay_payment_screen.dart
│ │ └── billing/
│ │ ├── bill_screen.dart
│ │ └── pdf_generator.dart
│ ├── state/
│ │ └── cart_provider.dart # ChangeNotifier mirrored from Firestore
│ ├── services/
│ │ ├── order_service.dart # Cart → order (batched write)
│ │ └── menu_helpers.dart
│ └── widgets/
│ ├── user_main_wrapper.dart # Bottom-nav shell
│ └── bottom_nav_bar.dart
│
├── admin/ # Admin + kitchen screens
│ ├── screens/
│ │ ├── admin_shell.dart # Admin app: 5-tab navigation
│ │ ├── admin_order_screen.dart # Live kitchen order queue
│ │ ├── menu_list_screen.dart
│ │ ├── category_admin_screen.dart
│ │ ├── user_list_screen.dart
│ │ ├── analytics_dashboard.dart
│ │ └── admin_login_screen.dart # Used by the developer hub
│ ├── services/menu_service.dart
│ └── theme/admin_theme.dart
│
└── dev/ # Developer-only screens (not in any release app)
├── demo_screen.dart
└── test_payment_screen.dart
test/ # Unit + widget tests
tool/tag_menu_items.dart # One-off script: writes `tags` on menu docs
firebase/seed/ # Sample menu + category data (Firestore export format)
docs/ # This documentation site (MkDocs Material)
assets/images/ # Logo used in the bill PDF
android/ # Gradle project, flavors in app/build.gradle.kts
.github/ # CI/CD + docs workflows, issue/PR templates
Where to put new code¶
| You're adding… | Put it in |
|---|---|
| A customer screen | lib/user/screens/ |
| Customer-side business logic (Firestore writes, calculations) | lib/user/services/ |
| A reusable customer widget | lib/user/widgets/ |
| An admin or kitchen screen | lib/admin/screens/ |
| Something every app needs (startup, guards, helpers) | lib/core/ |
| A screen only useful while developing | lib/dev/ (and add it to DemoScreen) |
| A one-off maintenance script | tool/ |