What paxstats is, and why I built it
By Loic Dufeal
I have flown a few hundred times and I could not tell you how many. Not roughly — at all. The evidence was spread across three airline apps, one of which no longer exists, a Gmail search that stopped working when I changed address, and a spreadsheet I abandoned in 2019 at row 61. paxstats is the thing I wanted to exist instead.
The problem is not tracking. It is recording.
Everybody who flies more than twice a year already has a flight tracker. Flighty, App in the Air, the airline's own app, Flightradar24 — they are good software, and they are all pointed at the same forty-eight hours: the flight you are about to take. Which gate, how late, which airframe, where it is right now. Then you land, and the whole apparatus goes quiet until the next booking.
What almost nothing is pointed at is the other direction — the three hundred flights behind you, as a body of data that belongs to you. Pilots have had a logbook for a century. Divers log dives. Runners have not shut up about their splits since 2012. Passengers, who spend more collective hours in aircraft than any of them, have a Gmail search.
A logbook is the one aviation document that only gets more valuable with age. Passengers are the only people in the industry who do not keep one.
Two things follow from that. The first is that it is genuinely interesting: your flying has a shape — a home airport that quietly changed, a carrier you are far more loyal to than you would admit, a year that was mostly red-eyes — and none of it is visible without the data in one place. The second is that the record rots. Airline apps trim history, loyalty accounts lapse, mailboxes get cleared out, and the evidence that you were ever on that flight to Ulaanbaatar in 2014 disappears quietly and permanently.
What paxstats is, in one sentence
It is a personal flight logbook: you get flights in through whichever door happens to be least annoying at that moment, and it turns them into route maps, charts, badges, a year in review, and a handle you can share.
Logging is the whole problem
Every personal logbook ever built dies the same death, and it is not a technical one. It dies as a data-entry chore. If logging a flight costs ninety seconds of typing, you will do it for four flights, feel good about yourself, and then stop — and a logbook with a four-flight hole in it is worth less than no logbook at all, because you can no longer trust any number it shows you.
So the design constraint was never “what should the form look like”. It was: the time between having a boarding pass and having it logged has to approach zero, from wherever you happen to be standing. That is why there are seven ways in rather than one good one.
- Scan the pass
- Point the camera at the barcode on a boarding pass. It decodes on sight, and a connecting itinerary becomes one draft per leg rather than one flight called LHR-SIN.
- Photograph the stub
- For the pass with no scannable code left, or a PDF. It is read as an image.
- Share from Wallet
- On iOS, share the pass straight out of Apple Wallet into paxstats. It is waiting for you when you land.
- Forward the email
- Send the airline's confirmation to log@paxstats.app. No app opened, nothing tapped.
- Type the number
- A flight number and a date fills in the route, the times, the aircraft type, the tail number and the real flown track.
- By hand
- Six steps on a phone, one form on a laptop. Only the date and the two airports are actually required.
- Import everything
- A CSV out of Flighty, FlightDiary, OpenFlights, App in the Air, JetLog or TripIt — or the paxstats template. Fifteen years in one go.
What one flight actually holds
Most logbooks store a route and a date, and that is the ceiling on every question they can ever answer. The interesting statistics come out of the fields nobody bothers to model.
- Route
- Airports, date, local departure and arrival, duration, and the great-circle distance computed on save.
- Metal
- Airline, aircraft type, manufacturer, and the tail number — which pulls a photo of that exact airframe.
- Seat
- Number, cabin class, window/aisle/middle, award-ticket and jump-seat flags.
- Trip
- Purpose — business, leisure, commute, positioning — and up to five lounges you used that day.
- Photos
- Boarding passes, wing shots, meal trays. Private, served through short-lived signed links.
- Companions
- Tag someone who was on the same flight. They confirm, and it lands in their logbook too.
- Weather
- Conditions at both ends on the actual date — archive for old flights, forecast for upcoming ones.
- Upcoming
- Log a trip before you take it and it pins above the log with a countdown.
“Has my flying got more premium over time?” is only an answerable question if something recorded the cabin in the first place. Same for “how many of my flights are genuine red-eyes”, or “which airport have I connected through most”. The depth is not there to be impressive on a feature list; it is there because it is the difference between a chart and a shrug.
What it gives back
The logbook opens on a map of every route you have flown, drawn from the real flown track where there is one rather than a great-circle guess, and the same data spins as a globe. Underneath that sit 4 groups of charts — overview, airlines and aircraft, places, timing — over whatever period you pick, not just the current year.
Then there is a set of numbers no chart states outright, derived rather than plotted: time zones crossed per year, widebody share, premium-cabin share, route variety. They exist because they are the things you would actually work out by hand if you had the patience, and nobody has the patience.
Ask your logbook, and why it is built strangely
There is a box on the dashboard that takes a question in plain English. What is the longest I have ever gone without flying? Which airline have I flown most since I moved? How many hours this year?
The obvious way to build that is to paste every row of the logbook into the prompt and let the model read the table. I built it that way first, and it was wrong in production twice, in ways I could reproduce: asked which airline flew a particular aircraft type most, it confidently named the wrong one; asked for the longest route, it picked a flight that was not the longest. Not hallucination in the lurid sense — just a model asked to filter, tally and rank several hundred rows by eye, which is exactly the task it is least reliable at and exactly the one this box cannot afford to get wrong.
So it was rebuilt the other way round. The model never sees your flights. It gets a small vocabulary block — your airlines, your aircraft types, cabins and years, so that the filters it writes match something real — and two tools, query_logbook and get_flights, which run a genuine filter → aggregate → group → rank → limit pipeline over your rows in code. Every number that can appear in an answer came out of one of those queries. None of it came out of a model reading text.
168 achievements, and why they are not confetti
There are 168 badges, in tiers, worth points that carry you through 9 ranks from Bronze Aviator to Legend IV. Some are count ladders — flights, countries, airlines, distance. The ones worth having are not.
Polar routes. Island nations. Red-eyes. Flying the same carrier often enough that it says something about you. A badge for one of those is not a reward, it is a question: you find out that “island nations” exists, and then you are looking at a map working out which ones you have quietly already done. That is the whole mechanic, and it is the reason the badge list was written around how people fly rather than just how much.
The part I did not expect to matter
I built the social half last and reluctantly, on the assumption that a logbook is a private object. It turns out that a logbook is a private object that people want to compare.
- A feed that opens on a globe of where everyone has just been, then the actual flights other people logged.
- Pax buddies: one symmetrical connection, suggested from genuine overlap with your own flying rather than from your contacts list.
- Compare, which puts two logbooks head to head over any period — shared routes, who is ahead, and by what.
- Companions, which is the one I use most: tag someone who was on the same flight, they confirm, and it lands in their logbook too. One flight, two logbooks, nobody typing it twice.
- Directories of every airport, airline, country, aircraft type and tail number you have flown — and the lounges, because someone always asks.
Share cards and Wrapped
Any flight, or any year, renders to a card you can post — five layouts, photo or map. And there is a year-in-review story for every year you have flown, not only the one that is ending: import fifteen years of history and you get fifteen of them, which is a far stranger and better thing to scroll through than a single December recap.
Where it runs
- Web
- Any browser, installable to a home screen, and the last logbook you loaded still renders with no connection.
- iOS
- A native build: Wallet sharing, push, camera scanning, Sign in with Apple.
- Your inbox
- log@paxstats.app logs a flight with no app open at all.
- Signing in
- Apple, Google, or email and a password. Invite-only while it is in beta.
Your data, and getting it out
Three visibility tiers — public, any signed-in pax, or accepted buddies only — with separate switches for your flight list, your photos and your avatar, because those are genuinely different decisions. Access is enforced by row-level security in the database itself rather than by a check in the app, which is the difference between a rule and a promise.
Export is one complete CSV, in the same shape the importer accepts. That is deliberate and it is the same reason the importer reads other products' exports: a logbook you cannot leave is a hostage, and building retention out of lock-in is just a way of admitting the product is not good enough to keep you. Deleting your account is self-serve, from Settings, without emailing anybody.
So why not just use one of the existing ones
Fair question, and the honest answer starts with a concession: if what you want is a push notification when your gate changes at six in the morning, use a tracker. Flighty is excellent at that and paxstats will never compete with it, because it is not trying to. They are answers to different questions.
- Built forA live flight trackerThe flight you are about to take, minute by minute.paxstatsThe flights behind you, as a dataset you own.
- Getting data inA live flight trackerUsually one import path, or typing it in.paxstatsSeven, including forwarding an email and doing nothing else.
- Depth per flightA live flight trackerRoute, times, aircraft.paxstatsPlus seat, cabin, position, purpose, lounges, companions, weather, photos.
- Asking questionsA live flight trackerWhatever charts shipped.paxstatsPlain English, answered by a real query over your rows.
- SocialA live flight trackerA leaderboard, or nothing.paxstatsBuddies, companion tagging, head-to-head compare.
- LeavingA live flight trackerVaries, and rarely advertised.paxstatsOne CSV, and a delete button you can reach yourself.
Which is also why paxstats imports from Flighty, FlightDiary, OpenFlights, App in the Air, JetLog and TripIt. Almost nobody arrives at a logbook empty-handed; they arrive with years of history sitting in something else, and a product that makes you retype it has already lost.
What it is not, yet
It does not track your aircraft in the air, and there are no delay or gate alerts — it will remind you about a trip you logged in advance, and ask you afterwards whether you actually flew it, and that is the extent of it. There is no Android build; the web app installs to an Android home screen and behaves, but that is not the same thing. The iOS app is in TestFlight rather than on the App Store. And the whole thing is invite-only while the beta runs, which is a decision about how fast I can fix things, not a growth tactic.
If you want to look rather than read
There is a fully populated public logbook you can walk through without an account — every tab live, read-only, nothing you tap changes anything. It is the fastest way to find out whether any of the above is actually for you.