___ _ _ ___ _ _
| \ _ _(_)_ _(_)_ _ __ _ / __| __| |_ ___ ___| |
| |) | '_| \ V / | ' \/ _` | \__ \/ _| ' \/ _ \/ _ \ |
|___/|_| |_|\_/|_|_||_\__, | |___/\__|_||_\___/\___/_|
|___/
A full-stack freelance web app for a driving school client — a public landing page combined with a role-based internal management system for scheduling, students, and audit logging.
Feb 2026GitHub
Next.js 14TypeScriptPostgreSQLPrismaTailwind CSS

Driving School

Driving School is a full-stack web application I built as a freelance project for a driving school client — developed from scratch, covering initial database design, application architecture, and deployment. The project ships as two distinct surfaces: a public-facing landing page presenting the school's services, pricing tiers, and contact details; and a password-protected internal management system used daily by the school's staff. The management system implements a role-based access control model with two roles — admin and instructor. Admins have full system access including user management and the audit log; instructors see a scoped view limited to their own schedule and assigned students, ensuring sensitive administrative data is never exposed to the wrong role. The appointment scheduling module is the operational core: instructors and admins create and manage driving lessons through an interactive calendar. Conflict detection is enforced at the application layer — if a requested time slot is already occupied, the booking is rejected outright. The override was deliberately omitted to make data integrity architectural rather than procedural. The backend uses Next.js 14 App Router with server actions and React Server Components for data fetching, keeping round-trips minimal. Prisma ORM provides a type-safe data access layer over PostgreSQL, with a relational schema covering users, roles, students, appointments, and an append-only activity log. All notable system actions are recorded in this audit log, giving admins a traceable history of what happened and when. The entire application — management system and landing page alike — is built mobile-first with Tailwind CSS and adapts seamlessly across phones, tablets, and desktops without loss of functionality.

Key Features

  • Role-based access control with two roles (admin / instructor) — each with scoped views and permissions enforced at the application layer.
  • Interactive calendar-based appointment scheduling with server-side conflict detection: overlapping bookings are rejected, not warned.
  • Append-only audit log recording all notable system actions — gives admins a full, tamper-evident history of activity.
  • Student records module with create/view/update flows, kept intentionally simple for usability and maintainability.
  • Per-role dashboards with summary widgets: upcoming appointments, recent activity, and quick-access navigation.
  • Public landing page alongside the management system — presents services, pricing tiers, and contact details adapted to the client's branding.