Unified front-end shell for Houston ARTCC controller utilities.
Current tools are registered in a single data file and rendered as launch cards:
- TFMS
- Alias Guide (migrated internal route)
- ADAR Routes
- Route Validator
- Split Map
- RVM Reference
Run the development server:
npm run devThen open http://localhost:3000.
data/tools.json: tool registry (add/edit tools here)app/page.js: homepage entrycomponents/toolkit-home.js: tool launcher grid UIapp/tools/[id]/page.js: per-tool detail pagesapp/tools/alias-guide/page.js: migrated Alias Guide toolcomponents/alias-guide-page.js: refactored Alias UI (sidebar nav, search, cards)data/alias-guide.json: normalized Alias data model used by the appdata/alias-guide-markup.html: imported source markup from legacy Alias Guidescripts/convert-alias-markup.mjs: converter from legacy markup to normalized JSONapp/tools/route-validator/page.js: Route Validator page entrycomponents/route-validator-page.js: Route Validator UI + matching/status logicapp/tools/route-validator/styles.css: Route Validator-specific stylingdata/zhu-routing-rules.json: preferred route rules used by Route Validatorlib/tools.js: helpers for loading tool dataapp/globals.css: shared theme tokens and utility classesreference/: source/reference docs used during development (not runtime)
Add a new object to data/tools.json with:
idnamedescriptionurlliveUrlcategorystatusicontags
The homepage and /tools/[id] route will automatically include it.
The Alias Guide now renders from data/alias-guide.json.
If you update legacy source HTML in data/alias-guide-markup.html, regenerate JSON with:
npm run alias:convertTo normalize long generated IDs into readable slug-based IDs:
node scripts/normalize-alias-ids.mjs- In
data/alias-guide.json, most content fields store both:html: rendered UI content (supports formatting tags)text: plain-text content used for search/filter
- Keep
htmlandtextsemantically aligned when editing content. - Alias sections now use one shared layout:
- section header + intro (optional)
- standardized reference tables
- row-level
Linkbutton to copy direct hash links
- Section-specific table label mapping lives in:
components/alias-guide-page.js->SECTION_TABLE_CONFIG
- Hash permalink format:
/tools/alias-guide#<entry-id>- example:
/tools/alias-guide#alias
Route Validator renders from data/zhu-routing-rules.json and compares filed routes for departures against matching alias rules.
- VATSIM traffic feed:
https://data.vatsim.net/v3/vatsim-data.json - D-ATIS feeds:
https://atis.info/api/KIAHhttps://atis.info/api/KHOUhttps://atis.info/api/KDFWhttps://atis.info/api/KDALhttps://atis.info/api/KATL
- Refresh intervals:
- traffic: every 60 seconds
- D-ATIS: every 30 minutes
- Static sample pilots/prefiles are defined in
components/route-validator-page.js:STATIC_CONNECTED_PILOTSSTATIC_PREFILES
- If live traffic fetch fails, static samples are used automatically.
- D-ATIS remains live unless that feed fails.
- TFMS currently shows:
- Specialty Summary
- Online Positions (enroute + TRACON status)
- Split Summary is intentionally hidden for now and can be re-enabled later.
Current status labels:
CHECK ROUTEFLOWALTITUDEREVISIONVALIDNO RULE
Default status sort priority:
CHECK ROUTEFLOWALTITUDEREVISIONVALIDNO RULE
COPY ROUTE action appears only for:
CHECK ROUTEFLOWREVISION
- Destination flow checks are parsed from D-ATIS for
KIAH,KHOU,KDFW,KDAL,KATL. - KIAH no-rule SID flow checks currently include:
BNDTO#=> WestPITZZ#=> EastMMUGS#=> WestGUMBY#=> East
- Development references live under
reference/. - FAA aircraft type designator source currently tracked:
reference/2024-04-29_FAA_Order_JO_7360.1J_Aircraft_Type_Designators--post.pdf
- See
reference/README.mdfor usage notes.
npm run lint
npm run buildThe app supports Light, Dark, and System mode via Auto / ☀ / ☾ controls placed in tool/page headers.
Preference is saved in localStorage (theme-mode).
This project is configured for static export + GitHub Pages.
Important files:
next.config.mjs(output: "export")public/CNAME(toolkit.houston.center).github/workflows/deploy-pages.yml
Required one-time GitHub settings:
- In your repo, go to
Settings > Pages. - Under
Source, selectGitHub Actions. - In your DNS provider, set
toolkit.houston.centerto GitHub Pages (CNAME target per GitHub docs).
After that, pushes to main will build and deploy automatically.
If your machine blocks npm/npx PowerShell scripts, use:
npm.cmd run devnpm.cmd run lintnpm.cmd run build