Your public website
The zip ships a complete public website in source/marketing-site/. It is
the page a rider or a driver finds when they search for you: a fare
estimate box, your services, where you operate, what driving pays, how a
fleet partners with you, and the download links.
You never edit its code to change what it says. Every word, every sample number and the accent colour are edited in Admin → Website, and the site reads them on every request.
What you can change
Admin → Website lists the page's sections in the order they appear:
| Section | What it controls |
|---|---|
| Search & sharing | The browser-tab title and the description search engines show |
| Colour | The accent. Leave it on your brand colour unless you know why not |
| Headline | The first sentence a visitor reads, and which word is highlighted |
| Booking box | The fare-estimate box and the service tabs on it |
| Trust strip | Four short claims under the headline |
| Fair fare | How pricing works — upfront fares, and fare bidding if your market allows it |
| Services | One card per service. Switch off what you do not offer |
| Coverage | The "is my area covered?" check — type your areas, one per line |
| Drivers | The driver pitch and the earnings calculator |
| Fleet partners | The fleet-owner pitch and a sample dashboard |
| Business | Corporate rides. Switch off until you offer them |
| Safety | Your safety features |
| FAQ heading | Only the heading — the questions come from FAQ in the sidebar |
| Download | Store links and the three app cards |
| Footer | Footer text, cities and link columns |
Each section has Save and Reset to default. A section is either the shipped default or entirely yours: sections you never open keep improving with each release, and Reset takes one section back without touching the others.
The numbers on the page are samples
The fare-estimate box, the earnings calculator and the fleet dashboard show sample figures so the page works on day one. Every one of them is editable in the matching section, and the page says "sample" where it matters. Replace them with figures that are true for your city — a driver may decide to sign up on the strength of the calculator.
Anything in square brackets — [CITY], [Area 1], [XX] — is a
placeholder for a fact only you know. The site is not finished until none
are left. Search the admin for [ to find them.
The live preview
The right-hand pane in Admin → Website shows your site in preview mode and reloads after every save, so an edit is seen rather than assumed. Visitors see the same change within a minute.
For the pane to appear, the admin must know the site's address. Set it in the admin's environment before building:
NEXT_PUBLIC_SITE_URL=https://www.your-domain.com
(In docker-compose.prod.yml this is the NEXT_PUBLIC_SITE_URL build
argument on the admin service.) Without it the pane explains what to set
and everything else still works.
Deploying the site
source/marketing-site/ is a Next.js app. It needs one setting, the
address of your API, and it is read at build time:
NEXT_PUBLIC_API_BASE=https://api.your-domain.com/api
The install kit's docker-compose.prod.yml already includes it as the
sitetemplate service (build argument SITE_TEMPLATE_API_BASE). Point a
hostname at it, put TLS in front, and set that hostname as
NEXT_PUBLIC_SITE_URL in the admin so the preview works.
What the site does not do
- It never shows a real fare. The estimate box computes from your sample rates so it answers instantly and works with the API down. Your apps quote real fares.
- It never sends a booking. "See fare" is a demonstration; the download section is the call to action.
- It never renders HTML you type. Angle brackets are refused on save, so nothing typed in the admin can become markup on your homepage.