A full-stack job portal web application built with Flask and SQLite — connecting job seekers with employers through a clean, modern interface.
Job Portal is a multi-role web application that allows employees to discover and apply for jobs, employers to post and manage listings, and an admin to oversee the entire platform — all through dedicated dashboards tailored to each role.
- Sign up with name, email, phone, city, and CV upload (PDF/DOC)
- Browse all available job listings
- Search jobs by skill and/or location
- View detailed job descriptions including salary, role, and required skills
- Apply for jobs with one click (duplicate application prevention)
- Personal dashboard to view and manage submitted applications
- Register your company with name, email, city, and phone
- Post new job listings with title, role, location, salary, and up to 3 required skills
- Manage your posted jobs (view & delete)
- View all applicants for your listings — with name, email, phone, and downloadable CV
- Secure admin login (separate credentials)
- Dashboard overview with live stats:
- Total candidates, jobs, applications, and companies
- Visual pie charts powered by Chart.js
- Manage all users (employees & employers) — view and delete
- Manage all job listings across the platform
- Manage all applications
- View all contact messages from users
- Home — Hero section with job search, live platform stats, and recent job openings
- About — Platform overview
- Contact — Message form that saves inquiries to the database
job-portal/
│
├── main.py # Flask app — all routes and database models
├── default.db # SQLite database (auto-created on first run)
├── uploads/ # Uploaded CVs stored here
│
└── templates/
├── index.html # Home page
├── auth.html # Login & signup (employee/employer)
├── about.html # About page
├── contact.html # Contact form
├── job_listings.html # Job search results
├── job_details.html # Single job detail + apply
├── employee_dashboard.html # Employee dashboard
├── employer_dashboard.html # Employer dashboard
└── admin.html # Admin dashboard
| Model | Key Fields |
|---|---|
Employee |
id, name, email, password (hashed), phone, city, cv (path) |
Employer |
id, name, email, password (hashed), phone, city |
Job |
id, employer_id (FK), title, role, location, salary, skill1–3 |
Application |
id, applicant_id (FK), job_id (FK), name, email, phone |
Contact |
id, name, email, message |
| Method | Route | Description | Access |
|---|---|---|---|
| GET | / |
Home page with stats & recent jobs | Public |
| GET | /about |
About page | Public |
| GET/POST | /contact |
Contact form | Public |
| GET/POST | /signup |
Employee & employer registration | Public |
| GET/POST | /login |
Login for all users | Public |
| GET | /logout |
Clear session and redirect to login | Authenticated |
| GET | /dashboard |
Redirects to role-specific dashboard | Authenticated |
| GET | /employee_dashboard |
Employee profile & applications | Employee only |
| GET | /employer_dashboard |
Employer profile, jobs & applicants | Employer only |
| POST | /list_job |
Post a new job listing | Employer only |
| POST | /delete_job |
Delete a job listing | Employer/Admin |
| POST | /delete_application |
Remove an application | Employee/Admin |
| GET | /search |
Search jobs by skill and/or location | Public |
| GET | /job/<job_id> |
View details of a specific job | Public |
| POST | /apply |
Apply for a job (JSON) | Employee only |
| GET | /check_login |
Check session login status (JSON) | Public |
| GET | /admin_dashboard |
Full admin control panel | Admin only |
| POST | /delete_user |
Delete an employee or employer | Admin only |
| GET | /adminlogout |
Admin logout | Admin only |
Make sure you have Python 3.8+ installed.
git clone https://github.com/ciada-3301/jobista.git
cd job-portalpip install flask flask-sqlalchemy werkzeugpython main.pyThe app will start at http://127.0.0.1:5000
The SQLite database (
default.db) and theuploads/folder are created automatically on the first run.
To log in as admin, use the following credentials on the login page:
| Field | Value |
|---|---|
admin@jobportal |
|
| Password | admin@123 |
⚠️ It is strongly recommended to change these credentials before deploying to production.
| Layer | Technology |
|---|---|
| Backend | Python, Flask, Flask-SQLAlchemy |
| Database | SQLite |
| Frontend | HTML5, CSS3, Vanilla JavaScript |
| Charts | Chart.js (CDN) |
| Auth | Werkzeug password hashing, Flask sessions |
| File Upload | Flask file handling (CV uploads) |
- Home — Search bar, platform statistics, recent job openings
- Login/Signup — Tabbed interface with separate forms for employees and employers
- Job Listings — Card-based job results with search filtering
- Job Details — Full job info with a one-click apply button
- Employee Dashboard — Profile info, manage applications
- Employer Dashboard — Post jobs, manage listings, view applicants & their CVs
- Admin Dashboard — Platform-wide analytics with charts, user/job/application management
- Email notifications on application submission
- Password reset via email
- Pagination for job listings and admin tables
- Resume parser / skill matching
- Job categories and filters (salary range, job type)
- OAuth login (Google / LinkedIn)
- Deployment on cloud (Render, Railway, or Heroku)
This project is open source and available under the MIT License.
Pull requests are welcome! For major changes, please open an issue first to discuss what you'd like to change.
- Fork the repo
- Create your feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -m 'Add your feature') - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
Made with ❤️ using Flask