AI-Powered Food Delivery Platform · Tamil Nadu, India
Version: 1.1.0+2Date: July 2026Platform:AndroidWebBackend:Live (Laravel 12 + MySQL + Redis)
Tagline: Fresh Food. Fast Delivery. Smarter Choices. Target Region: Madurai, Tamil Nadu (nationwide expansion later) Powered by: MageTech Solutions
📈 Key Statistics
74
Dart Files
28,997
Lines of Code
50
Screens
22
Backend Models
66
Providers
61
API Routes
495
Translation Strings
26
DB Tables
⚙ Technology Stack
Layer
Technology
Version
Purpose
Framework
Flutter
≥3.24.0
Cross-platform UI toolkit
Language
Dart
≥3.6.0
Type-safe programming language
State Management
Riverpod
^2.6.1
Reactive state, dependency injection
Navigation
GoRouter
^14.8.1
Declarative routing, deep linking
HTTP Client
Dio
^5.7.0
API calls, interceptors, logging
Local Storage
Hive
^2.2.3
Fast key-value NoSQL database
Fonts
Google Fonts
^6.2.1
Poppins font family
Images
CachedNetworkImage
^3.4.1
Image caching & placeholders
Loading
Shimmer
^3.0.0
Skeleton loading animations
QR Code
qr_flutter
^4.1.0
QR code generation
Location
Geolocator
^13.0.1
GPS location services
Geocoding
geocoding
^3.0.0
Address to coordinates conversion
Maps
google_maps_flutter
^2.10.0
Google Maps widget for delivery tracking
Image Picker
image_picker
^1.1.2
Camera/gallery image selection for profile
URL
url_launcher
^6.3.1
Open WhatsApp, phone calls, external links
Env Config
flutter_dotenv
^5.2.0
Environment variable management
Localization
flutter_localizations
Built-in
English + Tamil
🏗 System Architecture
The app follows a feature-first clean architecture pattern with Riverpod as the single source of truth. Customer, admin, and delivery-partner data is served by a live Laravel 12 REST API via ApiRepository (35+ methods) and ApiClient (Dio + auth interceptor). Riverpod ApiProviders fetch data from the API, while StateNotifierProvider manages in-app state. Hive caches responses for offline-first support.
Application Layer Architecture
Presentation Layer Screens · Widgets · Forms
↓ watches ↑ dispatches
State / Logic Layer Riverpod Providers · Notifiers
↓ reads ↑ updates
Data Layer ApiRepository · ApiClient (Dio) · ApiProviders
↓ HTTP REST ↑ JSON
Backend Laravel 12 API · Sanctum Auth · MySQL 8 · Redis
Three-Role Architecture
A single Flutter app serves three distinct user roles via role-based navigation:
State is managed via Riverpod providers across two files: providers.dart (~830 lines, 55+ providers) and api_providers.dart (11 FutureProviders for API data).
API Data Providers (NEW)
Provider
Type
Description
restaurantsFutureProvider
FutureProvider
Fetches restaurants from Laravel API
menuItemsFutureProvider
FutureProvider
Fetches menu items from API
categoriesFutureProvider
FutureProvider
Fetches food categories from API
offersFutureProvider
FutureProvider
Fetches coupons/offers from API
ordersFutureProvider
FutureProvider
Fetches user orders from API
addressesFutureProvider
FutureProvider
Fetches saved addresses from API
walletFutureProvider
FutureProvider
Fetches wallet balance & history from API
bannersFutureProvider
FutureProvider
Fetches active banners from API
subscriptionsFutureProvider
FutureProvider
Fetches meal subscription plans from API
homeChefsFutureProvider
FutureProvider
Fetches home chefs from API
favoritesFutureProvider
FutureProvider
Fetches favorite restaurants from API
Core Providers
Provider
Type
Description
cartProvider
StateNotifier
Cart items, add/remove/update, coupon, clear
ordersProvider
StateNotifier
Order list, add order, cancel, update status
favoritesProvider
StateNotifier
Favorite restaurant IDs, toggle
addressesProvider
StateNotifier
Saved addresses, add/edit/delete/setDefault
walletProvider
StateNotifier
Balance, transactions, add/deduct balance
roleProvider
StateProvider
Current user role (customer/admin/deliveryPartner)
Glassmorphism cards with backdrop blur and transparency
24px rounded corners on all cards
Poppins font family via Google Fonts
Shimmer loading skeletons for all data lists
CachedNetworkImage for all remote images with placeholders
withValues(alpha:) used throughout (not deprecated withOpacity)
CardThemeData / TabBarThemeData / DialogThemeData for Flutter 3.x compatibility
🔨 Reusable Widgets (19)
Widget
File
Description
FoodCard
food_card.dart
Restaurant card with image, rating, delivery time, favorites toggle
MenuItemCard
menu_item_card.dart
Menu item with ADD button, quantity controls, veg indicator
SaapaduButton
saapadu_button.dart
Branded primary/secondary buttons
SaapaduCard
saapadu_card.dart
Standard card with glass variant
SaapaduGlassCard
saapadu_card.dart
Glassmorphism card variant
SaapaduTextField
saapadu_text_field.dart
Styled text input fields
SaapaduShimmer
saapadu_shimmer.dart
Shimmer loading effect
ShimmerRestaurantCard
saapadu_shimmer.dart
Restaurant skeleton loader
ShimmerMenuItem
saapadu_shimmer.dart
Menu item skeleton loader
OrderStatusStepper
order_status_stepper.dart
Visual order progress stepper
PriceTag
price_tag.dart
Price display with discount
EmptyState
empty_state.dart
Empty list/section placeholder
GlassContainer
glass_container.dart
Glassmorphism container
WhatsAppFloatingButton
whatsapp_button.dart
Green FAB with WhatsApp icon
WhatsAppChatButton
whatsapp_button.dart
Full-width green button
WhatsAppOrderButton
whatsapp_button.dart
Outlined order support button
WhatsAppRestaurantButton
whatsapp_button.dart
Outlined restaurant inquiry button
WhatsAppMenuItem
whatsapp_button.dart
ListTile for profile pages
WhatsAppIcon
whatsapp_icon.dart
WhatsApp PNG icon from asset
🌐 Localization
Language
File
Strings
Code
English
app_en.arb
495
en
Tamil
app_ta.arb
495
ta
Flutter localization via flutter_localizations SDK
ARB format with flutter: generate: true in pubspec.yaml
Full Tamil translations for all UI strings
Language selector in SettingsScreen
📦 Dependencies
Production Dependencies (16)
Package
Version
Purpose
flutter_riverpod
^2.6.1
State management
go_router
^14.8.1
Declarative routing
dio
^5.7.0
HTTP client
pretty_dio_logger
^1.4.0
HTTP request logging
hive
^2.2.3
Local NoSQL database
hive_flutter
^1.1.0
Hive Flutter integration
google_fonts
^6.2.1
Poppins font
shimmer
^3.0.0
Loading shimmer effects
cached_network_image
^3.4.1
Image caching
qr_flutter
^4.1.0
QR code generation
badges
^3.1.2
Notification badges
geolocator
^13.0.1
GPS location
intl
any
Date/number formatting
url_launcher
^6.3.1
Open WhatsApp, phone calls, external URLs
image_picker
^1.1.2
Camera/gallery image selection for profile
geocoding
^3.0.0
Address to coordinates conversion
google_maps_flutter
^2.10.0
Google Maps widget for delivery tracking
flutter_dotenv
^5.2.0
Environment variable management
Dev Dependencies (3)
Package
Version
Purpose
flutter_lints
^5.0.0
Lint rules
hive_generator
^2.0.1
Hive TypeAdapter code gen
build_runner
^2.4.13
Code generation runner
🔌 Backend Architecture (Live — Laravel 12)
The app integrates with a live Laravel 12 REST API at http://localhost:8000 (dev) / https://api.saapadugo.com (prod). Authentication uses Laravel Sanctum bearer tokens. All responses are cached locally in Hive for offline-first behaviour.
Backend Stack
Component
Technology
Framework
Laravel 12
PHP
8.2
Database
MySQL 8 (26 tables, 22 models)
Cache
Redis
Auth
Laravel Sanctum (token-based OTP)
Payments
Razorpay API
API Controllers
17 controllers
API Endpoints (v1 — 61 routes)
// ─── Auth (public) ───────────────────────────────────
POST /api/v1/auth/send-otp
POST /api/v1/auth/verify-otp
POST /api/v1/auth/social
// ─── Public read-only ────────────────────────────────
GET /api/v1/restaurants
GET /api/v1/restaurants/:id
GET /api/v1/restaurants/:id/menu
GET /api/v1/menu-items
GET /api/v1/menu-items/:id
GET /api/v1/home-chefs
GET /api/v1/home-chefs/:id
GET /api/v1/coupons
GET /api/v1/subscriptions
GET /api/v1/banners
// ─── Protected (auth:sanctum) ────────────────────────// Auth
POST /api/v1/auth/refresh
POST /api/v1/auth/logout
GET /api/v1/auth/me
// Profile
GET /api/v1/profile
PUT /api/v1/profile
// Addresses
GET /api/v1/addresses
POST /api/v1/addresses
PUT /api/v1/addresses/:id
DELETE /api/v1/addresses/:id
POST /api/v1/addresses/:id/default
// Cart
GET /api/v1/cart
POST /api/v1/cart/items
PUT /api/v1/cart/items/:id
DELETE /api/v1/cart/items/:id
DELETE /api/v1/cart
POST /api/v1/cart/coupon
// Orders
GET /api/v1/orders
POST /api/v1/orders
GET /api/v1/orders/:id
GET /api/v1/orders/:id/tracking
POST /api/v1/orders/:id/cancel
// Search
GET /api/v1/search
POST /api/v1/ai/search
POST /api/v1/ai/recommendations
POST /api/v1/ai/meal-plan
POST /api/v1/ai/recognize
// Payments
POST /api/v1/payments/create
POST /api/v1/payments/verify
// Wallet
GET /api/v1/wallet
POST /api/v1/wallet
GET /api/v1/wallet/history
// Coupons (apply)
POST /api/v1/coupons/:code/apply
// Subscriptions
POST /api/v1/subscriptions/:id/subscribe
POST /api/v1/subscriptions/:id/unsubscribe
POST /api/v1/subscriptions/:id/pause
POST /api/v1/subscriptions/:id/resume
// Notifications
GET /api/v1/notifications
POST /api/v1/notifications/:id/read
// Favorites
GET /api/v1/favorites
POST /api/v1/favorites/:restaurantId/toggle
// Group Orders
POST /api/v1/group-orders
POST /api/v1/group-orders/join/:code
DELETE /api/v1/group-orders/:id/leave
GET /api/v1/group-orders/:id/items
POST /api/v1/group-orders/:id/items
DELETE /api/v1/group-orders/:id/items/:itemId
The Laravel 12 backend lives in I:\xampp8212\htdocs\saapadugo-api\ alongside the Flutter app. It runs on PHP 8.2, MySQL 8, and Redis with Laravel Sanctum for token-based auth. The Flutter app connects via http://10.0.2.2:8000 (Android emulator) and caches responses in Hive for offline-first performance.
API Integration
The Flutter ApiRepository (35+ typed methods) and ApiProviders (11 FutureProviders) connect the app to the Laravel backend. Providers in providers.dart fetch data from the API instead of MockData. Restaurants, menu items, cart, orders, wallet, addresses, favorites, subscriptions, banners, and coupons all use real API data.
Environment Configuration
API Base URL:http://10.0.2.2:8000 (dev) / https://api.saapadugo.com (prod)
Firebase: Placeholder config — replace with real credentials
Google Maps: Replace API key in AndroidManifest.xml
Razorpay: Demo mode auto-detected with placeholder keys
WhatsApp: +919944576702 (configurable in admin settings)
Pre-existing Errors (Known)
The following errors exist in pre-existing skeleton files and do not affect the app:
api_client.dart — Non-exhaustive switch on DioExceptionType
saapadu_card.dart — Undefined class ImageFilter (blur filter)
widget_test.dart — MyApp reference in default test
Configuration Placeholders (Required for Production)