Skip to content
EdTech SaaS / advising marketplace, College and career counseling

Advising Marketplace

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

Student dashboard with a Smart Match grid of advisor cards showing match percentages
The student home tab: Smart Match ranks advisors by interest overlap, with a reconnect panel below.

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.

Problem

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.

Sign-in page with email and password fields
One sign-in form for everyone, the login flow resolves each account's school database before authenticating.
Approach

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.

Advisor registration step two of six with a progress bar
The six-step advisor onboarding flow, with progress preserved across steps and reloads.
Solution

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.

Key features
  • 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.

Browse Advisors page with search, university, major, and nationality filters over advisor cards
The advisor directory with filters, rating sort, and an availability toggle.
Schedule Session modal showing timezone-converted slots and a computed session cost
Booking with live pricing and automatic timezone conversion, both zones stated explicitly.
Device check dialog with camera preview and a Join Session button
The pre-call device check that precedes every video session.
Advisor view of an editable AI summary with action items, transcript, and a Send to Student button
The human-in-the-loop step: the summary only reaches the student when the advisor sends it.
Thoth copilot chat answering a question across past session summaries
Thoth answers from released summaries only, pending ones stay gated until the advisor approves them.
Counselor calendar view of school-wide sessions with advisor, student, and date filters
The counselor's calendar of all school sessions, with list and calendar modes.
Under the hood
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Outcome
  • 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.

Next project

Community Services DirectorySocial Services & Nonprofit