Live in production
Sathuranga Chanakyan Chess Academy
A full academy management platform — enrolment, scheduling, attendance, homework, automated fee invoicing, coach payroll and monthly parent reports. Live and in daily use since June 2026.
Open sathurangachanakyan.com- Client
- Sathuranga Chanakyan Chess Academy, Kolathur, Chennai
- Live since
- June 2026
- Build time
- Built over 2026
The size of it
- Students
- 180
- Coaches
- 7
- Database tables
- 40+
- API controllers
- 22
- API endpoints
- 186
- Screens
- 57
- Lines of code
- ~50,000
- Automated tests
- 164
Counted from the codebase, not estimated.
The problem
- 180 students and 7 coaches were being run on Excel sheets, paper registers and WhatsApp groups.
- Fees lived in a single spreadsheet with fifteen columns, reconciled against UPI screenshots and cash by memory.
- Coaches opened each student's online chess profile one at a time to check whether homework had actually been done.
- The academy's website had promised monthly progress reports for years. Nobody had the time to write them, so they were written from memory when someone found a spare hour — or not at all.
- Coach salaries were calculated by hand at the end of every month, and there was no reliable record of which student missed which class or what the academy owed them for it.
What was built
- 01
Enrolment and daily operations
Admin sets up programs, batches and coaches; students enrol into a batch. Classes generate automatically from each batch's weekly schedule instead of being typed in one at a time.
- 02
Attendance that cannot be skipped
A coach cannot mark a class complete until attendance is recorded for every enrolled student. That one constraint is what makes every payroll and attendance number downstream trustworthy.
- 03
Fees, invoicing and a class-credit ledger
Parents pay through Razorpay or the admin records cash. Either way a real invoice is raised in the academy's own Zoho Books account, on their template and their tax settings.
- 04
Eight credits a month, tracked
Each paid month grants 8 class credits and each class held consumes one. Joining mid-month bills pro rata on the class days actually remaining. Every credit added or consumed is a row with a reason and a running balance, so a disputed fee is traced instead of argued about.
- 05
Missed classes
Miss an online class and that session's recording unlocks for that student. Miss an offline one and a compensation class is scheduled and tracked to completion. Neither costs the family a credit — the academy promises eight classes a month and this is how that promise is kept without a conversation.
- 06
Coach payroll
Part-timers are paid per class at a rate set on the batch, so the same coach earns one amount for a beginner group and another for an advanced one-to-one. Pay follows whoever actually taught the class, so a substitute is paid correctly.
- 07
Automated homework checking
Students link their Lichess username. The system snapshots their lifetime puzzle count at the moment homework is assigned, so progress is an exact difference rather than an estimate. A coach checks a whole batch in one click instead of opening eight browser tabs.
- 08
Monthly reports parents read
Attendance, homework completion, rating change with a six-month chart, results for the month, puzzles practised, concepts covered, and the coach's own written observations. Prints to a clean PDF with the academy's logo. Once published, a report is frozen — the copy a parent read never silently changes.
- 09
Interactive curriculum
A tree rather than a checklist: program, module, concept, item. An item is theory to read, a puzzle to play on a real board, or homework. Coaches author it themselves, including importing an existing Lichess study.
- 10
A real analysis board
Not a picture of a board. Full variation trees, clickable sidelines, free exploration of alternative moves, and a chess engine running in the browser with an evaluation bar and best-move arrows.
- 11
Payroll behind a permission
Salary access sits behind a per-account permission read fresh from the database on every request. The academy can hand the admin login to a manager who runs the entire operation without ever seeing what coaches are paid.
- 12
The public side
Landing site, programs, paid event registration, a merchandise store with checkout and automatic invoicing, a gallery, and a free-demo form that pushes each lead into the CRM and into an admin screen where a coach and a call link are assigned and both sides emailed.
- Java 17
- Spring Boot
- PostgreSQL
- Next.js 16
- React 19
- TypeScript
- Razorpay
- Zoho Books
- JWT auth
- Deployed on a VM
How it holds together
Decisions worth defending in a review, rather than a list of technologies.
Tenant isolation at the database layer
Every scoped table carries an academy id, and isolation is applied by an ORM-level filter driven from the authenticated user's token — not by remembering to add a WHERE clause to each query. Missing tenant context throws rather than falling through to “return everything”.
Money paths that cannot lose a payment
Invoicing runs after the payment transaction commits, on a background thread, so a slow or broken accounting API can never delay or fail a customer's checkout. It is idempotent at two levels — an in-transaction check and a database constraint — so a retry cannot produce a duplicate invoice.
Failures that surface instead of vanishing
A failed invoice is recorded against the order and retryable from the admin screen rather than disappearing into a log file. Payments sync both ways: Razorpay updates our records, a webhook covers payments entered directly in the accounting system, and a scheduled reconciliation job catches anything a dropped webhook missed.
Nothing trusted from the browser
Payment signatures are verified server-side. No amount and no order status is ever taken on the client's word.
One source of truth
Our database is authoritative and the accounting system mirrors it. Nothing a family experiences ever waits on an external API.
Hardened for production
Health and readiness endpoints, per-IP rate limiting, structured logging with request trace IDs, automated database backups, and startup validation that refuses to boot in production if a critical configuration value is missing.
164 tests, green before every commit
Plus live end-to-end verification against a real test accounting organisation before anything ships.
See it
The public side is at sathurangachanakyan.com — open it. The screens below are the same build running on our own development environment, with seeded batches and coaches, so no family's name or payment appears on a public page. For the live system, ask on WhatsApp and we will walk you through it on a call.
The running system
Sathuranga Chanakyan Chess Academy, Kolathur, Chennai
What you can see from outside
The public side: programs, events with paid registration, the merchandise store, the gallery and the free-demo booking form. The coach, parent and admin sides are behind a login, and hold real student and payment data.
In daily use since June 2026. For the screens behind the login, ask and we will walk you through them on a call.

Admin console. Students, batches, coaches and incoming demo leads, with how full every batch is underneath. 
Coach console. The next class, the week ahead, and the homework queue waiting to be reviewed. 
Curriculum editor. Homework set as a position on a real board, with the engine one click away. 
The same tree on a theory item. Program, module, concept, item — authored by the coaches, not by us. 
The self-paced course side: a lesson puzzle played out on the board rather than described in a paragraph. 
The video lesson beside it. Every item in a course is tracked separately, so progress is a fact rather than a feeling.
Where it stands
- Live and in daily use by the academy's coaches, students and families since June 2026.
- Every job on the list above used to be somebody doing it by hand. That is the whole point of the project.
- Fee disputes are traceable rather than arguable: every credit added and consumed is a row with a reason and a running balance.
- The monthly progress report the academy had promised parents for years now goes out for every student, every month.
- A batch with no coach rate set is flagged by name and its classes are counted but left unpaid — never guessed at, never quietly treated as zero.
Want the same thing for your academy?
Ask to see it live