GitHub - ailevated-randy-alonzo/jobpilot-career-copilot: Full-stack AI career copilot for organizing job applications, managing résumé versions, comparing experience against job descriptions, and preparing for interviews. Built with TypeScript, React, Cloudflare Workers, D1, R2, and Drizzle ORM, with private file storage, authenticated APIs, and evidence-backed guidance. · GitHub
Skip to content

Repository files navigation

JobPilot

An evidence-first AI workspace for a more focused job search

Track opportunities, organize tailored résumé versions, compare your experience with real job descriptions, and turn the results into a practical interview plan.

TypeScript React OpenAI Cloudflare

View hosted workspace · Explore features · Run locally

The hosted workspace is currently private and requires authorized Sign in with ChatGPT access. The repository can be run locally with a demonstration identity and realistic sample applications.

JobPilot dashboard showing application statistics and pipeline health

Why JobPilot?

Job searching usually spreads important information across bookmarks, spreadsheets, documents, and notes. JobPilot brings that workflow into one private workspace and adds an AI copilot that works from actual résumé evidence.

Instead of producing an unexplained “fit score,” JobPilot shows what evidence supports each match, calls out honest gaps, suggests practical résumé improvements, and creates interview questions grounded in the selected role.

Core features

Area What JobPilot provides
Application pipeline Add, search, filter, inspect, update, and remove opportunities across Saved, Applied, Interview, Offer, and Closed stages.
Résumé library Upload and manage private PDF, DOC, and DOCX versions up to 5 MB, with ownership-checked downloads and deletion.
Evidence-first comparison Match résumé experience to a real job description with supporting evidence and clearly identified skill gaps.
Interview preparation Generate tailored questions, answer guidance, talking points, and role-specific preparation priorities.
Private AI history Revisit previous Copilot briefs and permanently delete analyses from the workspace.
Responsive experience A focused interface designed for both desktop and mobile workflows.

Product tour

Keep the entire pipeline visible

Search opportunities, filter by status, and update application stages without losing the context of the role.

JobPilot application pipeline with realistic sample opportunities

Turn evidence into an interview plan

Select an opportunity and résumé version to build a structured Copilot brief covering matched evidence, gaps, résumé edits, and interview preparation.

JobPilot AI Copilot comparison workspace

How the AI workflow works

  1. The user selects one saved application and one résumé version.
  2. The server verifies ownership of both records.
  3. The private résumé file and job description are sent to the OpenAI Responses API.
  4. Structured Outputs return matched skills, gaps, improvements, questions, and talking points.
  5. The completed brief is stored privately and can be revisited or deleted.

JobPilot uses store: false for OpenAI requests and keeps the API key entirely on the server.

Architecture

flowchart LR
    U["Authenticated user"] --> UI["React + Vinext interface"]
    AUTH["Sign in with ChatGPT"] --> UI
    UI --> API["Server API routes"]
    API --> D1[("Cloudflare D1")]
    API --> R2[("Private Cloudflare R2")]
    API --> OAI["OpenAI Responses API"]
    D1 --> DATA["Applications, metadata, and analyses"]
    R2 --> FILES["Private résumé files"]
    OAI --> BRIEF["Structured Copilot brief"]
    BRIEF --> D1
Loading

Technology stack

Layer Technology
Frontend React 19, TypeScript, Next.js-compatible Vinext
Styling Responsive custom CSS
Server Cloudflare Workers-compatible server routes
Structured data Cloudflare D1 and Drizzle ORM
File storage Private Cloudflare R2
Authentication Sign in with ChatGPT identity supplied by Sites
AI OpenAI Responses API, GPT-5.6 Terra, and Structured Outputs
Validation ESLint, production builds, and rendered HTML tests

Privacy and responsible AI

  • Every application, résumé, and analysis query is scoped to the signed-in user.
  • Résumé files are never placed in a public asset directory.
  • Downloads pass through an ownership-checked server route.
  • Only PDF, DOC, and DOCX files up to 5 MB are accepted.
  • The OpenAI API key is never exposed to browser code.
  • AI requests use store: false and a privacy-preserving safety identifier.
  • Users can permanently delete uploaded résumés and saved Copilot analyses.
  • Skill matches include evidence instead of relying on an opaque score.
  • AI output is presented as preparation guidance, never as a hiring recommendation.

Getting started

Prerequisites

  • Node.js 22.13 or newer
  • npm
  • An OpenAI API key for Copilot generation

Installation

Clone the repository using GitHub's Code button, then run:

cd jobpilot-ai-copilot
npm install

Create .env.local in the project root:

OPENAI_API_KEY=your_openai_api_key

Never commit .env.local or expose the key in client-side code.

Start the local development server:

npm run dev

The local preview uses a demonstration identity and automatically provides realistic sample applications. Hosted access uses the authenticated platform identity, and every API request verifies resource ownership on the server.

Available scripts

Command Purpose
npm run dev Start the local Vinext development server
npm run build Create the production Cloudflare-compatible build
npm run lint Run ESLint across the project
npm test Build the application and run rendered HTML tests
npm run db:generate Generate Drizzle database migrations

Project structure

app/
├── api/                  # Ownership-checked server endpoints
├── JobPilotApp.tsx       # Main application workspace
├── chatgpt-auth.ts       # Hosted and local identity handling
└── globals.css           # Responsive product styling
db/
├── runtime.ts            # D1, R2, and secret bindings
└── schema.ts             # Applications, résumés, and analyses
drizzle/                  # Versioned database migrations
tests/                    # Rendered output tests
worker/                   # Cloudflare Worker entry point

Current status

JobPilot currently includes the complete application pipeline, private résumé storage, AI comparison workflow, analysis history, authentication, responsive interface, and production deployment.

AI generation requires an OpenAI API project with active billing or prepaid credits. The rest of the workspace can still be explored locally without making an AI request.

Roadmap

  • Public recruiter-friendly demonstration mode with synthetic data
  • Calendar reminders for interviews and follow-ups
  • Exportable interview preparation briefs
  • Application activity timeline
  • Automated accessibility and end-to-end browser tests
  • Optional semantic résumé search across multiple saved versions

Design principle

Career AI should help people explain their evidence—not hide decisions behind a number.

About

Full-stack AI career copilot for organizing job applications, managing résumé versions, comparing experience against job descriptions, and preparing for interviews. Built with TypeScript, React, Cloudflare Workers, D1, R2, and Drizzle ORM, with private file storage, authenticated APIs, and evidence-backed guidance.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages