We replaced
the paperwork
with the platform.
Marple Social and Forces Club ran on paper, three SaaS subscriptions, and the patience of its committee. We built one piece of software that owns the membership, the till, the events, the rota, and the AGM. Revenue tripled. Membership multiplied. The committee can take Sundays off.

The numbers tripled.
So did Sundays off.
The platform isn't the headline. The headline is what it freed up. Once applications, renewals, payments, events, EPOS, the staff rota, the AGM, and the noticeboard all stopped being someone's evening job, the people running the club could actually run the club. Growth followed.
None of it required a rebrand, a marketing agency, or a six-month consulting engagement. It required someone sitting down, working out what was actually broken, and building software that fits.
One club, a dozen half-working tools, and a lot of paper.
Marple is a small members' club with a long history, a busy bar, regular events, a steward, a committee, a staff rota, and the kind of weekly admin load that quietly eats Wednesday evenings.
Applications came in on paper. Renewals were tracked in a spreadsheet. EPOS sat in its own silo. Bookings went via the phone, were written on a wall calendar, and then re-typed. Events were promoted on a noticeboard. The committee minuted the AGM by hand. Nothing talked to anything else.
The brief was simple. Make all of this one piece of software, owned by the club, that the people on the committee can actually use.
One platform. Nine jobs.
Membership
The whole lifecycle, from application to renewal to retirement. NFC member cards, Apple Wallet passes, dynamic pricing, multi-tier roles.
- Online application
- Age & reCAPTCHA
- NFC cards
- Apple Wallet
- Renewals
Payments
Stripe subscriptions for membership, Payment Intents for one-offs, terminal tokens behind the bar, and a clean reconciliation back to each member.
- Stripe subs
- Payment Intents
- Terminal tokens
- Webhooks
- Receipts
Events & ticketing
Events, capacity, member vs public pricing, Stripe ticket sales, QR check-in, confirmation emails. Featured events surface on the homepage.
- Capacity
- Pricing tiers
- QR check-in
- Email confirmations
EPOS integration
Till transactions imported and matched to members. Item categorisation, member balances, transaction history. The till stops being an island.
- Transaction import
- Member matching
- Balances
- PLU items
Staff rota
Shifts, time tracking, holiday requests, payroll hours, shift swap. Week and month views that work on a phone behind the bar.
- Rota
- Time tracking
- Holiday
- Shift swaps
- Payroll hours
Bookings & rooms
Function room. Members' lounge. Capacity, pricing, deposits, the lot. Stops the wall calendar / phone-call / re-type loop.
- Room bookings
- Deposits
- Capacity
- Pricing
Communications
Member emails (with PGP encryption where it matters), SMS via Twilio, in-app notifications with read state, audit-logged.
- SMS
- Notifications
- PGP-encrypted
AGMs & governance
Attendance, audit logging, action tracking, disciplinary cases, survey responses. The committee's paperwork, but as software.
- AGM attendance
- Audit log
- Action tracking
- Surveys
Security & auth
Passkeys, TOTP, OIDC single sign-on, role-based access. Audit trail on every sensitive action. Built to PCI-DSS and OWASP discipline throughout.
- WebAuthn
- TOTP
- OIDC SSO
- RBAC
- Audit logs
What "one platform" actually looks like under the bonnet.
The stack, briefly.
Backend
- PHP 8 application
- MariaDB
- Database-backed sessions
- RabbitMQ for async jobs
- Cron-driven schedulers
Interface
- Bootstrap 5 + Tailwind utilities
- System dark mode
- Mobile-first staff & member portals
- Print-friendly invoices & tickets
Integrations
- Stripe (subs, intents, terminal)
- Twilio SMS
- Authentik OIDC SSO
- Apple Wallet passes
- NFC card systems
Security
- WebAuthn passkeys
- TOTP MFA
- OIDC for staff
- Role-based access control
- PGP-encrypted sensitive mail
- PCI-DSS & OWASP discipline throughout
Operations
- Docker Compose, four services
- Nginx + PHP-FPM
- MariaDB on dedicated node
- RabbitMQ DLQ listener
- Audit log on critical paths
Schema
- 82 tables, foreign-keyed
- ~3,600 lines of schema
- Single source of truth for member data
- Audit log on AGM, members, payments
What changed for the people?
The numbers are nice, but they're a downstream effect. The work was about giving the people who actually run the club back their evenings. Here's what stopped happening:
- Wednesday-night data entry
- Renewal chase-up phone calls
- "Did anyone book that room?"
- Lost paper applications
- Reconciling the till by hand
- AGM minutes typed twice
- Staff messaging each other to swap shifts
- Renewal reminders, manually
And here's what started happening: events sold out, the membership grew, the bar got busier, and the committee started using the words "this year" and "next year" instead of "this week". That's the actual case study. The platform's just how we got there.