AI-Powered Career Engineering Platform
Transform your resume into a personalized career roadmap with AI-driven skill analysis, project recommendations, and interview preparation.
- Overview
- Features
- Architecture
- Tech Stack
- Prerequisites
- Installation
- Configuration
- Running the Application
- API Documentation
- Firebase Authentication
- Project Structure
- Key Components
- AI Analysis Logic
- Deployment
- Troubleshooting
- Contributing
- License
CareerArchitect.ai is an intelligent career development platform that analyzes your resume using advanced AI (Groq's Llama 3.3 70B) to:
- ๐ Extract ALL technical skills from your resume (even secondary tools like Git, Jira, Postman)
- ๐ Generate dynamic skill radar charts tailored to your domain (Web, Embedded, Data Science, etc.)
- ๐ฏ Identify critical skill gaps with 4-6 targeted missing skills for growth
- ๐ ๏ธ Recommend 3 detailed projects (Gap Filler, Strength Builder, Showstopper)
- ๐ผ Provide 8 scenario-based interview questions per project
- ๐ฌ Offer AI-powered career mentorship via chat interface
- ๐ Perform Job Description gap analysis for targeted applications
- ๐ผ Analyze LinkedIn profiles in addition to traditional resumes
Unlike traditional resume analyzers, CareerArchitect uses a "Max Content" approach:
- โ Detects every technical keyword (not just primary skills)
- โ Generates 3-4 sentence detailed project descriptions (not generic templates)
- โ Creates domain-specific radar charts (not one-size-fits-all)
- โ Provides 8 deep interview questions per project (not surface-level)
- โ Includes optional JD analysis for resume-job fit scoring
- โ Persists analysis history to PostgreSQL for long-term tracking
- Landing Page: Hero section with stats (10K+ Blueprints, 500+ Skills, 95% Success Rate)
- Login Page: Firebase Authentication (Google Sign-In + Email/Password)
- Dashboard: Protected route with resume upload and analysis results
- Projects View: Dedicated page for project recommendations with modal details
- History View: Browse and manage past analyses with statistics
- Firebase Authentication integration
- Protected routes with auto-redirect to login
- User session management
- Logout functionality with dropdown menu
- Wide rectangular upload banner with dashed border and glow effect
- Drag & drop support for PDF files
- File validation (type, size limit: 10MB)
- Real-time file info display
- NEW: LinkedIn profile analysis endpoint
- Smart Server Wake-Up: Proactive health check triggered on page load to eliminate cold-start latency on free-tier cloud deployments (Render, Railway)
- Background ping to
/api/v1/pingendpoint keeps services warm - Seamless user experience with no waiting for server spin-up
- Maximum skill detection: Extracts ALL technical keywords from resume
- Dynamic radar charts: 5 axes tailored to your domain (e.g., "Low Level" for Embedded, "Frontend" for Web)
- Missing skills identification: 4-6 critical gaps for next-level growth
- Fair scoring: Realistic 60-70 scores for good students (not inflated)
Each of the 3 projects includes:
- Type: Gap Filler / Strength Builder / Showstopper
- Title & Tagline: Compelling, professional naming
- Description: 3-4 sentences covering architecture, data flow, and key challenges
- System Architecture: Detailed tech breakdown (Microservices, Event Bus, etc.)
- Tech Stack: List with usage descriptions and icons
- Learning Milestones: Week-by-week roadmap
- Mock Interview Questions: 8 scenario-based questions per project
- Resume Bullets: Ready-to-use achievement statements
- Floating Action Button (FAB) for easy access
- Context-aware chat with personalized greeting
- Discusses projects, skills, and career path
- Smooth animations and auto-scroll
- PostgreSQL database (Supabase) stores all analysis results
- User profiles with statistics (total analyses, best score)
- Complete analysis history with full JSON preservation
- Filter and search past analyses
- Delete or archive old results
- Lovable Design: Deep navy gradient backgrounds with glassmorphism
- Color Palette: Purple (#8b5cf6) primary, Cyan (#06b6d4) accent
- Responsive: Mobile, tablet, and desktop optimized
- Smooth Animations: Transitions, hover effects, and loading states
- Professional Typography: Clean, modern font hierarchy
- Paste target job description during upload
- AI compares your skills vs. job requirements
- Generates targeted gap analysis
- Helps prioritize which skills to learn first
CareerArchitect follows a 4-tier microservice architecture with persistent storage:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FRONTEND (React + Vite) โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โ
โ โ Landing โ โ Login โ โDashboard โ โ History โ โ
โ โ Page โ โ Page โ โ Page โ โ View โ โ
โ โโโโโโฌโโโโโโ โโโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โโโโโโฌโโโโโโ โ
โ โ โ โ โ โ
โ โ (Wake-up ping on load) โ โ โ
โ โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ โ
โ โ โ
โ Firebase Auth โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Port 5173 (Vite Dev) โ
โ or Vercel (Prod) โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ BACKEND GATEWAY (Spring Boot) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ AnalysisController โ โ
โ โ โข GET /api/v1/ping (wake-up endpoint) โ โ
โ โ โข POST /api/v1/analyze?file=<pdf>&jd=<optional> โ โ
โ โ โข POST /api/v1/analyze-linkedin?file=<pdf> โ โ
โ โ โข GET /api/v1/history โ โ
โ โ โข DELETE /api/v1/analysis/{id} โ โ
โ โ โข Validates PDF (type, size) โ โ
โ โ โข Forwards to Python AI Service โ โ
โ โ โข Persists results to PostgreSQL โ โ
โ โ โข Handles errors gracefully โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ Port 8080 โ
โ (or Render URL) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโดโโโโโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PostgreSQL Database โ โ PYTHON AI SERVICE โ
โ (Supabase) โ โ (FastAPI) โ
โ โ โ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โข users โ โ โ /analyze โ โ
โ โข analyses โ โ โ /analyze-linkedin โ โ
โ โข Full JSON storage โ โ โ /chat-with-mentor โ โ
โ โข Analysis history โ โ โโโโโโโโโโโโโโโโโโโโโโ โ
โ โข User statistics โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโ โ Port 5001 โ
โ (or Fly.io/Render URL) โ
โโโโโโโโโโโโโโฌโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโ
โ Groq Cloud โ
โ Llama 3.3 70B โ
โโโโโโโโโโโโโโโโโโ
- User uploads PDF on Dashboard (with optional JD text)
- React triggers wake-up ping to
/api/v1/ping(if needed) to eliminate cold-start - React sends multipart request to Spring Boot (
localhost:8080or Render URL viaVITE_API_URL) - Spring Boot validates file, forwards to Python (
localhost:5001or Fly.io URL) - Python extracts PDF text, sends "Max Content" prompt to Groq
- Groq returns JSON with skills, projects, and radar data
- Python cleans/validates JSON, returns to Spring Boot
- Spring Boot persists analysis to PostgreSQL (user, scores, full JSON)
- Spring Boot forwards enhanced response to React
- React displays results with visualizations and project cards
- User can view history - Spring Boot queries PostgreSQL for past analyses
- Framework: React 18 + Vite
- Routing: React Router v6
- Authentication: Firebase Authentication
- Styling: Pure CSS (no Tailwind!) with CSS custom properties
- Icons: Lucide React
- Charts: Recharts (Radar charts)
- HTTP Client: Fetch API
- Environment Config:
.envfile withVITE_API_URLfor flexible backend targeting
- Framework: Spring Boot 3.2+
- Language: Java 17+
- Build Tool: Maven
- HTTP Client: RestTemplate
- Logging: SLF4J + Logback
- Validation: Spring Validation
- ORM: Spring Data JPA
- JSON Processing: Jackson ObjectMapper
- Database: PostgreSQL 15+
- Hosting: Supabase (managed PostgreSQL)
- Tables:
users,analyseswith full JSONB support - Features: Analysis history, user statistics, soft deletes
- Framework: FastAPI
- Language: Python 3.9+
- AI Provider: Groq Cloud (Llama 3.3 70B Versatile)
- PDF Parser: PyPDF2
- HTTP Server: Uvicorn
- Environment: python-dotenv
- Authentication: Firebase (Google + Email/Password)
- Development: Localhost (multi-service)
- Deployment: Vercel (Frontend), Render (Backend + Python), Supabase (Database)
- Cold-Start Optimization: Proactive health checks via
/pingendpoint
- Node.js: 18+ (Download)
- Java: 17+ (Download)
- Python: 3.9+ (Download)
- Maven: 3.6+ (Download)
- Git: Latest (Download)
- Groq API Key: Free at console.groq.com
- Firebase Project: Free at console.firebase.google.com
- Supabase Account: Free at supabase.com for PostgreSQL database
git clone https://github.com/yourusername/careerarchitect.git
cd careerarchitectcd frontend-react
npm installDependencies:
{
"firebase": "^10.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-router-dom": "^6.0.0",
"lucide-react": "^0.263.1",
"recharts": "^2.5.0"
}cd backend-java
mvn clean installDependencies (pom.xml):
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>cd python-ai
pip install -r requirements.txtrequirements.txt:
fastapi==0.104.1
uvicorn[standard]==0.24.0
PyPDF2==3.0.1
python-dotenv==1.0.0
groq==0.4.0
pydantic==2.5.0
- Create a free account at supabase.com
- Create a new project
- Navigate to SQL Editor
- Run the database schema (see
database/schema.sql) - Copy the connection string from Project Settings โ Database
Create Firebase Project:
- Go to Firebase Console
- Create new project:
CareerArchitect - Enable Authentication โ Email/Password + Google providers
- Get web app config from Project Settings
Add Firebase Keys:
Edit frontend-react/src/firebaseConfig.js:
const firebaseConfig = {
apiKey: "YOUR_FIREBASE_API_KEY",
authDomain: "your-project.firebaseapp.com",
projectId: "your-project-id",
storageBucket: "your-project.appspot.com",
messagingSenderId: "123456789012",
appId: "1:123456:web:abc123def456"
};Get API Key:
- Go to console.groq.com
- Create account (free)
- Generate API key
Create .env file in python-ai/:
# python-ai/.env
GROQ_API_KEY=gsk_your_groq_api_key_here
GROQ_ANALYSIS_KEY=gsk_your_groq_api_key_here # Can be same
GROQ_LINKEDIN_KEY=gsk_your_groq_api_key_here # Can be same
GROQ_CHAT_KEY=gsk_your_groq_api_key_here # Can be sameEdit backend-java/src/main/resources/application.properties:
# Server Configuration
server.port=8080
# AI Service Configuration
ai.service.url=http://localhost:5001
ai.service.timeout=30000
# Database Configuration (Supabase PostgreSQL)
spring.datasource.url=jdbc:postgresql://[YOUR-SUPABASE-HOST]:5432/postgres
spring.datasource.username=[YOUR-SUPABASE-USER]
spring.datasource.password=[YOUR-SUPABASE-PASSWORD]
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
# File Upload Configuration
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
# Logging
logging.level.com.careerarchitect=INFOGet Supabase Connection Details:
- Supabase Dashboard โ Project Settings โ Database
- Copy connection string components (host, user, password)
Create .env file in frontend-react/:
For local development:
# frontend-react/.env
VITE_API_URL=http://localhost:8080/api/v1For production (update before deploying to Vercel):
# frontend-react/.env.production
VITE_API_URL=https://your-backend.onrender.com/api/v1This allows the frontend to seamlessly switch between local and production backends without code changes.
cd python-ai
python main.pyExpected Output:
--------------------------------------------------
๐ STARTING GROQ-ONLY: MAX CONTENT EDITION
--------------------------------------------------
โ
All API Keys Loaded:
- Resume Analysis: {'โ' if GROQ_ANALYSIS_KEY else 'โ'}
- LinkedIn Analysis: {'โ' if GROQ_LINKEDIN_KEY else 'โ'}
- Chat Service: {'โ' if GROQ_CHAT_KEY else 'โ'}
๐ Server starting on http://0.0.0.0:5001
INFO: Started server process
INFO: Uvicorn running on http://0.0.0.0:5001
cd backend-java
mvn spring-boot:runExpected Output:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.0)
Connected to PostgreSQL database: postgres
Started BackendApplication in 3.456 seconds
cd frontend-react
npm run devExpected Output:
VITE v5.0.0 ready in 234 ms
โ Local: http://localhost:5173/
โ Network: http://192.168.1.100:5173/
Wake-up ping sent to backend...
Open browser: http://localhost:5173
The frontend will automatically send a wake-up ping to the backend on page load to ensure zero cold-start delay.
| Service | Port | Local URL | Production URL |
|---|---|---|---|
| React Frontend | 5173 | http://localhost:5173 | https://your-app.vercel.app |
| Spring Boot Backend | 8080 | http://localhost:8080/api/v1 | https://your-backend.onrender.com/api/v1 |
| Python AI Service | 5001 | http://localhost:5001 | https://your-python.onrender.com |
| PostgreSQL Database | 5432 | N/A (Supabase managed) | Supabase connection string |
Endpoint: GET /api/v1/ping
Purpose: Eliminate cold-start latency on free-tier cloud deployments
Response:
"Server is awake!"Client Implementation (React):
// In App.jsx - triggered on page load
useEffect(() => {
fetch('https://career-architect-1.onrender.com/api/v1/ping')
.then(res => console.log("Backend warmed up!"))
.catch(err => console.log("Waking up backend..."));
}, []);This proactive health check ensures the backend is ready before users attempt to upload files, providing a seamless experience.
Endpoint: POST /api/v1/analyze
Parameters:
file(required): PDF resume file (max 10MB)jd(optional): Job Description text for gap analysis
Headers:
X-Firebase-UID: User's Firebase authentication IDX-User-Email: User's email address
Request Example (curl):
curl -X POST http://localhost:8080/api/v1/analyze \
-H "X-Firebase-UID: abc123xyz" \
-H "X-User-Email: user@example.com" \
-F "file=@resume.pdf" \
-F "jd=We are looking for a Senior Java Developer with Spring Boot, Kubernetes, and AWS experience..."Response Example:
{
"status": "success",
"analysis_id": "7d77c196-1a2b-3c4d-5e6f-789012345678",
"analysis_type": "RESUME",
"saved_to_database": true,
"candidate_profile": {
"name": "John Doe",
"total_score": 68,
"market_fit_level": "Interview Ready",
"current_skills": ["Java", "Spring Boot", "MySQL", "Git", "Docker", "JUnit"],
"missing_skills": ["Kubernetes", "AWS", "Microservices", "Kafka", "Redis", "CI/CD"]
},
"radar_chart_data": [
{"skill": "Problem Solving", "userScore": 60, "marketScore": 90},
{"skill": "Backend Development", "userScore": 70, "marketScore": 85},
{"skill": "Cloud & DevOps", "userScore": 20, "marketScore": 85},
{"skill": "Database Management", "userScore": 65, "marketScore": 80},
{"skill": "API Design", "userScore": 55, "marketScore": 90}
],
"recommended_projects": [
{
"type": "Gap Filler",
"title": "Cloud-Native Microservices Platform",
"tagline": "Build a Kubernetes-based microservices architecture with service mesh",
"description": "Design and implement...",
"system_architecture": "Microservices: ...",
"tech_stack": [...],
"learning_milestones": [...],
"mock_interview_questions": [...]
}
]
}Endpoint: POST /api/v1/analyze-linkedin
Purpose: Analyze LinkedIn profile exports or screenshots for career insights
Parameters:
file(required): PDF file containing LinkedIn profile data
Headers:
X-Firebase-UID: User's Firebase authentication IDX-User-Email: User's email address
Request Example:
curl -X POST http://localhost:8080/api/v1/analyze-linkedin \
-H "X-Firebase-UID: abc123xyz" \
-H "X-User-Email: user@example.com" \
-F "file=@linkedin_profile.pdf"Response Structure: Similar to resume analysis, but optimized for LinkedIn profile data structure. Returns skill analysis, experience validation, and networking recommendations.
Note: Job Description parameter is not required for LinkedIn analysis.
Endpoint: GET /api/v1/history
Headers:
X-Firebase-UID: User's Firebase authentication ID
Response:
{
"total": 5,
"analyses": [
{
"id": "7d77c196-...",
"candidateName": "John Doe",
"overallScore": 68,
"analysisType": "RESUME",
"createdAt": "2026-02-25T12:00:00",
"jobDescription": "Senior Java Developer...",
"fullAnalysisJson": "{...}"
}
]
}Endpoint: DELETE /api/v1/analysis/{id}
Headers:
X-Firebase-UID: User's Firebase authentication ID
Response:
{
"success": true
}Error Response:
{
"status": "error",
"message": "AI Service Unavailable",
"details": "Cannot connect to Python AI service. Please ensure it is running on port 5001.",
"path": "/api/v1/analyze"
}Endpoint: POST /analyze
Direct access: http://localhost:5001/analyze
Note: Typically called via Spring Boot gateway, not directly from frontend.
Endpoint: POST /analyze-linkedin
Direct access: http://localhost:5001/analyze-linkedin
Processing: Uses specialized prompt for LinkedIn profile structure and data extraction.
Endpoint: POST /chat-with-mentor
Request:
{
"user_message": "How should I approach learning Kubernetes?",
"chat_history": [],
"context": { ... }
}Response:
{
"reply": "Start with local development using Minikube..."
}- Google Sign-In (One-click authentication)
- Email/Password (Sign up + Sign in)
Landing Page (/)
โ
Click "Dashboard" or "Analyze My Career"
โ
Not logged in? โ Redirect to /login
โ
Login Page
โโ Google Sign-In โ Firebase popup
โโ Email/Password โ Firebase auth
โ
Successful? โ Redirect to /dashboard
โ
Dashboard (Protected Route)
โโ Upload resume
โโ View analysis
โโ Browse history
โโ Logout (dropdown menu)
Only accessible when authenticated:
/dashboard/history
Public routes:
/(Landing)/login
File: frontend-react/src/firebaseConfig.js
Functions:
signInWithEmail(email, password)- Email/password sign-insignUpWithEmail(email, password)- Create new accountsignInWithGoogle()- Google OAuth popuplogout()- Sign out current useronAuthChange(callback)- Listen to auth state changes
careerarchitect/
โ
โโโ frontend-react/ # React + Vite Frontend
โ โโโ src/
โ โ โโโ firebaseConfig.js # Firebase auth setup
โ โ โโโ App.jsx # Router + Protected Routes + Wake-up ping
โ โ โโโ App.css # Complete styling (6000+ lines)
โ โ โโโ pages/
โ โ โ โโโ LandingPage.jsx # Hero section + features
โ โ โ โโโ LoginPage.jsx # Authentication UI
โ โ โ โโโ Dashboard.jsx # Upload + analysis results
โ โ โ โโโ History.jsx # Analysis history browser
โ โ โโโ components/
โ โ โโโ ScoreGauge.jsx # Circular progress indicator
โ โ โโโ ProjectsView.jsx # Projects page with modal
โ โ โโโ FloatingChat.jsx # Chat widget (FAB)
โ โโโ public/
โ โโโ .env # Environment config (VITE_API_URL)
โ โโโ package.json
โ โโโ vite.config.js
โ
โโโ backend-java/ # Spring Boot Backend Gateway
โ โโโ src/main/java/com/careerarchitect/
โ โ โโโ controller/
โ โ โ โโโ AnalysisController.java # Main API controller + /ping endpoint
โ โ โโโ model/
โ โ โ โโโ User.java # JPA User entity
โ โ โ โโโ Analysis.java # JPA Analysis entity
โ โ โโโ repository/
โ โ โ โโโ UserRepository.java # User data access
โ โ โ โโโ AnalysisRepository.java # Analysis data access
โ โ โโโ dto/
โ โ โ โโโ AnalysisResponse.java # Response DTOs
โ โ โ โโโ CandidateProfile.java
โ โ โ โโโ ErrorResponse.java
โ โ โโโ BackendApplication.java
โ โโโ src/main/resources/
โ โ โโโ application.properties # Backend + Database configuration
โ โโโ pom.xml
โ
โโโ python-ai/ # Python AI Service
โ โโโ main.py # ๐ค FastAPI + Groq integration
โ โโโ .env # API keys (not in git)
โ โโโ requirements.txt
โ โโโ README.md
โ
โโโ database/ # Database Schema
โ โโโ schema.sql # PostgreSQL table definitions
โ
โโโ docs/ # Documentation
โ โโโ INSTALLATION.md
โ โโโ FIREBASE-SETUP.md
โ โโโ API.md
โ
โโโ .gitignore
โโโ README.md # This file
โโโ LICENSE
- Hero section with gradient title
- Stats display (10K+, 500+, 95%)
- Features section
- CTA cards
- Sticky navigation
- Glassmorphism card design
- Google Sign-In button
- Email/Password form
- Toggle Sign In โ Sign Up
- Error handling
- User menu (avatar dropdown)
- Wide rectangular upload banner
- Resume AND LinkedIn upload options
- Job Description textarea
- Analysis results display
- Score gauge + radar chart
- Skills cards (current + missing)
- Projects view toggle
- Statistics cards (total, average, best score, trend)
- Timeline of past analyses
- Filter by analysis type (Resume vs LinkedIn)
- View full analysis details
- Delete analyses
- Database-powered pagination
- Project cards grid
- Click to open modal
- Sections: Overview, Architecture, Tech Stack, Milestones, Interview Questions
- Expandable accordion for questions
- FAB button (bottom-right)
- Popup chat window
- Auto-initialized greeting
- Context-aware responses
- Smooth animations
- Circular SVG progress indicator
- Color-coded by score
- Animated transitions
/pingendpoint for wake-up health checks- Validates PDF uploads (type, size)
- Unified processing for Resume AND LinkedIn analysis
- Forwards requests to Python AI service
- Persists results to PostgreSQL
- Handles JD parameter
- Error handling with custom responses
- History retrieval with user filtering
User.java: Firebase UID, email, statisticsAnalysis.java: Complete analysis with JSONB storage, analysis type flag
UserRepository: User CRUD operationsAnalysisRepository: Analysis history queries
AnalysisResponse: Main response structureCandidateProfile: User info + skillsErrorResponse: Standardized error format
- FastAPI application
- PDF text extraction (PyPDF2)
- Groq API integration
- "Max Content" prompt engineering
- LinkedIn-specific analysis logic
- JSON response cleaning
The "Max Content Edition" uses an enhanced prompt that instructs the AI to:
-
Extract EVERY skill (not just primary ones)
- Languages, frameworks, libraries, tools, databases
- Secondary tools like Git, Jira, Postman
- Skills mentioned in project descriptions
-
Identify 4-6 critical missing skills
- Focus on modern industry standards
- Relevant to candidate's domain
- Actionable growth path
-
Generate dynamic radar charts
- 5 axes tailored to domain (Web, Embedded, Data, etc.)
- Always include "Problem Solving"
- Realistic market scores
-
Create detailed project descriptions
- 3-4 sentences covering:
- Technical architecture
- Business context
- Key challenges solved
- Not generic templates!
- 3-4 sentences covering:
-
Provide 8 scenario-based interview questions
- Per project (not surface-level)
- Focus on scalability, trade-offs, design decisions
- Model: Llama 3.3 70B Versatile (Groq)
- Temperature: 0.3 (balanced creativity)
- Max Tokens: 7000 (detailed responses)
- Response Format: JSON object
- Context Window: 7000 chars from resume/LinkedIn
If Groq API fails:
- Returns error JSON with status
- Spring Boot catches and returns user-friendly message
- Frontend displays error alert
cd frontend-react
npm run build
# Deploy to Vercel
vercel --prodEnvironment Variables (Vercel):
VITE_FIREBASE_API_KEY=your_key
VITE_FIREBASE_AUTH_DOMAIN=your_domain
VITE_FIREBASE_PROJECT_ID=your_project
VITE_API_URL=https://your-backend.onrender.com/api/v1
Important: Set VITE_API_URL to point to your production backend (Render, Railway, etc.), not localhost.
cd backend-java
mvn clean package
# Deploy JAR to Render
# Configure build command: mvn clean package
# Configure start command: java -jar target/backend-0.0.1-SNAPSHOT.jarEnvironment Variables (Render):
AI_SERVICE_URL=https://your-python-service.onrender.com
AI_SERVICE_TIMEOUT=30000
SPRING_DATASOURCE_URL=jdbc:postgresql://[SUPABASE-HOST]:5432/postgres
SPRING_DATASOURCE_USERNAME=[SUPABASE-USER]
SPRING_DATASOURCE_PASSWORD=[SUPABASE-PASSWORD]
Health Check Endpoint: /api/v1/ping (ensures service stays warm)
cd python-ai
# For Render deployment
# Build command: pip install -r requirements.txt
# Start command: python main.pyEnvironment Variables (Render):
GROQ_API_KEY=your_key
GROQ_ANALYSIS_KEY=your_key
GROQ_LINKEDIN_KEY=your_key
GROQ_CHAT_KEY=your_key
Dockerfile (if using Fly.io):
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5001
CMD ["python", "main.py"]- Create Supabase project at supabase.com
- Run database schema from
database/schema.sqlin SQL Editor - Copy connection string from Project Settings โ Database
- Add connection details to backend environment variables
No additional deployment needed - Supabase is fully managed.
Cause: Wrong Firebase configuration
Fix:
- Go to Firebase Console โ Project Settings
- Copy EXACT values from Web app config
- Paste into
firebaseConfig.js - Restart React dev server
Cause: Python service not running or wrong port
Fix:
# Check if Python service is running
curl http://localhost:5001/analyze
# If not, start it
cd python-ai
python main.pyCause: Free-tier services (Render, Railway) sleep after inactivity
Fix:
- The wake-up ping feature (already implemented) handles this automatically
- Frontend sends
/api/v1/pingrequest on page load - Backend wakes up before user attempts analysis
Cause: PostgreSQL connection not configured or Supabase credentials incorrect
Fix:
- Verify
application.propertieshas correct Supabase connection string - Test connection:
psql "postgresql://[USER]:[PASSWORD]@[HOST]:5432/postgres" - Ensure database schema is created (run
schema.sql)
Cause: .env file not loaded or wrong format
Fix for React:
# Ensure .env is in frontend-react/ root
# Variable must start with VITE_
VITE_API_URL=http://localhost:8080/api/v1
# Restart dev server after changes
npm run devFix for Spring Boot:
# Check application.properties syntax
# No quotes needed:
ai.service.url=http://localhost:5001Cause: Corrupted PDF or scanned image
Fix:
- Use a text-based PDF (not scanned)
- Try a different PDF
- Check PDF file size (< 10MB)
Hot Reload Issues:
# Kill all node processes
pkill -f node
# Restart React dev server
npm run devPort Already in Use:
# Find process using port 5173
lsof -i :5173
# Kill process
kill -9 <PID>CORS Errors:
- Ensure Spring Boot has CORS enabled (already configured)
- Check that React
.envpoints to correct backend URL - Verify
VITE_API_URLformat (include/api/v1suffix)
Database Migration Issues:
# Reset Hibernate if schema changes
spring.jpa.hibernate.ddl-auto=create # Caution: Drops tables!
# Then change back to:
spring.jpa.hibernate.ddl-auto=updateWe welcome contributions! Here's how:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
- React: Functional components with hooks
- Java: Follow Spring Boot conventions
- Python: PEP 8 style guide
- CSS: Use CSS custom properties for theming
- Database: Use migrations for schema changes
This project is licensed under the MIT License - see LICENSE file for details.
- Groq for lightning-fast Llama 3.3 70B API
- Firebase for seamless authentication
- Supabase for managed PostgreSQL database
- Lovable Design for UI/UX inspiration
- React and Spring Boot communities
Project Maintainer: Rohan Murlidhar Pawar
Email: pawar.rohan.work@gmail.com
GitHub: @Rohan13253
- PostgreSQL database integration for analysis history
- LinkedIn profile analysis endpoint
- Server wake-up optimization for cold starts
- Export analysis as PDF report
- GitHub repository analysis (auto-detect projects)
- Multi-language support (ES, FR, DE)
- Mobile app (React Native)
- Premium tier with advanced features
- Real-time collaboration (share analysis with mentors)
- Resume builder with AI suggestions
- Skill endorsements and peer reviews
- Add Spring Security JWT + Swagger + basic JUnit tests
Made with โค๏ธ by the CareerArchitect Team
โญ Star this repo if it helped you!