
A club founded in 1973, digitised from the inside.
Swimming, fitness, ice and over fifty years of history in north Rome. Athlon is where the Ready2Digital method was born: every tool was first a problem lived at the front desk, then software.
The challenge
Paper sign-ups, requests scattered across reception, phone and WhatsApp, a back office that talked to nothing else. Every new channel added a piece of information nobody pieced together: nobody could say for sure who was a lead and who was already a customer.
The approach
The back office stayed. We copy it, in sync, into our own database and build everything else on top: website, CRM, app and automations read the same source and say the same thing about the same person. We write to the back office only when it truly matters: booking, paying, signing up.
The ecosystem
Website, CRM and app: one system.
Three programs for three kinds of people — those looking for the club, those who work there, members — but one database. Data enters on one side and shows on the others at once; the back office stays, connected.
01A request from the website lands in the CRM, de-duplicated and assigned.
02The CRM sees it as an opportunity, with the person’s history.
03A booking from the app goes straight to the back office.
04Contracts, payments and check-ins from the back office are copied into the database.
05An alert from the CRM reaches the app as a notification.
Live
Real screens.
The website, the app and the tools as customers and staff use them today. Tap a screen to enlarge it.
Every channel is a dot.
The CRM joins them into one person.
Behind the login
Athlon Club 4.0
What you only see from inside — the CRM, the member app — rebuilt and animated with anonymised sample data.
Memberships and revenue, live
Active by type, new and renewed against lapsed, revenue month by month and the payments arriving while you watch. All from the same database the app and website use.
Monthly revenue (€)
Active memberships by type
- Open49%
- Fitness22%
- Swimming17%
- Junior12%
Latest payments
- GGiulia R.Renewal · Open annual€590.00
The AI agent books the class
Inside the app the member writes as they would to a person. The agent understands, suggests the right slot and books it: no menus to learn.
I’d like to do aqua gym tomorrow evening
The AI agent adds the card
“I need to change my card”: the agent takes you to the right place, the card is saved with the back office and the next fees go through it. No calls to the desk.
I need to change the card for my fees
The AI agent prepares the call
Before the operator calls, the agent reads the record and sets the table: what the person did, why call them, which sentence to open with. The call starts informed.
- TodayWebsite visit“Adult swimming” page, twice
- YesterdayWhatsApp“Do you have evening classes?” · answered by the agent
- 3 dGuest Pass expired7 days · 4 check-ins · 2 swim classes
- 10 dTrial formInterests: swimming, gym floor
AI Prepare the call
Goal
Suggested opening
The management dashboard
Leads, trials, contracts and revenue read from the same database as the app and website. Management looks at one number, and it’s the same one the desk sees.
Leads per week
Funnel
The member app
Book classes, pay, get in with the wallet badge and follow the Athlon Health Score. A web app today, the same codebase for the App Store and Google Play.
Hi Giulia
Athlon Club
Your next class
Aqua gym
Tomorrow · 6:30 pm · Pool 2
Failed payments, solved
When a charge fails, the right email goes out with a link to pay or to change card. The desk only sees what’s left to do.
| Member | Fee | Amount | Status |
|---|---|---|---|
| MM. R. | October fee | €69.00 | Failed |
| LL. B. | October fee | €89.00 | Failed |
| FF. C. | Swim course | €120.00 | Failed |
| AA. G. | October fee | €69.00 | Failed |
| SS. P. | Card expired | €79.00 | Failed |
WhatsApp, with an AI agent
It answers with the website’s information, points to the right form and hands the conversation to the desk when a person is needed. The history stays in the customer record.
The on-site kiosk
Assisted sales on the club’s panel: pick a membership, continue on your phone with a QR code, sign and pay. Staff guide, they don’t type.
Continue on your phone
What we built
- 01Website with an AI assistant: every request lands in the CRM, already de-duplicated
- 02CRM with roles, permissions, time clock, tickets and operator log
- 03iOS and Android member app: bookings, payments, Junior, wallet badge
- 04Athlon Health System with Apple Health and Health Connect
- 05WhatsApp Cloud API with an AI agent and a shared desk inbox
- 06Card and SEPA payments, billing run, failed payments with pay-by-link
- 07On-site kiosk for assisted sales and check-in
- 08Tracked newsletters, push notifications, a daily log for management
Technology
How it’s built
Under the hood.
Three applications, one database. The website, the staff CRM and the member app are separate projects, each with the right technology for its users, but they all read and write the same Postgres on Supabase. The PerfectGym back office is copied in there and kept up to date: pages read from the copy, and the back office is written to only to book, pay or sign up.
The architecture, layer by layer
The pieces, one by one
Astro
The public website
HTML pages generated ahead of time and per-component CSS: they arrive ready, index well and open instantly. JavaScript only where it’s really needed, like forms and the assistant.
Next.js + React
The staff CRM
Pages are assembled on the server with the data already in; React handles the interactive parts. A middleware checks session and permissions on every request, and roles decide which sections show. Hosted on Vercel.
Expo + React Native
The member app
One TypeScript codebase for iOS, Android and web. With Expo Router every file is a screen and a deep link. Native modules for HealthKit, Health Connect, notifications, camera and files; builds and updates with EAS.
Supabase · Postgres
The core
Database, authentication, files and row-level access rules. The schema lives in 483 versioned migrations: every change is code, reviewable and repeatable. Key reads are SQL functions: CRM and app call the same one, so they say the same thing.
Edge Functions
Logic and connections
77 TypeScript functions running next to the database. The app talks to them, never straight to the back office: booking, paying, syncing, receiving payment and WhatsApp webhooks.
The back-office copy
Fast and independent
PerfectGym webhooks and scheduled syncs copy contracts, payments, bookings and check-ins. A read takes milliseconds and works even when the back office is slow or down.
Automation
What happens on its own
23 jobs in the database and 11 on Vercel: booking reminders every 5 minutes, expiring medical-certificate alerts, emails after the first visits, member status, refreshed dashboards, failed payments.
AI
Assistant and WhatsApp
The app assistant and the WhatsApp agent use a Claude model with the club’s information as context. They don’t make things up: they point to the right form or hand over to a person.
In numbers
