AI-powered job application automation and professional profile analysis system. Automate your job search, analyze your profile strengths, and submit tailored applications effortlessly.
- Profile Analysis: Upload CV and LinkedIn profile for AI-powered analysis
- Job Matching: Smart job matching based on skills, salary, and location
- Application Automation: Generate personalized cover letters and answers
- Analytics Dashboard: Track application progress and success rates
- Student Registration: Dedicated signup flow for students
- Academic Profile: Track GPA, coursework, projects, and internships
- Career Guidance: AI-powered career recommendations and skill gap analysis
- Entry-Level Jobs: Matching for internships and entry-level positions
- Market Relevance: Real-time scoring of profile strength and readiness
- Profile Analyzer: Specialized analysis for student profiles
- Multi-LLM Support: Works with Claude API and OpenAI
- Web App + CLI: Both web interface and command-line interface
- OAuth Authentication: Google, GitHub, and LinkedIn login
ai-apply-analyzer/
βββ packages/
β βββ api/ # Express backend API
β βββ web/ # Next.js web application
β βββ cli/ # Node.js CLI tool
β βββ shared/ # Shared types and utilities
β βββ database/ # Database migrations
βββ docker-compose.yml # Local development setup
βββ .env.example # Environment variables template
βββ README.md
- Backend: Express.js + TypeScript + PostgreSQL
- Frontend: Next.js + React + Tailwind CSS
- CLI: Commander.js + Chalk
- AI: Claude API + OpenAI API
- Cache: Redis
- Database: PostgreSQL
- File Parsing: pdf-parse + mammoth
- Automation: Playwright + Puppeteer
- Node.js 18+
- Docker & Docker Compose
- PostgreSQL 13+ (or use Docker)
- Redis (or use Docker)
- Claude API key or OpenAI API key
π For detailed step-by-step instructions, see LOCAL_SETUP.md
# 1. Install dependencies
cd ai-apply-analyzer
npm install
# 2. Configure environment
cp .env.example .env
# Edit .env with your API keys (CLAUDE_API_KEY or OPENAI_API_KEY required)
# 3. Start Docker services
npm run docker:up
# 4. Initialize database
docker exec -i ai_apply_postgres psql -U user -d ai_apply_analyzer < packages/database/migrations/001-initial-schema.sql
docker exec -i ai_apply_postgres psql -U user -d ai_apply_analyzer < packages/database/migrations/002-add-student-support.sql
# 5. Start development servers
npm run devAccess the application:
- Web App: http://localhost:3001
- API: http://localhost:3000
Minimum required environment variables:
CLAUDE_API_KEYorOPENAI_API_KEY(at least one required)JWT_SECRET(generate a secure random string)DATABASE_URL(auto-configured by Docker)REDIS_URL(auto-configured by Docker)
POST /api/auth/register- Register professional accountPOST /api/auth/register/student- Register student account (NEW!)POST /api/auth/login- LoginPOST /api/auth/logout- LogoutPOST /api/auth/refresh- Refresh tokensGET /api/auth/me- Get current user
POST /api/profile/analyze- Upload CV and analyzeGET /api/profile- Get user profilePUT /api/profile/preferences- Update preferencesGET /api/profile/recommendations- Get recommendationsGET /api/profile/market-analysis- Market analysis
POST /api/jobs/search- Search jobsGET /api/jobs/:id- Get job detailsPOST /api/jobs/manual- Add job manuallyGET /api/jobs/recent- Recent jobsGET /api/jobs/user/matches- User's matched jobs
POST /api/applications/draft- Create draft applicationPOST /api/applications/submit- Submit applicationGET /api/applications- List applicationsGET /api/applications/:id- Get application detailsPUT /api/applications/:id- Edit applicationPUT /api/applications/:id/status- Update statusDELETE /api/applications/:id- Withdraw application
GET /api/student/profile- Get student profilePOST /api/student/profile- Update student profilePOST /api/student/analyze- Analyze student profile with AIGET /api/student/recommendations- Get career recommendationsGET /api/student/job-matches- Get matched job opportunitiesGET /api/student/market-relevance- Get market relevance score
GET /api/analytics/dashboard- Dashboard metricsGET /api/analytics/applications/trend- Application trendsGET /api/analytics/success-stats- Success statisticsGET /api/analytics/response-rate/trend- Response rate trends
Core tables:
users- User accounts (with user_type: professional/student/graduate)user_profiles- Professional profile data and analysisstudent_profiles- Student academic profiles (NEW!)graduate_profiles- Post-graduation tracking (NEW!)user_oauth_accounts- OAuth connectionsjob_listings- Job postings (with entry-level/internship filters)applications- Job applicationsjob_matches- Cached match scoresuser_preferences- Search preferencesanalytics_events- User activity tracking
Migrations:
001-initial-schema.sql- Core tables002-add-student-support.sql- Student features (NEW!)
npm test # Run all tests
npm test -w packages/api # API tests only
npm test -w packages/web # Web tests only# Build all packages
npm run build
# Build specific package
npm run build -w packages/api
# Docker deployment
docker-compose -f docker-compose.yml up- OAuth tokens are encrypted in database
- JWT tokens use httpOnly cookies
- File uploads are validated and scanned
- SQL injection prevention via parameterized queries
- Password hashing with bcryptjs
- CSRF token support
Full API documentation available at /api/docs (when running)
curl -X POST http://localhost:3000/api/profile/analyze \
-H "Authorization: Bearer YOUR_TOKEN" \
-F "cv_file=@resume.pdf"curl -X POST http://localhost:3000/api/jobs/search \
-H "Content-Type: application/json" \
-d '{
"skills": ["React", "Node.js"],
"min_salary": 100000,
"max_salary": 150000,
"locations": ["San Francisco", "Remote"],
"limit": 20
}'curl -X POST http://localhost:3000/api/applications/draft \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"job_id": "uuid"}'- Email notification system
- Scheduled job scraping
- Job board integrations (LinkedIn, Indeed)
- Auto-fill form submission
- Advanced matching algorithm
- Team collaboration features
- API rate limiting
- Advanced analytics
Contributions welcome! Please follow the existing code patterns and submit PRs.
MIT License
For issues and questions, please open an issue on GitHub or contact support.
Built with Claude AI and OpenAI π€