Oro GymgymBuenos Aires

232members in the app, and every payment recorded under the name of whoever took it

The whole gym, on a phone behind the counter.

Google 4.5, 29 reviewsWhere it is

How it was before

I met Nacho at the gym I go to, where he supplies the food counter. I asked how he ran his own place and whether he used any system. Oro Gym has been open for sixteen years in Buenos Aires, and Nacho takes the payments himself at the front desk.

Payments went into a notebook and collections into a separate little book. The member list was handwritten and had no photos, so he often did not know who owed him: he had the person’s details but not their face. Due dates were a daily mess.

What I built

An app installed on the phone: a file for each member with plan and due date, the list of who is overdue ordered by debt, the day’s cash register and the month’s numbers. It holds 232 members and 401 recorded payments. In a later support review I closed 34 points where code could be injected and fixed a backup that had been failing silently for six days. He then paid for seven more changes, shipped with 54 automated tests.

A single-file progressive web app, no build step · Firebase with offline persistence · Google sign-in · Sentry · CSP and HSTS on Vercel

The interface is in Spanish today. Which language it ships in is set per build.

The members, with plan and due date. The names and amounts in all three screenshots are made up.
The members, with plan and due date. The names and amounts in all three screenshots are made up.

The decisions, and why

  1. It is a phone app, not a desktop panel.

    Nacho does not use a computer and there is not one at the gym. He takes payments standing behind the counter while people walk in, and asked for it that way from the start: it had to work on the phone and be fast.

  2. WhatsApp opens from the member’s file with the message already written.

    Collecting a due payment means sending that message. If sending it takes leaving the app, finding the contact and typing, it does not get sent.

  3. The day’s cash closes in the same app where payments are taken.

    A closing that lives somewhere else is the one nobody does at nine at night.

  4. In September I added the members who joined and the ones who left, month by month.

    It was the last thing he asked for, and he wanted one thing out of it: to know whether the gym is growing. The member total does not tell him that; how many came in and how many left does.

Who is overdue, who is due in three days, who is paid up. The WhatsApp button sits next to each name.
Who is overdue, who is due in three days, who is paid up. The WhatsApp button sits next to each name.

Before and after

BeforeAfter
A handwritten list, no photosA member file with photo, plan and due date
Collections in a little bookOverdue, due soon and paid up, on one screen
No end-of-day closingThe day’s cash, split by cash and transfer
One login for everythingTwo profiles with permissions by role
No way to see growthMembers in and out, month by month
The day’s cash, split into cash and bank transfer.
The day’s cash, split into cash and bank transfer.

I used to write everything in a notebook and the collections in a little book. Now I open the app in the morning and see exactly who paid, who owes and who to contact. A huge change.

NachoOwner of Oro Gym · translated from Spanish

The system, running

No sound, with subtitles and made-up data.

Where it is

Oro Gym

Av. Teodoro Sánchez de Bustamante 1091, Buenos Aires

4.5 on Google · 29 reviews

See the listing on Google Maps

Email me about a system like this, or about a role

I quote a custom system within 24 hours. If you are hiring, my resume is one page.

WhatsApp: +54 9 11 2469-3394

Next case: Daily-installment lenderBack to all five