๐Ÿ›’ Bringo

Getting Started

How It Works & Architecture

Understanding the shape of the system makes installation and configuration far easier. At a high level there is one backend and four clients that all communicate with it over a REST API.

The big picture

            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚           Laravel backend (your server)        โ”‚
            โ”‚   Admin panel ยท Storefront ยท REST API ยท Jobs   โ”‚
            โ”‚                  MySQL database                โ”‚
            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                 โ–ฒ           โ–ฒ            โ–ฒ            โ–ฒ
                 โ”‚ HTTPS     โ”‚ HTTPS      โ”‚ HTTPS      โ”‚ HTTPS
        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”
        โ”‚  Website   โ”‚ โ”‚ Customer  โ”‚ โ”‚ Delivery โ”‚ โ”‚  Seller   โ”‚
        โ”‚ (browser)  โ”‚ โ”‚   app     โ”‚ โ”‚   app    โ”‚ โ”‚   app     โ”‚
        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  • The backend hosts the public storefront, the admin panel, the JSON API the apps call, and the background jobs that send notifications and process payouts.
  • Each mobile app is a thin client: it has no database of its own. It calls the API, shows the results, and caches a little data locally.
  • Every app is pointed at your backend by setting one API base URL (see Configuration Model).

The API

The apps talk to versioned endpoints under /api, each with its own prefix:

Customer app
/api/v1_6/customer/โ€ฆ
Delivery app
/api/v1/partner/โ€ฆ
Seller app
/api/v2/seller/โ€ฆ
Website
Server-rendered via Inertia.js (no separate API prefix)

On first launch each app calls a settings endpoint (e.g. fetchCustomerSettings) that returns your branding, currency, enabled login methods, modules and more โ€” so most of what the app shows is controlled from your admin panel, not baked into the app.

A typical order, end to end

  1. Browse & cart The customer opens the app, picks a store/module, adds products to the cart.
  2. Checkout They choose an address and a payment method. Online payments run through a gateway (e.g. Razorpay); cash-on-delivery is also supported.
  3. Order created The backend records the order and notifies the seller. A push notification (FCM) is sent to the Seller app.
  4. Seller accepts & packs The seller confirms the order in the Seller app (or web panel) and marks it ready.
  5. Delivery assigned A delivery partner receives an offer in the Delivery app, accepts, and navigates to pickup.
  6. Live tracking The customer watches the rider move on a map in real time.
  7. Delivered & settled The partner marks delivery complete, cash is recorded if applicable, and wallet/commission/cashback are updated by background jobs.
โš™๏ธ
Steps that "happen automatically" โ€” push notifications, cashback, loyalty points, subscriptions, payouts โ€” are run by the scheduler & queue worker. If those aren't set up, orders still work but those automations won't fire. See Cron & Queue Workers.

Where settings live

Almost all configuration is stored in the database and edited from the admin panel โ€” payment keys, SMS gateways, branding, currency, taxes, languages, delivery zones, module toggles, and the values the apps read at startup. You rarely edit source code. The few exceptions (each app's API URL, Firebase config and Maps key) are explained in the Configuration Model.

Admin dashboard
๐Ÿ‘‰
Next: Configuration Model โ€” exactly what you set in the admin panel vs. in each app's source.