Fleetron
Multi-tenant fleet platform — GPS tracking, trip logs, VAT-ready records
- Status
- LiveIn production since 2025, running the fleet it was built for
- Period
- 2024–now
- My role
- Founder, lead developer, and the person who gets paged
- Stack
- TypeScript · Node.js · React · PostgreSQL · PostGIS · Redis · Docker · nginx · GitLab CI · Hetzner · Tailscale
- Live at
- fleetron.io
The problem
I run a car rental company with twenty vehicles. Knowing where a car is, who drove it, how far, and whether that trip was business or private is not a nice-to-have — it decides what you can deduct and what you owe. Every off-the-shelf tool I tried solved one slice and left the rest in spreadsheets.
How it was built
Trips are geometry, not two columns
Positions go into PostGIS as real geometry rather than a pair of float columns. That turns questions like "which trips crossed this zone" or "how far from the depot did this car get" into one query instead of post-processing in application code.
Multi-tenant from the first migration
Retrofitting tenancy is a rewrite. Every table carried a tenant from the start, so onboarding a second company was configuration rather than a branch.
The financial side is the product, not a report
Trip logs feed invoicing, CRM reporting and accounting exports directly. The value is not the map — it is that the map produces a document the tax office accepts.
Releases are versioned images, not a git pull
GitLab CI builds tagged images into the registry and production runs a specific tag. Rolling back is changing one number, not undoing a deploy.
Where it landed
- 906 commits over 21 months, in production and carrying a real fleet
- Six containers on a single host: API, app, web, PostGIS, Redis, nginx
- Zero open admin ports — server access runs over Tailscale
I am my own first customer
Every feature was specified by a problem I hit that week while running the rental company. That is a narrower feedback loop than any user interview, and it is why the accounting exports exist at all — a developer without a fleet would have stopped at the map.