zsty.us

Before / After · Case Study

Ballair / Fuel First / 7Air — operating-group brochure + allowlist admin + federal bid agent

  • Aviation

Stood up the digital footprint for a three-entity aviation operating group: Fuel First International (fueling + bunker, CAGE 77SM4), Ballair Aviation Holdings (Boeing 767F + holding entities), and 7Air Cargo (three 737-800SFs, FAA Part 121, acquired May 2026). The deliverable is three layers: a public brochure at ballairaviation.com, a hard-allowlist admin dashboard for the operator, and an Anthropic-backed federal-bid drafting agent that scouts SAM.gov on the operating-group's real CAGE/UEI and drafts compliant bid sections without ever inventing a capability or auto-submitting.

A partner handed me a 4×6 brochure. Three hours later, ballairaviation.com was live with a Resend-backed contact form. The federal-bid agent came in the next phase.
🔒ballairaviation.com
jackiej.events — modern site

Receipts — measured

Numbers that moved.

0 hours
Brochure JPEG → live ballairaviation.com
was 0 hours
270 lines
Locked plan → production code
was 270 lines
0 days
Empty admin repo → drafting agent live
was 0 days
0
Federal entities under one ops surface
was 0
0
SAM keyword-scope categories
was 0
0
Bid sections drafted per click
was 0
  • 3 federal entities under one ops surface
  • 28 SAM.gov keyword-scope categories — one-click into live searches
  • Drafting agent: 7 bid sections, Anthropic-backed, hard never-invent rules
  • Allowlist admin: zero signup surface, sessions in Postgres

The pixel diff

Overview, then the walkthrough.

Left: everything the legacy site shipped — frozen in place. Right: an auto-scrolling tour of the rebuild, from hero to booking. No slider to fight with.

Before — the overview
🔒IMG_565C3369D78B-1.jpeg · a 4×6 brochure, no website
Before — the overview

This is everything the legacy site had to offer above the fold. No pricing, no calendar, no booking — the funnel ended at a mailto.

After — scroll through what shipped
🔒ballairaviation.com
After — scroll through what shipped

Auto-scrolls through the modern site so you can see the booking surface, the package grid, the pricing table, and the calendar inline — without leaving this page.

The four beats

Problem · Insight · Build · Outcome.

Scroll past the legacy frame. The four beats land in order. At the end, the modern site fades into the same window.

🔒IMG_565C3369D78B-1.jpeg · a 4×6 brochure, no website
Legacy
01 · The brochure

A partner handed me a single 4×6 marketing JPEG. That was the entire input.

Ball Air is real — Fuel First International (CAGE 77SM4), Ballair Aviation Holdings, and 7Air Cargo are three federal LLCs under one operating group. But on the morning of 2026-05-06 they had no public surface, no email pipeline, no contact form. What they had was a 4×6 marketing brochure my partner forwarded: sky background, BALL AIR wordmark with a sky-blue swoosh, nine service bullets surrounding a C-17 nose-on shot, three photo bands across the bottom, and the tagline 'Your Partner in Global Logistics and Crisis Response.' That JPEG was the entire creative brief.

02 · Lock the plan, paste the prompt

270 lines of decisions + 108 lines of executable prompt = no re-prompting.

Before writing any code, every decision got locked in `PLAN.md`: color tokens (--navy-900: #0A2540, --sky-500: #1E88E5, --gold-500: #D4A017), Inter at 400/600/700, 1200px max width, 768px breakpoint, sticky-nav with hamburger drawer, three sections (Services / Capabilities / Certifications) with the nine service points from the brochure split 3×3, exact About paragraph, /api/contact wired to Resend, 8-step Chrome handoff for the parts only the human can do (GitHub repo, Vercel import, GoDaddy → Cloudflare nameservers, Cloudflare Email Routing, Resend domain verify, Gmail Send-As, mail-tester). Then a 108-line `CLAUDE_CODE_PROMPT.md` packaged it as a copy-paste block.

03 · Build

11:19 first commit → 14:23 phone-defense state. Three hours and four minutes.

Initial site build at 11:19. Vercel deploy fix at 11:53. Hero swap at 12:08. Logo redesigned with globe + ribbon at 12:21. Operations gallery from brochure photos at 12:32. Mobile pass at 13:13. Phone added at 14:17. FAQ-buried phone + scrape-defense JS at 14:23. ~3 hours of focused work, mostly: image extraction from the brochure JPEG via Pillow, 430 lines of hand-written HTML, 99-line `api/contact.js` Resend handler, 43-line SVG logo recreated as flat two-tone. Same-day DNS migration GoDaddy → Cloudflare, Resend domain verified, Gmail Send-As tested through info@ballairaviation.com. Total cost on top of the existing domain renewal: $0/year.

04 · The next layer (admin + agent)

Brochure stops at credibility. The operator needs a workspace.

Twelve days later (2026-05-18), the second phase started: an allowlist Next.js 14 admin at ballair-admin.vercel.app with NextAuth magic-link sign-in, a sam-status home view tracking the 21-day SAM.gov expiration cliff, a bids Kanban, blackboard, reminders surface. Same operating group, deeper stack: Prisma + Postgres (Railway), SAM.gov Opportunities API v2 keyed to the operating group's real CAGE/UEI, an Anthropic-backed drafter (`lib/drafter.ts`) that turns a SAM opportunity + typed CompanyProfile into 7 bid sections under hard never-invent + never-auto-submit rules, and an AWS SES + SNS messaging hub with RFC 8058 one-click unsubscribe. Eight days from empty admin repo to all four surfaces operating.

05 · Receipts

What the full system shipped, in plain numbers.

Brochure → live in ~3 hours on 2026-05-06. Admin → drafting agent live in 8 days starting 2026-05-18. 270-line locked plan produced ~670 lines of working production code. 19 images in public/images/, most cropped from the original brochure JPEG. 41 federal opportunities seeded; demo rows pruned to real engagement within 3 days. 28 SAM keyword-scope categories tuned to the actual mission set (BIA on-call fixed-wing, DLA Energy fueling, USTRANSCOM channels, USPS contract air mail). 6 immutable never-invent rules baked into the drafter system prompt. 7 bid sections generated independently. Sessions in Postgres so access revocation is a row delete.

🔒ballairaviation.com
Modern

Architecture

One chain replaced by another. Receipts above.

Old stack
  • Three LLCs, no public surface
  • SAM.gov spreadsheet
  • Bid drafts from scratch
  • Manual outbound email
New stack
  • ballairaviation.com (static + serverless)
  • ballair-admin.vercel.app (Next.js + NextAuth)
  • Prisma + Postgres (Railway)
  • SAM.gov v2 API + Boolean keyword scope
  • Anthropic Claude (drafter, 7 sections)
  • AWS SES + SNS (messaging hub)
  • Cloudflare Email Routing (inbound)

What changed

Grouped by what kind of system shipped.

Each claim ships with concrete evidence — env vars, table names, cadence chips. No marketing fluff.

Design

Brochure → live in 3 hours — the mechanism

The build started from three files sitting in one folder: a single 4×6 partner-supplied marketing brochure (`IMG_565C3369D78B-1.jpeg`), a 270-line locked `PLAN.md`, and a 108-line `CLAUDE_CODE_PROMPT.md` paste-block. The brochure provided both copy (9 service bullets, tagline, About paragraph) and imagery (cropped hero + 3 supporting frames). The PLAN locked every decision — hex codes, breakpoint, exact section copy, file layout, the 8-step Chrome handoff for DNS migration — so Claude Code executed without re-prompting. Initial commit at 11:19; working site with mobile drawer, Resend contact form, custom SVG logo, and a scrape-defended phone number by 14:23. Same day. Same coffee.

Before
A 4×6 partner-supplied marketing brochure on the kitchen table. The three LLCs (Fuel First International, Ballair Aviation Holdings, 7Air Cargo) had no public surface and no email pipeline.
After
ballairaviation.com live with mobile-optimized layout, Resend-backed contact form delivering to info@ballairaviation.com, Cloudflare Email Routing inbound to Gmail, mail-tester ≥9/10 with SPF/DKIM/DMARC all passing.
  • Source artifact — IMG_565C3369D78B-1.jpeg, committed to og-gitclaw/ballairaviation
  • Locked plan — PLAN.md (270 lines): color tokens, sections, exact copy, file layout, 8-step Chrome handoff
  • Executable prompt — CLAUDE_CODE_PROMPT.md (108 lines): paste into Claude Code from the project root, no re-prompting
  • Built artifact — src/index.html (430 lines) + api/contact.js (99 lines, Resend) + public/logo.svg (43 lines, recreated as flat SVG)
  • Image extraction — 19 images in public/images/, the active hero + supporting frames cropped from the brochure JPEG via Pillow
  • Explicit stop conditions — `do not deploy`, `do not push`. The agent runs to the boundary of what it can do and hands a numbered Chrome checklist to the human (GitHub repo, Vercel import, Cloudflare DNS, Resend domain verify, Gmail Send-As).
  • Timeline — initial commit 2026-05-06 11:19 → phone-defense state 14:23. ~3h04m of focused work.
Agent backbone

SAM.gov scout — runs on the operating group's real CAGE/UEI

`lib/sam-gov.ts` queries SAM.gov Opportunities API v2 with the operating group's registered API key (tied to CAGE 77SM4, UEI LR94Z4RUN2T5). A single tuned Boolean keyword scope — `BALLAIR_KEYWORD_SCOPE` — covers 25+ aviation and fuel terms targeted at the work Brendon actually bids: Interior/IBC on-call fixed-wing (140D-prefix BIA notices), DLA Energy fueling, USTRANSCOM channel missions, USPS contract air mail, FEMA/USAID humanitarian, CRAF Seg II.

Before
Spreadsheet of SAM.gov tabs, refreshed by hand. Opportunities discovered after the response deadline ran out.
After
Auto-fed Postgres table sorted by responseDeadLine; red banner inside 21 days; one-click into a live SAM.gov search for any of 28 categories.
  • Endpoint: api.sam.gov/opportunities/v2/search (1000 req/hr per key)
  • Pagination handled by the lib; results post into the Postgres opportunities table
  • Source links rewritten through Google `site:sam.gov` to dodge the SAM.gov 404 quirk
  • Scheduled task fans out 28 keyword-scope categories on a weekly cadence
Agent backbone

Drafter — Anthropic-backed, with explicit never-invent rules

`lib/drafter.ts` is an Anthropic SDK call with a system prompt that bakes six immutable rules: never invent capabilities/certs/contracts/pricing/personnel/insurance; render TBD profile fields as `[TBD — Brendon to confirm]`; surface capability mismatches as `[CAPABILITY GAP — Brendon to address: ...]` rather than glossing; never insert pricing numbers; never claim a cert not held in the profile; **never auto-submit** — the drafter writes, the human submits at SAM.gov.

Before
Bid sections written from scratch each time. Risk of accidentally claiming a cert that wasn't held.
After
Section-scoped drafts grounded in a typed CompanyProfile. Capability gaps surface explicitly; pricing structurally placeholder; submission stays human.
  • 7 sections drafted independently: executive summary, technical, past perf, management, pricing notes, reps & certs, submission checklist
  • Each section has its own length budget + structural instructions (e.g. technical = 600-1200 words with named subheadings)
  • Voice tuned for federal proposal standard — active, direct, no marketing fluff
  • DraftPanel.tsx UI shows last-generated timestamp + model per section
Retention

Honesty pass — demo rows flagged, then wiped, scope tuned to real engagement

Initial seed pulled 41 federal opportunities from SAM but the operator only engages a fraction. Day-1 honesty fix: every unverified row got an `isDemo` flag + visible UI banner. Day-3: the demo rows were wiped, the keyword scope was retuned against the categories that actually drove bids. The opportunities surface only shows real, recently-pulled rows now.

  • Commit `17a3ddc` — Honesty pass: mark all unverified opportunities as isDemo + UI banner
  • Commit `06d3ba6` — Wipe demo opportunity rows, tune keyword scope from real engagement
  • Operator pattern: ship loud, mark anything uncertain visibly, prune the noise within days
Retention

Hard allowlist — no signup surface, by design

Magic-link sign-in requests for any email not on `ADMIN_EMAILS` are silently rejected. No add-user UI. Sessions live in Postgres so revoking access is a single row delete. Switched to JWT session strategy so edge middleware can validate auth at the same level as the page renderer.

Real-time push

Messaging hub — opt-in subscribers, consent audit, RFC 8058 one-click unsubscribe

AWS SES + SNS messaging stack added in the same admin: opt-in subscribers table, consent audit log on every send, RFC 8058 `List-Unsubscribe` + `List-Unsubscribe-Post` header pairs for one-click unsubscribe in Gmail/Apple Mail. Webhook handler now stops silently swallowing SubscribeURL fetch failures.

  • Commit `04dcd71` — Add messaging hub: opt-in subscribers, SES email, consent audit, RFC 8058 unsub
  • Commit `b9e5c4a` — Honor body.sourceAppId on admin-authed sends
  • Commit `b65fe22` — Stop silently swallowing SubscribeURL fetch failures in SES webhook

While the owner sleeps.

Autonomous surfaces

The agent backbone keeps the brand earning after hours. The owner approves; the system runs.

  • Pulls fresh SAM.gov opportunities through the operating group's CAGE/UEI

    weekly (scheduled task)

    Scheduled SAM.gov v2 API queries fan out the 28-category keyword scope on a weekly cadence; results land in Postgres sorted by responseDeadLine. The agent runs as the operating group — not as a third-party scraper.

  • Drafts 7 bid sections per opportunity, on demand

    per opportunity, on the operator's click

    DraftPanel in the admin generates Executive Summary / Technical / Past Performance / Management / Pricing Notes / Reps & Certs / Submission Checklist — each with its own length budget, structural instructions, and federal-proposal voice.

  • Flashes a red banner inside the SAM expiration cliff

    every page render

    Home page surfaces a 21-day countdown to SAM.gov registration expiration. Verify / Renewal-Initiated / Renewal-Submitted state buttons track the renewal workflow without leaving the admin.

  • Fires consent-audited outbound messaging through SES

    on each send

    Messaging hub logs every send with consent state + sourceAppId; RFC 8058 one-click unsubscribe lands in Gmail and Apple Mail natively.

← All rebuilds

Ballair / Fuel First / 7Air — operating-group brochure + allowlist admin + federal bid agent — zsty.us