Inspiration
At my school, a lot of students tutor younger kids in math, some for pay and some for NHS service hours. I kept seeing the same problems: tutors forget who has paid, parents never hear how their kid is doing, and at the end of the semester everyone scrambles to rebuild their volunteer-hour log. Tutoring software exists, but it's built for companies with staff and a budget, not a high schooler with three students. I wanted to build the tool student tutors actually need, and a business that could grow from it.
What it does
TutorLoop runs a student's tutoring business in one loop: log → get paid → update parents → prove hours.
- Dashboard: earnings and collections this month, the unpaid balance, service hours toward your goal, a 6-month earnings chart, and a "Who owes you" list with Invoice, Remind, and Mark paid buttons. Quick log starts from your last session with each student.
- 30-second first run: a new tutor types one student, the minutes, what they covered, and how it went. One save creates the student and the session, and the dashboard immediately shows the drafted parent update, the invoice amount, and the next steps.
- 10-second session log: student, date, minutes (30/45/60/90 chips), topics, notes, paid or volunteer, with a live amount preview.
- Parent updates: turns your session topics and notes into a parent-ready progress email (topics covered, a recency-weighted trend, the latest highlight, the next focus). You edit it, then copy it or open it in your email app.
- Payment reminders: one click writes a polite, itemised reminder to the parent, ending with how to pay in plain words ("You can pay with Venmo @handle."). The payment app is a setting (Venmo, Zelle, PayPal, Cash App, or anything you type); left blank, it's guessed from the handle.
- Optional "Sent with TutorLoop" footer: off by default. If a tutor switches it on in Settings, parent updates, reminders, and invoices end with one plain line linking to TutorLoop. No tracking, no referral code; TutorLoop can't see who clicks.
- Invoices: unpaid sessions roll into a clean invoice you can print or save as a PDF.
- Service hours: volunteer sessions tracked separately, with progress toward a goal, a CSV export, and a printable log with a sponsor signature line.
- Monthly summary: pick a month and either one student (a statement for the family: sessions, topics, paid/unpaid, balance due, how to pay) or all students (a one-page recap for the tutor or an NHS sponsor, with service hours and a signature line when printed). Print or save as PDF, copy as text, or open it in email.
- Private by design: no account and no server; data stays on your device. JSON backup and restore, CSV export, undo on every action, and permanent delete if a family asks.
- Works offline and on a phone: a service worker caches the app (after the first visit), and it installs to your home screen.
Who it's for
- Students who tutor 1–10 kids, paid or volunteer, in high school or college.
- Parents who pay for tutoring and want to know it's working.
- NHS chapters and peer-tutoring clubs whose sponsors collect service-hour logs. They're our B2B channel.
Business model
Freemium with a club channel:
- Free: the full core loop for up to 3 active students.
- Pro, $4/month: unlimited students. Cloud sync and scheduled reminders are on the roadmap, and we won't charge for them until they exist.
- Club, $99/school year: for an NHS chapter or tutoring club (up to 50 tutors). A sponsor dashboard and verified hour reports are on the roadmap.
After Stripe's published US fees (2.9% + 30¢ per charge, plus 0.7% Billing), TutorLoop keeps $3.56 of a Pro month (89%) and $95.14 of a Club year (96%). Serving a free user costs about $0 today: static hosting and on-device processing. The flat 30¢ fee hurts small monthly charges, so an annual Pro price is the first pricing test.
For context, US private tutoring was about a $13.5B market in 2024 (Emergen Research). Our reachable channel is the National Honor Society's 16,000+ chapters: even at full penetration, Club alone is a ~$1.5M/year ceiling, so the real goal is a few local chapters first, then Pro tutors on top.
Traction, honestly: none yet. TutorLoop is a working prototype with no users, pilots, or revenue. Plan upgrades in the app are a demo checkout. The next step is a free pilot with student tutors and one NHS sponsor.
How we built it
TutorLoop is a static web app in plain HTML, CSS, and JavaScript, with no framework, build step, server, or paid APIs, so it deploys free on GitHub Pages. I split it into layers:
core.jsholds all the business logic as pure functions: money math rounded to cents, stats, balances, invoices, payment reminders, CSV export, import validation, and the progress-report engine. It never touches the page, so it runs in Node with 65 unit tests plus 11 money property tests.app.jsis a small hash router with view functions, delegated event handlers, and snapshot-based undo.sw.jsis a service worker that caches the app so it opens with no internet connection.
I tested it like a real product: the unit tests, a jsdom smoke test that drives every page (66 checks), and an end-to-end suite (204 checks) that runs the app in headless Chrome with Playwright, clicking through the main flows, reloading offline, running the axe-core accessibility checker on every page, and checking a 390px phone layout. Every piece of user input is HTML-escaped, a strict Content-Security-Policy blocks inline scripts, and CSV exports are protected against spreadsheet formula injection. I used AI coding tools to move faster, which the rules allow, and I reviewed and tested the logic myself.
The "AI" part: parent updates come from an on-device text engine. It ranks topics by frequency and scores each note with whole-word patterns for progress ("improved", "mastered", "confident") versus struggle ("confused", "needs more practice"), handling negation ("not confident" counts as a struggle). Each session votes, weighted by recency, so the trend reflects where the student is now; if a struggle was later resolved, it says "turning around" instead of re-quoting the old problem. It's deterministic and explainable, costs $0 per report, and student notes never leave the device. The tutor edits every message before sending.
Scalability
- Today: static files on a CDN cost the same for 10 tutors or 100,000, and each tutor's data lives on their own device, so there's no server bottleneck. A unit test runs stats, balances, the 6-month chart, and a report over 5,000 sessions and 50 students and fails if it takes longer than 1.5 seconds.
- Pro sync: the single JSON state object maps directly onto
tutors,students, andsessionstables in hosted Postgres with row-level security per tutor;core.jsdoesn't change. - Club: a
club_idand read-only sponsor roles so a chapter sponsor can see verified hours across their tutors.
Challenges we ran into
- Keeping money exact: floating-point math gave answers like $8.333333, so every amount is rounded to cents in one helper, and tests check it.
- Making parent updates sound right: my first version counted words, so one old bad session could outweigh a newer good one, and the update contradicted itself. I switched to recency-weighted session votes and wrote tests for "turnaround" and "relapse" cases.
- A bug only a real browser could find: the duration field had
min=1 step=5, so the default 60 minutes was technically invalid and the browser refused to save it. My jsdom test missed it, which is why I added real-browser end-to-end tests. - No backend, but safe data: corrupted storage is set aside instead of overwritten, a banner warns if the browser blocks saving, and every change can be undone.
Accomplishments that we're proud of
- A complete loop a real tutor could use today: log, get paid, update parents, prove hours.
- Clean separation of logic and UI, backed by unit, DOM, and real-browser tests.
- Accessibility: keyboard navigation, screen-reader labels, and axe-core checks on every page.
- A business model where the free tier costs almost nothing to serve.
What we learned
How to think like a founder as well as a coder: who exactly the user is, which painful job to solve first, and how a product makes money without charging students too much. On the technical side: designing pure, testable modules, safely rendering user content, and structuring data so it can move to a real database later.
What's next for TutorLoop
- Interview 10 student tutors and 2 NHS sponsors; pilot Club free with one chapter this semester.
- Cloud sync and login, before turning on real Pro billing.
- Scheduled payment reminders and recurring sessions.
- A Club sponsor dashboard with verified service-hour reports.
- An optional LLM rewrite of parent updates for Pro.
Log in or sign up for Devpost to join the conversation.