The story
The club keeps its old Access and SQL Server system. A Windows agent I wrote runs on the club’s own server, reads members and bills, and pushes them to a new portal in batches. App payments are written back into the old ledger the same way the cashier writes them.
On top sit a Flutter members’ app (card, family, statement, gate code, news), a staff and finance portal, and an offline gate scanner.
Hard parts cleared
- 80,278 memberships and about 2.9 million bill lines read from a live legacy database, and a resumable worker that committed a backlog of 1,846 batches behind one button.
- Writes back into the legacy cashier tables with locked numbering, so the old system cannot tell the difference.
- A hand-written QR encoder (versions 1 to 10, Reed-Solomon, masking) and a PDF writer with Arabic shaping for searchable receipts, with no third-party library on the payment path.
- Integer money with exact, remainder-safe splitting.
- An offline gate scanner that queues scans and syncs when the network comes back.













