01

Driving Planner

A full-stack web app for learner drivers and driving schools. Users find nearby schools (geocoded via OpenStreetMap), enroll in programs, log driven kilometers, events and tasks, and rate schools, while schools manage their own page. Vue 3 with PrimeVue, Pinia and English/German i18n talks to an Express REST API with SQLite, JWT and Swagger docs, all started with Docker Compose.

Language
TypeScript
Year
2026
Team
3 people
Stack
  • Vue
  • TypeScript
  • PrimeVue
  • Pinia
  • Express
  • SQLite
  • JWT
  • Docker
Client · Vue 3
API · Express 5

One router, service and repository per feature: schools, programs, enrollments, kilometre log, events, tasks, ratings, users, auth

Data
Background · External
  • Docker Compose
  • Swagger
  • Jest

Features

  • Find driving schools near you, sorted by their distance from your location.
  • Enroll in a school's programs and follow your training.
  • Log driven kilometres, driving lessons and other events, and tasks.
  • Rate and comment on driving schools.
  • School owners manage their own school page.
  • An English and German interface with profile pictures.

How it's built

The frontend is a Vue 3 single-page app with PrimeVue components, Pinia stores, Vue Router and vue-i18n for English and German. It talks to an Express 5 REST API written in TypeScript.

The backend is organised by feature (schools, programs, enrollments, kilometre log, events, tasks, ratings, users, auth), each with a router, a service and a repository. Data lives in SQLite through better-sqlite3, wrapped in a small unit-of-work class that runs each change in a transaction. Passwords are hashed with bcrypt, requests are authenticated with JWT, and Swagger documents every endpoint.

Schools without coordinates are geocoded in the background with OpenStreetMap's Nominatim, one request per second to respect its usage policy. Docker Compose starts the whole stack, for development with hot reload or as a release, and Jest tests cover the main routers.