W1 SystemsLevel 1/6Legendary2026Live in production

Club ERP

The Club · Sheraton, a Ministry of Youth & Sports club

The system a whole club runs on: members and families, money, sports, bookings, staff and stock, in one place.

Club ERP: Dashboard, demo club
Dashboard, demo club
Club ERP: Approval workflows for membership, HR and purchasing
Approval workflows for membership, HR and purchasing
Club ERP: Posting coverage: documents against journal entries
Posting coverage: documents against journal entries
Club ERP: Accounting dashboard
Accounting dashboard
Club ERP: Cashier and treasury queue
Cashier and treasury queue
Club ERP: A disciplinary process as a state machine
A disciplinary process as a state machine
Club ERP: Permissions matrix, roles against actions
Permissions matrix, roles against actions
Club ERP: Period-close readiness checklist
Period-close readiness checklist
Club ERP: Live facility mirror
Live facility mirror
Club ERP: Hourly booking wizard
Hourly booking wizard
Club ERP: Chart of accounts
Chart of accounts
Club ERP: Income-tax brackets with a salary test calculator
Income-tax brackets with a salary test calculator
Club ERP: Sports dashboard
Sports dashboard

The story

A full ERP for a sports and social club, written on a PHP framework I built from scratch, with its own router, template engine, query builder and event bus. It covers memberships with spouses and children, subscriptions and fines, academies and bookings, the cashier and treasury, double-entry accounting, HR and payroll, procurement and stock.

It went from the first commit to staff signing in on production in five and a half months. The club website, the member portal and the members’ app all run on the same code and the same database.

Hard parts cleared

  • Accounting that posts itself: 33 business events (payments, sales, payroll, fines, installments, purchases, transfers) each write a balanced journal entry, and a coverage check finds any document left without one.
  • A tamper-evident audit trail: every change is stored before and after, and each row carries an HMAC of the one before it, so editing or deleting history breaks the chain in plain sight.
  • Membership numbers with a memory: the club renumbered in 2026, so one number can belong to a member today and to someone else yesterday. Every lookup answers both.
  • Moved the club’s Excel history, payments back to 2006, into production through an extract, match, verify and report pipeline, with a full backup before every step.
  • Treasury discipline: every payment goes through a cashier session, refunds and transfers wait for a second approval, and cheques have a lifecycle of their own.
  • Tested at 50 signed-in users at once with zero errors. Backups are encrypted, and changing a single byte makes the restore refuse.

More from Systems

Continue?

If you have a system to build, a game to make or a server that needs moving, I am one message away.

info@al-arcade.com