An AI-powered job application tracker and PWA — built to eliminate the spreadsheet and put your entire job search in one place.
- Upload once — AI parses your resume into skills, experience, and a strength score
- Daily job discovery — aggregates listings from Remotive, Arbeitnow, and HN Who's Hiring; scores each one 0–100 against your resume
- Kanban pipeline — drag-and-drop board tracks every application from Saved → Offer / Rejected
- AI cover letters — streams a tailored letter word-by-word; three tone options; version history
- Interview prep — generates likely questions by category with hints, key themes, and gap analysis
- Push notifications — daily digest at 9am, follow-up reminders you set per application
- Works offline — installable PWA with service worker caching
| Layer | Technology |
|---|---|
| Framework | Next.js 14 App Router + TypeScript |
| Styling | Tailwind CSS + shadcn/ui (dark-first) |
| Auth | Clerk v6 (Google OAuth + magic link) |
| Database | PostgreSQL via Supabase + Prisma 7 |
| AI | Vercel AI SDK + Google Gemini 1.5 Pro/Flash |
| File Storage | Cloudflare R2 (S3-compatible) |
| State | TanStack Query v5 (server state) |
| Drag-and-drop | dnd-kit |
| Charts | Recharts |
| Animations | Framer Motion |
| Push | web-push (VAPID) |
| PWA | next-pwa (Workbox) |
| Hosting | Vercel (cron jobs + edge) |
- Discover — scan 3 free job sources, filter by score / remote, paginated with sort
- AI Scoring — Gemini Flash scores each job vs your active resume, flags strengths & gaps
- Pipeline Kanban — 6 default stages, drag-and-drop, click-to-open detail panel
- Cover Letter Generator — streaming SSE output, tone selector, 5-version history
- Interview Prep — AI questions by category (Behavioural / Technical / Situational / Culture)
- Follow-up Reminders — set a date on any application, get a push notification
- Analytics — response rate, funnel chart, weekly trend, average score
- Dark / Light / System theme toggle
- PWA — installable on iOS and Android, offline read access
# 1. Clone and install
git clone <repo>
cd job-command-center
npm install
# 2. Copy env template
cp .env.example .env.local
# Fill in all values (see table below)
# 3. Push the DB schema
npx prisma db push
# 4. Run
npm run devOpen http://localhost:3000.
| Variable | Where to get it |
|---|---|
DATABASE_URL |
Supabase → Settings → Database → Connection string (Transaction mode) |
DIRECT_URL |
Supabase → Settings → Database → Connection string (Session mode) |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
clerk.com → API Keys |
CLERK_SECRET_KEY |
Clerk → API Keys |
GOOGLE_GENERATIVE_AI_KEY |
aistudio.google.com → Get API key |
CLOUDFLARE_R2_ACCOUNT_ID |
Cloudflare → R2 → Overview |
CLOUDFLARE_R2_ACCESS_KEY_ID |
Cloudflare → R2 → Manage API tokens |
CLOUDFLARE_R2_SECRET_ACCESS_KEY |
Same as above |
CLOUDFLARE_R2_BUCKET_NAME |
Your R2 bucket name |
CLOUDFLARE_R2_PUBLIC_URL |
Cloudflare → R2 → Bucket → Settings → Public Development URL |
UPSTASH_REDIS_REST_URL |
upstash.com → Redis → REST API |
UPSTASH_REDIS_REST_TOKEN |
Same as above |
VAPID_PUBLIC_KEY |
Generate: npx web-push generate-vapid-keys |
VAPID_PRIVATE_KEY |
Same command |
NEXT_PUBLIC_VAPID_PUBLIC_KEY |
Same as VAPID_PUBLIC_KEY |
NEXT_PUBLIC_APP_URL |
http://localhost:3000 locally, your Vercel URL in prod |
CRON_SECRET |
Any random string — set same value in Vercel env |
- API Routes — all server logic lives in
app/api/. Auth via Clerk middleware (middleware.ts) - AI layer —
lib/ai.tsexportsproModel(Gemini 1.5 Pro) andflashModel(Flash). Swap to Claude by changing two lines - DB — Prisma 7 with pg adapter. Schema in
prisma/schema.prisma, datasource URL inprisma.config.ts - File uploads — resumes go to Cloudflare R2, URL stored in DB
- Crons —
vercel.jsonschedules daily digest (09:00 UTC) and reminder check (08:00 UTC) - Push — VAPID keys +
web-push. Subscriptions stored inPushSubscriptiontable
- Full-stack ownership — DB schema → serverless API → animated PWA UI, shipped solo
- AI product thinking — streaming UX, structured output, prompt caching strategy, model swap path
- PWA expertise — service workers, background sync, web push, offline-first
- Realtime patterns — SSE streaming for cover letters, optimistic Kanban updates
- Infrastructure — Vercel cron jobs, R2 object storage, Supabase RLS, edge deployment