Case studyFranchise pricing platformWeb
Before each national campaign, a global franchise business prints new price displays, posters and window graphics for every one of its stores across the UK and EU. Head office suggests the prices, but each franchise owner has the final say. We built the system that gathers all of those decisions on time and hands the printers a single sheet they can trust.
01 · The problem
Picture a campaign launch. Head office has new recommended prices for the whole range. Every store sits in a price zone, so the same product can cost a little more in a city centre than in a small town. But each franchise owner runs their own business, so they can keep the suggested price or set their own.
Somebody had to collect those decisions from every store, check them, and get them to the printers before a fixed deadline. Get one wrong and it's printed on in-store signage, in thousands of copies. Doing all of that over email and spreadsheets was slow, stressful and far too easy to get wrong.
Spring scoops
Every price on the proof knows where it came from
One wrong price, copied onto every display in the run
02 · Where we came in
The client knew the problem inside out: thousands of prices gathered by email and spreadsheet, checked by hand, against a print deadline that never moved. What they asked for was a simple way to collect prices from every store.
We looked closer and saw something bigger. Those prices weren't just numbers to collect. They followed rules: price zones, bundles, prices that carry over and prices that should stop counting. So instead of a form, we designed a pricing engine that understands those rules, applies them automatically and shows exactly where every price came from. Every technical part of it is ours: the code, the hosting, every release and the security of the whole system.
The web app and the API, written from scratch.
Hosting, error alerts and every one of 24 releases.
The whole system, reviewed and hardened layer by layer.
New markets, features and upgrades, campaign after campaign.
How prices really moved between head office, stores and print, and where it broke.
Zones, bundles, carry-overs and zone changes, turned into clear logic.
One system that applies every rule automatically and records why.
Live, secure, and still growing with the business.
03 · How it works
Recommended prices are loaded for every product and every price zone before a campaign opens.
Store managers log in, see their suggested prices and change only what they want to. Bundle prices update themselves as they type.
Every manager gets one launch email, and one reminder three days before the deadline if they still haven't submitted. Never twice.
Admins download a master spreadsheet with a price for every store and every product, each cell coloured to show where its price came from.
At the end of every campaign, one sheet holds every price for every store. Hundreds of thousands of numbers could easily become a wall nobody wants to read, so we designed it to be navigated, not just stored. Every price carries a clear status colour, and one click filters the whole sheet down to exactly what you need to see. Nobody has to ring a store to double-check a number. Pick a colour to try it.
| Store · zone | Bundle deal | Signature item | Classic item | Seasonal special | Add-on |
|---|---|---|---|---|---|
| 90001Harbour St · Zone 7 | £6.50 | £4.40 | £5.10 | £3.90 | £3.20 |
| 90002Mill Lane · Zone 7 | £6.40 | £4.10 | £5.10 | £3.80 | £3.20 |
| 90003Station Rd · Zone 12 | £6.40 | £4.30 | £5.30 | £3.90 | £3.30 |
| 90004Market Sq · Zone 4 · EU | €7.60 | €5.20 | €6.10 | €4.60 | €3.80 |
| 90005Park Parade · Zone 9 | £6.60 | £4.50 | £5.20 | £4.00 | £3.30 |
| 90006Kings Row · Zone 19 | £6.70 | £4.60 | £5.40 | £4.10 | £3.40 |
| 90007Canal Wharf · Zone 7 | £6.50 | £4.40 | £5.10 | £3.90 | £3.20 |
| 90008North Gate · Zone 15 · EU | €7.80 | €5.40 | €6.30 | €4.80 | €3.90 |
| 90009Castle Hill · Zone 9 | £6.50 | £4.20 | £5.20 | £4.00 | £3.30 |
| 90010Quay Side · Zone 4 · EU | €7.90 | €5.30 | €6.20 | €4.70 | €3.90 |
04 · The tricky parts
A bundle deal is priced from the products inside it. Change the price of one of them and the bundle follows, unless the owner has already set their own bundle price. Then we leave it alone.
£6.53
Pot of tea 4.40 + 0.6 × scone 1.80 + 0.7 × jam & cream 1.50
£6.53goes to print
If head office moves a store to a new price zone, a price set under the old zone shouldn't print. We record when every zone change happens and compare it with the store's last submission, so the right price wins automatically.
£4.40goes to printThe owner's price was set under the old zone, so the new zone price wins.
Every export pulls together around 326,000 prices. Instead of looking each one up separately, we fetch the latest price for every store and product in one database query. Hundreds of thousands of lookups became one.
05 · Security and data safety
This system holds commercial pricing for a global brand and the accounts of hundreds of franchise owners. They need to know their data is safe, that only the right people can see it, and that everything holds up on deadline day. We treated security as part of the product from day one, and we regularly go back through the whole live system, layer by layer, from the front door to the database.
We don't rely on a login token alone. Each request re-checks the person's role and status, so a blocked user is out on their very next click, not a week later.
Every query is limited to the manager who's asking. Ask for someone else's store and you get the same answer as for one that doesn't exist.
Every market runs on its own deployment with its own database. No stores, prices or users are shared between them.
Attempts are limited per account and blocked before any password check runs. Passwords are hashed with bcrypt, and logs never keep an email address in plain text.
Limits on how big and complex a request can be, a fixed list of what can be searched, passwords and tokens that can never be requested, and errors that give nothing away.
Automated scanners probing for weak spots are banned before they ever reach the application.
Bulk CSV uploads are validated before they reach the server, and the help pages' rich text is cleaned before anyone sees it.
Unexpected errors send an instant alert to our team, with a cap so a sudden burst can't drown out what matters.
Every screen, store and price in this case study is synthetic. Real data never leaves the system.
06 · Growing together
Launch day was the start, not the finish. The client has come back again and again: a new EU market, new price zones, automatic campaign emails, smarter suggested prices and a long wishlist. We've delivered all of it across 24 releases, moved every major framework forward without a rewrite, and kept the system running through every campaign.
When the brand took the platform into a new EU market, we didn't build it all again. The same code runs once per market, each with its own database, and simple switches turn features on or off for each one: no price zones, a different print kit, a store setup wizard or a fully translated interface. Adding the next market means a new deployment and its settings, not a rebuild.
One small touch we're fond of: if we release an update while a store manager has the page open, they're asked to refresh, so nobody submits prices from an out-of-date screen.
MARKET_SWITCHES = {priceZones: true,storeSetupWizard: false,printKit: "price displays",translatedUi: false,}Campaign 14 · Spring range
Confirm your prices
Main deployment · UK & EU · price zones on
Every store's prices collected before the print deadline, without chasing emails and spreadsheets.
A single, colour-coded sheet they can trust.
One reminder only if they haven't replied yet, and bundle prices that update themselves.
New markets join the same system, with their own language and print materials.
Regular upgrades and security reviews keep it safe and up to date.
One small touch we're fond of: if we release an update while a store manager has the page open, they're asked to refresh, so nobody submits prices from an out-of-date screen.
Let's talk
Whether you run a chain of shops, cafés or salons, a franchise or a dealer network, we'd love to hear what you're working on.
Sound familiar?
The client's name, branding and industry are withheld under NDA. Products, prices and stores shown are illustrative.