Project repository for the CSE 340 final project, a car dealership site made with Express and node.js.
Visit the Render site for the project here.
| Role | Number | Description |
|---|---|---|
| user | 1 | Default registered customer. Can use the dashboard, submit and track service requests, and create reviews on vehicles. Can edit or delete their own reviews. |
| employee | 2 | Staff role. Includes everything a default user can do, plus moderation to review and edit service requests, review contact submissions, approve or reject reviews, and edit vehicle inventory data. |
| admin | 3 | Full access. Includes all employee capabilities plus account and permission management, the ability to add, delete, and edit vehicle categories as well as entire vehicles, and permission to view the database log. |
Role names come from the roles table (user, employee, admin) and are stored on each row in users.role_id.
| Role | Username | |
|---|---|---|
| user | user@example.com |
CarFanatic |
| employee | employee@example.com |
WhatATeam |
| admin | admin@example.com |
admin |
For the passwords to these accounts, please refer to the Final Project Requirements.pdf located inside the course materials.
- Vehicle photos use external URLs located inside the database. There is currently no way for an employee or admin to add a new photo to this database through the site itself. If a third-party host drops an image, the UI will show a placeholder or broken image until URLs are updated.
- New reviews require staff approval (
is_visible) before they appear publicly, depending on moderation workflow. - Mobile view could use improvements with layout and styling. While the entire site should be functional on mobile, it may not be as clean looking as desktop.
- Despite showing the "Delete user" button for each user on the Review Accounts page, it is impossible to delete your own account on the page. While this is intended functionality, the button ideally should be hidden on accounts that cannot be deleted in that manner.
- Node.js with Express.js as the backend framework
- EJS or Liquid.js for rendering views
- ESM (ECMAScript Modules), no CommonJS (require is not allowed)
- PostgreSQL for the database
- Deployed on Render with a connected PostgreSQL database
- Home page with featured vehicles
- Browse vehicles by category (Trucks, Vans, Cars, SUVs)
- Individual vehicle detail pages with images, specs, and price
- Contact form (saves to database)
- Leave reviews on vehicles
- Edit/delete own reviews
- Submit service requests for their vehicle (oil change, inspection, etc.)
- View history of service requests and their status
- Edit vehicle details (price, description, availability)
- Moderate/delete inappropriate reviews
- View and manage service requests
- Update service request status (Submitted, In Progress, Completed)
- Add notes to service requests
- View contact form submissions
- Everything employees can do, plus:
- Add, edit, and delete vehicle categories
- Add, edit, and delete vehicles from inventory
- Manage employee accounts (optional, can be hardcoded)
- View all system activity and user data
Database Requirements:
- Users table (with role field)
- Vehicles table
- Categories table (linked to vehicles)
- Reviews table (linked to users and vehicles)
- Service requests table (linked to users, with status tracking)
- Contact messages table
- Vehicle images table (one-to-many with vehicles)
