Garage Logbook

Self-hosted vehicle maintenance and service tracking.

  • Python
  • HTML
  • Apps & Tools
Garage Logbook screenshot

Garage Logbook is a self-hosted web app for keeping every vehicle's maintenance and service history in one place. Log what you did, what it cost, and when — attach receipts and photos, and keep a clean record for each car, bike, or truck in the household. Built with Flask and Docker, with multi-user support and role-based access.

Features

  • Multi-user — isolated garages per user, with admin cross-user visibility
  • Vehicle management — year, make, model, VIN, purchase date and photos
  • Maintenance records — date, mileage, vendor, cost, notes and photo galleries
  • PDF receipt upload and a lightbox image gallery per record
  • Dashboard with vehicle/record/spend stats over configurable time ranges
  • Live search & sort, plus duplicate record for repeat jobs
  • CSV import/export with field mapping and a dry-run preview
  • Role-based access — Admin and Editor, with granular per-user permissions
  • First-login security, light/dark theme saved per user, and a mobile-responsive layout

Requirements

Docker and Docker Compose.

Install with Docker Compose

Download the compose file and env template, then set a secret key:

mkdir ~/garage-logbook && cd ~/garage-logbook
curl -O https://raw.githubusercontent.com/hyprlab/garage-logbook/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/hyprlab/garage-logbook/main/.env.example
cp .env.example .env
python3 -c "import secrets; print(secrets.token_hex(32))"   # -> paste into .env as SECRET_KEY

The compose file:

services:
  garage-logbook:
    image: hyprlab/garage-logbook:latest
    container_name: garage-logbook
    restart: unless-stopped
    ports:
      - "${APP_PORT:-5000}:5000"
    volumes:
      - garage-data:/data
    env_file:
      - .env

volumes:
  garage-data:
    driver: local

Start it and open http://localhost:5000 (default login admin / admin — change it immediately):

docker compose up -d

You can also build from source (docker compose up -d --build) or run natively with Python 3.10+.

Configuration

Variable Required Default Purpose
SECRET_KEY Yes Flask session encryption key
APP_PORT No 5000 Host port the app listens on
DATABASE_PATH No /data/garage_logbook.db Database path inside the container
UPLOAD_FOLDER No /data/uploads Upload path inside the container

Updating & backups

docker compose pull && docker compose up -d

All data lives in the garage-data volume. To back it up:

docker compose stop
docker run --rm -v garage-logbook_garage-data:/data -v $(pwd):/backup \
  alpine tar czf /backup/garage-logbook-backup.tar.gz -C /data .
docker compose up -d

Tech stack & license

Flask · SQLite · HTML/CSS/JS on Docker. Free and open source under the GNU AGPL-3.0. Full docs and releases on GitHub.