Unified front-end shell for Houston ARTCC controller utilities.
Current tool launchers:
- TFMS
- Alias Guide
- Route Validator
- ADAR Routes
- Split Map
- RVM Reference
Run the development server:
npm run devThen open http://localhost:3000.
data/tools.json: tool registry used by the homepage launcherapp/page.js: homepage entrycomponents/toolkit-home.js: tool launcher grid UIapp/tools/[id]/page.js: per-tool detail pagesapp/globals.css: shared theme + base UI stylesreference/: source/reference docs used during development (not runtime)
app/tools/alias-guide/page.jscomponents/alias-guide-page.jsdata/alias-guide.jsonscripts/convert-alias-markup.mjs
app/tools/route-validator/page.jscomponents/route-validator-page.jsapp/tools/route-validator/styles.cssdata/zhu-routing-rules.json
app/tools/tfms/page.jscomponents/tfms-viewer-page.jscomponents/tfms-projection-map.jsapp/tools/tfms/styles.csslib/tfms/compute.jsdata/tfms-sectors.jsondata/tfms-airport-queue-boxes.jsondata/tfms-event-splits.json(currently hidden from UI, retained for future events)
Add a new object to data/tools.json with:
idnamedescriptionurlliveUrlcategorystatusicontags(optional)
The homepage and /tools/[id] route will automatically include it.
Alias Guide renders from data/alias-guide.json.
If you update legacy markup, regenerate JSON:
npm run alias:convertOptional ID normalization pass:
node scripts/normalize-alias-ids.mjsRuntime data:
- VATSIM feed:
https://data.vatsim.net/v3/vatsim-data.json(60s refresh) - D-ATIS feeds (
KIAH,KHOU,KDFW,KDAL,KATL) (30m refresh)
Fallback:
- Static traffic/prefile samples in
components/route-validator-page.js
Current statuses:
CHECK ROUTEFLOWALTITUDEREVISIONVALIDNO RULE
Default sort priority:
CHECK ROUTEFLOWALTITUDEREVISIONVALIDNO RULE
COPY ROUTE appears only for:
CHECK ROUTEFLOWREVISION
Current cards/modules:
- Specialty Summary (
Now,+10,+20,+30) - Online Positions (ZHU enroute + TRACON)
- Enhanced Projection Map
- Departure Queue (
KIAH,KHOU,KAUS,KSAT,KMSY)
Event split summary:
- Logic/data retained
- Currently hidden and compute-gated
Queue boxes:
- Config supports
bounds,geojson, orareas - Multiple entries for the same ICAO are merged into one card
Projection/summary inclusion logic:
- Flight must pass ZHU relevance checks (in ZHU, near perimeter inbound, or inbound to tracked internal airports)
- Baseline minimum groundspeed filter:
>= 20 kts - Operational gate for summary counting:
groundspeed > 50 ktsoraltitude > 3000 ft
Map behavior (current):
- Current aircraft icon
+10projection dot- Current-to-
+10connector line - No
+20/+30dots/lines - Toggleable sector overlays (
Low,High) - Specialty zoom buttons with specialty-aware coloring
npm run lint
npm run test -- --run
npm run buildThe app supports Light, Dark, and System mode via Auto / Sun / Moon controls in tool/page headers.
Preference is saved in localStorage (theme-mode).
Configured for static export + Pages.
Important files:
next.config.mjs(output: "export")public/CNAME(toolkit.houston.center).github/workflows/deploy-pages.yml
Required one-time GitHub setup:
- Repo
Settings > Pages - Source:
GitHub Actions - DNS:
toolkit.houston.centerCNAME to GitHub Pages target
Pushes to main then build/deploy automatically.
If npm/npx PowerShell script execution is blocked, use:
npm.cmd run devnpm.cmd run lintnpm.cmd run test -- --runnpm.cmd run build