Tagline

Job hunting is a grind. JobMaxxing turns career prep into a loop that helps you improve, practice, and earn XP along the way.

Project Story

Inspiration

One of us had been rejected from McDonald's before. Job hunting can feel soul-crushing: sending the same resume to every employer, trying to figure out what's wrong, and preparing with generic interview questions that don't match the role.

We wanted to make that process feel more manageable. Instead of treating career prep as a pile of disconnected tasks, we built JobMaxxing around small steps that help users move forward.

What it does

JobMaxxing turns job preparation into a set of quests. Users can upload a resume for feedback, work through targeted improvements, find roles matched to their goals, and practice for a specific job with an AI interviewer or a friend.

The interview flow starts with a job description. JobMaxxing identifies the role and relevant skills, then uses that context to shape interview questions. After the practice session, users receive feedback and earn XP. Completing quests and interviews builds progress through the app.

How we built it

JobMaxxing is a React 19 app built on TanStack Start, which handles routing, SSR, and server functions. The interface uses Tailwind CSS v4 and Framer Motion. It runs on Cloudflare Workers, and all sensitive logic lives in server functions, so the browser never touches database code or credentials.

Data and auth. Data lives in Neon Postgres, accessed through the Lovable connector gateway. Authentication is custom: email plus PBKDF2 password hashing, with session tokens stored as SHA-256 hashes. Sessions last 30 days, are limited to a user's 5 newest devices, and travel in HTTP-only, partitioned cookies.

AI agents. Server-side workflows call dedicated agents:

  • Job parser: extracts the role, seniority, responsibilities, and required skills from pasted text, uploaded files, or URLs. URL fetches are validated to prevent SSRF.
  • Question generator: creates interview questions by role type (technical, behavioral, mixed, or resume-focused) and session length.
  • Grader: scores answers on conciseness, technical depth, STAR structure, tone, and clarity, then maps results to a skill rating.
  • Resume agent: keeps one persistent conversation per user, checks ATS readability, scores resumes on a 100-point rubric, and releases fixes in batches of three.
  • Skill expert: vets custom skills before they join the Skill Radar.

Every agent has a deterministic local fallback if its key is missing or the request times out.

Voice and peer interviews. ElevenLabs provides curated interviewer voices. Speech recognition uses the browser's SpeechRecognition API or ElevenLabs Realtime Scribe, with a flush-and-wait buffer so in-flight speech isn't dropped. Peer interviews use STUN-only WebRTC audio, with signaling handled through an atomic JSONB column in Postgres instead of a WebSocket server. Live speech passes through automated moderation, and both participants are graded in a single batch at the end.

Progression. XP can't be minted by the client. Payouts are computed server-side from saved grades and recorded as idempotent events. Daily and weekly quests reset on UTC boundaries, 7-day streaks grant bonus XP, and skill ratings never decrease. Redeemable points are calculated on demand as XP earned minus store purchases, and wearables for our mascot, Max, are placed with multi-pose anchor math so they fit across all 8 poses.

Job Radar. We query the Adzuna API by role and location, pre-filter titles with fuzzy regex matching to conserve agent tokens, and save the top 5 matches. Job status (Saved, Applied, Interviewing, Dismissed) is tracked separately from practice sessions.

Accessibility. Users can turn on reduced motion, large text, high contrast, a dyslexia-friendly font, and live interview captions.

Challenges we ran into

A central challenge was bringing several kinds of career preparation together without making them feel like unrelated tools. Resume feedback, job search, and interview practice each work differently, so we designed quests and XP to connect them in one loop.

Technically, we had two hard problems. Peer interviews needed real-time signaling without a dedicated WebSocket server, so we built it on an atomic JSONB column in Postgres. And because XP is a reward system, we had to make it tamper-proof: payouts are computed server-side from saved grades and recorded as idempotent events, so the client can't mint XP and retries can't double-pay.

Accomplishments we're proud of

We're proud that JobMaxxing turns career feedback into actions users can take. A resume review can point to specific improvements, a job description can shape interview practice, and completing that practice contributes to a user's progress.

We also built both solo AI interview practice and a peer interview experience, giving users different ways to prepare.

What we learned

We learned that career feedback is more useful when it's tied to a real role and followed by a concrete next step. We also saw how progression and rewards can make a stressful process feel more approachable, as long as the underlying advice remains useful.

What's next for JobMaxxing

We want to keep improving how interview follow-ups respond to a user's answers, make the accessible text interview flow as smooth as voice practice, and strengthen the connection between matched jobs, interview practice, and resume improvements.

Demo flow

  1. Start on the landing page and introduce JobMaxxing's goal: making job hunting more manageable through practice and progress.
  2. Sign in and open the resume analyzer to show how feedback becomes targeted quests.
  3. Start a mock interview using a job description. Show how the role informs the interview and briefly demonstrate the voice or text mode.
  4. Show how completing practice contributes XP, then visit the store to demonstrate how users can use their progress.

Suggested Devpost tags

React · TanStack Start · TypeScript · Tailwind CSS · Framer Motion · Cloudflare Workers · PostgreSQL · Neon · ElevenLabs · Adzuna API · WebRTC · Web Speech API · REST API · Artificial Intelligence

Built With

Share this project:

Updates

Submission history