Car Service Database
PostgreSQL database and web dashboard for a car service workshop, managed with Docker Compose.
Start
docker compose up -d
Open the web dashboard at http://localhost:3011.
The dashboard's Vehicles view provides a dedicated vehicle register containing make, model, model year, engine, transmission, fuel type, color, VIN, license plate, mileage, owner, and service-record count. The Service records form stores these vehicle details and can autofill them, along with the customer, when an existing VIN or license plate is entered. Customer contact information can also be autofilled by customer email or by a unique customer name. Names are not unique, so duplicate names are allowed; when a name matches multiple customers, the form asks for an email instead of choosing one incorrectly. It supports adding, listing, and editing service records with service date, VIN, license plate number, car mileage, customer, technician, complaint, and status. Adding a record creates or updates the linked customer and vehicle, technician, and service order in one transaction.
Service records can also include optional used parts and labor lines. Parts support a part number, quantity, and unit price. Labor supports used time in hours and an hourly price. Line totals and the service-record total are calculated automatically and stored with the service order.
The Settings view provides complete JSON data backup and restore. Download backup exports all customers, employees, vehicles, appointments, service records, service-order items, invoices, and user accounts. Choose backup file imports a backup after confirmation; importing replaces the current database contents in one transaction, so a failed import leaves the existing data unchanged. Keep exported backup files secure because they contain all workshop data.
The dashboard supports user sign-in and permission-based access. Without signing in, all views are read-only. Administrators can manage user accounts, add and modify workshop data, restore backups, and delete data. Technicians and service advisors can add and modify workshop data but cannot delete anything. Viewer accounts are read-only. The Accounts view is visible to everyone, but only administrators can manage accounts.
A default admin account is created automatically. Its initial password is change-me-in-production, unless ADMIN_PASSWORD is set in .env before the web container starts. Sign in at the top of the dashboard and change the initial password by editing the administrator account. Do not use the default password outside local development.
Check that the database is ready:
docker compose ps
docker compose exec car-service-db pg_isready -U car_service_app -d car_service
Connect with psql inside the container:
docker compose exec car-service-db psql -U car_service_app -d car_service
The default connection values are:
- Host:
localhost - Port:
5432 - Database:
car_service - User:
car_service_app - Password:
change-me-in-production
To use different values, create a .env file next to docker-compose.yml:
POSTGRES_DB=car_service
POSTGRES_USER=car_service_app
POSTGRES_PASSWORD=use-a-strong-password
POSTGRES_PORT=5432
The schema is loaded from init.sql the first time the named volume is created. To recreate the database from scratch, including all data:
docker compose down -v
docker compose up -d
Do not use the default password in production. Restrict the published port or place the database on a private Docker network when an application is added.