Skip to content

cohenall12/ladder

Repository files navigation

Ladder

An AI-powered career workflow for students and early-career applicants.

Ladder helps applicants move from scattered job searching to a structured application process: find relevant roles, track application emails, prepare for interviews, and get feedback after practice.

The project was built during SaaSathon 2026 by a team organised through Young Kiwis in AI. The event brief was to build a practical productivity SaaS product where AI does useful work inside the workflow, not just a chat interface on top of it.

What It Does

Ladder combines three parts of the internship and graduate-role process:

  1. Discover roles

    • Upload a CV/resume PDF or paste resume text manually.
    • Ladder extracts the text from the PDF and stores it as the applicant profile context.
    • Run an AI rescan.
    • Ladder ranks relevant internship and graduate roles against the applicant's scanned CV.
    • Each role includes a match score and reasons explaining the fit.
  2. Track applications

    • Connect Gmail with read-only OAuth, or use the deterministic demo seed flow.
    • Ladder parses application-related emails.
    • Emails are turned into application records and stage updates.
    • Applications can be moved through a Kanban tracker manually.
  3. Prepare for interviews

    • Open a company-specific interview studio from an application.
    • Ladder generates a company research brief and likely interview questions.
    • Applicants can practise with a streaming AI interviewer.
    • Browser voice input lets users speak answers.
    • The interview can be wrapped and graded with strengths, gaps, and follow-up practice.

Why We Built It

Finding early-career work is operationally messy. Job listings are spread across different sources, application updates land in an inbox, and interview prep often happens separately from the actual roles people are applying for.

Ladder brings those steps into one workflow. The AI features are used to structure messy information and reduce manual work:

  • extracting useful context from an uploaded CV PDF;
  • comparing CV content with job descriptions;
  • extracting application signals from email;
  • turning company context into interview preparation;
  • adapting mock interview questions to the role;
  • summarising interview performance into practical feedback.

Demo Flow

A typical demo path is:

  1. Sign in.
  2. Add profile details and upload a CV PDF.
  3. Run AI rescan to generate ranked roles.
  4. Sync Gmail to populate the application tracker.
  5. Move an application through the Kanban board.
  6. Open the company interview studio.
  7. Review the company brief.
  8. Practise with the AI interviewer.
  9. Run Wrap & grade for feedback.

Features

  • PDF CV upload and text extraction
  • CV-based role ranking
  • AI-generated match reasons
  • Application Kanban tracker
  • Gmail read-only OAuth integration
  • Seed-mode Gmail demo fallback
  • Company research briefs
  • Browser voice input for interview practice
  • Streaming AI interviewer
  • Post-interview grading
  • Supabase Auth and row-level security
  • Vercel cron route for scheduled Gmail sync

Tech Stack

  • Framework: Next.js 16 App Router, React 19, TypeScript 5
  • UI: Tailwind CSS v4, shadcn/ui, Motion, Lucide icons
  • Auth and database: Supabase Auth, Postgres, Storage, RLS
  • AI: Vercel AI SDK 6 over OpenRouter
  • Email: Gmail API via googleapis
  • Jobs: curated internship and graduate-role listings with AI ranking
  • Interaction: @dnd-kit, Web Speech API
  • Deployment: Vercel

Local Setup

cp .env.example .env.local
npm install
npm run dev

Then open http://localhost:3000.

The Gmail sync can be explored without real OAuth credentials. If a user has no stored Gmail refresh token, the sync route falls back to seed fixtures and runs them through the same parsing pipeline.

Real AI calls require an OPENROUTER_API_KEY.

Environment Variables

See .env.example for the full list.

Required for the full app:

  • NEXT_PUBLIC_SUPABASE_URL
  • NEXT_PUBLIC_SUPABASE_ANON_KEY
  • SUPABASE_SERVICE_ROLE_KEY
  • OPENROUTER_API_KEY
  • GMAIL_TOKEN_ENC_KEY
  • GOOGLE_OAUTH_CLIENT_ID
  • GOOGLE_OAUTH_CLIENT_SECRET
  • GOOGLE_OAUTH_REDIRECT_URI
  • CRON_SECRET

No optional provider keys are required for the core demo flow.

Supabase

Apply the schema in supabase/migrations/0001_initial.sql.

The database includes:

  • profiles
  • jobs
  • applications
  • email_events
  • interviews

Row-level security is enabled so user data is scoped to auth.uid().

Project Structure

app/
  (auth)/login, onboarding
  (app)/dashboard, discovery, inbox, tracker, company/[appId], coach, settings
  api/applications
  api/company/research
  api/cron/daily-sync
  api/cv/parse
  api/gmail/connect, callback, sync
  api/interview/chat, grade
  api/jobs/discover
components/
  auth/
  brand/
  dashboard/
  interview/
  landing/
  motion/
  ui/
lib/
  ai/
  company/
  gmail/
  jobs/
  supabase/
supabase/migrations/
docs/

Scripts

npm run dev
npm run build
npm run start
npm run lint

Public Repo Notes

This repo is intended to be safe to publish as source code. Secrets belong in .env.local, which is gitignored. Local deployment metadata such as .vercel/, .codex/, and supabase/.temp/ should not be committed.

Before making the repo public, double-check that no real API keys, OAuth secrets, tokens, personal Gmail data, or private customer data have been committed.

SaaSathon Context

SaaSathon 2026 challenged teams to build a deployed productivity SaaS MVP with meaningful AI functionality. The event was run by Lumin in partnership with Entre, with support from OpenAI's Codex Ambassador program, FundTap, and Partly.

Ladder was built to fit that brief by using AI to do structured work across the application process rather than acting as a generic chatbot.

License

Hackathon project. All rights reserved by the team.

About

AI-powered career workflow for students and early-career applicants

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors