The roster was a chat thread
Membership was whoever happened to have been added. We built organisations with real membership records, custom roles and permissions, invites, join requests and bulk import and export.
We would rather show you one thing we can talk about honestly than a wall of logos we can't. Client work is under NDA and stays that way — so here is the product we built for ourselves, which we can open up completely.
Built, shipped and operated end to end by this team: React Native on iOS and Android, a Node and TypeScript API, MongoDB, Razorpay for money, and a browser back-office.
Clubs, academies and community groups already coordinate perfectly well in a chat thread. What no chat has ever held is the roster, the money, and the answer to "who actually turned up" — which is exactly the part that has to survive a change of committee.
Membership was whoever happened to have been added. We built organisations with real membership records, custom roles and permissions, invites, join requests and bulk import and export.
We built collection through Razorpay with refunds handled in-app, and made every movement write an append-only ledger entry — so the treasurer's view and the bank statement can be reconciled a year later.
Check-in by tapping a name or scanning a QR pass, made idempotent so a double tap is harmless, and queued locally so it works on a ground with no signal.
These are the ones worth telling you about, because they are the ones that recur on client projects — and having solved them once with our own name on the outcome is what we are actually selling.
Anyone can store a payments table. The difficulty is guaranteeing that what the treasurer sees in November matches what the bank saw in March — including refunds, partial states and failed webhooks. We made every movement an append-only entry and reconciled from the ledger rather than from the UI.
Check-in happens in a car park, a ground or a hall — places with one bar of signal and forty people waiting. Treating connectivity as an exception produces software that fails exactly when it is needed, so the offline path was designed first and the online one fell out of it.
Every organisation splits responsibility differently — a coach who takes attendance but must never see collections, a treasurer who isn't the admin. Fixed role names would have forced every group into one shape, so permissions are composable and the org defines its own roles.
Getting the build right is the easy half. The half that eats schedules is signing, provisioning, privacy nutrition labels, the Data Safety form, account-deletion requirements, universal links and staged rollout. We ran all of it ourselves, which is why we can now estimate it for you instead of guessing.
Organisations and custom roles, discovery by map and category, events with templates and waitlists, collections through Razorpay with refunds, the append-only ledger and treasurer view, offline check-in, public share pages, and a browser back-office.
We decided against building our own group chat. It would have been the largest thing on the roadmap, aimed at a free product every member already has open. Saying no to it is the single most valuable product decision in the project.
When we tell you that offline sync is harder than it looks, that store review will eat a week, or that a reconciled ledger is worth building properly the first time — it is because we paid for each of those lessons on our own product, not on yours.
Client projects stay confidential unless you tell us otherwise — we will not put your name on a website to win someone else's business. Happy to walk you through relevant work on a call, under NDA if you'd prefer.