Skip to content

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/