Changelog
What's new.
Everything that's shipped on tutor., in reverse chronological order. Expect this page to grow as we get closer to launch.
- infra
Email design now lives in Resend
- Booking confirmation emails are now sent via a Resend-hosted template (alias: session-confirmation).
- Design edits happen in Resend's UI — no redeploy needed for copy or layout tweaks.
- Server sends only the eight variables the template expects: student_name, teacher_name, date_label, time_label, duration_minutes, address, cancel_url, site_url.
- shipped
Booking confirmation emails via Resend
- Every confirmed booking now fires a branded HTML email: session time, duration, where, and a link back to the dashboard.
- Lime-and-ink system carried over into the email so the brand stays consistent. Table-based layout with inline styles, renders everywhere from Gmail to Outlook.
- Fire-and-forget: if the email fails to send, the booking still succeeds. The DB is the source of truth, not the email.
- While the custom sending domain (mail.tutoring.aradrsk.com) verifies with DNS, we're sending from Resend's shared onboarding@resend.dev. Flip the EMAIL_FROM env once verification completes.
- Preview the template live at /dev/email/booking.
- shipped
Dashboard shows your real bookings
- The /account/bookings page now reads from the database instead of showing a placeholder.
- Upcoming sessions appear in a chunky card list with date, time, and duration. Past sessions collapse into a muted list below.
- Students can cancel upcoming sessions more than 24 hours out. Closer than that, the cancel button is hidden and a note explains why. Teachers can cancel any session (emergencies happen).
- Teachers see every confirmed booking with the student's name and email, not just their own.
- design
Booking step 2 is now a calendar
- The long vertical list of days in the booking wizard is gone.
- New month-calendar grid: green = open (shows how many start times), grey = no availability, red = blocked.
- Tap a date → open times appear in a panel below. Much faster than scrolling a list.
- Works across month boundaries with prev/next arrows when the 30-day horizon crosses a month.
- design
Teacher has a name: Theepa Jeyapalan
- The landing page 'Your teacher' card now reads Theepa Jeyapalan. Bio copy updated too.
- shipped
Booking flow is live
- The /book route is a three-step wizard: pick length (30/45/60), pick a start time, review & confirm.
- The server double-checks every booking against live availability before inserting, and catches the Postgres exclusion-violation cleanly when two people try to grab the same slot.
- Dashboard empty-state now points straight to /book.
- shipped
Teacher availability editor + public preview
- Teachers now have /dashboard/availability: add weekly windows, block specific dates, and a 14-day preview that overlays 30/45/60-minute valid start times.
- Landing page shows real availability for the next 15 days, with a green/grey/red legend. No more fake placeholder school logos.
- The whole slot-generation engine is shared across teacher preview, landing page, and booking — so all three stay in sync automatically.
- design
Full UX rehaul + /updates page
- Introduced a shared Nav + Footer across every page — logged-in users now see a Dashboard link, logged-out users see Log in + Book a session.
- Redesigned /signup and /login in the lime + ink system: chunky card, inline hints, proper error states, a value-prop list on signup.
- Dashboard at /account/bookings got stat cards, an empty-state with clear next steps, and an account-details card that reads live from the session.
- This /updates page is new. You're reading it.
- shipped
Live at tutoring.aradrsk.com
- Deployed to Vercel production with a custom domain.
- Cloudflare DNS A record → Vercel edge. SSL auto-provisioned.
- Environment variables moved out of local dev; production now reads DATABASE_URL, BETTER_AUTH_SECRET, and the site URLs from Vercel.
- infra
Migrated to Neon Postgres
- Swapped local SQLite for Neon serverless Postgres so the app works on Vercel's ephemeral filesystem.
- Schema ported to pg-core with real enums (user_role, booking_status), timestamptz, checks, and proper indexes.
- Bookings overlap exclusion constraint restored via btree_gist + a trigger-maintained end_at column — prevents a 30-min booking at 4:30 pm from colliding with a 60-min booking at 4 pm at the DB layer.
- design
Landing page redesign
- New visual system: lime #B9FF66 + ink #191A23 on white.
- Chunky rounded cards with offset drop-shadows, section headers in lime pills, inline SVG illustrations for sessions and the hero.
- Added a 4-card sessions grid (30 / 45 / 60 / free trial), 3-step how-it-works, a teacher profile card, and a dark pricing panel.
- shipped
Auth + schema for signup / login / verify flow
- Users can create accounts with name, age, email, and password.
- Session cookies via better-auth. Dashboard redirects unauthenticated visitors to /login.
- Email verification is currently off in dev; it comes back on when Resend is wired in TU-9.
- infra
Project scaffold
- Next.js 16 (App Router, Turbopack) on React 19, TypeScript 5, Tailwind 4, ESLint 9.
- drizzle-orm + drizzle-kit for schema and migrations.
- better-auth with a drizzle adapter. Pushed to github.com/aradrsk/tutoring.
- shipped
PRD v1 locked
- Resolved the five open product questions: public landing as home, teacher's home as fixed session location, configurable 30 / 45 / 60 min sessions, 24-hour cancellation window, and Vercel subdomain for v1 (later upgraded to tutoring.aradrsk.com).
- Everything else in the PRD is downstream of those five decisions.
What's next
The remaining MVP backlog. Each row is a tracked issue; order is the critical path to launch.
- Next up
TU-6
Teacher sets weekly availability + date blocks
- Planned
TU-7
Public landing page with visible availability
- Planned
TU-8
Users can book a session with slot locking
- Planned
TU-9
Email confirmations via Resend
- Planned
TU-10
Teacher dashboard
- Planned
TU-11
User dashboard with cancel
- Partial (prod live)
TU-12
Deploy to prod + onboard teacher