Updated Sep 11, 2025

Step-by-Step Guide: Building a Postmates Clone with Adalo

Table of Contents
Text Link

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

  1. Visit Adalo.com and sign up
  2. Click "Create New App"
  3. Choose "Mobile App" (essential for location features)
  4. Name your app (e.g., "FoodDelivery")
  5. Select "Start from Scratch"

Step 2: Configure App Foundation

  1. Choose primary colors (food-themed palette)
  2. Select clean, readable fonts
  3. Enable location services in app settings
  4. Click "Continue" to enter the editor

Step 3: Upgrade to a Paid Plan

  1. Navigate to Settings → Billing
  2. Choose a paid plan — publishing to the app stores and Marketplace Payments require one. See Pricing
  3. Enables Stripe Marketplace Payments
  4. Plans differ by Monthly App Actions

Setting Up the Database Architecture

Step 4: Enhance the Users Collection

  1. Click Database in left sidebar
  2. Select default "Users" collection
  3. 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

  1. Click "+ Add Collection"
  2. Name it "Restaurants"
  3. 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

  1. Add new collection "Menu Categories"
  2. Add properties:
    • Category Name (Text)
    • Display Order (Number)
    • Is Active (True/False - default: true)

Step 7: Create Menu Items Collection

  1. Add new collection "Menu Items"
  2. 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

  1. Add new collection "Orders"
  2. 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

  1. Add new collection "Order Items"
  2. Add properties:
    • Quantity (Number)
    • Item Price (Number)
    • Line Total (Number)
    • Special Requests (Text)

Step 10: Set Up Database Relationships

  1. In Restaurants:


    • Add "Owner" → Users (Many to One)
    • Add "Menu Categories" → Menu Categories (One to Many)
  2. In Menu Categories:


    • Add "Restaurant" → Restaurants (Many to One)
    • Add "Menu Items" → Menu Items (One to Many)
  3. In Menu Items:


    • Add "Category" → Menu Categories (Many to One)
    • Add "Restaurant" → Restaurants (Many to One)
  4. 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)
  5. In Order Items:


    • Add "Order" → Orders (Many to One)
    • Add "Menu Item" → Menu Items (Many to One)

Database relationship guide

Building the Customer Interface

Step 11: Create Home Screen with Restaurant Listings

  1. Add new screen "Home"
  2. Set as home screen for customers
  3. Add Location Permission component at top
  4. Add search bar (Text Input) with placeholder "Search restaurants..."
  5. Add Custom List for restaurants:
    • Data: Restaurants
    • Filter: Is Open = true
    • Sort by: Distance (nearest first) or Rating
  6. 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

  1. In Restaurant list, add distance filter:
    • Create distance formula between Restaurant→Address and User→Current Location
    • Filter: Distance ≤ 10 miles (adjust as needed)
  2. 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

  1. Create new screen "Restaurant Detail"
  2. Link from restaurant list items
  3. Add restaurant header:
    • Cover image (full width)
    • Restaurant name, rating, delivery info
    • Call restaurant button (phone number link)
  4. Add Custom List for Menu Categories:
    • Filter: Restaurant = Current Restaurant
    • Sort by Display Order
  5. 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

  1. Add new screen "Item Detail"
  2. Display full item information
  3. Add quantity selector:
    • Number input (minimum: 1)
      • and - buttons for easy adjustment
  4. Add special instructions text area
  5. Add "Add to Cart" button:
    • Creates Order Items record
    • Calculates line total (quantity Ă— price)
    • Updates running cart total

Step 15: Build Shopping Cart Screen

  1. Create new screen "Cart"
  2. Add Custom List for current order items:
    • Filter: Order→Customer = Logged In User AND Order→Status = "pending"
    • Group by restaurant (if multiple restaurants)
  3. Display order summary:
    • Subtotal, delivery fee, tax, final total
    • Delivery address selector
  4. Add "Proceed to Checkout" button

Implementing the Ordering System

Step 16: Create Checkout Screen

  1. Add new screen "Checkout"
  2. Display order summary (read-only)
  3. Add delivery address section:
    • Use saved addresses or location picker
    • Add address validation
  4. Add payment method section:
  5. 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

  1. Navigate to Settings → Integrations → Stripe
  2. Add Stripe publishable and secret keys
  3. Configure Stripe Connect for marketplace:
    • Enable automatic restaurant payouts
    • Set a platform fee percentage as applicable
    • Configure payout schedules
  4. 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

  1. Create new screen "Order Status"
  2. Display order progress:
    • Visual progress bar showing current status
    • Estimated delivery time
    • Driver information (when assigned)
  3. 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
  4. Add contact buttons:
    • Call restaurant
    • Call driver (when assigned)
    • Cancel order (if status allows)

Step 19: Create Order History Screen

  1. Add new screen "Order History"
  2. Add Custom List for past orders:
    • Data: Orders
    • Filter: Customer = Logged In User
    • Sort by: Created At (newest first)
  3. 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

  1. Add new screen "Restaurant Dashboard"
  2. Add role-based access control:
    • Show only if User→Role = "restaurant"
    • Redirect other roles to appropriate screens
  3. Display key metrics:
    • Today's orders count
    • Today's revenue
    • Pending orders requiring attention
    • Average order value
  4. Add quick action buttons:
    • View pending orders
    • Update menu
    • Toggle restaurant open/closed status

Step 21: Build Incoming Orders Screen

  1. Create new screen "Incoming Orders"
  2. Add Custom List for new orders:
    • Filter: Restaurant = Current User's Restaurant AND Status = "pending"
    • Sort by: Created At (oldest first)
  3. For each order, display:
    • Order number and customer name
    • Order items and total
    • Delivery address
    • Special instructions
  4. Add action buttons:
    • Accept Order (Status = "confirmed")
    • Reject Order (Status = "cancelled")
    • Estimated preparation time selector

Step 22: Create Order Management Screen

  1. Add new screen "Active Orders"
  2. Add Custom List for confirmed orders:
    • Filter: Restaurant = Current User's Restaurant AND Status IN ["confirmed", "preparing", "ready"]
    • Group by status for organization
  3. Add status update buttons:
    • "Start Preparing" (confirmed → preparing)
    • "Ready for Pickup" (preparing → ready)
    • Mark as picked up when driver arrives
  4. Include order details and timing information

Step 23: Build Menu Management Interface

  1. Create new screen "Manage Menu"
  2. Add Custom List for Menu Categories:
    • Filter: Restaurant = Current User's Restaurant
    • Allow adding new categories
  3. For each category, add Menu Items management:
    • Toggle item availability
    • Edit prices and descriptions
    • Add new items
    • Upload/change item images
  4. Add bulk actions:
    • Enable/disable entire categories
    • Apply percentage price changes

Creating the Driver Interface

Step 24: Build Driver Dashboard

  1. Add new screen "Driver Dashboard"
  2. Add role-based access (User→Role = "driver")
  3. Display driver metrics:
    • Today's deliveries completed
    • Total earnings
    • Average delivery time
    • Current online/offline status
  4. Add toggle for availability:
    • Update User→Is Active property
    • Show available delivery requests when active

Step 25: Create Available Deliveries Screen

  1. Add new screen "Available Deliveries"
  2. Add Custom List for ready orders:
    • Filter: Status = "ready" AND Driver = null
    • Sort by: Distance from driver location
  3. For each delivery opportunity, show:
    • Restaurant name and pickup address
    • Delivery address and distance
    • Estimated payout
    • Order total and items count
  4. Add "Accept Delivery" button:
    • Update Order→Driver = Current User
    • Update Order→Status = "picked_up"
    • Navigate to delivery details

Step 26: Build Active Delivery Screen

  1. Create new screen "Active Delivery"
  2. Display current delivery information:
    • Customer and restaurant details
    • Pickup and delivery addresses
    • Order items and special instructions
  3. Add navigation integration:
    • Deep link to Maps navigation for pickup
    • Deep link to delivery address after pickup
  4. 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

  1. Navigate to Settings → Push Notifications
  2. Upload notification certificates
  3. Configure notification triggers:
    • New order for restaurants
    • Order status updates for customers
    • New delivery opportunities for drivers
    • Delivery completion confirmations
  4. 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

  1. Add new collection "Reviews"
  2. Properties:
    • Rating (Number 1-5)
    • Review Text (Text - multiline)
    • Created At (Date & Time)
  3. Add relationships:
    • Reviewer → Users (Many to One)
    • Restaurant → Restaurants (Many to One)
    • Order → Orders (Many to One)
  4. Add review prompt after delivery:
    • Show rating component
    • Optional text review
    • Update restaurant average rating

Step 29: Implement Search and Filters

  1. Add search functionality to home screen:
    • Search restaurants by name
    • Search menu items across restaurants
    • Filter by cuisine type
  2. Add advanced filters:
    • Price range ($ to $$$$)
    • Delivery time
    • Minimum rating
    • Distance radius
  3. Add sorting options:
    • Distance, rating, delivery time
    • Price (low to high, high to low)

Step 30: Add Favorites and Reordering

  1. Create "User Favorites" collection:
    • User → Users (Many to One)
    • Restaurant → Restaurants (Many to One)
    • Menu Item → Menu Items (Many to One)
  2. Add favorite buttons throughout app:
    • Heart icons on restaurants and items
    • Toggle favorite status
  3. Create "Favorites" screen showing saved items
  4. 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:

  1. Use push notifications for status updates
  2. Implement manual check-ins:
    • Driver updates location at key points
    • Customer receives notifications, not live tracking
  3. Integrate external tracking:
    • Use Custom Actions with external APIs
    • Link to external tracking pages

Step 32: Performance Optimization

  1. Optimize database queries:
    • Limit list items to 20-30 maximum
    • Use pagination for long lists
    • Pre-calculate totals and store as properties
  2. Image optimization:
    • Enable auto-compression in settings
    • Use external image URLs when possible
    • Compress uploads before saving
  3. Avoid common performance issues:
    • No nested lists beyond 2 levels
    • Minimize auto-refresh actions
    • Use conditional visibility efficiently

Step 33: Multi-Language Support

  1. Create separate app versions for each language
  2. Duplicate database structure
  3. Translate all static text and labels
  4. Consider using external translation APIs
  5. Account for additional app version costs

Testing and Deployment

Step 34: Create Test Data

  1. Add sample restaurants with complete menus
  2. Create test user accounts for each role
  3. Process sample orders through full workflow
  4. Test payment processing with Stripe test cards
  5. Verify all notification triggers

Step 35: App Store Preparation

  1. Choose a paid plan as needed — see Pricing
  2. Configure store settings — see Publishing
  3. Create privacy policy and terms of service
  4. Prepare app store screenshots and descriptions
  5. Set up customer support system

Step 36: Go-Live Checklist

  1. Switch Stripe to live mode
  2. Update notification certificates for production
  3. Test with real payment methods
  4. Verify location permissions on devices
  5. Monitor performance metrics
  6. 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:

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.

‍

Start Building With An App Template
Build your app fast with one of our pre-made app templates
Try it now
Read This Next

Looking For More?

Ready to Get Started on Adalo?