LaunchPad

Tagline: Your career. Your place. Your next step.

Inspiration

Finding an internship is only half the decision. A student who gets an offer in Arlington also has to ask where they would live and whether they can afford it, and most tools treat jobs and housing as two separate searches. We wanted one place that connects them, and that explains why a role fits instead of handing over a black-box score.

What it does

LaunchPad helps a student go from "what should I apply to?" to "where would I live if I got it?"

  • Career Navigator. Ranks internships against the student's skills, coursework, interests, target roles and major. Each card shows a plain-language match level ("Strong match · 13 pts") and the exact terms that matched, so the ranking is explainable. The points show relative fit; they are not a probability of being hired.
  • Career guidance. On demand, a Databricks-hosted model explains a match, names skill gaps and suggests resume bullets and projects. It keeps what the student has actually done separate from what we merely suggest, so it never presents a suggested project as an achievement.
  • Housing next to the role. Every match shows same-city listings within the student's saved rent budget, with rent basis, utilities and availability.
  • Resume builder. Structured editing with LaTeX templates, compiled to a PDF.
  • Assistant. A chat assistant that searches jobs and housing using the student's profile, and says so plainly when nothing matches instead of inventing listings.
  • Saved shortlist. Save roles and apartments and keep their match reasons, guidance and housing together.

A one-click Try the demo signs into a sample student with a filled-in profile, so a first visit lands on real matches instead of an empty form.

How we built it

  • Frontend: Next.js 16, React 19, TypeScript and Tailwind CSS 4.
  • Backend: Convex for the database, server functions, file storage and real-time queries, with Better Auth for sign-in.
  • Databricks matching: a Convex action sends the student's matching fields and the active jobs to a Databricks SQL warehouse. A raw request lands in a bronze table; a silver view parses it into profile-and-job pairs; a gold view computes the scores and the matching evidence. Results are cached in Convex.
  • Explainable scoring: weighted keyword overlap (target role 3, skill 2, major 2, interest 1, coursework 1). The same scorer runs locally as a fallback.
  • AI: Databricks-hosted model through Unity AI Gateway for career guidance; the assistant uses Gemini and a second provider with automatic failover.
  • Privacy by design: only matching fields and active job content go to Databricks. No name, email, resume text or user ID.

Challenges we ran into

  • Making SQL and the app agree. The Databricks scoring is a SQL port of the app's scorer, so every score and evidence array had to match exactly, including tricky short skill names like C, R and Go. We compare them against synthetic profiles during setup.
  • In-browser LaTeX didn't work. The WebAssembly LaTeX engines fetch every document class from a third-party host at compile time, and it was down. We moved compilation to a server action that returns the PDF.
  • Keeping AI honest. Career advice is easy to over-promise. We separated verified resume evidence from suggested future work, and labelled all jobs and housing as sample data.
  • Integrating parallel work. Matching, the resume builder, profile editing and the UI were built on separate branches by different people, then merged into one coherent app.

Accomplishments that we're proud of

  • A working path from student profile through Databricks matching to explained recommendations and housing near the role.
  • A real SQL pipeline on Databricks, checked against the application's own scorer rather than trusted blindly.
  • A polished, responsive interface: light and dark themes, skeleton loading, smooth transitions, and remembered search filters.
  • 88 automated tests, plus lint and type checks, run with npm run check.
  • Clear honesty about limits: sample data is labelled, and we don't claim commute times or verified vacancies.

What we learned

Explainability matters more than cleverness for students: showing which skills matched builds more trust than a number. Being explicit about what is sample data, and what the AI can and cannot claim, made the product better as well as safer.

What's next for LaunchPad

  • Real, verified job and housing data sources instead of sample data.
  • Scheduled ingestion and a materialized Databricks pipeline instead of on-demand queries.
  • Commute times between a role and a listing.
  • Evaluating the matching with real students, and tailoring a resume to a specific job in one click.

Built with

Next.js · React · TypeScript · Tailwind CSS · Convex · Databricks (SQL Warehouse, Unity AI Gateway) · Google Gemini · LaTeX · Node.js

Try it out

  • Run locally: see the README. Set NEXT_PUBLIC_ENABLE_GUEST_MODE=true for the Try the demo button.

Team

| Evan Sanchez-Alvarez | Daniel Carrillo | Saveer Pande |

Built With

Share this project:

Updates

Submission history