Skip to content
Book a call

DS Club

A private cashback club, rebuilt as three products: clients, stores and staff

Company
DS Club
Role
Product designer and developer
Timeline
April to June 2026
Site
dsclub.app
  • Product spec
  • Design system
  • Web platform
  • iOS
  • Integrations

Results

partner stores on the live site today; the old CMS held 31
23
base cashback, earned at one store and spent only at the others
2%
days to settle each invoice between stores, flagged when late
30
WhatsApp messages, from the sign-in code to new cashback
5

The project

DS Club is a private cashback club for the clients of an architecture firm in Palmas, Brazil. Clients earn cashback when they buy from partner stores during their build, and spend it at the other partners. I wrote the spec and rebuilt the club from a generic CMS into a product for each role, directing AI agents: an admin console for the firm, a workspace for store managers, a client area and a native iPhone client, built and not yet released.

The firm’s dashboard for the whole network

The firm’s console opens on today’s priorities across the network: balances about to expire, invoices to settle and builds worth a call.

Real product screens from a local copy filled with invented clients, stores and sales.

How I solved it

One answer per pain. The product screens come from a local copy filled with invented clients, stores and sales; the public pages are the live site.

01

Clients see their balance, and where it works

The client area opens on the balance, what expires soon and where it can be used. The spec left one question open, and I settled it as a strict rule: cashback earned at a store can’t be spent at that store. The API enforces it, and each store page explains it in place.
Client wallet on a phone

R$ 1.641,80 available, one balance expiring in the next 30 days, and the partners where it can be used.

The same store page on the web

A partner store page showing what can be used there and the club’s rule

02

A sale in one form, cashback included

Each store manager gets a workspace with only what their store needs. A new sale is one form with a live preview, it registers in one transaction, and money is never stored as a float. An admin who deletes a sale first sees everything it funded, then types the order number to confirm.
  1. console.dsclub.app/admin/vendas/nova
    A new sale: client, store and the live preview

    Pick the client

    The store is the manager’s own. Picking the client brings their wallet, R$ 1.641,80, and the preview on the right follows the form as it fills.

  2. console.dsclub.app/admin/vendas/nova
    Cashback from other stores applied to the sale, with the transfers it will create

    Apply cashback from other stores

    Only balances earned elsewhere can be applied. Two are selected, R$ 862,00, and the preview lists the transfer each one will create.

  3. console.dsclub.app/admin/vendas
    Sale 22 saved, with its totals

    The sale, saved

    Sale #22 at Atelier Pedra Viva: R$ 31.560,00, R$ 323,40 paid with other stores’ cashback and R$ 631,20 generated.

  4. console.dsclub.app/admin/vendas
    Who, where and which balances paid part of the sale

    Who, where and from what

    Client, store, invoice number and who registered it, then each balance used, with the sale that generated it.

  5. console.dsclub.app/admin/vendas
    The cashback generated and the two invoices the sale created

    The invoices it created

    The new cashback, and two invoices due 22/10/2026, one from each store whose cashback was spent here.

03

Builds become leads for the right stores

Each client’s build moves through stages the firm configures. Each store declares the stages it serves, so its manager sees the builds standing at those stages right now, as warm leads.

Etapas da obra

PVEtapas atendidas por Atelier Pedra Viva

Obra

Casa Jardim

Marina Costa

5/10Revestimentos

Prospecção · Atelier Pedra Viva

  • Casa JardimMarina CostaRevestimentos5/10
  • Casa SerenaLarissa MendesRevestimentos5/10
  • Casa BuritiFelipe AntunesPintura e acabamento8/10

At Revestimentos, a stage this store serves, Casa Jardim shows up on its prospecting board.

An explainer built from the demo’s own stages, store and builds. Choose a stage to move the build; the real boards follow.

The real boards

Every build on one board, by stage

The firm sees every build on one board, by stage.

Partners for each decisive stage, on the public site
The live site tells visitors the same idea: partners for each decisive stage of a build.

04

The money settles itself between stores

Cashback earned at one store and spent at another is money one store owes the other. Each of those spends now creates an invoice between the two stores, due in 30 days, and a scheduled job flags the ones that go overdue.

Loja emissora do cashback

Base Forte Materiais

Cliente: Gustavo Pereira

R$ 312,00

Loja da venda

Esquadra Vidros

Saldo de outra loja usado na compra

Fatura #3

Vencida

Base Forte MateriaisDevedora

Esquadra VidrosCredora

Criada com a vendaVencimento 19/09/2026

30 dias para liquidar

19/09/2026R$ 312,00

The due date passes and a scheduled job marks it overdue. The firm can settle it in one click.

An explainer built from invoice #3 of the demo ledger, fictional stores and client included. The real screens follow.

The real screens

The firm’s invoices page, full length
A store’s own invoices

The firm’s view

Open, overdue and settled totals, every pair of stores with money between them, the nearest due dates and the full ledger of 11 invoices. Scroll inside the frame.

01 / 02

05

The club speaks up, on WhatsApp

Sign-in is a six-digit code sent over WhatsApp, with no password to remember. The same channel welcomes people and tells clients when they earn cashback, and scheduled jobs expire old balances and warn before one runs out.
9:41
The live sign-in on a phone

The live sign-in at dsclub.app: a phone number, then a code on WhatsApp.

Sent on WhatsApp

  1. 01Sign-in codeA six-digit code each time someone signs in.
  2. 02WelcomeWhen a client’s access is ready.
  3. 03Access createdFor new store managers and the firm’s staff.
  4. 04Access resetA fresh code when access is reset.
  5. 05New cashbackAfter each sale that generates it.

On a schedule

  1. 01Expire balancesCashback expires a year after the sale.
  2. 02Flag late invoicesInvoices past their due date turn overdue.
  3. 03Warn before expiryClients hear before a balance runs out.
The firm’s cashback radar with balances about to expire
The live sign-in on a computer

The firm’s side of expiry

Available, used and expiring in the next 30 days, the balances closest to expiring, and the balance held by each issuing store.

01 / 02

The look, after one redesign pass

Once the products worked, one pass on the visual system, recorded move by move and applied to the public page and the client area. The admin was left as it was, so the shared parts would not break.
The public page at dsclub.app, top to bottom
  • Playfair Display for headlines, Montserrat for text, Roboto Mono for labels, and one signal red on ink and white.
  • Hard-coded colors moved into tokens, 63 corner values mapped onto two, and glows and fake window chrome removed.
  • The public page lists partners with public store data only. Client, purchase and build data never appear there.

Outcomes & learnings

  • A generic CMS rebuilt as products for the firm, the stores and the clients, with a migration path for the club’s history.
  • Invoices between stores now create themselves from each cross-store spend, a mechanism the old system had in its data but never used.
  • The club’s rule lives in the API and on every store page, so clients see why a balance works in one place and not another.
  • The public site is live at dsclub.app. The native iPhone client runs on the same API: built, not yet released.

What I learned

Writing the spec, the build plan and the UI rules before any code is what let one person direct agents across a whole product.

Next case

Maple Scribe

Voice-powered healthcare documentation app