Web-based booking schedule for Always Classic Cars.
- TypeScript 97.7%
- Shell 2%
- JavaScript 0.2%
| docs | ||
| plans | ||
| prisma | ||
| scripts | ||
| src | ||
| .gitignore | ||
| auth.config.ts | ||
| auth.ts | ||
| CHANGELOG.md | ||
| docker-compose.yml | ||
| Dockerfile | ||
| eslint.config.mjs | ||
| next-auth.d.ts | ||
| next.config.mjs | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| prisma.config.ts | ||
| README.md | ||
| tailwind.config.ts | ||
| task.md | ||
| tsconfig.json | ||
| vitest.config.mts | ||
ACC System
Web-based booking schedule for Always Classic Cars, replacing the Excel-based wedding booking spreadsheet.
Features
- Schedule — bookings grouped by date with inline editing, search and filters (source/type/status), month/year navigation, VIC public holiday badges, date labels, "no more bookings" toggle, a print-ready date-range view, and a Postponed toggle for bookings moved off their date (with or without a new date yet)
- Bookings — multi-car jobs with per-car chauffeur, pickup time, duration, route, and night transfer flag; client, partner, wedding, and flight details; unsaved-changes protection
- Pricing — date-effective price lists (Settings → Pricing) with a 3-hour base per car, extra-hour rate, flat night rates, public holiday and after-midnight surcharges; Car Cost and Surcharge pre-fill automatically on the booking form and on website bookings, and each booking keeps the price list that applied when it was created
- Payments — Waiting Deposit / Deposit Paid / Cash on Day / PIF / Hold tracking, individual payment records with live balance, discount and surcharge, automatic status updates
- Fleet & chauffeurs — full CRUD with soft-delete protection, availability calendars for cars and chauffeurs, double-booking and unavailability warnings, CPVV DC licence verification, portal access badges
- Chauffeur portal — chauffeurs see their own jobs, record overtime with client signature (cost auto-calculated), manage availability, view pay (configurable hourly rate with per-job breakdown), subscribe to a personal iCal feed
- Contract offers — send offers to chauffeurs by email with Accept/Decline buttons; responses update the schedule, notify the office and the chauffeur, and unassign on decline; chauffeurs are emailed again if an already-accepted job's details later change
- Emails — all system emails (chauffeur offer, portal welcome, password reset, accept/decline notifications, job-updated notifications) editable as branded templates in a WYSIWYG editor (Settings → Email Templates)
- PDF booking sheets — client and chauffeur PDFs generated on save and webhook import, stored via OneDrive sync; office signatures and T&C pages
- Website intake — WPForms webhooks auto-create priced bookings from the Wedding, General, Airport Transfer, and Transfer website forms
- Admin — role-based section permissions with per-section read-only mode, reports dashboard, full activity log with field-level diffs, Traccar GPS integration with day-limited share links
- Mobile friendly — responsive layout with card views throughout
Tech Stack
- Next.js 16 (App Router, TypeScript, sharp for image optimisation)
- Prisma 7 with
@prisma/adapter-better-sqlite3(SQLite) - NextAuth.js v5 (credentials provider, JWT sessions)
- Tailwind CSS
- React Hook Form + Zod
- TinyMCE (email template editor), nodemailer (SMTP)
- date-fns, lucide-react
- Vitest unit tests
- Docker + docker-compose or Node.js + PM2 (production)
Documentation
| Doc | What it covers |
|---|---|
| docs/installation.md | Production quick-install, Docker, and local development setup |
| docs/deployment.md | Full production deployment — Proxmox LXC, Node.js + PM2, Docker, Nginx, updating |
| docs/environment-variables.md | Every environment variable the app reads, in one place |
| docs/email-smtp.md | SMTP setup, including the Microsoft 365 / Exchange Online OAuth2 guide |
| docs/database-schema.md | Entity relationships and what each Prisma model is for |
| docs/project-structure.md | Where things live in the codebase |
| docs/onedrive-sync.md | Syncing booking sheet PDFs from OneDrive to the server |
| docs/wpforms-webhooks.md | Website form → booking webhooks: setup and field mappings |
Version
v1.89.0 — see CHANGELOG.md for the full version history. The authoritative version number lives in package.json.