GazianaThe operating platform for a street water retail network
Gaziana runs the network that sells Gazian Water from mobile carts: headquarters, the operators who run the carts, the host partners who provide the sites and the people applying to join. We designed every screen and built the platform as one installable web app with a view for each role.

- Client
- Private client
- Sector
- Retail operations
- Year
- 2026
- Platforms
- Web platform, Installable web app
- Services
- Product and UX design, Web development
Gazian Water is a bottled water brand, and Gaziana is the platform behind the street network that sells it. It recruits and checks operators, supplies their stock, records every sale, shows host partners their share and gives headquarters one place to run all of it. Manchester is the pilot city.
Built for
- Headquarters staff, who approve people, sites and stock and set the commercial rules.
- Cart operators, who sell on the street from a phone, often with a weak signal.
- Host partners, who provide selling sites and see what each one earns them.
- Applicants, who apply from a public page and complete their checks and training on a phone.
The problem
A street retail network runs on many small facts that all have to agree: who is allowed to sell, where, with which stock, at what price, and who is owed what at the end of the month. Those facts pass between people who are rarely in the same room.
The commercial terms belong to the client and change over time. Prices, margins, deposits and the host partner share had to be values headquarters sets from a screen, with a record of every change, because a new bottle price should never need a developer.
Operators sell outdoors, often one-handed, where the signal comes and goes. A sale lost because the phone was offline is money nobody can account for.
Money and stock need a record that holds up later. Every change has to name the person who made it, and nothing financial can be quietly edited afterwards.
Goals
- 01Give each role its own view inside one installable app.
- 02Let operators record a sale in a few taps, with or without signal.
- 03Keep every commercial number in a registry headquarters controls, never in code.
- 04Track stock by owner, batch and place, so a recall reaches the right carts.
- 05Record every change with its author, in a trail that cannot be edited.
- 06Answer the pilot's six questions from recorded data.
Our role
We wrote the blueprint with the client, designed every screen and built the platform end to end.
What we delivered
- Discovery and a written blueprint, reviewed and approved by the client
- 46 screens designed in Figma across five surfaces
- Interface tokens built on the Gazian Water brand colours
- One TypeScript application: Next.js front end and server domain
- PostgreSQL schema, migrations and an append-only audit trail
- Offline sale recording on the operator's phone
- Rules registry for every commercial value
- Stock ledger, wholesale orders and a payment step behind one interface
- Reports and exports for the pilot's six questions
- Staging server, scheduled jobs and daily backups with a tested restore
How we worked
- 01
Write the blueprint first
The client's brief and several rounds of questions became a written blueprint. The client marked up his own changes to it and approved it before the build started.
- 02
The client owns it from the first day
The code repository and the platform's accounts belong to the client's company from the start of the project.
- 03
Design every screen before building it
All 46 screens, from the public page to the headquarters desk, were designed in Figma first, on the Gazian Water brand colours.
- 04
Build in weeks, on a staging server
The build follows an eight-week schedule. Each week ships to a staging server with a written report and something the client can try himself.
- 05
Check against the schedule itself
After week six, every requirement in the schedule was checked again against the running product, and everything that check found was built.
Screens and features
Headquarters runs the network from one screen
Reports answer the pilot's six questions. Approvals wait in order of longest wait, and each person's steps are tracked.

Prices set from a screen, every change on the record
Commercial values live in a rules registry, and the audit timeline keeps every action. Its entries cannot be edited or removed.

Operators sell from their phones, with or without signal
A sale takes a few taps. Offline sales are saved on the phone and sent when it reconnects. Host partners see their own sites.

Stock tracked by owner and batch
Every unit's holding, who owns it, and which batch it came from.

A public page for new cart operators
People apply from here, then follow their identity check and training on their phone. The cart image is a concept illustration.

Sales that survive no signal
A sale is saved on the phone with a key made at the tap. The phone keeps it until headquarters sends that key back, and each person on a shared phone has a list of their own.
Commercial numbers in a registry
Prices, VAT, margins, deposits and allocations are parameters. Headquarters previews a change before saving it, a price can be set for one product or for all of them, and every change appears on the audit timeline.
One approvals queue, oldest first
Identity checks, operator approvals, site compliance, stock approvals and exceptions share one queue, ordered by how long each item has waited.
Six steps from applicant to operator
Application, identity check, training, approval, a matched site and a signed agreement. The people register shows where each person is.
Stock by owner and batch
Stock owned by Gazian, on consignment, owned by operators or held at supply points is kept apart, sales draw from the oldest batch first, and a recalled batch appears on the operator's phone.
Orders keep their prices
A wholesale order stores its prices and VAT as they stood when it was placed, and every step of the order is recorded with the person who took it.
Corrections are new records
A recorded sale is never edited. A correction is a new record that points at the original, and a sale can be corrected once.
Technical choices
What the product is built with, and why.
- One Next.js 16 application
- The public, applicant, operator, host partner and headquarters views are route groups in one deployable over one PostgreSQL database. The operator view installs on a phone and opens without the browser's address bar.
- An audit trail the database enforces
- The audit table is split by month and refuses updates and deletes. Every other table refuses a write that does not name its author, and in the code a write outside an audited transaction does not compile.
- Rules read through one module
- Every commercial value is read through the rules module and cached in Redis. The write that changes a value also clears its cache, so a new price is never hidden behind an old one.
- A stock ledger with no balance table
- Stock at a place is the sum of the movements into and out of it, per batch. A separate balance table would be a second record of the same fact, and the two would drift apart.
- Import boundaries enforced by lint
- A small kernel owns audit, rules, access, ledger and stock, and each feature sits in its own slice. ESLint stops one reaching into another, and a script writes deliberate violations to prove every rule still fires.
- Permissions held as data
- Roles and their scopes live in one table that both the code and a negative test read, so the test covers every role against every resource. Our own developer account is refused prices, payments, agreements and operator records.
Running a network of people, stock and money?
Operations platforms with changing rules and records that have to hold are work we know well. Tell us how your network runs.