# CareerOS
## Inspiration
Job hunting as a fresh graduate in Singapore is overwhelming — dozens of portals, hundreds of listings, manual applications, and no way to know which roles actually match your skills. We wanted a single platform that acts as a personal career copilot: one that knows your profile, finds the right jobs, applies for you, and helps you grow into the roles you want.
## What it does
CareerOS is an AI-powered career management platform that handles the entire job search lifecycle:
- **Profile Building** — Upload your resume or link your GitHub; AI extracts and normalizes your skills with proficiency levels
- **Job Matching** — Aggregates listings from 6+ sources (Indeed, Glassdoor, JobStreet, MyCareersFuture, Prosple, eFinancialCareers) and scores each against your profile
- **Swipe Interface** — Tinder-style job browsing with fit scores; swipe right to save or auto-apply via LinkedIn
- **Application Tracking** — Kanban pipeline from **Saved → Applied → Interview → Offer** with notes and reminders
- **Referral Outreach** — Finds contacts at target companies and sends personalized emails through Gmail integration
- **Upskilling Roadmaps** — AI identifies skill gaps and generates weekly learning plans with resources
- **AI Career Advisor** — Context-aware chatbot that remembers your goals across sessions
## How we built it
- **Frontend:** React + TypeScript + Vite, styled with Tailwind and shadcn/ui, animations via Framer Motion, charts with Recharts
- **AI Server (Node.js):** Express backend using Vercel AI SDK with streaming tool-calling, PDF resume parsing, CSV job normalization, Gmail OAuth2, and persistent JSON-based memory
- **Automation (Python/Flask):** LinkedIn job search with BeautifulSoup scraping, LinkedIn Easy Apply automation with Playwright browser control
- **AI Architecture:** 7 specialized agents (**Profile, Jobs, Matcher, Roadmap, Tracker, Outreach, Research**) each with scoped tools, all accessible through a unified chat interface with conversation memory
## Challenges we faced
- **Multi-source job normalization** — Each job portal CSV has different column names and formats; building a universal schema that handles all 6 sources cleanly took significant iteration
- **Fit scoring accuracy** — Balancing required vs. preferred skills, handling alias variations (e.g., *"JS"* vs *"JavaScript"* vs *"Node.js"*), and producing scores that actually feel meaningful
- **Streaming + tool calling** — Getting the AI to stream responses while simultaneously executing tools (searching jobs, calculating scores) required careful orchestration with the Vercel AI SDK
- **LinkedIn automation reliability** — Rate limiting, dynamic page structures, and anti-bot detection made Easy Apply automation fragile; headless mode and randomized delays helped
- **Context window management** — Injecting user profile, skills, job history, and memory into every AI prompt without exceeding token limits
## What we learned
- Vercel AI SDK's tool-calling abstraction makes building agentic workflows surprisingly ergonomic
- Local JSON file storage is underrated for prototyping — no database setup, easy to inspect and reset
- Skill normalization is a harder NLP problem than expected; alias dictionaries only get you 80% of the way
- Building for demo reliability (headless browsers, success toasts regardless of outcome) is its own engineering challenge
Log in or sign up for Devpost to join the conversation.