SaapaduGo — Technical Document

AI-Powered Food Delivery Platform · Tamil Nadu, India

Version: 1.1.0+2 Date: July 2026 Platform: Android Web Backend: 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

LayerTechnologyVersionPurpose
FrameworkFlutter≥3.24.0Cross-platform UI toolkit
LanguageDart≥3.6.0Type-safe programming language
State ManagementRiverpod^2.6.1Reactive state, dependency injection
NavigationGoRouter^14.8.1Declarative routing, deep linking
HTTP ClientDio^5.7.0API calls, interceptors, logging
Local StorageHive^2.2.3Fast key-value NoSQL database
FontsGoogle Fonts^6.2.1Poppins font family
ImagesCachedNetworkImage^3.4.1Image caching & placeholders
LoadingShimmer^3.0.0Skeleton loading animations
QR Codeqr_flutter^4.1.0QR code generation
LocationGeolocator^13.0.1GPS location services
Geocodinggeocoding^3.0.0Address to coordinates conversion
Mapsgoogle_maps_flutter^2.10.0Google Maps widget for delivery tracking
Image Pickerimage_picker^1.1.2Camera/gallery image selection for profile
URLurl_launcher^6.3.1Open WhatsApp, phone calls, external links
Env Configflutter_dotenv^5.2.0Environment variable management
Localizationflutter_localizationsBuilt-inEnglish + 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:

🍔 Customer
  • Browse restaurants & menu
  • Cart → Checkout → Payment
  • Real-time order tracking
  • Favorites, Wallet, Addresses
  • WhatsApp support
🛠 Admin
  • Dashboard with live stats
  • CRUD: Restaurants, Menu, Partners
  • CRUD: Categories, Offers, Banners
  • Order management & assignment
  • User management & settings
🚚 Delivery Partner
  • View assigned orders
  • Accept / decline orders
  • Update delivery status
  • Delivery history & earnings
  • Route to customer

📁 Folder Structure

saapadugo/
├── lib/
│   ├── main.dart                          # Entry point (Hive init + ProviderScope)
│   ├── app/
│   │   ├── app.dart                       # MaterialApp.router + localization
│   │   └── routes.dart                    # GoRouter with 45+ routes, ShellRoutes
│   ├── core/
│   │   ├── constants/
│   │   │   ├── app_constants.dart         # Unsplash URLs, app config
│   │   │   ├── payment_config.dart        # Razorpay keys, demo mode detection
│   │   │   └── storage_keys.dart          # Hive box names
│   │   ├── enums/
│   │   │   ├── order_status.dart          # 10 statuses with fromJson
│   │   │   ├── payment_method.dart        # 9 methods with fromJson
│   │   │   └── health_mode.dart           # 9 dietary modes
│   │   ├── network/
│   │   │   ├── api_client.dart            # Dio HTTP client with auth interceptor
│   │   │   └── api_repository.dart        # 35+ typed API methods (NEW)
│   │   ├── providers/
│   │   │   └── api_providers.dart         # Riverpod FutureProviders (NEW)
│   │   ├── theme/
│   │   │   ├── app_theme.dart             # Light theme (CardThemeData, TabBarThemeData)
│   │   │   └── app_dark_theme.dart        # Dark theme
│   │   ├── utils/
│   │   │   ├── formatters.dart            # Price, rating, date formatters
│   │   │   ├── validators.dart            # Phone, email, address validators
│   │   │   └── whatsapp_helper.dart       # WhatsApp URL launcher helper
│   │   └── widgets/
│   │       ├── food_card.dart             # Restaurant/food card with favorites
│   │       ├── menu_item_card.dart        # Menu item with ADD/quantity controls
│   │       ├── order_status_stepper.dart  # Visual order progress
│   │       ├── saapadu_button.dart        # Branded buttons
│   │       ├── saapadu_card.dart          # Glass morphism cards
│   │       ├── saapadu_text_field.dart    # Styled text fields
│   │       ├── saapadu_shimmer.dart       # Loading shimmer effects
│   │       ├── empty_state.dart           # Empty state widget
│   │       ├── glass_container.dart       # Glassmorphism container
│   │       ├── price_tag.dart             # Price display tag
│   │       ├── whatsapp_button.dart       # 5 WhatsApp button widgets
│   │       └── whatsapp_icon.dart         # WhatsApp PNG icon loader
│   ├── features/
│   │   ├── shell/
│   │   │   ├── placeholder_screens.dart   # Splash, Onboarding, Login, OTP,
│   │   │   │                               Home, Search, Orders, Favorites, Profile,
│   │   │   │                               SlidingBanners
│   │   │   ├── extra_screens.dart         # Restaurant, Cart, Checkout, OrderTracking,
│   │   │   │                               Voice/Image Order, MealPlanner, Subscriptions,
│   │   │   │                               HomeChefs, FoodFeed, GroupOrder, Wallet,
│   │   │   │                               Addresses, Notifications, Settings, HelpSupport,
│   │   │   │                               Categories/Offers/Trending SeeAll
│   │   │   ├── admin_screens.dart         # 16 admin screens (Dashboard, CRUD all entities)
│   │   │   ├── delivery_screens.dart      # Delivery Home, Active, History, Earnings
│   │   │   ├── role_selection_screen.dart # Role selector (Customer/Admin/Delivery)
│   │   │   ├── bottom_nav_shell.dart      # 5-tab bottom nav + WhatsApp FAB
│   │   │   └── admin_shell.dart           # Desktop sidebar (collapsible) + mobile NavigationBar
│   │   └── home/data/
│   │       ├── mock_data.dart             # All mock data (~1,800 lines)
│   │       ├── providers.dart             # 55+ Riverpod providers (~830 lines)
│   │       └── models/                    # Data models (BannerModel)
│   │       ├── restaurant/data/models/    # RestaurantModel, MenuItemModel
│   │       ├── orders/data/models/        # OrderModel, OrderItemModel, DeliveryPartnerModel
│   │       ├── cart/data/models/          # CartModel, CartItemModel
│   │       ├── auth/data/models/          # UserModel, AddressModel
│   │       ├── home/data/models/          # CategoryModel, OfferModel, BannerModel
│   │       ├── social/data/models/        # ReviewModel
│   │       ├── subscriptions/data/models/ # SubscriptionModel
│   │       └── home_chef/data/models/     # HomeChefModel
│   ├── l10n/
│   │   ├── app_en.arb                     # English (495 strings)
│   │   └── app_ta.arb                     # Tamil (495 strings)
├── assets/
│   └── images/
│       ├── logo.png                       # App logo
│       ├── whatsapp.png                   # WhatsApp icon
│       └── whatsapp.svg                   # WhatsApp SVG source
├── pubspec.yaml                           # Dependencies & config
└── doc/
    └── sappadugo-technical-document.html  # This document

🔄 Data Flow — Cart → Checkout → Order

Complete order lifecycle from adding items to delivery tracking:

Browse Restaurant Add to Cart View Cart Apply Coupon Select Address Choose Payment Place Order Order Tracking Delivered

Admin Order Flow

New Order Accept Assign Partner Preparing Ready Picked Up On the Way Delivered

State Propagation

Providers fetch from the Laravel API — changes propagate via state updates:

🍔 Customer Features

FeatureScreenRouteDescription
Home FeedHomeScreen/homeSliding banners, categories, nearby restaurants, today's offers, trending, home chefs
SearchSearchScreen/searchSearch restaurants/menu, filter by category, sort by rating/distance/price
Restaurant DetailRestaurantScreen/restaurant/:idMenu, info, reviews, WhatsApp button, add to cart
CartCartScreen/cartItem list, quantity controls, coupon code, subtotal
CheckoutCheckoutScreen/checkoutAddress selection, payment method, delivery type, schedule, place order
Order TrackingOrderTrackingScreen/order/:id/trackingLive status stepper, driver info, WhatsApp support, cancel order
Orders ListOrdersScreen/ordersActive & past orders, reorder, track
FavoritesFavoritesScreen/favoritesSaved restaurants with heart toggle
ProfileProfileScreen/profileUser info, addresses, wallet, WhatsApp, settings
WalletWalletScreen/walletBalance, transactions, add money
AddressesAddressesScreen/addressesSaved addresses, add/edit/delete
Voice OrderVoiceOrderScreen/voice-orderAI voice-based food ordering
Image SearchImageSearchScreen/image-searchScan & identify food items
Meal PlannerMealPlannerScreen/meal-plannerWeekly meal planning
SubscriptionsSubscriptionsScreen/subscriptionsMeal subscription plans
Home ChefsHomeChefsScreen/home-chefsHome chef marketplace, view menu, follow
Help & SupportHelpSupportScreen/help-supportFAQ, Call/WhatsApp/Email/Report contact cards
CategoriesCategoriesSeeAllScreen/categoriesAll food categories grid
OffersOffersSeeAllScreen/offersAll today's offers list
TrendingTrendingSeeAllScreen/trendingAll trending items list
WhatsApp SupportFloating ButtonGreen FAB on all customer screens → opens wa.me/919944576702

🛠 Admin Panel Features

Desktop-responsive sidebar layout. On screens ≥800px, shows collapsible sidebar navigation. On mobile, shows NavigationBar (5 tabs: Dashboard, Orders, Restaurants, Partners, More) + Drawer for extra sections (Categories, Offers, Banners, Menu Items, Users, Settings).

SectionScreenRouteCapabilities
DashboardAdminDashboardScreen/adminRevenue, orders, restaurants, delivery stats (20+ KPIs)
OrdersAdminOrdersScreen/admin/ordersSearch, filter by status tabs, assign partner, update status
Order DetailAdminOrderDetailScreen/admin/order-detail/:idFull order view, assign partner, status update, cancel
RestaurantsAdminRestaurantsScreen/admin/restaurantsList, search, toggle open/featured/trending, CRUD
Restaurant FormAdminRestaurantFormScreen/admin/restaurants/addAdd/edit restaurant with all fields
Menu ItemsAdminMenuItemsScreen/admin/restaurants/:id/menuPer-restaurant menu, toggle availability/bestseller, CRUD
Menu Item FormAdminMenuItemFormScreen/admin/restaurants/:id/menu/addAdd/edit menu item with fields
All Menu ItemsAdminAllMenuItemsScreen/admin/menu-itemsCross-restaurant menu view
Delivery PartnersAdminDeliveryPartnersScreen/admin/delivery-partnersList, search, toggle active, CRUD
Partner FormAdminDeliveryPartnerFormScreen/admin/delivery-partners/addAdd/edit delivery partner
CategoriesAdminCategoriesScreen/admin/categoriesSearch, dialog CRUD with icon picker
OffersAdminOffersScreen/admin/offersSearch, dialog CRUD with code/discount
BannersAdminBannersScreen/admin/bannersImage preview, toggle active, CRUD, sort order
Banner FormAdminBannerFormScreen/admin/banners/addTitle, image URL, coupon code, live preview
UsersAdminUsersScreen/admin/usersReal user data, activate/deactivate
SettingsAdminSettingsScreen/admin/settingsMaintenance mode, delivery radius, commission, WhatsApp number, support name

🚚 Delivery Partner Features

ScreenRouteDescription
DeliveryHomeScreen/deliveryAvailable orders, today's stats, acceptance queue
DeliveryActiveScreen/delivery/active/:idActive delivery with status updates, route map, call customer via phone
DeliveryHistoryScreen/delivery/historyPast deliveries with stats
DeliveryEarningsScreen/delivery/earningsRevenue breakdown, daily/weekly/monthly

Default partner: Murugan K (partner_1) — logged in automatically in mock mode.

💬 WhatsApp Integration

Full WhatsApp chat integration using url_launcher with cross-platform support.

Components

ComponentFileDescription
WhatsAppHelpercore/utils/whatsapp_helper.dartOpens wa.me URL with pre-filled message, Android/iOS/Web fallback
WhatsAppFloatingButtoncore/widgets/whatsapp_button.dartGreen FAB with real WhatsApp PNG icon on all customer screens
WhatsAppChatButtonSame fileFull-width green button for general support
WhatsAppOrderButtonSame fileOutlined button for order-specific support
WhatsAppRestaurantButtonSame fileOutlined button for restaurant inquiries
WhatsAppMenuItemSame fileListTile for profile/settings pages
WhatsAppIconcore/widgets/whatsapp_icon.dartReal WhatsApp PNG icon from asset

Configuration

Integration Points

📦 Data Models (16 Models)

ModelKey FieldsFeatures
RestaurantModelid, name, image, bannerImage, cuisines, rating, deliveryTime, distance, avgPrice, tags, isOpen, isFeatured, isTrending, hasOffercopyWith, fromJson
MenuItemModelid, restaurantId, restaurantName, name, image, price, originalPrice, description, category, isVeg, isAvailable, isBestseller, preparationTime, totalOrders, tagshasDiscount, copyWith, fromJson
OrderModelid, orderNumber, items, restaurantName, restaurantImage, status, totalAmount, deliveryAddress, paymentMethod, createdAt, deliveredAt, partnerId, partnerNamecopyWith, 10 status checks
OrderItemModelmenuItemId, name, image, price, quantity, isVeg, specialInstructionsget totalPrice
CartModelitems, restaurantId, restaurantName, couponCode, couponDiscountget subtotal, deliveryFee, total, itemCount
CartItemModelmenuItemId, name, image, price, quantity, isVegget totalPrice
UserModelid, name, phone, email, avatar, dateOfBirth, createdAtcopyWith
AddressModelid, label, fullAddress, landmark, latitude, longitude, isDefaultcopyWith
DeliveryPartnerModelid, name, phone, avatar, vehicleType, vehicleNumber, rating, totalDeliveries, isAvailable, currentOrderIdcopyWith
CategoryModelid, name, icon, image, description, isActivecopyWith
OfferModelid, title, subtitle, image, code, discount, maxDiscount, minOrder, validUntil, restaurantIdisExpired, isRestaurantSpecific, discountText
BannerModelid, title, subtitle, imageUrl, actionRoute, couponCode, isActive, sortOrder, createdAtcopyWith, toJson
ReviewModelid, userId, userName, userAvatar, restaurantId, rating, comment, createdAtcopyWith
SubscriptionModelid, name, description, price, frequency, mealsPerDay, isActivecopyWith
HomeChefModelid, name, avatar, specialty, rating, totalOrders, pricePerMeal, isVerifiedcopyWith
MockUserDataid, name, phone, email, avatar, orderCount, joinDate, isActiveAdmin user management

⚡ State Providers (66)

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)

ProviderTypeDescription
restaurantsFutureProviderFutureProviderFetches restaurants from Laravel API
menuItemsFutureProviderFutureProviderFetches menu items from API
categoriesFutureProviderFutureProviderFetches food categories from API
offersFutureProviderFutureProviderFetches coupons/offers from API
ordersFutureProviderFutureProviderFetches user orders from API
addressesFutureProviderFutureProviderFetches saved addresses from API
walletFutureProviderFutureProviderFetches wallet balance & history from API
bannersFutureProviderFutureProviderFetches active banners from API
subscriptionsFutureProviderFutureProviderFetches meal subscription plans from API
homeChefsFutureProviderFutureProviderFetches home chefs from API
favoritesFutureProviderFutureProviderFetches favorite restaurants from API

Core Providers

ProviderTypeDescription
cartProviderStateNotifierCart items, add/remove/update, coupon, clear
ordersProviderStateNotifierOrder list, add order, cancel, update status
favoritesProviderStateNotifierFavorite restaurant IDs, toggle
addressesProviderStateNotifierSaved addresses, add/edit/delete/setDefault
walletProviderStateNotifierBalance, transactions, add/deduct balance
roleProviderStateProviderCurrent user role (customer/admin/deliveryPartner)
selectedAddressProviderStateProviderCurrently selected delivery address
selectedPaymentProviderStateProviderSelected payment method
selectedDeliveryTypeProviderStateProviderStandard / Express / Scheduled
notificationsProviderStateNotifierApp notifications

Admin CRUD Providers

ProviderDescription
restaurantsProviderAdd, update, delete, toggleOpen/Featured/Trending
menuItemsProviderAdd, update, delete, toggleAvailability/Bestseller
bannersProviderAdd, update, delete, toggleActive
categoriesProviderAdd, update, delete (custom categories)
offersProviderAdd, update, delete (custom offers)
adminSettingsProviderWhatsApp number, support name, maintenance mode

Computed Providers

ProviderDescription
nearbyRestaurantsProviderRestaurants sorted by distance
trendingItemsProviderTop 10 items by total orders
restaurantMenuProviderMenu items per restaurant
adminStatsProvider20+ dashboard statistics
activeBannersProviderActive banners sorted by sort order
whatsappNumberProviderCurrent WhatsApp support number
myDeliveryOrdersProviderOrders assigned to current partner

🚧 Routing Table (45+ Routes)

Declarative routing via GoRouter with StatefulShellRoute for tab navigation and ShellRoute for admin sidebar.

Auth Flow

RouteScreen
/splashSplashScreen
/onboardingOnboardingScreen
/loginLoginScreen
/otpOtpScreen
/role-selectionRoleSelectionScreen

Customer (ShellRoute with BottomNavShell)

RouteScreen
/homeHomeScreen (Tab 1)
/searchSearchScreen (Tab 2)
/ordersOrdersScreen (Tab 3)
/favoritesFavoritesScreen (Tab 4)
/profileProfileScreen (Tab 5)

Feature Routes

RouteScreen
/restaurant/:idRestaurantScreen
/cartCartScreen
/checkoutCheckoutScreen
/order/:id/trackingOrderTrackingScreen
/voice-orderVoiceOrderScreen
/image-searchImageSearchScreen
/meal-plannerMealPlannerScreen
/subscriptionsSubscriptionsScreen
/home-chefsHomeChefsScreen
/categoriesCategoriesSeeAllScreen
/offersOffersSeeAllScreen
/trendingTrendingSeeAllScreen
/food-feedFoodFeedScreen
/group-orderGroupOrderScreen
/walletWalletScreen
/addressesAddressesScreen
/help-supportHelpSupportScreen
/notificationsNotificationsScreen
/settingsSettingsScreen

Admin (ShellRoute with AdminShellScreen)

RouteScreen
/adminAdminDashboardScreen
/admin/ordersAdminOrdersScreen
/admin/order-detail/:idAdminOrderDetailScreen
/admin/restaurantsAdminRestaurantsScreen
/admin/restaurants/addAdminRestaurantFormScreen
/admin/restaurants/edit/:idAdminRestaurantFormScreen (edit)
/admin/restaurants/:id/menuAdminMenuItemsScreen
/admin/restaurants/:id/menu/addAdminMenuItemFormScreen
/admin/restaurants/:id/menu/edit/:itemIdAdminMenuItemFormScreen (edit)
/admin/menu-itemsAdminAllMenuItemsScreen
/admin/delivery-partnersAdminDeliveryPartnersScreen
/admin/delivery-partners/addAdminDeliveryPartnerFormScreen
/admin/delivery-partners/edit/:idAdminDeliveryPartnerFormScreen (edit)
/admin/categoriesAdminCategoriesScreen
/admin/offersAdminOffersScreen
/admin/bannersAdminBannersScreen
/admin/banners/addAdminBannerFormScreen
/admin/banners/edit/:idAdminBannerFormScreen (edit)
/admin/usersAdminUsersScreen
/admin/settingsAdminSettingsScreen

Delivery Partner

RouteScreen
/deliveryDeliveryHomeScreen
/delivery/active/:idDeliveryActiveScreen
/delivery/historyDeliveryHistoryScreen
/delivery/earningsDeliveryEarningsScreen

📄 Enums

OrderStatus (10 values)

placed accepted preparing cooking packing pickup onTheWay delivered cancelled refunded

PaymentMethod (9 values)

upi razorpay phonepe googlePay paytm creditCard debitCard wallet cod

HealthMode (9 values)

diabetic lowCarb highProtein lowSodium jain vegan glutenFree kidsFriendly

🎨 Theme & Design System

TokenValueUsage
AppTheme.primaryColor #FF6B00Primary actions, FABs, highlights
AppTheme.primaryDark #E55D00Gradients, dark accents
AppTheme.secondaryColor #22C55ESuccess, delivery, available
AppTheme.backgroundColor #F8FAFCScreen backgrounds
AppTheme.textPrimary #1E293BHeadings, body text
AppTheme.textSecondary #64748BCaptions, subtitles
WhatsApp Green #25D366WhatsApp integration

Design Principles

🔨 Reusable Widgets (19)

WidgetFileDescription
FoodCardfood_card.dartRestaurant card with image, rating, delivery time, favorites toggle
MenuItemCardmenu_item_card.dartMenu item with ADD button, quantity controls, veg indicator
SaapaduButtonsaapadu_button.dartBranded primary/secondary buttons
SaapaduCardsaapadu_card.dartStandard card with glass variant
SaapaduGlassCardsaapadu_card.dartGlassmorphism card variant
SaapaduTextFieldsaapadu_text_field.dartStyled text input fields
SaapaduShimmersaapadu_shimmer.dartShimmer loading effect
ShimmerRestaurantCardsaapadu_shimmer.dartRestaurant skeleton loader
ShimmerMenuItemsaapadu_shimmer.dartMenu item skeleton loader
OrderStatusStepperorder_status_stepper.dartVisual order progress stepper
PriceTagprice_tag.dartPrice display with discount
EmptyStateempty_state.dartEmpty list/section placeholder
GlassContainerglass_container.dartGlassmorphism container
WhatsAppFloatingButtonwhatsapp_button.dartGreen FAB with WhatsApp icon
WhatsAppChatButtonwhatsapp_button.dartFull-width green button
WhatsAppOrderButtonwhatsapp_button.dartOutlined order support button
WhatsAppRestaurantButtonwhatsapp_button.dartOutlined restaurant inquiry button
WhatsAppMenuItemwhatsapp_button.dartListTile for profile pages
WhatsAppIconwhatsapp_icon.dartWhatsApp PNG icon from asset

🌐 Localization

LanguageFileStringsCode
Englishapp_en.arb495en
Tamilapp_ta.arb495ta

📦 Dependencies

Production Dependencies (16)

PackageVersionPurpose
flutter_riverpod^2.6.1State management
go_router^14.8.1Declarative routing
dio^5.7.0HTTP client
pretty_dio_logger^1.4.0HTTP request logging
hive^2.2.3Local NoSQL database
hive_flutter^1.1.0Hive Flutter integration
google_fonts^6.2.1Poppins font
shimmer^3.0.0Loading shimmer effects
cached_network_image^3.4.1Image caching
qr_flutter^4.1.0QR code generation
badges^3.1.2Notification badges
geolocator^13.0.1GPS location
intlanyDate/number formatting
url_launcher^6.3.1Open WhatsApp, phone calls, external URLs
image_picker^1.1.2Camera/gallery image selection for profile
geocoding^3.0.0Address to coordinates conversion
google_maps_flutter^2.10.0Google Maps widget for delivery tracking
flutter_dotenv^5.2.0Environment variable management

Dev Dependencies (3)

PackageVersionPurpose
flutter_lints^5.0.0Lint rules
hive_generator^2.0.1Hive TypeAdapter code gen
build_runner^2.4.13Code 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

ComponentTechnology
FrameworkLaravel 12
PHP8.2
DatabaseMySQL 8 (26 tables, 22 models)
CacheRedis
AuthLaravel Sanctum (token-based OTP)
PaymentsRazorpay API
API Controllers17 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

Database Schema (26 Tables)

TableKey ColumnsRelationship
usersid, name, phone, email, role, avatar, is_activehasOne UserProfile, hasMany Orders, hasMany Addresses
user_profilesuser_id, date_of_birth, gender, preferencesbelongsTo User
personal_access_tokenstokenable (morph), name, token, abilitiesSanctum API tokens
restaurantsid, name, image, cuisines, rating, delivery_time, is_openhasMany MenuItems
menu_itemsrestaurant_id, name, price, is_veg, is_available, categorybelongsTo Restaurant
categoriesid, name, icon, image, is_active
offerscode, discount_type, discount_value, min_order, valid_until
bannerstitle, subtitle, image_url, coupon_code, sort_order, is_active
addressesuser_id, label, full_address, city, state, pincode, lat, lng, typebelongsTo User
cartsuser_id, restaurant_id, coupon_code, coupon_discounthasMany CartItems
cart_itemscart_id, menu_item_id, quantity, pricebelongsTo Cart
ordersuser_id, restaurant_id, status (string), total_amount, payment_methodhasMany OrderItems
order_itemsorder_id, menu_item_id, name, price, quantity, is_vegbelongsTo Order
delivery_partnersname, phone, vehicle_type, vehicle_number, is_available
walletsuser_id, balancehasMany WalletTransactions
wallet_transactionswallet_id, type, amount, descriptionbelongsTo Wallet
home_chefsname, avatar, specialty, rating, price_per_meal, is_verified
subscriptionsname, description, price, frequency, meals_per_dayhasMany UserSubscriptions
user_subscriptionsuser_id, subscription_id, status, start_datebelongsTo Subscription
notificationsuser_id, title, body, data, read_at
favoritesuser_id, restaurant_id
group_ordersuser_id, restaurant_id, code, statushasMany GroupOrderItems
group_order_itemsgroup_order_id, user_id, menu_item_id, quantitybelongsTo GroupOrder

Seeded Data

EntityCountDetails
Users5Customers + admin
Restaurants8Madurai area restaurants
Menu Items405 per restaurant
Categories10Biryani, Dosa, Idly, etc.
Coupons/Offers5FIRST50, WEEKEND100, etc.
Banners4Promotional banners
Delivery Partners5Pre-assigned partners
Home Chefs4Home-based food vendors
Subscription Plans5Daily, Weekly, Monthly plans
Notifications10Sample notifications

🚀 Future Roadmap

PhaseFeaturesTimeline
Phase 1Flutter mock platform (complete)Done
Phase 2Laravel 12 + MySQL + Redis backend API (26 tables, 17 controllers, 61 routes, seeded)Done
Phase 3API integration — providers wired to real Laravel endpoints (restaurants, cart, orders, wallet, addresses, favorites, subscriptions, banners)Done
Phase 4Mobile UI fixes — 20 bug fixes for OPPO F29 Pro 5G (splash, onboarding, checkout, admin nav, phone calling, profile image upload)Done
Phase 5Splash screen + App icon — flutter_native_splash + flutter_launcher_icons with custom adaptive iconDone
Phase 6Firebase Auth — code ready (firebase_auth_service.dart), needs real Firebase project credentialsPending Config
Phase 7Push Notifications — client ready (notification_service.dart), server-side FCM sending not implementedPending Dev
Phase 8Razorpay live — client SDK ready (payment_service.dart), needs real API keys + Laravel Razorpay PHP SDKPending Config
Phase 9Google Maps — package installed, API key placeholder, no Maps widget in any screenPending Dev
Phase 10Real-time order tracking (WebSocket) — not implementedPending Dev
Phase 11AI-powered recommendations — local heuristic mock, no real MLPending Dev
Phase 12Android release signing — build config ready, needs keystore generationPending Config

Backend Deployment

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

Pre-existing Errors (Known)

The following errors exist in pre-existing skeleton files and do not affect the app:

Configuration Placeholders (Required for Production)