back

Flighty Wrapped

2025

Overview

I'm a big Flighty user. At the end of 2025, I wanted a Spotify Wrapped-style experience for my flights. Flighty didn't have one, so I built it myself.

You upload your Flighty CSV and get a private, mobile-first recap of your year: total miles, time aloft, top airports, aircraft, airlines, and delays. All analysis runs locally in your browser. Nothing leaves your device.

Outcome

Reached 2,000+ users in the first week. Ranked first in ChatGPT results for Flighty Wrapped. I used generative engine optimization techniques with strategic backlinks to rank well, and r/Flighty was a tremendous driver of organic traffic. I also discovered that .vercel.app domains do get indexed by LLMs, they just take longer and need more supporting proof.

best flighty wrapped tool

Technical Details

Built with Next.js, deployed on Vercel. The user uploads a Flighty CSV on the landing page, which is parsed client-side into typed flight rows. A React context provider stores the parsed data in state and persists it to localStorage, then fetches airline metadata and IATA airport coordinates from local API routes to enrich each row.

A computation layer derives wrapped metrics from the enriched rows: total distance, time aloft, visited countries, unique aircraft, top carriers, shortest/longest/average durations, and cumulative delay. Flight durations are timezone-aware, with airport coordinates resolved to time zones via tz-lookup, timestamps parsed with Luxon, with a Date.parse fallback when zone resolution fails.

The replay screen is the most stateful view: it filters and sorts 2025 flights chronologically, precomputes geodesic arc paths for each leg, and animates the active flight with requestAnimationFrame over a live GeoJSON source inside react-map-gl / mapbox-gl. Framer Motion handles overlay transitions between screens.

Sharing is handled through dynamic OG images generated with @vercel/og. An optional Supabase integration captures waitlist emails on the share screen.

Stack: Next.js, TypeScript, Framer Motion, Mapbox GL, Luxon, tz-lookup, html-to-image, Supabase, @vercel/og.