Add React + Vite operator UI (Phase 9) - #2
Merged
Merged
Conversation
Adds a thin load-control SPA in frontend/:
- Dashboard: today's flights with status
- Flight Detail (6 tabs): load plan, EZFW v1+v2, reconciliation,
loadsheet with PDF links, EFB acceptance, messages
- EFB: fleet-wide acceptance inbox with Accept/Decline
- Messages: Inbox, Outbox (with retransmit), Process outbox
- Health: deep health, audit chain integrity, retention sweep
Stack: React 18, React Router 6, Vite 5, plain CSS (no Tailwind /
utility framework — easier for a novice to read).
Build output: ~206 KB minified / 62 KB gzipped.
Verified end-to-end against the live backend with Playwright
(headless Chromium, no browser errors).
naderassaleh
pushed a commit
that referenced
this pull request
Aug 5, 2026
Quick wins #1 and #2: 1. New Fleet page (frontend/src/pages/FleetPage.jsx, +250 lines) - Browse all 9 aircraft types with their holds, ULDs, CG envelopes - Each type row is expandable to show full details - Stats row at top: 9 types, 27 holds, 19 ULDs, 15 envelopes - Added 'Fleet' link to top nav - CSS for stats row, expand rows, nested tables in styles.css 2. Address book expanded from 10 to 31 tails (data/messages/address_book_seed.json) - 21 new tails × 5 message types (LDM, MVT, NOTOC, CPM, UCM) = 105 new addresses - Narrow-bodies (A320/A321/E-jets): LDM/MVT/NOTOC → AMMOPRJ, CPM/UCM → AMMFFRJ - Wide-bodies (B787): LDM/MVT/NOTOC → AMMOPRJ, CPM/UCM → AMMKKRJ - New script: scripts/expand_address_book.py (idempotent, can be re-run) Build: vite build passes. Tests: 528/528 pass.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A thin load-control SPA in
frontend/(React 18 + Vite + React Router). 5 pages, no business logic in the browser — the API is the source of truth./): today's flights with status/flights/:flightId): 6 tabs — Load plan, EZFW (v1 + v2 ML), Reconciliation, Loadsheet (with PDF links), EFB, Messages/efb): fleet-wide acceptance inbox with Accept/Decline/messages): Inbox, Outbox (with retransmit), Process outbox/health): deep health, audit chain, retention sweepHow to test locally
Vite proxies
/api/*to:8000in dev. Backend is unchanged.Build
npm run build # ~206 KB minified / 62 KB gzippedVerification
npm run buildsucceedspyteststill 510 passedfrontend/screenshots/Notes
dist/— host from any CDN, setVITE_API_BASEat build time