A full-stack placement management platform built on Microsoft Azure, featuring AI-powered resume analysis, real-time chat, and intelligent candidate search.
Frontend (React.js)
│ Axios REST calls + WebSocket (Azure Web PubSub)
▼
Backend (Node.js / Express)
│
├─ Azure SQL Database ← Students, Companies, Jobs, Applications, Placements
├─ Azure Cosmos DB ← Chat message history
├─ Azure Blob Storage ← Resume files
├─ Azure AI Document Intelligence ← Resume data extraction
├─ Azure Cognitive Search ← Candidate skill search
├─ Azure Web PubSub ← Real-time chat
├─ Azure Redis Cache ← Session / rate-limit caching
└─ Azure Notification Hubs ← Push notifications
Azure Functions (Serverless)
└─ ResumeProcessor (Blob trigger) ← Auto-processes uploaded resumes
| Layer | Technology |
|---|---|
| Frontend | React 18, React Router v6, Axios, Azure Web PubSub Client |
| Backend | Node.js, Express.js, Helmet, Morgan |
| Auth | JWT (jsonwebtoken, bcryptjs) |
| SQL Database | Azure SQL (mssql) |
| NoSQL | Azure Cosmos DB |
| File Storage | Azure Blob Storage |
| AI / ML | Azure AI Document Intelligence |
| Search | Azure Cognitive Search |
| Real-time | Azure Web PubSub |
| Cache | Azure Redis Cache |
| Serverless | Azure Functions (Blob trigger) |
| Notifications | Azure Notification Hubs |
This project leverages a wide array of Microsoft Azure cloud services to deliver a scalable, secure, and intelligent application:
-
Azure App Service (Web Apps)
- Purpose: Hosts the Node.js backend API and serves the production-ready React frontend.
- Why: Provides a fully managed platform with built-in auto-scaling, load balancing, and CI/CD integration.
-
Azure SQL Database
- Purpose: Acts as the primary relational data store. It holds structured data such as Student profiles, Company details, Job listings, and Application statuses.
- Why: Offers a highly secure, fully managed SQL database engine with high availability out-of-the-box.
-
Azure Blob Storage
- Purpose: Securely stores unstructured binary files, specifically the resume documents (PDFs, DOCX) uploaded by students.
- Why: Scalable and cost-effective object storage that integrates seamlessly with Azure AI services.
-
Azure AI Document Intelligence (Form Recognizer)
- Purpose: Automatically scans, parses, and extracts critical text, key-value pairs, and technical skills from the uploaded student resumes.
- Why: Replaces manual data entry with state-of-the-art machine learning models to instantly build a candidate's skill profile.
-
Azure Functions (Serverless)
- Purpose: Runs a background
ResumeProcessorblob-triggered function. The moment a resume is uploaded to Blob Storage, this function is invoked to analyze it asynchronously. - Why: Eliminates the need to manage infrastructure for background tasks. It scales automatically based on the volume of incoming resumes.
- Purpose: Runs a background
-
Azure Web PubSub
- Purpose: Powers the real-time, bi-directional WebSocket chat feature between students and companies.
- Why: Simplifies the creation of real-time messaging without requiring the backend to maintain thousands of persistent WebSocket connections.
-
Azure Cosmos DB
- Purpose: Stores the high-velocity, unstructured real-time chat message history.
- Why: A globally distributed, multi-model NoSQL database that guarantees low latency for read/write operations (ideal for chat apps).
-
Azure Cognitive Search
- Purpose: Enables advanced, full-text intelligent searching of candidates based on complex skill queries for companies.
- Why: Provides AI-powered search indexing capabilities that go far beyond standard SQL
LIKEqueries.
-
Azure Key Vault
- Purpose: Securely stores sensitive connection strings, API keys, and database passwords.
- Why: Keeps secrets out of the source code and centrally manages cryptographic keys and secrets.
-
Azure Application Insights & Log Analytics
- Purpose: Monitors the live application for performance anomalies, request failures, and logs application telemetry.
- Why: Essential for diagnosing live production issues and understanding user behavior.
cloudPro/
├── backend/ # Express.js API server
│ ├── server.js # Entry point
│ ├── .env.example # Environment variable template
│ └── src/
│ ├── config/
│ │ ├── db.js # Azure SQL + Cosmos DB clients
│ │ └── azure.js # Azure service clients
│ ├── middleware/
│ │ └── auth.js # JWT auth middleware
│ ├── routes/
│ │ ├── students.js # Student API routes
│ │ ├── companies.js # Company API routes
│ │ ├── chat.js # Chat routes (Web PubSub token, history)
│ │ └── placements.js # Placement tracking routes
│ ├── services/
│ │ ├── resumeService.js # AI Document Intelligence integration
│ │ ├── blobService.js # Azure Blob Storage operations
│ │ ├── searchService.js # Azure Cognitive Search
│ │ ├── chatService.js # Cosmos DB chat persistence
│ │ └── notificationService.js # Azure Notification Hubs
│ └── models/
│ └── sql-schema.sql # Azure SQL DDL schema
├── azure-functions/ # Azure Serverless Functions
│ ├── host.json
│ ├── package.json
│ └── ResumeProcessor/
│ ├── function.json # Blob trigger binding
│ └── index.js # Resume processing logic
└── frontend/ # React.js SPA
├── public/index.html
└── src/
├── App.js # Routing
├── components/
│ └── Navbar.js
├── pages/
│ ├── student/
│ │ ├── Register.js
│ │ ├── Login.js
│ │ ├── Dashboard.js
│ │ ├── ResumeUpload.js
│ │ ├── Jobs.js
│ │ └── Applications.js
│ ├── company/
│ │ ├── Login.js
│ │ ├── Dashboard.js
│ │ ├── PostJob.js
│ │ └── Applicants.js
│ └── Chat.js
└── services/
├── api.js # Axios API layer
└── chatService.js # WebSocket client
- Node.js 18+
- Azure subscription with required services provisioned
cd backend
cp .env.example .env
# Fill in your Azure credentials in .env
npm install
npm startcd frontend
npm install
npm startcd azure-functions
npm install
# Install Azure Functions Core Tools
func startRun the SQL schema against your Azure SQL Database:
# Using sqlcmd or Azure Data Studio
sqlcmd -S haul.database.windows.net -d placementhub -U placementhub -P punith@123 -i backend/src/models/sql-schema.sql| Method | Endpoint | Description |
|---|---|---|
| POST | /api/students/register |
Register a new student |
| POST | /api/students/login |
Student login |
| GET | /api/students/profile |
Get student profile |
| PUT | /api/students/profile |
Update student profile |
| POST | /api/students/resume |
Upload resume (AI analysis) |
| GET | /api/students/jobs |
Browse available jobs |
| POST | /api/students/apply/:jobId |
Apply for a job |
| GET | /api/students/applications |
Track application status |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/companies/register |
Register a company |
| POST | /api/companies/login |
Company login |
| POST | /api/companies/jobs |
Post a new job |
| GET | /api/companies/jobs |
List company's jobs |
| GET | /api/companies/jobs/:jobId/applicants |
View applicants |
| PUT | /api/companies/applications/:appId |
Update application status |
| GET | /api/companies/search |
Search candidates by skills |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/chat/history/:userId |
Get chat history |
| POST | /api/chat/token |
Get Web PubSub access token |
| POST | /api/chat/message |
Save a chat message |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/placements |
All placements |
| GET | /api/placements/stats |
Platform statistics |
| GET | /api/placements/my |
Student's own placement |
Copy backend/.env.example to backend/.env and configure:
- Azure SQL: Server, database, user, password
- Azure Cosmos DB: Endpoint and key
- Azure Blob Storage: Connection string
- Azure AI Document Intelligence: Endpoint and key
- Azure Cognitive Search: Endpoint, key, index name
- Azure Web PubSub: Connection string and hub name
- Azure Redis Cache: Connection string
- Azure Notification Hubs: Connection string and hub name (optional)
- 🎓 Student Portal – Register, upload AI-analyzed resume, browse jobs, track applications
- 🏢 Company Portal – Post jobs, view applicants, update application status, search candidates
- 🤖 AI Resume Scanning – Azure AI Document Intelligence extracts skills, contact info automatically
- 💬 Real-Time Chat – WebSocket-based messaging powered by Azure Web PubSub
- 🔍 Candidate Search – Full-text search via Azure Cognitive Search
- 📊 Placement Tracking – Track placed students and platform-wide statistics
- 🔔 Push Notifications – Application status updates via Azure Notification Hubs
- ⚡ Serverless Processing – Azure Function auto-processes resume uploads from Blob Storage
- 🔐 JWT Authentication – Stateless auth with role-based access control
You can log in to the company portal using any of the following demo credentials (all passwords are <CompanyName>@123):
- Google:
hr@google.com/Google@123 - Microsoft:
jobs@microsoft.com/Microsoft@123 - Amazon:
recruit@amazon.com/Amazon@123 - Tesla:
careers@tesla.com/Tesla@123 - Netflix:
talent@netflix.com/Netflix@123 - Meta:
careers@meta.com/Meta@123 - Apple:
jobs@apple.com/Apple@123 - Oracle:
hr@oracle.com/Oracle@123 - Adobe:
careers@adobe.com/Adobe@123 - IBM:
jobs@ibm.com/IBM@123