Client work / Yakal Education
Yakal Education
Yakal Education Services sells private tutoring and college admissions counselling. This platform is where families buy those services, students and tutors do the work, and parents, counselors and admins keep track of it.
Wrote 805 of the 868 commits on the main branch.









01 / 10The public site where families find tutoring and college counselling
Overview
Yakal sells two things: one-on-one tutoring and college admissions counselling. Before this platform, booking, payment, homework, essays and messages were spread across email, chat apps and spreadsheets.
The app gives each of five roles its own dashboard. Parents pay and follow their children. Students attend sessions, track applications and build a college list. Tutors set availability and run courses. Counselors review essays and application progress. Admins approve staff, set prices and publish the blog.
It is one React app on top of Supabase for the database, sign-in, file storage and realtime updates, with a small server only for work that needs a secret: charging cards through Stripe, signing Zoom meetings, reading Google Classroom and sending email.
Features
- Parents buy courses and monthly counselling plans through Stripe, and tutors and counselors are paid out through Stripe Connect
- Students search 1,944 US universities with cost, admit rate and SAT ranges from the federal College Scorecard, ranked against their own scores
- Students, parents and counselors share one application tracker showing what each college still needs
- Tutors set weekly availability, sessions run on Zoom, and assignments are read from Google Classroom so students never sign in to Google
- Realtime messages between every role, with parents able to read their children's conversations and anyone able to flag a message for review
- An in-app assistant for each role that answers how-to questions by text or voice
Challenges
- Access control lives in Postgres row level security rather than a backend, so a missing policy is a data leak. Every role's reads and writes were written as policies and pinned with verify scripts, one per bug that had already happened.
- A paid order must never depend on the browser coming back from checkout. Only the Stripe webhook grants access, and tutor earnings are recorded when a lesson completes and held before payout so undelivered work can still be refunded.
- The support assistant went silent twice: once when the model provider retired the default model, and once when streamed replies arrived with Windows line endings the parser did not split on. The model became a setting and the stream parser got its own check.
- The audience is often on slow mobile data, so the app installs as a PWA that caches the app shell but never caches private data such as grades or messages, and heavy libraries such as error reporting were trimmed to about half their size.