AI-powered career navigator: discover jobs, score resume fit, generate tailored documents, track applications on a Kanban board, and grow post-hire in Tribes — with explicit user approval before any external action.
- Next.js App Router + TypeScript (hosted on Netlify)
- Tailwind CSS + shadcn/ui
- Clerk authentication
- Neon Postgres + Drizzle ORM + pgvector
- Firecrawl structured extraction with deterministic local fallback
- Cloudflare Workers AI embeddings + AI Gateway
- n8n orchestration calling signed ApplyOS machine APIs
- Cloudflare Email Routing (inbound) + Resend (outbound)
- Copy env template and fill in values:
cp .env.example .env.local- Install and run:
pnpm install
pnpm dev- Apply committed database migrations (requires
DATABASE_URL):
pnpm db:migrate- Verify the application:
pnpm check
pnpm buildSee docs/deploy/netlify.md for Netlify deploys and docs/architecture/decisions.md for product architecture decisions.
- Clerk users are provisioned into Neon on first authenticated access.
- Multimodal onboarding: questionnaire, consented public profile URL, PDF/DOCX.
- Job-Hunt Scorecard synthesizes competencies, targets, and skill gaps.
- Users approve public career URLs; Firecrawl (or mock) ingests jobs.
- Neon pgvector ranks jobs; LLM scoring adds explanations and gaps.
- Prepare Application HITL workspace with edit/re-approve and PDF/text export.
- Kanban stages through Hired; email classifications remain suggestions until approved.
- Isolated inbound addresses (
*@inbound.applyos.me); outbound via Resend after approval. - Hired unlocks ApplyOS Tribes and post-hire milestones.
- n8n workflows call signed machine APIs; Next.js remains the Neon write boundary.
Chat — Set an OpenAI-compatible base URL ending before /chat/completions.
Optionally set AI_GATEWAY_ID for Cloudflare AI Gateway.
Embeddings — Set CLOUDFLARE_ACCOUNT_ID and CLOUDFLARE_API_TOKEN. Default
model is @cf/baai/bge-base-en-v1.5 (768 dims, cls pooling).
ApplyOS never invents resume facts, automatically submits applications, sends email, creates calendar events, or changes application status from an email classification without explicit approval.