Makeup class credit tracker for tutoring centers

B2BWebweekendNext.jsSupabaseResend

The idea

Makeup credits are where tutoring centres and music schools burn parent goodwill: the front desk tracks them in a notebook or memory, a parent swears they are owed two sessions, the record disagrees or does not exist, and a 200-dollar-a-month family churns over a 40-dollar dispute. Scheduling suites like Jackrabbit handle enrolments and billing but treat credits as an afterthought, which is exactly what centre owners complain about.

The wedge is treating credits as an append-only ledger with policy attached: every credit has a reason, an expiry, and a history the parent can see themselves on a loginless balance page. The expiring-credit emails do double duty, resolving disputes before they start and filling otherwise-empty weekday slots.

Who pays

The centre owner pays 29 dollars a month, cheap against one saved family, and buys it to end front-desk arguments as much as to recover revenue. Tutoring franchises’ independent operators, music schools, and swim schools all share the exact policy shape. Reach them through tutoring-business and music-school-owner Facebook groups, and through franchise operator networks where one convert recommends it across the group.

MVP scope

  • Policy setup: expiry windows, qualifying reasons, sibling transfers
  • Append-only issue/redeem ledger with oldest-first redemption
  • Loginless parent balance page with full history
  • Automated issued, expiring, and redeemed emails
  • Dashboard with expiring-soon list and issued-versus-redeemed counts
  • Skip for v1: class scheduling and booking, billing, attendance capture, SMS, parent-initiated makeup self-booking
// Build prompt — paste into Cursor / Claude Code / Lovable / Bolt
Build CreditKeeper, a makeup-credit ledger for tutoring centres, music schools, and enrichment programmes. Stack: Next.js (App Router), Supabase (auth and Postgres), Resend for email.

Core flow: the centre sets its credit policy once: default expiry window (e.g. 60 days), which absence reasons earn a credit (illness with notice: yes; no-show: no), and whether credits transfer between siblings. Staff manage a student roster (name, programme, parent name and email). The core object is a ledger: issuing a credit records student, date, reason, and computed expiry; redeeming records the makeup session date and which credit it consumed (oldest-first automatically). Every student's balance is always derivable from the ledger, never stored as a mutable counter, so disputes are settled by showing history.

Parents get a permanent tokenised balance page, /balance/[token], no login: current credits, each with its expiry date, plus full history. The link goes in the centre's email footer. Automated emails via Resend: credit issued (with expiry), credit expiring in 14 and 3 days ('book a makeup slot before it lapses', with the centre's booking contact or link), and credit redeemed.

Pages: /dashboard (balances overview, expiring-soon list, this month's issued versus redeemed), /students/[id] (ledger with issue and redeem buttons), /policy, /settings. Magic-link auth, multiple staff users per centre.

Implementation details: expired credits stay visible in history marked lapsed; a manager-only adjustment entry type covers goodwill overrides, always with a required reason.

Pricing: 29 dollars/month per centre, unlimited students. 30-day trial.

// More B2B ideas