Case study · RIA Aqua Clube Tavira
A whole swimming club on one platform.
Office, coaches, treasury and families work in the same system — from the enrolment request on the website to the receipt issued from the bank statement. And an AI assistant on WhatsApp answers the team with the app’s own data.
The screenshots use invented data — no real member, family or amount: names, contacts, documents and amounts are made up.
- Client
- RIA Aqua Clube Tavira, a federated swimming club
- Used by
- Board, office, coaches and families
- In production
- 2026/27 season, every day
- Stack
- React · TypeScript · Supabase · Astro
-
≈ 480
active members
-
≈ 100
active classes — pool, schools and municipality
-
32 mil
tax documents synced with CloudInvoice
-
63
server functions and 21 scheduled jobs
-
3 300+
automated tests
The club’s real figures in October 2026.
Context
Where it started
RIA runs a swim school from babies to adults, a federated competition team, water fitness, Physical Education in 26 classes of the local schools and classes given on behalf of the municipality. All of it lived in a shared spreadsheet, on paper and in messages.
Invoices were issued by hand in CloudInvoice, the bank statement was checked line by line, municipal forms were filled in one by one and families phoned to ask whether a class had a place. Every new season began with weeks of paperwork.
We built one platform, in phases, with the club using it from the first module. Every club rule — prices, discounts, evaluations, deadlines — is written once and applied everywhere.
Office
Enrolments that arrive ready to process.
The website form lands straight on the pending-enrolments board. Each request shows its stage — details, trial class or evaluation, class and payment, start date — and the next step.
- Online enrolment in up to 3 classes, automatic waiting list for full classes and a monthly fee estimate
- Front-desk enrolment with the same rules as the website
- Households with an automatic, non-cumulative discount
- Municipal FORM179 and Federation forms pre-filled as PDF
- Automatic weekly statements: sports insurance (Excel for the Federation) and class changes (PDF for the pool reception)
- Class changes with the effective date chosen by whoever makes them
Coaching
Built for the poolside.
Coaches use the app on their phone, standing up with wet hands: large buttons, high contrast and as few taps as possible. They see only what they need — contacts and the health questionnaire, never tax numbers or addresses.
- Attendance sheet with ✓ and ✗: everyone starts present and absences reported by the family are already marked
- Digital evaluation sheets with the club’s protocols and the 80 % rule — the result appears while you evaluate
- Level changes: the family picks the new class in the portal and the office approves it from the next month
- Training planner with a configurator: sets, intensity zones, weighted volume and lesson models
- Training library with 250 activity cards and 45 lesson models
- Attendance control: every scheduled class has a sheet or a reason, with daily reminders and each coach’s service sheet
- Physical Education in schools, with its own panel for the homeroom teachers
Billing and treasury
From price list to bank statement, no spreadsheets.
Each member’s monthly fee is computed from their classes and the price list in force. Invoicing is certified (CloudInvoice, reported to the Portuguese tax authority) and every transfer on the statement finds the invoice it pays.
- Monthly batch prepared as a draft on the 1st, reviewed line by line and issued only once approved
- Invoices, receipts and credit notes issued through the CloudInvoice API, safe against duplicates
- Bank reconciliation: imports the statement and proposes the right receipt for each transfer (payer, household, amount)
- An e-mail queue that respects the provider’s limits: no receipt is left unsent
- Daily cash book, expenses, balances and a yearly budget with its execution
- Overview and KPIs with one definition of invoiced, received and collection rate
Families
A portal families actually use.
In Portuguese or English, on the phone: invoices and receipts, attendance, timetable, evaluations and documents. Parents with several children in the club switch between them without signing out.
- Open invoices and receipts as PDF
- Attendance history and absence notices through the portal
- Choosing the new class after an evaluation
- Municipal and Federation forms already filled in, ready to sign
- Private by default: nobody without a session can find out whether a tax number is on record
AI agent
Riacho, the team’s assistant on WhatsApp.
Each team member links their WhatsApp to their app account. Riacho answers with that person’s permissions: a coach sees their classes, the office sees places and billing, nobody sees what they should not.
- “How do I…?” answered from a manual generated from the code itself and refreshed on every release
- Look-ups: places per class, a member summary, billing, the monthly batch and training plans
- Actions only with confirmation: a class not given or an absence is recorded after a “yes”
- Triage: an app error becomes a support ticket with the screenshot attached
- Conversations kept for 90 days for review — right, partly right or wrong
Public website
Website and app speak the same language.
The club website (Astro, Portuguese and English) reads places from the app in real time, and enrolments, trial classes and waiting lists land in the back office. Copy, prices and news are edited inside the app and the site republishes itself.
- Places per class refreshed every minute
- Online enrolment, trial class and waiting list
- Website content edited in the app
Integrations
Connected to everything the club already uses.
-
CloudInvoice
Certified invoicing: invoices, receipts and credit notes; import of documents and payment methods.
-
Banco
Imported statements, reconciled transfers, checked cash deposits and card terminal closings.
-
Federação Portuguesa de Natação
Weekly sports insurance statement and pre-filled affiliation forms.
-
Município de Tavira
FORM179 forms, municipal classes with head counts and recorded deliveries.
-
Escolas do concelho
Physical Education classes, make-up classes and a panel for homeroom teachers.
-
E-mail transacional
26 editable templates, in Portuguese or English per family, with a queue and automatic retries.
-
WhatsApp
Riacho, the team’s AI agent, hosted on our own server.
-
Supabase
Postgres with 185 tables and 279 security policies, 63 server functions and 21 scheduled jobs.
Engineering
How it is built
- 01
React and TypeScript, installable as an app (PWA); the 42 back-office pages come from a single navigation definition per role
- 02
Row-level security on every table: each role reads only what it should, enforced in the database and not just on screen
- 03
Per-role sessions: a coach who also helps in the office switches access without signing out
- 04
About 200 versioned migrations, nearly all with a rollback; the delicate ones are proven inside a transaction (apply, check, roll back) before they are applied
- 05
More than 3,300 automated tests and security, accessibility (WCAG 2.2 AA) and performance audits
- 06
Contextual help in every dialog and an index per role: team training lives inside the app
Outcome
On 12 October 2026 the club switched off the spreadsheet that used to run everything. The app became the only record of classes, enrolments and billing.
Next step
Is your operation running on spreadsheets?
A 30-minute conversation is enough for us to say what to automate first, what it costs and when it is ready.