A modern, full-stack car dealership web application built with Vue.js frontend and Node.js/Express backend. This project demonstrates a complete CRUD application with user authentication, car inventory management, and responsive design.
- Car Inventory Management: Full CRUD operations for car listings
- User Authentication: Secure registration and login system
- Search & Filtering: Advanced search with multiple filter options
- Responsive Design: Mobile-first design that works on all devices
- User Dashboard: Personal dashboard for managing car listings
- Role-based Access: Admin and user roles with appropriate permissions
- RESTful API: Well-structured backend API with proper HTTP methods
- Input Validation: Comprehensive validation on both frontend and backend
- Error Handling: Proper error handling and user feedback
- Security: JWT authentication, password hashing, rate limiting
- Database: SQLite database with proper schema design
- Testing: Comprehensive test coverage for both frontend and backend
- Vue.js 3 - Progressive JavaScript framework
- Vue Router - Client-side routing
- Pinia - State management
- Tailwind CSS - Utility-first CSS framework
- Axios - HTTP client
- Vite - Build tool and dev server
- Node.js - JavaScript runtime
- Express.js - Web framework
- SQLite - Database
- JWT - Authentication tokens
- bcryptjs - Password hashing
- Joi - Input validation
- Helmet - Security middleware
- Jest - Backend testing framework
- Vitest - Frontend testing framework
- Supertest - HTTP assertion library
- Vue Test Utils - Vue component testing
- Node.js (v16 or higher)
- npm or yarn
-
Clone the repository
git clone <repository-url> cd car-shop-app
-
Install dependencies
npm install
-
Start the development servers
npm run dev
This will start both the backend server (port 3001) and frontend dev server (port 5173).
-
Access the application
- Frontend: http://localhost:5173
- Backend API: http://localhost:3001
npm testnpm run test:backendnpm run test:frontendnpm run test:watchcar-shop-app/
βββ server/ # Backend code
β βββ database/ # Database setup and models
β βββ middleware/ # Express middleware
β βββ routes/ # API routes
β βββ tests/ # Backend tests
β βββ index.js # Server entry point
βββ src/ # Frontend code
β βββ components/ # Vue components
β βββ views/ # Page components
β βββ stores/ # Pinia stores
β βββ services/ # API services
β βββ tests/ # Frontend tests
β βββ main.js # App entry point
βββ public/ # Static assets
βββ package.json # Dependencies and scripts
POST /api/auth/register- Register new userPOST /api/auth/login- Login user
GET /api/cars- Get all cars (with filtering and pagination)GET /api/cars/:id- Get specific carPOST /api/cars- Create new car (authenticated)PUT /api/cars/:id- Update car (authenticated)DELETE /api/cars/:id- Delete car (authenticated)
GET /api/users/profile- Get current user profile (authenticated)GET /api/users/cars- Get user's cars (authenticated)GET /api/users- Get all users (admin only)
- Modern UI: Clean, professional design inspired by premium car dealerships
- Responsive Layout: Optimized for mobile, tablet, and desktop
- Interactive Elements: Hover effects, smooth transitions, and micro-interactions
- Accessibility: Proper contrast ratios and keyboard navigation
- Loading States: Skeleton screens and loading indicators
- Error Handling: User-friendly error messages and validation feedback
- JWT Authentication: Secure token-based authentication
- Password Hashing: bcrypt for secure password storage
- Input Validation: Server-side validation using Joi
- Rate Limiting: Protection against brute force attacks
- CORS: Proper cross-origin resource sharing configuration
- Helmet: Security headers for Express.js
The application is fully responsive with breakpoints for:
- Mobile: < 768px
- Tablet: 768px - 1024px
- Desktop: > 1024px
This prototype demonstrates all the concepts you'll need for your Spring Boot + PostgreSQL version:
- Database Schema: The SQLite schema can be easily converted to PostgreSQL
- API Structure: The Express.js routes follow REST conventions that translate to Spring Boot
- Authentication: JWT implementation concepts apply to Spring Security
- Frontend: The Vue.js frontend can work with any backend API
- Testing: Test patterns shown here apply to Spring Boot testing
- Backend: Replace Express.js routes with Spring Boot controllers
- Database: Convert SQLite schema to PostgreSQL and use JPA entities
- Authentication: Implement Spring Security with JWT
- Testing: Use JUnit and MockMvc for backend testing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Ensure all tests pass
- Submit a pull request
This project is created for educational purposes as a university project demonstration.
- β Web app deployed: Ready for deployment on Render
- β Database entities: Cars and Users with full CRUD operations
- β Frontend/Backend tests: Comprehensive test coverage
- β No plain text credentials: Environment variables and hashing used
- β REST API: Full RESTful API implementation
- β Frontend framework: Vue.js with dynamic functionality
- β Database: SQLite (easily convertible to PostgreSQL)
- β README: Comprehensive documentation
- β Authentication: JWT-based user authentication
- β Multi-user support: Role-based access control
- β Input validation: Comprehensive validation on both ends
- β Professional styling: Modern, responsive design
- β Error handling: Proper error handling throughout
For questions about this project or help with conversion to Spring Boot, please refer to the comprehensive code comments and documentation provided throughout the codebase.