Inspiration
What it does
How we built itMost students apply to dozens of jobs and internships, upload the same resume everywhere, and never hear back. The people who do get interviews usually have a tailored resume, a relevant project, and someone inside who referred them. We wanted to give everyone that same playbook for every application.
What it does
CareerOS turns one job link into a full campaign to land the interview:
- Application package: scrapes the application, finds every requirement (resume, cover letter, short answers, personal details) and generates them into one folder, written in the user's preferred style.
- Resume tailoring: suggests changes for the exact job. The user approves, rejects, or gives feedback on each one, and CareerOS learns from it.
- Keyword and requirement match: checks the resume covers everything the job asks for.
- Project booster: if a small project or course would meaningfully raise the user's chances, it suggests one and gives a ready prompt to build it with any frontier AI model.
- Referral finder: finds hiring managers, recruiters, and alumni with shared education, then drafts cold emails with links to the user's projects.
- Interview prep: mock interviews and technical practice tailored to the role.
- Profile memory: remembers the user's experience, projects, and writing style so every campaign gets better.
It has a hard rule: it never makes anything up, about the user or anyone else. Nothing is sent without the user's click.
How we built it
- Next.js 15 (App Router), React 19, strict TypeScript, and Tailwind.
- Claude (Anthropic API) reads resumes natively and turns a resume and job posting into a structured campaign through schema-constrained calls.
- Zod validates every model response and every stored record.
- HarvestAPI on Apify supplies real LinkedIn profile, company, and employee data for the referral finder.
- React Flow powers the Opportunity Graph showing the warmest path into a company.
- Pure, deterministic engines for fit scoring, gap analysis, and outreach, tested with Vitest.
- An offline demo mode runs the full product without any API keys.
Challenges we ran into
- LinkedIn data limits: no tool can see a person's connections, so we find warm paths through shared schools and past employers instead, and label those as inference.
- Keeping the AI honest: we had to design prompts, schemas, and labels so the model never invents experience, metrics, people, or emails.
- Untrusted input: job posts and scraped pages can contain prompt injections, so all of it is scanned and treated as data, never instructions.
- Application portals: many applications sit behind logins, which limits what can be scraped automatically.
Accomplishments that we're proud of
- An honesty contract built into the product, not added as a disclaimer: sourced contacts, unconfirmed emails clearly labeled, and a Claim Verification pass that flags the user's own exaggerated resume claims.
- Demo and live modes share the exact same schema, so real AI output drops into the UI with zero UI changes.
- The gap engine explains why a requirement is missing (skill, wording, or proof) and gives the matching fix.
What we learned
- Getting an interview is less about the resume and more about proof and people.
- Structured, validated AI output is far more reliable than free text.
- Being upfront about what the product can't know builds more trust than pretending it can.
What's next for CareerOS
- Chrome extension to read application forms behind logins.
- Upload of the user's LinkedIn connections export to find true first-degree referrals.
- Tracking replies and follow-ups in the Campaign Inbox with a live Gmail connection.
- Cloud accounts with Supabase so profiles and campaigns sync across devices.
- Outcome tracking to learn which campaign actions actually lead to interviews.
Built With
- anthropic
- apify
- claude
- claude-api
- gmail-api
- harvestapi
- next.js
- node.js
- react
- react-flow
- tailwind-css
- typescript
- vitest
- zod
Log in or sign up for Devpost to join the conversation.