A modern, full-stack web application for automating placement notifications to eligible students based on company requirements. The system streamlines the recruitment process by allowing administrators to upload student data and automatically notify qualified candidates via email.
- π Student Data Management: Upload and parse Excel files containing student information
- π― Smart Filtering: Automatically filter students based on CGPA and required skills
- π§ Bulk Email Notifications: Send personalized emails to eligible students
- π¨ Modern UI: Clean, responsive interface built with Next.js and shadcn/ui
- β‘ Real-time Feedback: Instant status updates for uploads and notifications
- π Type Safety: Full TypeScript support for robust development
- π High Performance: Fast API responses with optimized data processing
- Next.js 15 with App Router and Turbopack
- TypeScript for type safety
- Tailwind CSS for utility-first styling
- shadcn/ui for beautiful, accessible components
- React Hooks for state management
- FastAPI for high-performance REST API
- Python 3.11+ with async/await support
- Pandas for efficient Excel data processing
- Pydantic for data validation and serialization
- SMTP for reliable email delivery
placement_system/
βββ frontend/ # Next.js frontend application
β βββ src/
β β βββ app/
β β β βββ globals.css # Global styles
β β β βββ layout.tsx # Root layout
β β β βββ page.tsx # Main page component
β β βββ components/ui/ # shadcn/ui components
β β β βββ button.tsx
β β β βββ card.tsx
β β β βββ input.tsx
β β β βββ label.tsx
β β βββ lib/
β β βββ utils.ts # Utility functions
β βββ components.json # shadcn/ui configuration
β βββ package.json
β βββ tailwind.config.ts
β βββ tsconfig.json
β βββ next.config.ts
βββ backend/ # FastAPI backend application
β βββ data/ # Student data storage
β βββ templates/ # Email HTML templates
β βββ utils/ # Backend utilities
β β βββ excel_parser.py # Excel file processing
β β βββ emailer.py # Email functionality
β βββ main.py # FastAPI application entry point
β βββ models.py # Pydantic data models
β βββ requirements.txt # Python dependencies
βββ venv/ # Python virtual environment
βββ README.md # Project documentation
βββ .gitignore # Git ignore rules
Ensure you have the following installed:
- Node.js 18+ and npm/yarn
- Python 3.11+
- Git for version control
- Gmail account or SMTP server for email notifications
git clone https://github.com/yourusername/placement_system.git
cd placement_system# Create and activate virtual environment
python -m venv venv
# Windows
venv\Scripts\activate
# macOS/Linux
source venv/bin/activate
# Install dependencies
pip install -r requirements.txtEnvironment Configuration: Create a .env file in the root directory:
# CORS Configuration
CORS_ORIGINS=http://localhost:3000
# Email Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
EMAIL_SENDER=your-email@gmail.com
EMAIL_PASSWORD=your-app-password
# Optional: Database Configuration
DATABASE_URL=sqlite:///./placement.dbStart the FastAPI server:
uvicorn main:app --reload --host 127.0.0.1 --port 8000π API Documentation: http://127.0.0.1:8000/docs
# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Start development server
npm run devπ Application: http://localhost:3000
Create an Excel file (.xlsx or .xls) with the following columns:
| Column | Description | Example |
|---|---|---|
name |
Student full name | "John Doe" |
email |
Student email address | "john.doe@university.edu" |
cgpa |
Cumulative GPA | 8.5 |
skills |
Comma-separated skills | "JavaScript, React, Node.js" |
- Navigate to the application homepage
- Click "Select Excel File" and choose your prepared file
- Click "Upload Students Data" to process and validate the data
- Monitor the success message with total student count
- Fill in the internship details:
- Internship Name: "Software Development Internship"
- Minimum CGPA: 7.5
- Required Skills: "JavaScript, React, Python" (comma-separated)
- Click "Notify Eligible Students"
- View the notification results
Upload and process student Excel file.
Request: Multipart form data with Excel file Response:
{
"message": "Students uploaded successfully",
"total_students": 150,
"valid_students": 145
}Send notifications to eligible students.
Request Body:
{
"internship_name": "Software Development Internship",
"min_cgpa": 7.5,
"required_skills": ["JavaScript", "React", "Node.js"]
}Response:
{
"message": "Notifications sent to 23 eligible students",
"eligible_count": 23,
"total_students": 150
}- Enable 2-Factor Authentication in your Google Account
- Generate App Password:
- Go to Google Account Settings
- Security β 2-Step Verification β App passwords
- Generate password for "Mail"
- Use App Password in the
EMAIL_PASSWORDenvironment variable
The system supports any SMTP provider. Update the environment variables accordingly:
SMTP_HOST=smtp.outlook.com # For Outlook
SMTP_PORT=587
EMAIL_SENDER=your-email@outlook.com
EMAIL_PASSWORD=your-passwordcd frontend
npx shadcn@latest add [component-name]Available components: alert, badge, dialog, dropdown-menu, select, textarea, toast, etc.
Edit backend/templates/notification_email.html to customize the email appearance:
<!DOCTYPE html>
<html>
<body>
<h2>π New Internship Opportunity</h2>
<p>Dear {{student_name}},</p>
<p>We're excited to inform you about: <strong>{{internship_name}}</strong></p>
<!-- Customize as needed -->
</body>
</html>cd frontend
npm run build
npm start# Using gunicorn for production
pip install gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:8000# Dockerfile example
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]1. Hydration Error (Frontend)
- Ensure
useEffectandmountedstate are properly implemented - Check for server/client rendering mismatches
2. CORS Error
- Verify
CORS_ORIGINSin environment variables - Ensure frontend URL matches the CORS configuration
3. Email Sending Issues
- Verify SMTP credentials and app password
- Check firewall/network restrictions
- Ensure "Less secure app access" is enabled (if applicable)
4. Excel Upload Errors
- Verify column names match exactly:
name,email,cgpa,skills - Check for special characters or formatting issues
- Ensure CGPA values are numeric
We welcome contributions! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- Follow TypeScript/Python type annotations
- Write descriptive commit messages
- Add tests for new features
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- π§ Email: support@placementsystem.com
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
- Next.js for the amazing React framework
- FastAPI for the high-performance API framework
- shadcn/ui for beautiful UI components
- Tailwind CSS for utility-first styling
Made with β€οΈ for educational institutions and their students