Prepify is a full-stack placement preparation platform that helps students manage the complete journey of placement readiness in one workspace: goals, coding practice, interviews, resources, MCQs, resume analysis, company-specific preparation, and progress analytics.
It combines a React frontend with an Express + MongoDB backend and is built as a practical, portfolio-grade product rather than a simple CRUD demo.
Placement preparation usually gets scattered across spreadsheets, coding platforms, notes apps, PDFs, and random reminders. Prepify brings those workflows together so a student can:
- track progress consistently
- prepare by company and topic
- manage goals and streaks
- analyze resume quality
- review interview history
- stay organized in one product
- JWT-based signup and login
- Google sign-in support
- password reset flow
- protected routes and session-aware frontend auth state
- editable user profile with preparation preferences
- coding problem tracking
- topic and resource organization
- MCQ practice support
- progress-oriented dashboards
- streaks, levels, XP, and achievement-style motivation
- daily, weekly, and monthly goals
- progress updates and completion tracking
- dashboard analysis and section-level visibility
- structured preparation insights
- upload PDF, DOC, or DOCX resumes
- parse structured education and experience content
- ATS-style resume scoring
- identify missing skills and formatting issues
- track interview rounds and outcomes
- maintain company-specific preparation details
- save company interview experiences
- notification routes and unread counts
- reminder-oriented flows
- email service integration for password reset and updates
- React 18
- React Router
- Tailwind CSS
- Framer Motion
- Recharts
- Axios
- Heroicons
- React Hot Toast
- Node.js
- Express
- MongoDB with Mongoose
- JWT
- bcryptjs
- multer
- pdf-parse
- mammoth
- nodemailer
- express-rate-limit
- helmet
pp/
|-- backend/
| |-- config/
| |-- middleware/
| |-- models/
| |-- routes/
| |-- services/
| |-- server.js
|-- frontend/
| |-- public/
| |-- src/
| | |-- components/
| | |-- context/
| | |-- pages/
| | |-- utils/
|-- docs/
|-- .gitignore
|-- README.md
The backend is organized around route modules in backend/routes.
auth.jsfor authentication and user account flowsresume.jsfor resume upload, parsing, scoring, and persistencegoals.jsfor goal creation and progress trackingproblems.jsfor coding problem trackinginterviews.jsfor interview managementanalytics.jsfor dashboard-level insightscompanies.jsfor company data and experiencestopics.js,resources.js, andmcq.jsfor study supportnotifications.jsfor reminder and notification workflows
The frontend UI is primarily implemented in frontend/src/pages.
Key pages include:
- Dashboard
- Goals
- Problems
- Interviews
- Resources
- Topics
- MCQ Practice
- Resume Builder / Analyzer
- Login / Signup / Password Reset
- Home landing page
- Node.js 18+ recommended
- npm
- MongoDB running locally or a valid remote MongoDB URI
git clone <your-repository-url>
cd ppcd backend
npm installcd ../frontend
npm installCreate backend/.env and add values like these:
PORT=5000
MONGODB_URI=mongodb://127.0.0.1:27017/preptrack
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRE=7d
NODE_ENV=development
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASS=your_app_password
FRONTEND_URL=http://localhost:3000
GOOGLE_CLIENT_ID=your_google_client_id
YOUTUBE_API_KEY=your_youtube_api_key
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=llama3.2cd backend
npm run devBackend runs on http://localhost:5000.
cd frontend
npm startFrontend runs on http://localhost:3000.
npm run dev
npm start
npm testnpm start
npm run build
npm testPOST /api/auth/signupPOST /api/auth/loginPOST /api/auth/googleGET /api/auth/mePUT /api/auth/profilePOST /api/auth/forgot-passwordPUT /api/auth/reset-password
POST /api/resume/uploadGET /api/resume/analysisGET /api/resumePOST /api/resumeDELETE /api/resume
/api/goals/api/problems/api/interviews/api/analytics/api/companies/api/topics/api/resources/api/mcq/api/notifications
Primary MongoDB models are in backend/models.
UserGoalProblemInterviewResumeNotificationCompanyTopicResourceMCQ
- The frontend uses Axios to call the backend on port
5000by default. - MongoDB must be available for most authenticated product flows.
- Google sign-in requires the frontend origin to be allowed in Google Cloud OAuth settings.
- Resume extraction quality depends on how cleanly text can be parsed from the uploaded file.
- If you change parsing logic, re-upload the resume so newly parsed data is stored again.
- configure all required environment variables
- use a production MongoDB instance
- set
NODE_ENV=production - serve behind a reverse proxy if needed
- run
npm run build - deploy the static build to your hosting provider
- make sure API requests point to the deployed backend
- verify the backend is running
- verify MongoDB is connected
- restart the backend after auth-related code changes
- confirm the account email exists exactly as expected
- re-upload the resume after parser changes
- use a text-extractable PDF/DOC/DOCX file
- check the backend logs for parsing errors
- verify
GOOGLE_CLIENT_ID - add your frontend origin to the allowed OAuth origins
- confirm backend is running on port
5000 - confirm
FRONTEND_URLmatches the frontend origin - check browser console and backend terminal logs together
The repo includes a root .gitignore that ignores node_modules, including backend and frontend dependency folders, so the project is ready to push cleanly to GitHub.
MIT
Prepify is already a strong full-stack student product. With continued work on polish, parser quality, analytics depth, and deployment readiness, it can become an excellent portfolio project and a genuinely useful preparation platform.