This project is simple:
- basic Flutter widgets
- Riverpod providers only where needed
- clean folder layout with clear responsibilities
lib/
core/
config/ # Environment constants
network/ # Dio client + API service
router/ # Route names + GoRouter setup
storage/ # Secure storage helpers
shared_widgets/ # App-wide design tokens (colors)
theme/ # Global ThemeData
features/
auth/
data/models/ # Auth request/response models
providers/ # Auth controller/provider
booking/
data/models/ # Appointment models
providers/ # Booking + appointments providers
services/
data/models/ # Service model
providers/ # Service list provider
pages/ # App screens (beginner-friendly flat structure)
shared/
data/ # Demo seed data fallback for unfinished backend
utils/ # Validators and simple helpers
widgets/ # Reusable UI pieces (section headers, bottom navs)
login_page.dartSingleChildScrollView,Card,Form,TextFormField,ElevatedButton
services_page.dartListView.separated,Card,ChoiceChip/badge,NavigationBar
booking_page.dartChoiceChip,Wrap,Card,ElevatedButton,SnackBar
my_appointments_page.dartListView,Card, small status badge container,TextButton
admin_dashboard_page.dartWrap(metric cards),Card,ListTile,NavigationBar
manage_services_page.dartListView.separated,Card,TextButton,FloatingActionButton.extended
- Keep each page readable: split complex UI into small private widgets inside the same file.
- Prefer simple state (
StatefulWidget) for local UI state and Riverpod providers for app data. - Use shared theme/colors first before adding custom per-page styling.
- Keep TODO comments where backend integration is still pending.
From project root:
cd mock-api
npm install
npm startIn a second terminal (project root):
flutter pub get
flutter runQuick login accounts:
admin@sharpcut.dev/password123client@sharpcut.dev/password123
Any email containing admin is also accepted and created as admin automatically.