Each claim ships with concrete evidence — env vars, table names, cadence chips. No marketing fluff.
◆DesignReal services catalog, not just a tagline
The legacy site had one Fuel Services nav item and no actual list of what Fuel1st does. The rebuild ships a structured catalog: Fuel Supply, Trip Support, Logistics, Flight Planning, Ground Handling, Sustainable Aviation Fuel — each with its own surface and copy.
- Before
- Nav: Home · About Us · Fuel Services · Contact Page. No actual service list anywhere on the site.
- After
- Six clearly-scoped services with their own pages, anchored by hero stats: 1,800+ Airports · 190+ Coverage · 24/7 Dispatch.
◆DesignSelf-hosted aviation photography, not stock fillers
The legacy site had no hero imagery beyond a search box. The rebuild's third commit added self-hosted aviation photography throughout, with a head-on jet photo as the favicon. Hero went through five iterations (brighter overlays, photo-on-right + text-on-left, split layout) until the plane and the copy stopped competing.
- ▸Commit dac4e0b: Add self-hosted aviation photography throughout the site
- ▸Commit 975761d: Use head-on jet photo as the site favicon
- ▸Commit 9cab939 → 7c08e9d: Hero layout iterations until text + plane stopped competing
△Agent backboneCurated aviation news, automatically refreshed
A `/news` aggregator pulls four public industry sources — Aviation Week, FlightGlobal, Simple Flying, AIN — filters out items mentioning direct competitors, categorizes by keyword, and renders a card grid with category filters that persist in localStorage. 24-hour ISR with a manual revalidate webhook.
- ▸Sources: Aviation Week · FlightGlobal · Simple Flying · AIN
- ▸Competitor-mention filter applied to every item
- ▸POST /api/revalidate-news endpoint gated by a shared token
◆DesignThree motion passes, scoped to feel — not flash
After the structural rebuild shipped, three interaction passes landed: card lift on hover (desktop), tap-press squish for cards and buttons, and stagger fade-up on scroll. Each is a small, named effect; everything stays GPU-light and respects reduced-motion preferences.
- ▸Effect 1: card lift on hover (desktop)
- ▸Effect 3: tap-press squish for cards and buttons
- ▸Effect 4: stagger fade-up on scroll
△Agent backboneComplete SEO surface — sitemap, dynamic OG, JSON-LD, robots flag
Full Next.js metadata API: per-page Twitter cards + OG, Organization JSON-LD with foundingDate / email / phone, a dynamic `/opengraph-image` Edge route that renders a 1200×630 brand-gradient PNG per page, and a /sitemap.xml that enumerates 11 static paths plus a per-service anchored entry. Indexing is gated behind a single `site.allowIndexing` flag wired through both `robots.ts` (disallow:/ when off, allow:/ + sitemap when on) and `layout.tsx` (matching robots meta on every page).
- ▸app/sitemap.ts: 11 static paths + per-service `#slug` entries, weekly/monthly changeFreq
- ▸app/robots.ts: gated on site.allowIndexing — full disallow → full allow + sitemap + host
- ▸app/opengraph-image.tsx: Edge runtime, 1200×630, brand-gradient (#6000CD → #160031)
- ▸app/layout.tsx: title template, OG, Twitter card, Organization JSON-LD (5+ fields)
- ▸app/icon.png + app/apple-icon.png picked up automatically
△Agent backboneNews aggregator with 5-category regex taxonomy + competitor blocklist
`lib/rss.ts` defines 5 news categories — commercial, business-aviation, military, MRO, sustainability — each backed by a regex over the item title + content. Items can land in multiple categories. A single BLOCKLIST regex strips any item that mentions the named competitor before render. 12-second per-feed timeout, custom User-Agent, media:content support for inline thumbnails.
- ▸5 categories with per-category keyword regex (commercial / bizav / military / MRO / SAF)
- ▸BLOCKLIST = /\baeg\b/i — competitor mentions never reach the page
- ▸rss-parser with 12s timeout + Fuel1st-News-Aggregator/1.0 User-Agent
- ▸Items can land in multiple categories (multi-tag)