A PERSONAL FUEL JOURNAL VOL. 01 / THE LONG RUN

Guzzolene

One car.
A world of moving parts.

Fuel economy and price trends, in context. Every fill-up tells a small part of a bigger story — about the road, the economy, and the world beyond the pump.

Explore the data
01 / THE RECORD
211fill-ups tracked
02 / THE START
2018logging since
03 / THE PERSPECTIVE
1car. real-world data.

01 — THE OBSERVATIONS

The price of going places.

At the pump. Over time.
Monthly averages from a real driving life.

VIEW THE JOURNAL
Price per Gallon (Monthly Avg)
8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz
Average Fill-up Cost ($)
8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz
Average Gallons per Fill-up
8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz
Cost per Mile vs. WTI Crude Oil
8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz
Miles per Gallon (MPG)avg 42.2 mpg · EPA combined 31 mpg
8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz
Gallons per 100 Miles (GP100M)avg 3.01 · EPA 3.23 gp100m

Lower is more efficient. Unlike MPG, this scale is linear — a 1-unit improvement always means the same fuel saving.

8 world events · view context
  1. 01Aramco Drone Attack
  2. 02COVID-19 Lockdowns & Oil Price War
  3. 03Colonial Pipeline Hack
  4. 04Russia Invades Ukraine
  5. 05OPEC+ 2M BPD Cut
  6. 06OPEC+ Surprise Cut
  7. 07Operation Epic Fury (US Strikes Iran)
  8. 08Iran Closes Strait of Hormuz

Real fill-ups. Monthly averages. World events for context.

02 — UNDER THE HOOD

How it's built

A personal tool, shipped — and a few decisions worth explaining.

From notebook to product

It started as a Python/Matplotlib notebook charting years of my own fill-ups. The web app reimplements those analyses as a live product: monthly aggregates computed in React Server Components and shipped as data to client-side Recharts, with Drizzle as the typed source of truth over Neon Postgres.

A PWA, not a native app

The job is logging a fill-up one-handed at the pump — sometimes with no signal. An installable PWA does that without app-store overhead: entries queue in an offline IndexedDB outbox and sync automatically when the phone reconnects.

Cutting the AI OCR

An earlier version read the pump display from a photo via Claude. I removed it: a mobile-shaped form with a numeric keypad turned out to be faster and more reliable than photo-then-extract, and dropping it shed two cloud dependencies. Not every problem needs a model.

Privacy by construction

Fill-ups can capture location for my own use, but coordinates are stripped at the database query for any public surface — they are never sent to an unauthenticated visitor, not merely hidden in the UI.

View the source on GitHubPublic repo · Next.js 16 · TypeScript

Built with

  • Next.js 16
  • React Server Components
  • TypeScript
  • Clerk
  • Neon Postgres
  • Drizzle ORM
  • Recharts
  • Tailwind CSS
  • PWA · offline sync
  • Vercel
Phone / Browser
PWA · offline outbox (IndexedDB)
Next.js 16 · Vercel
Server Components + Actions
Clerk
auth & approval
Neon Postgres
via Drizzle ORM
WTI prices · Wikipedia
event & oil-price data
Charts are pre-aggregated in Server Components and shipped as data to the client; fill-ups sync from an offline queue when the device reconnects.