
This comprehensive tutorial will guide you through creating a food delivery marketplace using Adalo's no-code platform. While some advanced features like live GPS tracking require external integrations or workarounds, you'll build a functional multi-sided marketplace with restaurants, customers, and delivery drivers.
Prerequisites and Initial Setup
Step 1: Create Your Adalo Account and App
- Visit Adalo.com and sign up
- Click "Create New App"
- Choose "Mobile App" (essential for location features)
- Name your app (e.g., "FoodDelivery")
- Select "Start from Scratch"
Step 2: Configure App Foundation
- Choose primary colors (food-themed palette)
- Select clean, readable fonts
- Enable location services in app settings
- Click "Continue" to enter the editor
Step 3: Upgrade to a Paid Plan
- Navigate to Settings → Billing
- Choose a paid plan — publishing to the app stores and Marketplace Payments require one. See Pricing
- Enables Stripe Marketplace Payments
- Plans differ by Monthly App Actions
Setting Up the Database Architecture
Step 4: Enhance the Users Collection
- Click Database in left sidebar
- Select default "Users" collection
- Add these properties (click "+ Add Property"):
- Role (Text) - Values: "customer", "restaurant", "driver"
- Phone Number (Text)
- Profile Picture (Image)
- Current Location (Location)
- Is Active (True/False - default: true)
- Rating (Number - default: 5.0)
- Total Orders (Number - default: 0)
Learn about Users collection
Step 5: Create Restaurants Collection
- Click "+ Add Collection"
- Name it "Restaurants"
- Add properties:
- Restaurant Name (Text)
- Description (Text - check "Multiline")
- Cover Image (Image)
- Logo (Image)
- Address (Location property)
- Phone (Text)
- Cuisine Type (Text)
- Delivery Fee (Number)
- Minimum Order (Number)
- Estimated Delivery (Text - e.g., "30-45 min")
- Rating (Number - default: 5.0)
- Is Open (True/False - default: true)
- Opening Hours (Text)
Step 6: Create Menu Categories Collection
- Add new collection "Menu Categories"
- Add properties:
- Category Name (Text)
- Display Order (Number)
- Is Active (True/False - default: true)
Step 7: Create Menu Items Collection
- Add new collection "Menu Items"
- Add properties:
- Item Name (Text)
- Description (Text - multiline)
- Image (Image)
- Price (Number)
- Is Available (True/False - default: true)
- Preparation Time (Number - in minutes)
- Calories (Number)
- Is Popular (True/False - default: false)
Step 8: Create Orders Collection
- Add new collection "Orders"
- Add properties:
- Order Number (Text)
- Status (Text) - Values: "pending", "confirmed", "preparing", "ready", "picked_up", "delivered", "cancelled"
- Order Total (Number)
- Delivery Fee (Number)
- Tax Amount (Number)
- Final Total (Number)
- Created At (Date & Time - Automatic)
- Delivery Address (Location)
- Special Instructions (Text - multiline)
- Estimated Delivery (Date & Time)
- Payment Status (Text) - Values: "pending", "paid", "failed", "refunded"
Step 9: Create Order Items Collection
- Add new collection "Order Items"
- Add properties:
- Quantity (Number)
- Item Price (Number)
- Line Total (Number)
- Special Requests (Text)
Step 10: Set Up Database Relationships
- In Restaurants:
- Add "Owner" → Users (Many to One)
- Add "Menu Categories" → Menu Categories (One to Many)
- In Menu Categories:
- Add "Restaurant" → Restaurants (Many to One)
- Add "Menu Items" → Menu Items (One to Many)
- In Menu Items:
- Add "Category" → Menu Categories (Many to One)
- Add "Restaurant" → Restaurants (Many to One)
- In Orders:
- Add "Customer" → Users (Many to One)
- Add "Restaurant" → Restaurants (Many to One)
- Add "Driver" → Users (Many to One)
- Add "Order Items" → Order Items (One to Many)
- In Order Items:
- Add "Order" → Orders (Many to One)
- Add "Menu Item" → Menu Items (Many to One)
Building the Customer Interface
Step 11: Create Home Screen with Restaurant Listings
- Add new screen "Home"
- Set as home screen for customers
- Add Location Permission component at top
- Add search bar (Text Input) with placeholder "Search restaurants..."
- Add Custom List for restaurants:
- Data: Restaurants
- Filter: Is Open = true
- Sort by: Distance (nearest first) or Rating
- For each restaurant card, display:
- Cover image, logo, name, cuisine type
- Rating, delivery time, delivery fee
- Distance from user location
Step 12: Add Location-Based Filtering
- In Restaurant list, add distance filter:
- Create distance formula between Restaurant→Address and User→Current Location
- Filter: Distance ≤ 10 miles (adjust as needed)
- Add location update action:
- Update User→Current Location on screen load
- Use the Location input for accuracy
See Comparing locations for distance filters.
Step 13: Build Restaurant Detail Screen
- Create new screen "Restaurant Detail"
- Link from restaurant list items
- Add restaurant header:
- Cover image (full width)
- Restaurant name, rating, delivery info
- Call restaurant button (phone number link)
- Add Custom List for Menu Categories:
- Filter: Restaurant = Current Restaurant
- Sort by Display Order
- For each category, add Menu Items list:
- Filter: Category = Current Category AND Is Available = true
- Show item name, description, price, image
Step 14: Create Menu Item Detail Screen
- Add new screen "Item Detail"
- Display full item information
- Add quantity selector:
- Number input (minimum: 1)
- and - buttons for easy adjustment
- Number input (minimum: 1)
- Add special instructions text area
- Add "Add to Cart" button:
- Creates Order Items record
- Calculates line total (quantity Ă— price)
- Updates running cart total
Step 15: Build Shopping Cart Screen
- Create new screen "Cart"
- Add Custom List for current order items:
- Filter: Order→Customer = Logged In User AND Order→Status = "pending"
- Group by restaurant (if multiple restaurants)
- Display order summary:
- Subtotal, delivery fee, tax, final total
- Delivery address selector
- Add "Proceed to Checkout" button
Implementing the Ordering System
Step 16: Create Checkout Screen
- Add new screen "Checkout"
- Display order summary (read-only)
- Add delivery address section:
- Use saved addresses or location picker
- Add address validation
- Add payment method section:
- Connect to Stripe payment component
- Support credit cards and digital wallets
- Add "Place Order" button with comprehensive action:
- Update Order→Status to "confirmed"
- Process Stripe payment
- Send confirmation notifications
- Clear cart
- Navigate to Order Status screen
Step 17: Set Up Stripe Payments
- Navigate to Settings → Integrations → Stripe
- Add Stripe publishable and secret keys
- Configure Stripe Connect for marketplace:
- Enable automatic restaurant payouts
- Set a platform fee percentage as applicable
- Configure payout schedules
- Add payment processing to checkout:
- Amount = Order→Final Total
- Connected Account = Restaurant→Stripe Account ID
- Application Fee = Platform percentage
Step 18: Build Order Tracking Screen
- Create new screen "Order Status"
- Display order progress:
- Visual progress bar showing current status
- Estimated delivery time
- Driver information (when assigned)
- Add status updates:
- Use conditional visibility for each status
- Add a Timer to refresh while the screen is open (e.g., ~30s); background auto-refresh isn’t supported natively
- Add contact buttons:
- Call restaurant
- Call driver (when assigned)
- Cancel order (if status allows)
Step 19: Create Order History Screen
- Add new screen "Order History"
- Add Custom List for past orders:
- Data: Orders
- Filter: Customer = Logged In User
- Sort by: Created At (newest first)
- For each order, show:
- Restaurant name and logo
- Order date and total
- Final status
- Reorder button for completed orders
Building the Restaurant Interface
Step 20: Create Restaurant Dashboard
- Add new screen "Restaurant Dashboard"
- Add role-based access control:
- Show only if User→Role = "restaurant"
- Redirect other roles to appropriate screens
- Display key metrics:
- Today's orders count
- Today's revenue
- Pending orders requiring attention
- Average order value
- Add quick action buttons:
- View pending orders
- Update menu
- Toggle restaurant open/closed status
Step 21: Build Incoming Orders Screen
- Create new screen "Incoming Orders"
- Add Custom List for new orders:
- Filter: Restaurant = Current User's Restaurant AND Status = "pending"
- Sort by: Created At (oldest first)
- For each order, display:
- Order number and customer name
- Order items and total
- Delivery address
- Special instructions
- Add action buttons:
- Accept Order (Status = "confirmed")
- Reject Order (Status = "cancelled")
- Estimated preparation time selector
Step 22: Create Order Management Screen
- Add new screen "Active Orders"
- Add Custom List for confirmed orders:
- Filter: Restaurant = Current User's Restaurant AND Status IN ["confirmed", "preparing", "ready"]
- Group by status for organization
- Add status update buttons:
- "Start Preparing" (confirmed → preparing)
- "Ready for Pickup" (preparing → ready)
- Mark as picked up when driver arrives
- Include order details and timing information
Step 23: Build Menu Management Interface
- Create new screen "Manage Menu"
- Add Custom List for Menu Categories:
- Filter: Restaurant = Current User's Restaurant
- Allow adding new categories
- For each category, add Menu Items management:
- Toggle item availability
- Edit prices and descriptions
- Add new items
- Upload/change item images
- Add bulk actions:
- Enable/disable entire categories
- Apply percentage price changes
Creating the Driver Interface
Step 24: Build Driver Dashboard
- Add new screen "Driver Dashboard"
- Add role-based access (User→Role = "driver")
- Display driver metrics:
- Today's deliveries completed
- Total earnings
- Average delivery time
- Current online/offline status
- Add toggle for availability:
- Update User→Is Active property
- Show available delivery requests when active
Step 25: Create Available Deliveries Screen
- Add new screen "Available Deliveries"
- Add Custom List for ready orders:
- Filter: Status = "ready" AND Driver = null
- Sort by: Distance from driver location
- For each delivery opportunity, show:
- Restaurant name and pickup address
- Delivery address and distance
- Estimated payout
- Order total and items count
- Add "Accept Delivery" button:
- Update Order→Driver = Current User
- Update Order→Status = "picked_up"
- Navigate to delivery details
Step 26: Build Active Delivery Screen
- Create new screen "Active Delivery"
- Display current delivery information:
- Customer and restaurant details
- Pickup and delivery addresses
- Order items and special instructions
- Add navigation integration:
- Deep link to Maps navigation for pickup
- Deep link to delivery address after pickup
- Add status updates:
- "Picked Up" button (ready → picked_up)
- "Delivered" button (picked_up → delivered)
- Photo proof of delivery option
Adding Advanced Features
Step 27: Implement Push Notifications
- Navigate to Settings → Push Notifications
- Upload notification certificates
- Configure notification triggers:
- New order for restaurants
- Order status updates for customers
- New delivery opportunities for drivers
- Delivery completion confirmations
- Add notification actions to relevant screens:
- Order confirmation → notify restaurant
- Status changes → notify customer
- Driver assignment → notify driver and customer
Step 28: Create Review and Rating System
- Add new collection "Reviews"
- Properties:
- Rating (Number 1-5)
- Review Text (Text - multiline)
- Created At (Date & Time)
- Add relationships:
- Reviewer → Users (Many to One)
- Restaurant → Restaurants (Many to One)
- Order → Orders (Many to One)
- Add review prompt after delivery:
- Show rating component
- Optional text review
- Update restaurant average rating
Step 29: Implement Search and Filters
- Add search functionality to home screen:
- Search restaurants by name
- Search menu items across restaurants
- Filter by cuisine type
- Add advanced filters:
- Price range ($ to $$$$)
- Delivery time
- Minimum rating
- Distance radius
- Add sorting options:
- Distance, rating, delivery time
- Price (low to high, high to low)
Step 30: Add Favorites and Reordering
- Create "User Favorites" collection:
- User → Users (Many to One)
- Restaurant → Restaurants (Many to One)
- Menu Item → Menu Items (Many to One)
- Add favorite buttons throughout app:
- Heart icons on restaurants and items
- Toggle favorite status
- Create "Favorites" screen showing saved items
- Add "Reorder" functionality:
- Copy previous order items to new cart
- Account for menu changes/availability
Handling Platform Limitations
Step 31: Real-Time Tracking Workarounds
Since Adalo lacks continuous GPS tracking:
- Use push notifications for status updates
- Implement manual check-ins:
- Driver updates location at key points
- Customer receives notifications, not live tracking
- Integrate external tracking:
- Use Custom Actions with external APIs
- Link to external tracking pages
Step 32: Performance Optimization
- Optimize database queries:
- Limit list items to 20-30 maximum
- Use pagination for long lists
- Pre-calculate totals and store as properties
- Image optimization:
- Enable auto-compression in settings
- Use external image URLs when possible
- Compress uploads before saving
- Avoid common performance issues:
- No nested lists beyond 2 levels
- Minimize auto-refresh actions
- Use conditional visibility efficiently
Step 33: Multi-Language Support
- Create separate app versions for each language
- Duplicate database structure
- Translate all static text and labels
- Consider using external translation APIs
- Account for additional app version costs
Testing and Deployment
Step 34: Create Test Data
- Add sample restaurants with complete menus
- Create test user accounts for each role
- Process sample orders through full workflow
- Test payment processing with Stripe test cards
- Verify all notification triggers
Step 35: App Store Preparation
- Choose a paid plan as needed — see Pricing
- Configure store settings — see Publishing
- Create privacy policy and terms of service
- Prepare app store screenshots and descriptions
- Set up customer support system
Step 36: Go-Live Checklist
- Switch Stripe to live mode
- Update notification certificates for production
- Test with real payment methods
- Verify location permissions on devices
- Monitor performance metrics
- Set up analytics tracking
Important Considerations
Platform Limitations:
- No real-time GPS tracking
- Performance depends on data volume, list complexity, and images; optimize lists and consider external databases at scale
- Payments and payouts are handled via Stripe components; advanced flows may require external logic
- Limited offline functionality
- Performance varies by device and platform; test on both iOS and Android
Cost Structure:
- For detailed pricing, please refer to the official Adalo Pricing page
Third-Party Integrations:
- Zapier: Workflow automation
- External database (via External Collections)Â Â
- SMS provider (via Custom Actions)Â Â
- Analytics provider (via Custom Actions)
Additional Resources
Note: This Postmates-style clone covers browsing restaurants, menus, cart and checkout, order handoff to drivers, basic tracking, status notifications, and payouts using Adalo’s native features and Marketplace components. For live-like behavior (map and order status), refresh on active screens with a timer and use push notifications; if you need true real-time or background location, connect an external service via Custom Actions. For production, optimize lists and images, test on real devices, and switch to a paid plan when you’re ready to publish.
‍










