Modern, responsive vehicle service management system built with Next.js 15 and React 18.
- Next.js 15 - React framework with App Router
- React 18 - UI library with modern hooks
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- shadcn/ui - High-quality React components
- Lucide Icons - Beautiful icon library
- Docker - Containerization
- Google Kubernetes Engine - Cloud deployment
- π Vehicle registration and management
- π Service appointment booking
- π Real-time appointment status tracking
- π¬ AI-powered chatbot assistance
- π Service history and invoices
- β Task management and tracking
- β±οΈ Work time logging against projects/appointments
- π Personal productivity statistics
- π Appointment notifications
- π Work distribution analytics
- π₯ User and employee management
- ποΈ Project creation and oversight
- π Task assignment and tracking
- π Time log monitoring and reporting
- π Team performance analytics
- π Vehicle and customer management
- Node.js 18+ (20+ recommended)
- npm 9+ or pnpm
- Backend API running (gear-up-be)
Create .env.local:
# API Configuration
NEXT_PUBLIC_API_BASE_URL=http://localhost:8080/api
# Optional: Analytics, etc.
# NEXT_PUBLIC_GA_ID=your-ga-id# Install dependencies
npm install
# Start development server
npm run devOpen http://localhost:3000 in your browser.
# Build image
docker build -t gearup-frontend .
# Run container
docker run -p 3000:3000 \
-e NEXT_PUBLIC_API_BASE_URL=http://localhost:8080/api \
gearup-frontend# Start frontend only
docker-compose up -d
# View logs
docker-compose logs -f/* Primary colors */
--color-primary: #163172; /* Dark blue */
--color-secondary: #1E56A0; /* Medium blue */
--color-ternary: #D6E4F0; /* Light blue */
--color-bg: #F6F6F6; /* Light gray background */// Text colors
<p className="text-primary">Primary text</p>
<p className="text-secondary">Secondary text</p>
<p className="text-ternary">Light text</p>
// Backgrounds
<div className="bg-primary">Dark blue background</div>
<div className="bg-secondary">Medium blue background</div>
<div className="bg-ternary">Light blue background</div>
// Borders
<div className="border-primary">Primary border</div>- Sans-serif: Geist (default)
- Monospace: Geist Mono
<div className="font-sans">Regular text</div>
<code className="font-mono">Code text</code># Create production build
npm run build
# Test production build locally
npm run start
# Production server runs on http://localhost:3000# Lint code
npm run lint
# Type check
npx tsc --noEmitAutomated deployment via GitHub Actions:
- Setup: Follow
../DEPLOYMENT_GUIDE.md - Configure: Add GitHub secrets for GCP
- Deploy: Push to
mainorproductionbranch
# Manual deployment
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/frontend-configmap.yaml
kubectl apply -f k8s/frontend-deployment.yaml- Import repository
- Set environment variable:
NEXT_PUBLIC_API_BASE_URL - Deploy
src/
βββ app/ # Next.js App Router pages
β βββ admin/ # Admin dashboard routes
β βββ employee/ # Employee dashboard routes
β βββ customer/ # Customer portal routes
β βββ auth/ # Authentication pages
βββ components/ # React components
β βββ admin/ # Admin-specific components
β βββ employee/ # Employee-specific components
β βββ customer/ # Customer-specific components
β βββ ui/ # shadcn/ui components
βββ contexts/ # React Context providers
β βββ AuthContext.tsx # Authentication state
βββ lib/ # Utilities and services
β βββ services/ # API service functions
β βββ utils.ts # Helper functions
βββ types/ # TypeScript type definitions
import { useAuth } from '@/contexts/AuthContext';
function MyComponent() {
const { user, login, logout, isAuthenticated } = useAuth();
return (
<div>
{isAuthenticated ? (
<p>Welcome {user.name}</p>
) : (
<button onClick={login}>Login</button>
)}
</div>
);
}import { projectService } from '@/lib/services/projectService';
async function fetchProjects() {
const projects = await projectService.getAllProjects();
return projects;
}import { timeLogService } from '@/lib/services/timeLogService';
await timeLogService.createTimeLog({
description: 'Completed oil change',
startTime: '2025-01-15T09:00:00',
endTime: '2025-01-15T11:00:00',
taskId: 123,
appointmentId: 456
});/- Landing page/auth/login- Login page/auth/register- Registration
/customer/dashboard- Customer dashboard/customer/vehicles- Vehicle management/customer/appointments- Appointment booking
/employee/dashboard- Employee dashboard/employee/tasks- Task list/employee/time-logs- Time tracking
/admin/dashboard- Admin overview/admin/projects- Project management/admin/employees- Employee management/admin/time-logs- Team time tracking
- JWT token stored in localStorage
- Protected routes with middleware
- Role-based UI rendering
- XSS protection via React
- HTTPS in production
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- Create feature branch from
main - Follow TypeScript and ESLint rules
- Test responsiveness (mobile, tablet, desktop)
- Submit pull request
- Next.js Documentation - Next.js features and API
- React Documentation - React fundamentals
- Tailwind CSS - Styling utility classes
- shadcn/ui - Component library
- TypeScript Handbook - TypeScript guide
MIT License - see LICENSE file for details
EAD Group Project 2025
For deployment instructions, see DEPLOYMENT_GUIDE.md