Advising Marketplace
A multi-tenant advising platform: from finding an advisor to a paid video session and an AI-drafted, human-approved summary.

The platform addresses a coordination problem in college counseling: students need one-on-one guidance from people who recently walked the same path, current university students and graduates, while schools need visibility into which of their students are getting advised, by whom, and what came out of each conversation.
Doing that well requires several hard things at once. Each partner school wants its data kept separate; sessions happen across time zones and are paid for at prices that make sense in different regions; the actual advising happens on video and its value evaporates unless someone captures what was said; and three audiences, students, advisors, and school counselors, need different views of the same underlying activity.
The project also had to grow far past its starting point. The original specification describes a frontend-only counselor demo with dummy data. What exists today is a payment-enabled, AI-assisted platform with a full video call stack and a background processing pipeline, the interesting part of this engagement is that distance.
Paid advising needs isolation, payments, video, and memory
Partner schools required hard data separation, not just tenant columns in a shared database. Students in different markets needed prices calibrated to their region, and availability shown in their own timezone. And the core product moment, a live video conversation, left nothing behind unless the platform captured, summarized, and organized what was said.
On top of that, the money had to be trustworthy: a student paying for a session and the booking never landing, or a booking existing without payment, were both unacceptable failure modes for a marketplace handling real transactions.

Isolate tenants, confirm payments first, keep AI off the request path
Rather than one shared database with tenant columns, each partner school gets its own Supabase project. A master project holds the school registry, advisor profiles, sessions, and payments; at login the platform resolves which database a user belongs to and builds clients for both. Per-school configuration also drives the UI, each school's dashboard shows only the tabs enabled in its registry entry, and a solo-learner mode lets independent students use the platform with no school at all.
Payments confirm the booking, not the other way round. A session is only created after Stripe confirms payment: the checkout call embeds the full session details in Stripe metadata, and the signature-verified webhook creates the session record, stores the amount paid, and credits the advisor's payout ledger. Any processing failure returns an error so Stripe retries, a booking can't silently half-exist.
Session summaries are generated by Claude from call transcripts, which can take a minute or more, too long for a web request. We built a queue on top of the database itself: finishing a session marks it pending, a Vercel cron fires a worker every minute, workers claim jobs atomically, poll until the transcript is ready, call the model through a wrapper with timeouts and exponential-backoff retries, and record per-job status with an admin endpoint for monitoring and manual retry. This replaced an earlier synchronous design that produced client-disconnect errors.

From discovery to follow-up in one product
Students browse a directory of advisor profiles, university, major, expertise areas, and ratings computed from session reviews, with search and filtering, plus a Smart Match view that ranks advisors by interest overlap. The booking modal computes the session price live from a base rate, a regional addition resolved from the student's school country or university, the session duration, and a bonus tied to the advisor's accumulated score, with availability converted into the student's own timezone automatically.
Sessions run in the browser on the 100ms video stack: a device-check preview, mute, camera, and screen-share controls, virtual backgrounds, and live captions, with the transcription stream batched into the session record as the call happens. Afterwards, the background pipeline drafts a structured summary, but students don't see it immediately. The advisor reviews the draft, refines it with AI assistance if needed, and explicitly sends it to the student. The platform treats the summary as a deliverable the advisor signs off on, not raw model output.
Continuity comes from session-locked real-time chat enforced by row-level security, file resources and action items attached to each session, and Thoth, a student copilot that answers questions across the summaries and transcripts that have been released to that student, and only those. A Launchpad career board lists internships and jobs with AI guidance per opportunity, counselors get school-wide dashboards and session calendars, and token-gated admin endpoints expose the AI pipeline's queue state with the ability to force or retry jobs.
Database-per-school multi-tenancy
Each partner school gets its own Supabase project, with a master registry unifying advisors, sessions, and payments, plus per-school dashboard configuration and a solo-learner mode for independent students.
Paid booking with regional pricing
Session prices are computed live from region, duration, and advisor score; Stripe Checkout handles payment and the signature-verified webhook creates the booking and credits the advisor's payout ledger.
In-browser video sessions
100ms-powered calls with device check, screen share, virtual backgrounds, live captions, an advisor-side student panel, and an in-call AI copilot, with live transcription flowing into the session record.
AI summaries with human sign-off
A background pipeline turns each transcript into a structured Claude-drafted summary with action items; the advisor reviews, edits, and explicitly releases it before the student ever sees it.
Thoth, the student copilot
Students ask questions across their whole advising history, and the copilot answers only from the summaries and transcripts that have been released to them.
Launchpad opportunity board
A career board of internships, job shadows, and jobs, where students can open an AI conversation that summarizes a role, answers questions, or drafts an application email.






- 01
A job queue without queue infrastructure
Instead of Redis or a message broker, the summary pipeline uses status columns, atomic job claims, and a Vercel cron trigger, few moving parts, fully observable via SQL, and safe under concurrent workers.
- 02
Webhook-driven booking creation
Sessions are created by Stripe's signature-verified confirmation callback, not by the browser, eliminating the class of bugs where a user pays but the booking never lands, Stripe retries until the platform succeeds.
- 03
Security enforced in the database
Chat access control lives in row-level security policies and security-definer functions rather than only in application code, so even a bypassed API can't read another student's messages.
- 04
Resolved-context API layer
Roughly 60 Next.js API routes sit behind shared middleware that validates the Supabase bearer token, resolves the caller's school database, classifies the user's role, and hands handlers a fully resolved context.
- 05
A purpose-built AI client
Anthropic Claude runs behind a wrapper with configurable model, token, temperature, and timeout settings plus retry classification, powering seven distinct endpoints for summaries, refinement, action items, opportunity guidance, and the student copilot.
- A frontend-only demo grew into a payment-enabled, AI-assisted platform handling real money, real video, and real AI in the loop.
- Schools onboard as isolated tenants with configurable dashboards, and students book advisors at regionally calibrated prices with timezone conversion handled automatically.
- Every advising conversation becomes a reviewed, AI-drafted summary with resources and action items, and students carry a copilot over their released advising history.
- Payment-confirmed bookings, a crash-tolerant background queue, and human review gates on AI output keep the system operable for a small team.