Skip to content

Repository files navigation

⛽ Pitstop

A self-hosted fuel & maintenance tracker you actually own.

License: AGPL v3 Status PRs welcome


Pitstop lets you log fuel-ups, watch your fuel economy, and stay on top of vehicle maintenance — all running on your hardware and open to anyone who wants to self-host it. It supports multiple users, each with a private garage of vehicles, handles everything from gas trucks to pure EVs, and installs to your phone's home screen so logging a fill-up at the pump takes seconds.

It ships as a single Docker container designed to sit behind a Cloudflare tunnel, and runs just as happily on a bare VM, LXC, or metal.

Status: feature-complete beta — all six build phases are implemented and tested. See docs/DESIGN.md for the full design document.

Screens


Garage
Your vehicles at a glance

Pump logging
A fill-up in a couple of taps

Service & reminders
What's due, sorted by urgency

Fuel-grade comparison
Which octane has been cheaper

Buy advisor
Which grade to buy right now

Features

  • Fast pump logging — a mobile-first quick-add flow with live price math: enter any two of gallons / price-per-gallon / total and the third fills itself in.
  • Real fuel economy — per-fill and average MPG, cost per mile, monthly and lifetime spend, with correct handling of partial and missed fill-ups.
  • Is premium worth it? — Pitstop tracks economy per fuel grade and compares them by cost per mile, so it tells you in real dollars whether cheaper-but-lower or pricier-but-higher fuel actually saves you money in your car.
  • Live "which grade to buy" advisor — at the pump, punch in today's posted prices and Pitstop uses your car's measured MPG per grade to recommend the cheapest to run right now — including the break-even price premium would need to hit to win.
  • Maintenance & reminders — service history plus reminders by mileage, time, or both, with upcoming / due / overdue status.
  • Every vehicle type — gas, diesel, hybrid, plug-in hybrid, and pure EV (charge sessions in kWh). Each vehicle only shows the fields relevant to its type.
  • Fully editable — mistyped an odometer or price? Tap any past entry to fix or delete it, and your stats recompute automatically. Nothing is write-once.
  • Multi-user — each person gets their own private garage, and the admin can reset a forgotten password or view the app as any user to help them out.
  • Own your data — flexible CSV import with column mapping (plus presets for the formats other fuel trackers export) and full CSV/JSON export.
  • Installable PWA — add it to your home screen; no app store, no native app.

Tech stack

  • Backend: Python + FastAPI (SQLModel/SQLAlchemy, Alembic)
  • Database: SQLite by default, Postgres optional
  • Frontend: React + Vite + TypeScript, built as an installable PWA
  • Packaging: one Docker container (also runs on bare VM / LXC / metal)

Status

All core functionality is built and tested: auth & multi-user, vehicles, the quick-add fuel/charge flow with tested economy math, maintenance & reminders with notifications, per-grade cost-per-mile comparison and the live buy advisor, CSV import/export, charts, an installable offline-capable PWA, and an admin panel. See docs/DESIGN.md for the design document, and ROADMAP.md for known issues and what's next.

Running locally

The whole app — API and web UI — is one container on one port.

git clone https://github.com/nightgarage/pitstop.git
cd pitstop
docker compose up -d

Open http://localhost:8080, and the first-run screen walks you through creating the admin account. Data (SQLite database + generated secret) lives in the pitstop_data volume. Configuration is entirely environment variables — see .env.example for every option (registration toggle, Postgres via DATABASE_URL, subpath, and so on). The interactive API docs are served at /api/docs.

Adding users

The account created on first run is the admin. To get anyone else in, either:

  • Add them yourself — in the app, go to Settings → AdminAdd a user: enter their email and a display name, and Pitstop creates the account on the spot and shows you a one-time temporary password to pass along. Registration stays closed the whole time. They get the welcome tour on first sign-in and can change the password in Settings.
  • Let them sign up — switch Open registration to On in the same admin page (or set ALLOW_REGISTRATION=true), have them create an account from the login screen, then close it again if you don't want strangers signing up.

Either way, every account gets its own private garage — users never see each other's vehicles.

Helping a user out

Two tools sit on each row in Settings → AdminUsers:

  • Reset password issues a new password and shows it once, for you to pass along; the user is asked to choose their own the next time they sign in, and is notified in-app that it happened. Stored passwords are argon2 hashes, so an existing password can never be read back — resetting is the only way to get a locked-out user in.
  • View as this user switches your session to their account, so you can see exactly what they see. A banner across the top names whose account you are in and takes you back with one tap.

While you are viewing as someone else your admin powers are suspended, the session expires after an hour, and admins can't be viewed as at all.

Development setup

Backend (Python 3.12+) and frontend run separately during development:

# API on :8000
cd backend
python -m venv .venv && . .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -e ".[dev]"
alembic upgrade head
uvicorn pitstop.main:app --reload

# Web UI on :5173 (proxies /api to :8000)
cd frontend
npm install
npm run dev

Run the backend tests with pytest from backend/.

Self-hosting

See docs/DEPLOY.md for the full deployment guide: Docker behind a Cloudflare tunnel (or any reverse proxy, with subpath support), the non-Docker pip install + systemd path, health checks, and backups. A demo instance with sample data is one env var away (SEED_DEMO=true).

Contributing

Contributions are welcome — see CONTRIBUTING.md. The best place to start is an item from ROADMAP.md; open an issue to claim it. Please keep changes aligned with the design doc.

License

AGPL-3.0 © 2026 Pitstop contributors

In plain terms: self-hosting Pitstop is completely unrestricted — run it, modify it, use it for anything, personal or at work, no obligations. The copyleft only bites if you distribute a modified version or offer one to others as a network service; then you have to publish your changes under the same license. It's here so Pitstop stays open, not to get in your way.

About

Track fuel economy & maintenance for all your vehicles, self-hosted. Logs fill-ups, MPG, and service reminders

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages