A full-featured web application that connects customers with verified local service professionals β electricians, plumbers, and Smart TV experts β alongside a live network of EV charging stations with slot booking. Built on Django 5.2 with role-based dashboards for customers, staff, and administrators.
ServiGo simplifies the way people manage home maintenance and electric vehicle charging β through a single, user-friendly platform.
Customers can quickly book professional services such as electrical repairs, plumbing, and Smart TV maintenance, or reserve a slot at a nearby EV charging station. Staff and administrators get powerful tools to manage bookings, services, customers, and operational workflows β all from dedicated role-based dashboards.
Built with Django and Bootstrap 5, ServiGo focuses on usability, security, and maintainability while demonstrating a practical implementation of authentication, CRUD operations, email notifications, role-based access control, and responsive web design.
| Area | Feature | What it does |
|---|---|---|
| π Authentication | Secure registration & login | Email-or-username login with a custom User model (email as the unique identifier) |
| π Authentication | Role-based access | Customers, staff, and administrators each get their own portal and permissions |
| π Authentication | Password reset | Self-service recovery via email |
| π οΈ Services | Service catalogue | Browse electrical, plumbing, and Smart TV services with detailed pricing |
| π οΈ Services | Category pages | Dedicated pages per service category |
| π Bookings | Service booking flow | Date, time, location and notes with a live price summary |
| π Bookings | Email confirmation | Customers receive booking confirmations by email |
| π Bookings | Status workflow | Pending β Confirmed β Completed (or Cancelled) with audit history |
| β‘ EV Charging | Station search | Find stations by name, address, city, state, or pincode |
| β‘ EV Charging | Filters | Charger-type and price filters plus an available-only toggle |
| β‘ EV Charging | Slot booking | Reserve charging slots with Google Maps location integration |
| π Dashboards | Customer dashboard | Upcoming service and EV bookings at a glance |
| π Dashboards | Staff dashboard | Today's bookings and operational workload |
| π Dashboards | Admin dashboard | Full-platform stats with recent service and EV bookings |
| π§ Contact | Contact form | Inquiry form with email notifications |
| Role | What they can do |
|---|---|
| Customer | Browse services and EV stations, book appointments, manage their own bookings, and view booking history |
| Staff | View and manage service bookings, update booking statuses, and monitor daily service operations |
| Admin | Full administrative control β manage users, services, stations, bookings, and view platform-wide analytics |
Note: Only
customerandstaffcan self-register through the public form. Admin accounts are created only viaseed_demoor the Django admin panel β preventing self-service privilege escalation.
| Category | Technologies |
|---|---|
| Backend | Python 3.12, Django 5.2 |
| Frontend | HTML5, CSS3, Bootstrap 5, JavaScript |
| Database | SQLite (development) Β· PostgreSQL (production, via DATABASE_URL) |
| Authentication | Custom User model Β· email-or-username backend |
| Forms | Django Crispy Forms Β· Crispy Bootstrap 5 |
| Configuration | django-environ (environment variables) |
| Media / Assets | Pillow, Django static & media handling |
| Dev Tooling | django-browser-reload |
| Deployment Ready | Virtual environments, .env configuration |
Client Browser
β
βΌ
Bootstrap 5 Responsive UI
β
βΌ
Django URL Routing
β
βΌ
Django Views & Logic
βββββββββββββββββΌβββββββββββββββββ
βΌ βΌ βΌ
Authentication Booking Module EV Charging
β β β
βββββββββββββββββΌβββββββββββββββββ
βΌ
SQLite / PostgreSQL
β
βΌ
Email Notifications
Service booking flow
Browse Services β Select a Service β Fill Date/Time & Location
β Book β Confirmation Email β Track Status in Dashboard
EV charging flow
Search Stations β Filter by Location/Charger/Price β View Station Details
β Pick a Slot β Confirm β Manage Booking in Dashboard
Home page β hero, search, and featured services
Secure login and role-based registration
Schedule a visit β date, time, location, and booking summary
Booking confirmation and detailed booking view
Station details and charging slot booking
Operational overview and booking management
Booking status histories in the Django admin
ServiGo/
βββ accounts/ # Custom User, authentication, registration, profiles
βββ services/ # Service categories & catalogue, image handling
βββ bookings/ # Service bookings, status workflow & history
βββ ev_charging/ # EV stations & charging slot bookings
βββ dashboard/ # Role-based dashboards (customer / staff / admin)
βββ core/ # Home, About, Contact & shared context
βββ config/ # Django project settings (settings, urls, wsgi)
βββ templates/ # Shared + per-app HTML templates
βββ static/ # CSS, JS, images
βββ media/ # User-uploaded media
βββ tests/ # Test suite (per-app packages)
βββ scripts/ # Dev helpers (run_dev.ps1)
βββ screenshots/ # README screenshots
βββ manage.py
βββ requirements.txt
βββ .env.example
Prerequisites: Python 3.12, Git.
# 1. Clone the repository
git clone https://github.com/Aby020/ServiGo.git
cd ServiGo
# 2. Create and activate a virtual environment
python -m venv venv
venv\Scripts\activate # Windows
# source venv/bin/activate # macOS / Linux
# 3. Install dependencies
pip install -r requirements.txt
# 4. Configure environment variables
Copy-Item .env.example .env # Windows PowerShell
# cp .env.example .env # macOS / Linux
# 5. Apply database migrations
python manage.py migrate
# 6. Seed demo data (categories, services, EV stations, demo users)
python manage.py seed_demo
# 7. Run the development server
python manage.py runserver 127.0.0.1:8004Open http://127.0.0.1:8004 in your browser.
On Windows you can use the shortcut launcher instead:
.\scripts\run_dev.ps1 # starts on 127.0.0.1:8000seed_demo creates the following accounts:
| Role | Password | |
|---|---|---|
| Admin | admin@servigo.com |
admin12345 |
| Staff | staff@servigo.com |
staff12345 |
| Customer | customer@servigo.com |
customer12345 |
python manage.py createsuperuserCreate a .env file in the project root (or rely on sensible defaults):
| Variable | Description | Default |
|---|---|---|
SECRET_KEY |
Django secret key β set a strong value in production | generated dev key |
DEBUG |
Debug mode (True/False) |
True |
ALLOWED_HOSTS |
Comma-separated allowed hosts | localhost,127.0.0.1,testserver |
DATABASE_URL |
Production database URL (e.g. PostgreSQL) | SQLite (dev) |
EMAIL_HOST / EMAIL_PORT / etc. |
SMTP settings for booking confirmation emails | console email (dev) |
- Custom
Usermodel with email as the unique identifier β username login still supported via an email-or-username backend. - Role-restricted public registration β only
customerandstaffcan sign up through the public form;adminis created only viaseed_demoor the Django admin, preventing self-service privilege escalation. - Role-based access control β staff/admin views are gated by dedicated mixins; dashboards and booking data are filtered per user.
- Open-redirect protection β the login
nextparameter is validated withurl_has_allowed_host_and_scheme. - Session-based auth with Django's built-in password hashing.
- Authentication & registration with role selection
- Service catalogue and category pages
- Service booking flow with email confirmation
- EV charging stations and slot booking
- Customer, staff, and admin dashboards
- Booking status workflow with audit history
- Online payment integration
- Customer reviews & ratings per service
- Real-time booking availability
- Mobile app (React Native / Flutter)
For questions, feature requests, or bug reports, please open an issue on GitHub.
Made with β€οΈ by Abi Thomas


