← All work

Case study / Purpl Discounts

Everything Purpl's members and staff use, from the app to the admin

This is the story of the platform we build and run for Purpl, a discounts service for disabled people: the website, two apps, a browser extension, a staff admin and the AI tools that sit on top.

Client
Purpl Discounts
Sector
Consumer membership
Duration
Ongoing since January 2025
What we did
Product, design, web and app build, browser extension, admin, AI tools
Purpl project screenshot

Purpl gives disabled people and their families in the UK exclusive discounts from more than 450 brands. Members verify once, then save on the website, in the app, in store with a membership card, or through a browser extension that spots offers while they shop. There are now over 100,000 of them.

We've built and run almost all of it since January 2025: the member website, the iOS and Android app, the Chrome extension, the staff admin, a second app called Purpl Tracker, and a set of AI tools that let a small team do the work of a much bigger one. Purpl's own developer looks after the API behind verification. Everything members and staff actually see and touch is ours.

The challenge

Being disabled is expensive. Scope estimates it costs a household over £1,000 a month extra, and Purpl exists to claw some of that back. The whole thing hinges on verification: checking something sensitive and personal without making eligible people jump through humiliating hoops. Too strict and you exclude the people it's for. Too loose and the brands pull their discounts.

Then members expect to use it wherever they spend money: on their phone, at the till, on a retailer's website. Each of those is a separate product with its own release process, and a fair number of members use a screen reader, bigger text or voice control on all of them.

Behind that sits a lot of back-office work. Brands and offers to keep current, documents to check, subscriptions and refunds, card disputes, support tickets, partner invoices. The team doing it is small, and for a long time every awkward question ended up with us.

What we did

The website

The website is where most members join, and joining is the hard part. We built an eligibility checker, SMS sign-up and a verification flow that takes a PIP or DLA award letter, a Blue Badge, an Access Card or a DID card. Most members are verified automatically. When a document needs a person, the member is told plainly that Purpl will take it from here, and staff pick it up in the admin.

Partners can skip the document step altogether. Customers of Fish Insurance, for example, verify with their policy number. Charities, employers and creators each get their own way in.

Once they're in, members browse offers by brand, category and curated collection, search across the lot, save favourites and see how much they've saved. Billing lives on the site rather than in Stripe's portal, so members can change plan, cancel or get a refund without leaving Purpl. There's an inbox that pulls together Purpl's emails, support replies and membership messages, and a help centre built on Zendesk.

The app

The app came next, in summer 2025, and reached the App Store and Google Play that October. It's built in Expo, so one codebase covers iPhone, iPad and Android, and fixes can go out without waiting for a store review.

It does what the website does, and one thing the website can't: a membership card with a barcode and the member's photo, for showing at the till. Members sign in with Apple, Google or a text message. Push notifications keep the unread count honest. In 2026 we swapped in-app purchase for Stripe, so members pay the same way on every device and Purpl keeps the margin the app stores used to take.

Accessibility is written into the project's rules rather than left to good intentions: 44-point tap targets, text that scales, and modals a VoiceOver user can always get out of.

The browser extension

The problem with a discounts service is remembering to use it. The Chrome extension remembers for you. When a member lands on the website of one of Purpl's 450+ brands, a small pill appears in the corner. Tap it and the offer opens in a panel, with the code ready to copy.

Brand detection happens in the browser. The extension doesn't keep a history of where members shop. It also steps aside when another affiliate has already referred the shopper, so Purpl doesn't take a commission someone else earned and the brands keep trusting it.

The admin, rebuilt from scratch

Staff used to manage Purpl through screens bolted onto the backend. In May 2026 we started again with a proper admin, and it's now 108 screens across about fifteen areas.

From it, staff run the catalogue of brands, offers, categories and code pools, and get warned when an offer is about to expire or a batch of codes is running low. They edit the website's pages, menus, banners and collections without asking us. They review verification documents in a built-in viewer, look after members and referrals, pay creators, invoice brands, and watch subscriptions and revenue come in. There's even a live renewals wall for the office screen.

That admin is also where most of the AI work lives.

Purpl Tracker

Purpl Tracker is a separate app for members claiming Personal Independence Payment. They log symptoms, activities and medication day by day, and the app turns it into a PDF evidence report in a format the DWP will recognise, for a claim, a review or an appeal. Everything stays on the phone unless the member chooses to share it, and the app can be locked. We tested it with members in July 2026 before it went out.

The AI tools on top

None of the AI would be worth much if the data underneath it was a mess, which is why it came after the platform rather than instead of it.

Disputes. When a member disputes their annual renewal with their bank, Purpl has a few days to send evidence, and usually only one chance. Doing that properly by hand took time nobody had. In July 2026 we built a tool in the admin that assembles the case from what Purpl already knows, the terms the member agreed to and the refund policy, and produces a PDF evidence pack. An AI model writes the covering letter from those facts only. At first a person checked every draft. Now a daily job submits the cases that are complete and holds back anything missing a piece of evidence.

Pluto. Most of what staff asked us didn't really need us. It needed someone who could look at Stripe, Klaviyo and Purpl's database at once. Pluto is an assistant in Purpl's Slack that does exactly that, and it can read the code to answer "did we ship that?". It's read-only by design: it can explain why a member can't delete their account and point to the button that fixes it, but it can't press the button. Member details only go back to the person who asked, in the thread they asked in.

A CRM that fits. Purpl managed its brand partners in HubSpot, which was fine for contacts and useless for everything specific to Purpl. We replaced it with a partnerships CRM inside the admin: brand accounts, pipeline boards, an inbox that captures brand emails, and commission, billing and codes next to the relationship instead of in a spreadsheet. Purpl's backend developer built the data side while we built the screens, and the bulk of it came together in about a week in October 2026.

Ask Georgina. Member support questions circle the same ground, and the answers were already in the help centre. Ask Georgina, on the website and in the app, answers only from that help centre, links the articles it actually read, and can check a member's account status. When someone is upset, asks for a person or has an account-specific problem, it answers first and then offers a support ticket with the conversation attached. Answers are short, in plain British English, and can be read aloud, and there's a voice mode for people who'd rather talk than type. Before it went live we replayed twenty real, already-solved tickets through it: twelve good answers, seven OK, one bad, and after the changes it missed none of the cases where it should have handed over.

Ask Georgina, Purpl's member support assistant, answering a question in the chat window

The results

One platform, five products. A website, an iOS and Android app, a Chrome extension, a 108-screen staff admin and Purpl Tracker, all in one codebase and all shipped by us.

Over 100,000 members verified and saving across more than 450 brands.

Disputes won went from 25% to 73% once every case was built from the evidence Purpl already holds.

HubSpot replaced by a partnerships CRM Purpl owns outright, built around its brands, offers and codes.

Staff run the business themselves. Offers, pages, verification reviews, refunds and partner invoices all happen in the admin, and Pluto answers the questions that used to come to us.

More than 3,700 commits since January 2025.

Under the hood

It's a Turborepo monorepo. The website and staff admin are Next.js apps, with an Expo (React Native) app, Purpl Tracker and a Manifest V3 Chrome extension alongside, sharing a component library, data layer and types. They talk to Purpl's Go API for verification, and to Supabase, Stripe, Klaviyo, Zendesk, Algolia and a headless WordPress for everything else. Pull requests get linting, type checks, unit tests and an end-to-end suite that runs against in-memory fakes of every outside service, so nothing real is touched. The dispute tool uses the Stripe API and OpenAI. Pluto is an OpenClaw agent connected over MCP to Stripe, Klaviyo and Purpl's data. Ask Georgina runs on the Vercel AI SDK with Zendesk as its source of truth.

Next step

Got a project like this?

If yours rhymes with this one, tell us about it on a 20-minute call. If it's a fit, the next step is Shape: a plan before a price.