Source code for roboapply.co — an AI-powered job application platform that helps job seekers tailor resumes, generate cover letters, practice interviews, and manage applications.
RoboApply is a full-stack web application that combines AI (Claude, OpenAI) with real-time voice (Deepgram) to offer:
- AI Resume Tailoring — Tailor resumes to job descriptions with credit-based usage
- Bulk & Single Resume Generator — Generate multiple tailored resumes from a job list
- AI Cover Letters — Create and manage cover letters with templates
- Resume Builder — Step-by-step resume creation with templates
- Resume Score / Scan — AI-powered resume analysis and improvement tips
- Interview Guide — Prepare for interviews with AI-generated Q&A
- Live AI Interview Copilot — Real-time voice practice with Claude + Deepgram
- Auto-Apply Dashboard — Track jobs and applications
- Billing & Subscriptions — Stripe subscriptions, plans, and credit system
The project was developed in GitLab; the repository may have limited commit history but represents a production-ready application.
| Layer | Technologies |
|---|---|
| Frontend | React 18, Vite, TypeScript/JSX, React Router, Tailwind CSS, MUI, Ant Design, Zustand, Stripe (React), Socket.IO client, Recharts, react-pdf, docx, OneSignal |
| Backend | Node.js, Express, MongoDB (Mongoose), Socket.IO, Stripe (webhooks & API), Anthropic (Claude), OpenAI, Deepgram (voice), AWS S3, Brevo (email), node-cron |
| Auth | JWT, Google OAuth, LinkedIn OAuth (frontend) |
├── frontend/ # React SPA (Vite)
│ ├── src/
│ │ ├── api/ # API client & endpoints
│ │ ├── components/ # Shared UI components
│ │ ├── contexts/ # React contexts
│ │ ├── pages/ # Route pages (dashboard, resume, cover letter, interview, etc.)
│ │ ├── router/ # React Router setup & PrivateRoute
│ │ ├── stores/ # Zustand stores
│ │ ├── hooks/, utils/, layout/, extension/
│ │ └── public/
│ ├── vite.config.js
│ └── package.json
│
├── backend/ # Express API server
│ ├── config/ # DB, env, AI config
│ ├── controllers/ # Request handlers (user, resume, stripe, interview, etc.)
│ ├── models/ # Mongoose models
│ ├── routes/ # API route modules
│ ├── services/ # Claude, resume session, etc.
│ ├── sockets/ # Deepgram & Claude Socket.IO handlers
│ ├── utils/ # Auth, Stripe, encryption, credit manager
│ ├── helpers/ # Email (Brevo), etc.
│ ├── index.js # App entry, CORS, Socket.IO, Stripe webhook
│ └── package.json
│
└── README.md
- Node.js (v18+ recommended)
- MongoDB (local or Atlas)
- npm or yarn
git clone <repository-url>
cd -Robo-Apply
# Frontend
cd frontend && npm install && cd ..
# Backend
cd backend && npm install && cd ..Backend (backend/.env):
Create a .env file in backend/ with at least:
# Server
NODE_ENV=development
PORT=3001
# Database
DB_URL=mongodb://localhost:27017
DB_NAME=roboapply
# Auth
JWT_SECRET=your-jwt-secret
# Stripe (required for billing)
STRIPE_SECRET_KEY=sk_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Optional: ENCRYPTION_MASTER_KEY for encrypted Stripe key (see backend/STRIPE_KEY_ENCRYPTION_GUIDE.md)
# AI (for resume/cover letter/interview features)
ANTHROPIC_API_KEY=...
OPENAI_API_KEY=...
# Optional: ANTHROPIC_MODEL, ANTHROPIC_MAX_TOKENS
# Voice (for Live Interview Copilot)
DEEPGRAM_API_KEY=...
# Optional: DEEPGRAM_MODEL, DEEPGRAM_LANGUAGE, etc. (see backend/config/env.js)
# Email (Brevo)
BREVO_API_KEY=...
BREVO_SENDER=...
BREVO_SENDER_NAME=...
BREVO_SENDER_EMAIL=...
# AWS (if using S3)
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
AWS_BUCKET=...Frontend (frontend/.env or .env.local):
Point to your backend and any public keys (e.g. Stripe publishable key, Google OAuth client ID). Example:
VITE_API_BASE_URL=http://localhost:3001
VITE_STRIPE_PUBLISHABLE_KEY=pk_...Adjust variable names if your frontend uses different env prefixes (e.g. REACT_APP_ or custom names in vite.config.js).
Terminal 1 – backend
cd backend
npm startUses nodemon by default; server runs on PORT (e.g. http://localhost:3001). Socket.IO and Stripe webhook are mounted on the same server.
Terminal 2 – frontend
cd frontend
npm run devVite dev server (e.g. http://localhost:5173). Ensure CORS in backend/index.js allows your frontend origin (e.g. http://localhost:5173).
# Frontend
cd frontend && npm run build && cd ..
# Backend: run with node
cd backend && node index.js- Credit system — Free trial credits, plan-based limits, and per-feature costs. See
backend/CREDIT_SYSTEM_DOCUMENTATION.mdandbackend/SMART_CREDIT_USAGE.md. - Stripe — Checkout, customer portal, webhooks. See
backend/STRIPE_CHECKOUT_INTEGRATION.md,backend/STRIPE_CUSTOMER_PORTAL_SETUP.md. - Sockets —
sockets/deepgram.socket.js(voice),sockets/claude.socket.js(interview copilot). - Cron — Trial checks and trial emails:
trialCheckCron.js,trialEmailCron.js. Optional credit award cron is present inindex.jsbut commented out (referencesawardCreditsToNewUser.js).
| Document | Description |
|---|---|
backend/CREDIT_SYSTEM_DOCUMENTATION.md |
Credit system overview and usage |
backend/CREDIT_SYSTEM_TECHNICAL_GUIDE.md |
Technical credit implementation |
backend/SMART_CREDIT_USAGE.md |
Smart credit usage and optimization |
backend/STRIPE_CHECKOUT_INTEGRATION.md |
Stripe checkout integration |
backend/STRIPE_CUSTOMER_PORTAL_SETUP.md |
Stripe customer portal |
backend/STRIPE_KEY_ENCRYPTION_GUIDE.md |
Encrypting Stripe keys |
backend/USER_ONBOARDING_API.md |
Onboarding API |
frontend/src/pages/AIBulkResumeGenerator/README.md |
Bulk resume generator module |
ISC (see backend/package.json). This is the source for the live product at roboapply.co.
Hello from two people!
Hello from two people!