DELIVERY

DELIVERY · JEDDAH, WESTERN REGION · 24 AUGUST 2026
The public showroom, the tool the floor uses, the event system and the dashboard everything reports into, built over one Supabase project, so that a car reserved on the website is gone from the salesperson's list in the same second.

Section 01
This document describes a system that is finished and running. Everything in it was checked against the repository or the live database on the day it was written, not recalled. Where a number could only come from production, it says so where it stands.
PREPARED BY
Ahmed Ali
Head of Digital Product and Growth
Emotion Group
PRESENTED TO
Motion Motors
Management, Western Region
Soueast, Jeddah
PERIOD
5 Jun → 24 Aug

WHERE IT RUNS
Not a product for sale to other dealerships. One dealership, which is what removes multi-tenancy, billing, plan tiers and most of what would otherwise have taken the year.
Section 03
Three codebases, four hosts, one Postgres. The website is deployed a second time with a single environment variable set and that second deployment is the showroom tool, the floor and the shopfront cannot drift apart, because they are the same build.
Hover any box to isolate what it touches
Section 04
Arabic and English, both first-class. Not a brochure, a shop that sells a specific car, at the price the sheet says today, to somebody who signed in with a phone number and no password.

The same codebase as the website, built a second time with one environment variable set and locked to four screens. Every other path on that host redirects here and it refuses search engines outright.

Built first, before the rest of it existed, for a stand in a mall with a queue in front of it. Folded into the monorepo afterwards rather than left to drift.

11 of its 16 screens are behind a staff sign-in, this is as far as a stranger gets and the shot is honest about that.
The largest of the four and the only one nobody outside the building can see. Twenty-five permissions across eight roles decide which of its thirty screens a given person gets.

All 30 of its screens are behind a staff sign-in; this one was supplied for the handover, this is as far as a stranger gets and the shot is honest about that.




Section 05
This is not a picture of the product. It is the product, the same turntable the showroom tablet plays, pulled from the same storage, at the same frame rate. Drag it.
Mountain Green · 72 frames held in this page · 0% · drag it
Stills, not a 3D model
The factory ships them per paint colour, they look exactly like the brochure and a phone on the floor can play them without a WebGL context.
Two resolutions
The small tier loads first so the car can be turned almost immediately; the large one replaces it in place, sharing a frame index so nothing jumps.
75 MB per colour
Which is why they are served from storage rather than committed. Adding a car is not a git commit measured in gigabytes.
Section 06
Seventy-two pages is a number that proves nothing on its own, thirty screens could be thirty variations of one. Here they are, grouped by the question each one answers.
71 routes · 42 of them exist in Arabic and English · 41 behind a sign-in
motionmotors.me
THE SITE
CARS
THE SHOP
CAMERA
showroom.motionmotors.me
THE FLOOR
motion-motors.vercel.app
THE STAND
BACK OFFICE
11 of its 16 screens are behind a staff sign-in.
live.motionmotors.me
NOW
CONVERSATION
STOCK
MONEY
DEMAND
TRAFFIC
SYSTEM
All 30 of its screens are behind a staff sign-in; this one was supplied for the handover.
Section 07
The reason the four applications share one database rather than talking to each other.
The campaign, the landing page and the device are recorded against the browser before anything is asked of them. No form, no name, just the fact of the arrival, waiting to be joined to a person later.
record_attribution()visitor_attribution, written from the browser on first paint
The assistant answers from the price sheet. If they want a person, the conversation rings in the dashboard with everything already known about them sitting beside it.
chat_open()Gemini 2.5 Flash, grounded on the live price list and forbidden from quoting a figure the site does not also quote
An agent sends a card into the conversation: that VIN, that colour, today's price and a link that reserves that exact car. Not a model. A car.
chat_send_car()A message row whose payload is a vehicle_units id
From the website, or across the desk in the showroom. The same function, two doors, one set of rules. The car leaves the floor in the same second, there is no window in which two people can both be sold it.
reserve_unit()The storefront and the showroom tool both end at one function. The floor's key opens the same lock.
Balance, purchase order, handover. Each stage moves the car and the money together, or neither. A hold nobody completes expires on its own and the car goes back on the floor without anybody remembering to do it.
expire_stale_store_orders()advance_store_order() and expire-store-holds sweeping every five minutes
The sale is already in stock, in the customer record, in the salesperson's figures and in Sunday's digest, because it was one row all along. Nobody reconciles anything.
One write, six readers. This is the whole argument for one database.
Section 08
Forty-five tables, every one with row-level security enabled. Who may read what is decided in the database, not in the application that asks, so a stale phone in a pocket cannot break a rule that a screen was enforcing.
The cars themselves and what they are worth today.
Every path a riyal takes and the timer on each one.
Everybody who showed interest, however they arrived.
The chat console, which is most of the surface area added last.
Who may do what and how they proved who they are.
The parts that watch the other parts.
Section 09
25 permissions across 8 roles. Flat, not hierarchical, a person holds several roles and their permissions are the union, because “is a manager above a finance officer” has no answer and “who may approve finance” has exactly one.
Hover a row to read what that person can do, or a square for the exact permission. The squares with a dark ring are the ten marked sensitive, they move money or change who can see what and the audit log never omits them.


BUILT WITH
© 2026 Motion Motors · Soueast Western Region