Changelog
All notable changes to this project will be documented in this file.
[3.8.3] 2026-06-27
Added
- Airport Data API: ATCSCC advisories now include the airport's ARTCC center - the
/apiadvisories section previously matched only the airport's own identifier in the FAA element/title column. It now additionally matches the ARTCC center the airport sits in, so a request for KATL returns both ATL and ZTL advisories (KORD → ORD + ZAU, etc.) over the same 24-hour send-time window. The center is resolved server-side by point-in-polygon against the FAA ARTCC boundaries (nasstatus.faa.gov/api/artcc-boundaries, reusing the NAS dashboard's shared cache) using the airport's coordinates from the AWC METAR feed. The advisories block now reports the resolvedcenter, and each item carries ascopeofairport,center, orbothso consumers can tell airport-specific programs from center-wide ones; the docs page response-shape and matching notes were updated to match. - Airport Dashboard: NAS programs that affect this airport's departures - the single-airport Dashboard's NAS panel previously showed only programs whose destination is the loaded airport. It now also surfaces ground stops and ground delay programs at other airports whose included departure facilities cover this airport's ARTCC — i.e. traffic management initiatives that hold or meter flights departing here to that destination. For example, with KATL loaded a ground stop to MCO scoped to ZJX/ZMA/ZTL now appears (because Atlanta sits in ZTL), rendered as
Ground Stop → MCOwith a dashed left border, plus the reason, end time, and any carrier scope. Matching uses the airport's resolved ARTCC (point-in-polygon against the FAA ARTCC boundaries) and its own identifiers against the program'sincludedFacilitiesfrom the FAA airport-events feed; the panel now fetches that feed alongside the delays feed (server-side cached, mirroring the main NAS Status page). Programs at the loaded airport itself continue to render as before, and affected-departure rows sort just after own-airport programs of the same type. - ATC Advisories: keyword search - the main ATC Advisories page now has a search box (below the summary counters) that live-filters the advisory list as you type. It matches against each advisory's number, element (airport/facility), title, and category (e.g. "GS", "Ground Stop"), and supports multi-keyword AND matching — typing
ord groundshows only advisories containing both terms. Search works alongside the existing category filters (it narrows within whatever categories are visible), the count line reflects the filtered total, and an empty result shows a "No Matching Advisories" message. The query is in-memory only (not persisted) and re-applies automatically across the 3-minute auto-refresh.
Changed
- Airport Dashboard: NAS headlines link to the FAA advisory, show scope on hover, and name the airport - in the single-airport Dashboard's NAS panel, each program headline (Ground Stop, Ground Delay Program, Airspace Flow Program, and the affected-departure rows) is now clickable when the FAA event feed carries an advisory — clicking opens that program's FAA advisory in a popup window (mirroring the main NAS Status page), and the headline gains a pointer cursor to signal the link. Hovering the headline shows the program's scope in a floating popup (matching the NAS Status compact view's tooltip) — the departure-scope facilities/radius for ground stops and delay programs, or the included/exempt facilities for airspace flow programs. Programs that involve the loaded airport are now prefixed with the airport's code so they read, e.g.,
ATL Ground Stop/ATL Ground Delay Programinstead of a bare label; affected-departure rows (programs elsewhere metering flights out of here) keep theirGround Stop → MCOform. - NAS Status: VTOL-exempt closures grouped under "Closed to GA Only" - airport closure NOTAMs that keep the field open to VTOL operations (e.g. closed except VTOL) are now treated as restricted-access rather than full closures, so they appear in the Closed to GA Only section (and are excluded from the full-closure count) instead of the main Closure list. Applies across all NAS Status views — the main dashboard, the fullscreen view, and the compact view — by adding
VTOLto the existing GA-only/exemption match alongside non-sked, transient GA, parking (PPR), and fixed base operator NOTAMs. The single-airport Dashboard's NAS panel applies the same match, so VTOL-exempt closures no longer show there as airport closures. - Unicode arrow glyphs replaced with Font Awesome icons - rendered arrow symbols in the UI were swapped for Font Awesome icons for consistent rendering across fonts/platforms: the Flight Tracker popup route and airspace (ARTCC) routing now use
fa-arrow-rightbetween codes, the Flight Time Calculator's origin → destination names use it between airport names, the Airport Dashboard's affected-departure NAS rows use it between the program label and destination, and the D-ATIS Monitor help page's annotations and code-mapping example usefa-arrow-left/fa-arrow-right. (The Flight Tracker route arrows are built as DOM nodes rather than markup strings, preserving the tool's textContent-only update pattern.) Typographic characters (em/en dashes, ellipses, degree signs, middot separators, math operators) and plain-text/clipboard output are unchanged. - Airport Dashboard: NAS detail values shown all-caps - in the single-airport Dashboard's NAS panel, the value after each detail label (e.g. Reason:, Until:, Avg Delay:, Scope:) now renders in all-caps for at-a-glance legibility, while the bold label prefix keeps its title case. Applies to every NAS row — programs at the airport, affected-departure programs, and ATC advisories. The airline-specific Scope value on ground stops and ground delay programs (e.g.
DAL ONLY) is additionally highlighted in fuchsia so carrier-limited programs stand out. - Airport Dashboard: graceful refresh - refreshing the single-airport Dashboard (auto every 3 min, the header refresh, or a per-panel refresh) no longer clears each panel to a "Loading…" placeholder before the new data arrives. The existing METAR/TAF, D-ATIS, and NAS data stays on screen and is swapped in place once the fetch resolves; a loading state now appears only on the very first load of a panel (or after switching airports), and that loading state is a sweeping progress bar with rotating tongue-in-cheek dispatch/ATC messages (matching the other tool pages) rather than plain "Loading…" text. If a refresh fails, the panel keeps showing the last good data and an amber "as of HHMMZ" stale badge appears in the panel header (with a tooltip noting the last refresh failed and the time of the data being shown), so a momentary upstream outage no longer wipes the dashboard. A failed live panel (METAR/TAF, D-ATIS, or NAS) also auto-retries in the background with backoff (~10s, 20s, 40s), clearing the stale badge as soon as a retry succeeds; each scheduled/manual/per-panel refresh and airport switch resets the retry budget. A determinate "D-ATIS not available" (HTTP 400) still replaces the panel as before rather than flagging stale or retrying.
- Airport Dashboard: simplified NAS panel layout - the single-airport Dashboard's NAS panel no longer shows text badges (GS/GDP/etc.) or section headings on each row; program/advisory type is now conveyed solely by the colored left border. Programs and advisories share one list ordered by type (airspace flow → delay programs → ground stops → closures → arrival/departure delays → reroutes → other), and the grid switched to a fixed three-column layout.
[3.8.2] 2026-06-19
Added
- Airport Information: single-airport Dashboard popup - a new Dashboard button next to the airport search opens a compact pop-out window (styled like the tool compact views) giving a four-quadrant live snapshot of one airport: top-left the current METAR (flight-category badge and raw observation) together with the current TAF, top-right the current D-ATIS (combined or split arrival/departure), bottom-left only the NAS Status programs that affect this airport (ground stop, ground delay program, arrival/departure delays, deicing, closures — matched by FAA/ICAO identifier), and bottom-right a Leaflet map with an animated NEXRAD radar loop (the last ~55 minutes of the NWS N0Q composite in 5-minute frames, with a play/pause control and a per-frame Zulu timestamp). All panels refresh together on a universal 3-minute cycle, with a live countdown shown in the header refresh button (which also forces an immediate refresh and resets the timer). The raw METAR and TAF use the same severe-weather token highlighting as the Weather Monitor (thunderstorms, freezing precip, low visibility/RVR, windshear, etc., colored red for severe and amber for notable). The panel text scales dynamically with the viewport (ideal for full-screening on a large display) and each quadrant shrinks its text to fit so a long report — e.g. an airport with both arrival and departure D-ATIS — stays fully visible without the panel scrolling; a settings gear in the header holds a Text Size control (
A−/A+/ reset) that sets the target size on top of the auto scale (persisted todb-textstep) and a Highlight D-ATIS Changes toggle that diffs the current report against the previous one and marks the added words — the toggle shares theatis_show_changessetting with the D-ATIS Monitor, and both preferences are saved tolocalStorageand live-sync across open windows. The popup header also carries an ICAO input so you can switch airports without reopening and a liveHHMM/SSZZulu clock; it accepts a deep link via/airport/dashboard/?icao=KXXXand is unlisted/noindex. - Main tool pages: Text Size & Unread Highlighting settings, synced with the compact views - the D-ATIS Monitor, Weather Monitor, NAS Status, and ATC Advisories main pages now have a Settings gear in their status bar with a Text Size control (
A−/A+/ reset) and, where the page has a read state, an Unread Highlighting toggle. These reuse the samelocalStoragekeys as each tool's compact view (ac-textstep/ac-unread,wc-textstep/wc-unread,cpt-textstep,avy-textstep/avy-unread), so a preference set on the main page carries over to its compact pop-out and vice versa, and updates live across both windows via thestorageevent. NAS Status, whose dashboard has no per-row read state, instead gets a Show Categories program-type filter (AFP / GDP / GS / CLSD / ARR / DEP / ICE / Reroutes) in its gear that shares the compact view'scpt-filterkey (defaulting to all-visible on the main dashboard so nothing is hidden until you choose). The settings that already existed on both sides — D-ATIS Highlight Changes (atis_show_changes), Advisories category filter (avy-filter), and the monitored station/airport lists — continue to share keys and now also live-sync between open windows. - Airport Data API (
/api) - a new JSON API that returns the previous 24 hours of METAR, TAF, D-ATIS, and ATCSCC advisories for a single airport in one request:GET /api/?icao=KATL. METAR/TAF come from the Aviation Weather Center (hours=24time series for METAR; the currently-valid forecast for TAF), D-ATIS from atis.info history (filtered to the 24h window by report timestamp), and advisories from FAA ATCSCC (filtered to the airport by matching its identifier in the advisory element/title column, with full message text fetched for up to 20 matched advisories). Each section degrades independently — a failing upstream feed yields anerror/codepair on that block while the rest still returns. The endpoint sets open CORS (Access-Control-Allow-Origin: *), is globally rate-limited to 30 req/min, reuses the shareddt_http_fetchserver-side cache (so repeat calls are cheap and current to ~30-60s), and supports?sections=(subset selection) and?pretty=1. Visiting/apiin a browser serves a documentation page with a live "Try it" widget. The endpoint is unlisted — not linked in the site navigation — and markednoindex(via arobotsmeta tag on the docs page and anX-Robots-Tag: noindex, nofollowheader on every response, including the JSON), so it stays out of search engines. - Airport Data API authentication - data requests require a static API key, passed via the
X-API-Keyheader or the?key=query parameter; missing/invalid keys return401 unauthorized. Multiple keys are supported viaDT_API_KEYSinincludes/secrets.php— either a plain list of keys or akey => labelmap (the label is for your own bookkeeping; add/remove lines to grant/revoke individual consumers); the legacy singleDT_API_KEYconstant is still honored. The docs page and the machine-readable usage response remain public, and CORS preflight (OPTIONS) is exempt. Auth is enforced only when at least one key is configured (setDT_API_KEYSto[]to disable).
Changed
- About page refreshed - the tools list was out of date (missing the Flight Time Calculator and Flight Tracker); it's now complete and grouped by the same four categories as the homepage (Live Situational Awareness, Weather & Briefing, Calculations, Reference & Operations). The "What it is", "Who built it", and "Disclaimer" copy was reworded, and a new Privacy & data section explains that the calculators/formatters run entirely client-side while the live tools proxy public FAA/AWC feeds.
Fixed
- Crosswind Calculator: METAR winds are true-referenced - the reference toggle's helper text previously claimed "METAR winds are magnetic," and the calculator defaulted to the Magnetic frame, so a wind fetched from a METAR (which is referenced to true north) was treated as magnetic and the headwind/crosswind split was off by the local magnetic variation. The terminology is corrected (Magnetic mode now reads "Wind direction is magnetic. METAR winds are true."; True mode reads "Wind direction is true — matches METAR."), and fetching a METAR now automatically switches the calculation into the True reference frame so the pulled wind is interpreted correctly. Manual entry still defaults to Magnetic for runway-number workflows.
- Mobile: dark-mode toggle hidden in the collapsed menu - the navbar theme toggle (
#dt-theme-toggle) lived inside the collapsible.navbar-collapse, so on phones/tablets it was buried at the bottom of the hamburger menu instead of being reachable. It now sits in an always-visible action group next to the hamburger button (viaorder-lg-last, so it still renders at the far right on desktop), and gets a larger tap target below thelgbreakpoint. - Mobile: NAS ticker ran edge-to-edge - the homepage
#nas-tickerwaswidth:100%withmax-widthonly applied at ≥576px, so on narrow screens it had no horizontal gutters and didn't line up with the page content below it. It's now wrapped in a Bootstrap.container, which supplies the same responsive gutters and max-widths as the rest of the page at every breakpoint (the hand-rolledmax-widthmedia queries were removed as redundant). - Mobile: Crosswind Calculator wind diagram caused horizontal overflow - the results layout placed the fixed 250px wind-diagram SVG (
#wind-svg) in a non-wrapping flex row beside the result cards, so on phones the row was wider than the viewport and the page scrolled sideways. The diagram now caps atmax-width:100%(scaling via itsviewBox), and below thesmbreakpoint the result cards and diagram stack vertically instead of sitting side by side. - Mobile: Time Calculator keypad clipped on short screens - the calculator used a locked, full-height
overflow:hiddenlayout with a fixed300pxbody, so on landscape phones and short windows the bottom keys were cut off with no way to scroll to them, and on ≤320px-wide screens the keypad spilled past the page edge. The body is nowmax-width:100%, and atmax-height:720pxthe page falls back to normal scrolling so the whole keypad stays reachable. - NAS Status: GA-only closures miscategorized as airport closures - "closed to transient GA" NOTAMs at EWR and JFK were showing up under Airport Closures instead of Closed to GA Only. The FAA
freeForm.textfield strips the leadingCLSD TO, so the body readsTO TRANSIENT GA ACFT EXC 24HR PPR …, which the old detection regex (CLSD TO TRANSIENT GA) never matched. The GA-only detection across all three NAS views (main, compact, fullscreen) now matchesNON.SKED|TRANSIENT GA|PRKG|FIXED BASE OPR, so transient-GA closures are correctly routed to the GA-only section and excluded from the Closures counter. - NAS Status: parking/PPR NOTAMs added to "Closed to GA Only" - ramp-parking restriction NOTAMs (e.g. OPF/VNY
TO PRKG EXC 24HR PPR CTC FIXED BASE OPR) are now recognized as GA-only restrictions rather than full airport closures, since they don't affect Part 121/135 operations.
[3.8.1] 2026-06-09
Added
- Compact views: unread highlighting toggle - the ATC Advisories, NAS Status, D-ATIS Monitor, and Weather Monitor compact views now have an Unread Highlighting toggle in their settings/filter/stations popup, defaulting on; when switched off it suppresses the unread/updated visuals — the amber "new"/"updated" highlighting on rows, the per-row mark-as-read / dismiss buttons, and the "Mark all read" / "Dismiss all" button. The preference is saved per-tool in
localStorage(avy-unread,cpt-unread,ac-unread,wc-unread) and the list re-renders immediately on change. (Note: NAS Status derives its new-item desktop notification from the same unread state, so turning it off there also suppresses those alerts.) - Compact views: text size reset button - all four compact views (ATC Advisories, NAS Status, D-ATIS Monitor, Weather Monitor) now have a Reset button (↺ rotate-left icon) alongside the
A−/A+text-size controls; it restores the list text to the default 1.0× scale, persists it tolocalStorage, and is disabled while already at the default size. - Shared proxy HTTP helper - new
includes/http_fetch.phpcentralizes the outbound-HTTP plumbing every tool proxy previously duplicated:dt_http_fetch()(curl with a stream fallback, SSL verification, redirect following, custom headers/UA/timeout),dt_rate_limit()(the fixed-window flock rate limiter formerly copy-pasted in the D-ATIS, Weather Monitor, and METAR Map proxies), anddt_same_site_ok()(Sec-Fetch-Site/Referer same-site check). All nineproxy.phpfiles now use it. - Server-side response caching - shared upstream endpoints are now cached briefly in the system temp dir so concurrent users reuse one upstream request instead of each hitting the FAA/AWC/FR24 APIs: ~30-60s for live data (NAS airport/enroute events, advisories list, D-ATIS, METARs/TAFs), 5 min for the prog chart image and advisory pages, 1 hour for static reference data (airport records, ARTCC boundaries, AAR tables).
- Flight Tracker proxy hardening - the FlightRadar24 API key moved out of the repo into a gitignored
includes/secrets.php(template atincludes/secrets.example.php);track/proxy.phpnow refuses requests that don't originate from the site's own pages (403) and rate-limits globally (60/min), since FR24 is a paid, metered API. - Security headers - new
.htaccesssetsX-Content-Type-Options: nosniff,X-Frame-Options: SAMEORIGIN,Referrer-Policy: strict-origin-when-cross-origin, and a minimalPermissions-Policy, and blocks direct requests tosecrets.php.
Changed
- D-ATIS Monitor Compact View: settings checkbox layout - the Highlight Changes and Unread Highlighting rows now place the label on the left with the checkbox right-aligned (matching the other compact views), separated by vertical spacing rather than a divider line.
- Weather Monitor Compact View: settings popup - the header's Manage Stations button (location-dot icon, which opened an inline panel that pushed the station list down) is now a Settings button (gear icon) matching the D-ATIS Monitor compact view: it opens an anchored popup below the button containing the Text Size control, the Unread Highlighting toggle, and a Monitored Stations section (add / remove / drag-reorder), and closes when clicking anywhere outside it.
- Subresource integrity for all CDN assets - the cdnjs Leaflet CSS/JS tags (Flight Time Calculator, Airport Information) and the Pikaday tag (Email Subject Generator) now carry
integrityhashes, matching the Bootstrap/Font Awesome/unpkg-Leaflet tags that already had them. - Sitemap - added the ATC Advisories and ATC Strip Editor help pages (
/advzy/help.php,/atc/help.php). - Docs - CLAUDE.md and README now document the PHP 8.1+ requirement, the shared proxy helper pattern, and the secrets file; the Flight Time Calculator was added to the CLAUDE.md tools table.
Removed
- Unused images - deleted 17 unreferenced tool screenshots from
assets/img/(~5 MB); onlylogo.svgandog-image.jpgremain in use. - IDE files from version control -
.idea/is no longer tracked in git (it was already gitignored, but files committed before the rule kept generating "Update workspace.xml" noise commits).
Fixed
- Version string -
includes/version.phpsaid 3.8.0 while the changelog and release commit were 3.8.1; it now readsVersion 3.8.1.
[3.8.0] 2026-06-07
Added
- NAS Status Compact View: History dropdown - a new History button (clock-rotate-left icon) in the header opens a dropdown listing programs that have recently dropped off the active list, each with its badge, airport/element code, and the Zulu time it was removed (hover shows a relative "Xm ago"). Removals are detected by diffing the active program set between background refreshes; the very first render after load establishes a baseline so nothing is falsely reported as removed on open. History is independent of the display filters (it tracks all program types), persists in
localStorage(cpt-history), is capped at 100 entries and pruned to the last 24 hours, and includes a Clear button. - Flight Time / Block Time Calculator - new tool at
/ftime; enter an origin and destination airport and the tool computes the great-circle (haversine) distance in nautical miles between their coordinates, then estimates flight (air) time from an aircraft-class cruise speed and block time by adding taxi-out/taxi-in. Aircraft classes are Regional Jet (Mach 0.76), Mainline Jet (Mach 0.79), and Private Jet (Mach 0.83), converted to TAS against a fixed ~FL350 speed of sound of 573 kt. Taxi-out (default 20 min) and taxi-in (default 10 min) are adjustable; block time = flight time + taxi out + taxi in. An optional schedule section solves arrival from a given departure (or departure from a given arrival) in either Zulu (UTC) or airport-local time; results show both endpoints in Zulu and in each airport's local zone. Airport coordinates are fetched from the existing/airport/proxy.php(Aviation Weather Center) so no new proxy was added; local-time conversion resolves each airport's IANA time zone from its coordinates via thetz-lookupCDN library andIntl.DateTimeFormat(DST-aware). Results display distance (NM/sm/km), cruise speed (Mach + TAS), flight time, and block time as stat cards, with a disclaimer that the estimate ignores wind, climb/descent, routing, and ATC delays. Supports deep links of the form/ftime/#KJFK-KLAX. - Email Subject Generator: open in mail client - a new Email button next to Copy opens a fresh message in the user's default mail client with the generated subject pre-filled via a
mailto:?subject=...link (URL-encoded); like Copy, it refuses to act while the placeholder text is still showing and alerts the user to complete all required inputs first.
Changed
- Homepage: tool category reorganization - the METAR Map card moved from "Live Situational Awareness" to "Weather & Briefing" (after Airport Information), and the Flight Tracker card moved from "Live Situational Awareness" to "Reference & Operations"; "Live Situational Awareness" now ends with the Weather Monitor.
- Navbar: Flight Time Calculator link - the "More" dropdown now includes a Flight Time Calculator entry (between Sabre ACARS Formatter and Equipment Translator), and
ftimeis included in the set of tools that mark the "More" menu active. - Time Calculator: social titles renamed to "Time Calculator" - the
og:titleandtwitter:titlemeta tags on/tcalcnow read "Time Calculator - Dispatch Tools" (the page/<title>and on-page branding are unchanged), matching the name used on the homepage and in shared previews. - NAS Status: carrier scope upgraded to "AND SUBS" from advisory comments - the airline-specific GDP/GS scope added in 3.7.4 reads the structured
includedFlightsfield, which lists only the parent carrier (e.g.AAL ONLY); the "AND SUBS" qualifier that brings in regional subsidiaries often lives only in the advisory's free-text COMMENTS.nas/proxy.phpnow fetches the linked advisory page for single-carrier scopes and, when the comments contain<CARRIER> AND SUBS, upgrades the displayed scope to<CARRIER> AND SUBS ONLY; a redirect-following stream context (8s timeout, up to 5 redirects) and space-encoded advisory URLs make the fetch reliable, and scopes already containing "SUBS" or covering all carriers are left untouched.
Fixed
- Email Subject Generator: guard against copying the placeholder - the Copy button no longer copies the
[COMPLETE ALL INPUTS BELOW...]placeholder to the clipboard; if no real subject has been generated yet it alerts the user to complete all required inputs first.
[3.7.4] 2026-06-06
Added
- NAS Status: airline-specific GDP/GS scope - Ground Delay Programs and Ground Stops that apply to a single carrier now show that scope in the detail field (e.g.
UAL ONLY,SWA ONLY, orUAL AND SUBS ONLYwhen regional partners are included); the scope is parsed server-side innas/proxy.phpfrom the FAAairport-eventsincludedFlightsstring (patternCARRIER <code> [AND SUBS] ONLY) into a newcarrierScopefield, and rendered as a distinct magenta detail line in the main view, fullscreen view, and compact view (new.nas-issue-detail--carrier/.cpt-carrierstyles) so the airline restriction stands out from the avg/max/prob details; programs with no carrier restriction (e.g.ALL CONTIGUOUS US DEP) show nothing extra. - ATC Advisories Compact View: desktop notifications - the compact view now supports browser notifications when new ATCSCC advisories are issued on a background refresh, matching the NAS Status and D-ATIS Monitor compact views; a bell button in the header requests permission (hidden once granted, shows a struck-through red bell if blocked), and a first-visit permission modal explains the feature; notifications fire only for advisories that appear after the initial load (today/live mode only), are grouped by category in the notification body (e.g.
Ground Stops: ORD), use theadvzy-compacttag withrenotify, and auto-close after 30 seconds; the "Not Now" choice is remembered for the session viasessionStorage(avy-notify-dismissed). - NAS Status: Impact Board - a new Impact Board button next to Copy Summary / Copy Forecast Chart copies the AWC Terminal Weather Impact Board to the clipboard as an image in one click (no modal); because
aviationweather.gov/impactboardis a client-side app with no static image, the board is rebuilt locally:nas/proxy.php?type=impactboardproxies AWC's/api/data/taf/board?ids=@TOP&impacts=nas&hours=12JSON, the @TOP airport group is rendered off-screen as a station × forecast-hour grid colored by NAS impact level (yellow/amber/red, matching AWC) with an OBS column, TEMPO[brackets], and a legend, then rasterized to a PNG via html2canvas (CDN) and written to the clipboard. - Compact views: text size selector - the ATC Advisories, NAS Status, D-ATIS Monitor, and Weather Monitor compact views now have a Text Size control; an
A−/A+button pair lives at the top of each view's settings/filter/stations popup and steps the list text through five scale levels (0.85×–1.5×); the chosen level is saved per-tool inlocalStorage(ac-textstep,avy-textstep,cpt-textstep,wc-textstep) and re-applied on load; scaling is applied viazoomon the list container (ATC Advisories uses a--avy-scaleCSS custom property on itscalc()font sizes) so rows scale proportionally; the decrease/increase buttons disable at the min/max steps. - ATC Advisories Compact View: Settings popup & Help button - the header filter button (sliders icon) is now a Settings gear button that opens a floating popup containing the new Text Size control and the existing category filters (under a "Categories" heading); a Help (
?) button has also been added to the header, opening/advzy/help.phpin a popup window.
Changed
- D-ATIS Monitor: card click always opens full ATIS - clicking (or keyboard-activating) an airport card in the main view now always opens the full ATIS with all available types (arrival + departure, or combined), regardless of which ATIS type row was clicked; previously clicking a specific type row opened only that type.
- D-ATIS Compact View: airport management merged into Settings - the separate "Manage airports" button (location-dot icon) and its dedicated panel have been removed; airport management now lives in the Settings (gear) popup under a "Monitored Airports" section, alongside the Text Size control and Highlight Changes toggle; the settings popup was widened to 330px and the airport list is now a 4-column grid.
- D-ATIS Compact View: ATIS badge separator - the arrival/departure badge separator changed from
/to|. - NAS Status Compact View: filter button is now a Settings gear - the header filter button icon changed from sliders to a gear and its tooltip from "Filter display" to "Settings", reflecting that the panel now holds the Text Size control in addition to the display filters.
- NAS Status Compact View: dismiss button repositioned - the per-row mark-as-read checkmark now appears at the start of the row rather than pushed to the far right.
Fixed
- NAS Status Compact View: map fills more of a short window - the GDP/GS/AFP map popup was capped at a fixed height (container
max-height: 520px) and had no defined popup height, so on short windows the flex container collapsed toward its 200px minimum and squished the map; the popup now usesheight: min(760px, calc(100vh - 24px))and the map container drops its height caps (min-height: 0, nomax-height) so the map grows to fill the available vertical space. - D-ATIS Compact View: Settings popup stays open during airport edits - clicks on elements detached during a panel re-render (e.g. adding or removing an airport) no longer dismiss the Settings popup.
[3.7.3] 2026-05-26
Added
- Flight Tracker: live FR24-powered map tracker - complete rewrite of
/track/; the tool previously opened external tracking sites in new tabs and is now a full live flight tracker; enter an ICAO callsign (e.g. AAL100) or flight number (e.g. AA100) to track any active flight; aircraft position is rendered as a rotatable plane icon on an interactive Leaflet.js map; historical track polyline displayed in blue; flight info panel below the map shows altitude, ground speed, heading, vertical speed, ETA, aircraft type, registration, squawk, and data source; all panel values updated viatextContent(no innerHTML writes); 30-second auto-refresh with countdown timer; close button clears the flight and resets the view. - Flight Tracker: server-side FR24 proxy - new
track/proxy.phpproxies all FlightRadar24 API requests server-side to keep the API key private; supports four endpoint types:fr24live(live flight positions with callsign/flight-number fallback logic),fr24tracks(historical track points),fr24events(airspace transitions), andfr24summary(reserved); all inputs validated with regex before proxying; usescurlwith SSL verification, falls back tofile_get_contents/allow_url_fopen. - Flight Tracker: airspace routing section - when available, a panel section below the stats grid shows the sequence of ARTCC/FIR centers the flight has transited (e.g.
KZNY → KZBW → CZQM → CZQX → EGGX); sourced from the FR24 historic flight events endpoint filtered toairspace_transitionevents; section is hidden when no data is returned. - Flight Tracker: NEXRAD radar overlay - Iowa Environmental Mesonet composite reflectivity radar tiles overlaid on the flight tracker map; enabled by default; toggle via the Layers dropdown alongside the existing Light Map switch; cache-busts every 5 minutes to match IEM's update cycle; refreshes on each flight position update.
- Flight Tracker: map hidden until flight loaded - the map area is hidden on page load and revealed only when a flight result is found;
mapInstance.invalidateSize()called on reveal so Leaflet recalculates tile layout correctly; map is re-hidden when a flight is cleared. - Flight Tracker: FlightRadar24 and FlightAware link buttons - once a flight is loaded, two external link buttons appear in the search bar to the right of the Track button; FlightRadar24 link uses
/{callsign}/{fr24_id}for a direct deep-link to the exact flight leg; FlightAware link uses/live/flight/{callsign}; both buttons are hidden on page load and when a flight is cleared.
Changed
- README.md: updated for all tools added since v3.5.8 - added Flight Tracker (new description), METAR Map, ATC Advisories, and About page to the tools table; updated descriptions for Airport Information, Crosswind Calculator, Aircraft Type Designators, Airline Identifiers, METAR/TAF Decoder, D-ATIS Monitor, Weather Monitor, and Conversion Tools to reflect feature additions; added Leaflet.js 1.9.4 to the tech stack; added
about/,advzy/,map/, andtrack/to the project structure tree.
[3.7.2] 2026-05-20
Added
- D-ATIS Monitor: ATIS history & change highlighting - clicking an airport card now fetches the recent ATIS history; if a previous ATIS is available, the modal shows Previous (HHMMZ) and Current (HHMMZ) tabs; when Highlight Changes is enabled, words added since the previous ATIS are highlighted in yellow; removed words are omitted rather than struck through so the current text reads naturally; toggle is off by default and the preference is saved in
localStorage. - D-ATIS Compact View: change highlighting - expanding an ATIS type badge fetches history in the background; when Highlight Changes is enabled, new words in the current ATIS are highlighted in yellow; a spinner appears next to the issue time while history loads; no previous ATIS text is displayed in the compact view.
- D-ATIS Compact View: Settings popup - a gear icon button in the header opens a small floating popup containing the Highlight Changes toggle; the popup closes when clicking outside or when the Manage Airports panel is opened; the setting is shared with the main view via the same
localStoragekey. - D-ATIS Monitor: help page updated - the help page documents the history tabs, Highlight Changes toggle, compact view settings button, and includes a word-level diff accuracy disclaimer.
- D-ATIS Monitor: full ATIS history selector — a clock-rotate icon button now appears to the left of the Previous/Current tab row in the ATIS detail modal; clicking it opens a dropdown listing all available ATIS entries from the past 24 hours with their letter and published time; selecting an entry opens a dedicated History tab showing that entry's full text; the Previous tab always continues to show the immediately preceding ATIS unchanged.
Changed
- D-ATIS Monitor: Highlight Changes moved to toolbar - the toggle is now a persistent switch in the airport toolbar, to the right of the Active Runways toggle, rather than being embedded in the modal tab bar.
- D-ATIS Monitor: modal tabs always visible - the Previous/Current tab row is always rendered when the modal opens; while history is loading the Previous tab shows a spinner and is disabled; once the fetch completes the tab is enabled if history is available, or remains disabled if no previous ATIS was found.
- D-ATIS Monitor: change highlight color - diff highlights changed from green to yellow in both the main view and Compact View.
- D-ATIS Compact View: Settings popup is floating - the settings panel renders as a small fixed popup anchored below the gear button rather than a full-width bar that pushes content down; clicking outside dismisses it.
- D-ATIS Monitor: runway parser — comma after RWYS keyword — departure and arrival runway patterns now accept an optional comma immediately after
RWYS/RUNWAYS(e.g.DEPG RWYS, 8R, 9L) in addition to whitespace only; all extraction helpers updated consistently. - D-ATIS Monitor: runway parser — DEPS EXP RWYS format — added explicit patterns for
DEPS EXP(CT)? RWYSandDEPARTURES EXPECT RWYSso facilities like KORD that use the abbreviated expect format are parsed correctly; the targeted capture extracts only the runway numbers after that phrase, preventing arrival runways from bleeding into the departure list when both appear in the same sentence. - D-ATIS Monitor: runway parser — ARR EXP format — added an
ARR EXP(CT)?arrival pattern to match facilities that abbreviate "arrivals expect" (e.g. KORD:ARR EXP VECTORS ILS RWY 9C); the runway number is extracted via the existing after-keyword helper so arrivals and departures are correctly split into separate badges.
[3.7.1] 2026-05-16
Added
- ATC Advisories: full-page tool (
/advzy/) - new standalone DispatchTools page for ATCSCC advisories matching the NAS Status page layout; includes a category counter row (Airspace Flow Programs, Trajectory Programs, Ground Stops, Ground Delay Programs, Route Advisories, Canadian Advisories, Other Advisories) that greys out when a category is filtered off, a filter bar with pill toggles, date picker for historical browsing, 3-minute auto-refresh countdown, advisory list with expand-to-detail, route map overlay, and a FAA Data Health footer bar. - ATC Advisories: fun loading messages - the initial loading screen on the full-page view cycles through the same aviation-themed humorous messages as the compact view.
- Navbar: ADVZY link - "ADVZY" added to the main navbar between NAS and WX.
- ATC Advisories: mark all read button - a "Mark all read" button appears in the right side of the status bar (next to the date picker) when any unread advisories are present; clicking it marks all advisories as read and hides itself; the button is hidden when browsing historical dates.
- ATC Advisories: per-row mark as read button - each unread advisory row now shows a small green checkmark button to the left of the category badge; clicking it marks that advisory as read without opening the detail panel; the button disappears once the advisory is read (whether via the button, row click, or mark all).
- ATC Advisories: retry on detail load failure - when advisory detail text fails to fetch, the error message now includes a "Retry" button that re-attempts the fetch without closing and reopening the panel.
- ATC Strip Editor: help page (
/atc/help.php) - new help page covering the ICAO FPL strip format, how to parse a strip, all editable fields (7, 8, 9, 10, 13, 15, 16, 18), PBN code groups, the generated strip output, and the three validation hints; a Help button has been added to the ATC Strip Editor page header.
Changed
- Weather Monitor: updated card glow covers full card - the TAF section now becomes transparent when a card is in the updated state so the yellow pulse animation fills the entire card rather than stopping at the METAR/TAF boundary.
- Weather Monitor: updated indicator redesigned - the red "UPDATED" badge is replaced by an amber outline checkmark button; clicking it marks the card as read (same behavior as before); a
title="Mark as read"tooltip is included for accessibility. - ATC Advisories: moved to top-level - the advisory tool has moved from
/nas/advzy/to/advzy/; the compact view is now at/advzy/compact/; all proxy references updated accordingly. - NAS Status: Advisories removed from Views dropdown - the Advisories compact view link has been removed from the NAS Status Views dropdown now that the tool has its own navbar entry and full-page view.
[3.7.0] 2026-05-13
Added
- NAS Advisories: route map viewer - advisories that include an FCA route map image (from
fly.faa.gov/adv/images/fca_*) now show a "View Route Map" button in the expanded detail panel; clicking it opens the map in a full-screen overlay with a dimmed backdrop, advisory title in the header, and an ✕ close button; clicking the backdrop or pressing Escape also closes the overlay. - NAS Advisories: historical date picker - a date input in the header allows browsing past advisory lists by date; selecting a past date disables auto-refresh, greys the live indicator dot, and shows the selected date in the footer instead of "Updated HHMMZ"; returning to today's date resumes live mode.
- NAS: Advisories Compact View (
/nas/advzy/) - new compact popout showing all ATCSCC advisories published for the day (US and Canadian); advisories are displayed in a flat chronological list with per-row category badges color-coded by type: AFP (violet), CTOP (orange), GS (red-pink), GDP (amber), Route (sky-blue), and Other (gray); Canadian advisories carry a CDN badge; the view auto-refreshes every 5 minutes. - NAS Advisories: category filter - a filter panel (sliders button in the header) lets users toggle individual advisory categories on or off; visibility state persists in
localStorage. - NAS Advisories: expandable advisory text - clicking any row fetches and displays the full advisory text inline below the row; clicking again collapses it; only one row is expanded at a time.
- NAS Advisories: open advisory on FAA - clicking an advisory number opens the full advisory on the FAA ATCSCC website in a minimal popup window (no toolbar, menubar, or location bar).
- NAS Advisories: unread tracking and dismiss - advisory numbers glow amber when the advisory has not been seen; a green checkmark dismiss button appears at the end of each unread row; a mark-all-read button (
✓✓) appears in the header when any unread advisories are present; seen state persists inlocalStorageand is automatically pruned to the current day's advisory list on each refresh. - NAS Status: Compact View dropdown - the "Compact View" link in the NAS Status toolbar is now a dropdown menu offering two options: NAS Status (existing compact view at
/nas/compact/) and Advisories (new advisory compact view at/nas/advzy/). - NAS Advisories: FAA Data footer - a fixed footer bar shows an "ADVISORIES" status dot that pulses amber while fetching, turns green on success, and turns red on failure; matches the FAA Data Health footer pattern used in the NAS and D-ATIS compact views.
- NAS Advisories: fun loading messages - the initial loading screen cycles through a rotating set of aviation-themed humorous messages (e.g. "Squawking 7700...", "Bribing the flow coordinator...") every 2 seconds while waiting for the first data fetch.
- About page (
/about/) - new page explaining what Dispatch Tools is, who it's for, a full tool listing, and a disclaimer; linked from the footer to the left of Contact/Feedback. - D-ATIS Monitor: URL airport parameter - opening
/atis/?icao=KATL,KMSP,KSEApre-loads the monitor with the specified airports; accepts a comma-separated list of ICAO or IATA codes, deduplicates, and saves the list tolocalStorageso the compact view reflects the same airports; invalid codes are silently dropped. - Weather Monitor: URL station parameter - opening
/wx/?icao=KATL,KMSP,KSEApre-loads the monitor with the specified stations; accepts a comma-separated list of ICAO codes, deduplicates, and saves tolocalStorage.
Changed
- NAS Advisories: Canadian advisory category - Canadian advisories now display a dedicated
CANcategory badge (warm red) instead of falling through toOther; the category filter includes aCANtoggle so Canadian advisories can be shown or hidden independently. - NAS Advisories: advisory number badge color - the advisory number badge now uses the same color as its category badge (e.g. violet for AFP, amber for GDP, red for GS) so the number and type are visually linked; unread advisories still override to gold.
- NAS Advisories: unread title color - the advisory title text turns gold (
#fcd34d) when an advisory is unread, matching the number badge; both clear to their default colors when the advisory is dismissed or expanded. - NAS Advisories: opening an advisory marks it as read - expanding the detail panel now automatically marks the advisory as read, clearing the amber glow on the number badge and title without requiring a separate dismiss click.
- NAS Advisories: category badge fixed width - all category badges (
AFP,CTOP,GS,GDP,Route,Other,CAN) are now a uniform fixed width so the badge column stays aligned regardless of label length. - NAS Advisories: element color - the facility/element identifier is now displayed in light blue (
#93c5fd) instead of the primary--dt-blue. - NAS Advisories: footer text color - the advisory count and timestamp in the footer now use
rgba(255,255,255,0.55)to match the equivalent labels in the D-ATIS compact view footer. - NAS Advisories: detail text indent - the expanded advisory body text now has 8px of left padding for improved readability.
- NAS Advisories: auto-refresh interval - the advisory list now refreshes every 3 minutes instead of 5 minutes.
- NAS Advisories: advisory number styled as badge - the advisory sequence number is now displayed in a bordered pill badge with a subtle background; unread advisories show the badge in amber with a matching amber border and background tint.
- NAS Advisories: dismiss button repositioned - the per-advisory mark-as-read checkmark button now appears immediately to the left of the category badge instead of at the far right of the row.
- NAS Advisories: Canadian advisory indicator - the Canadian advisory indicator is now a
fa-canadian-maple-leaficon rendered in Canada red (#d52b1e), replacing the prior 🇨🇦 flag emoji. - NAS Advisories: advisory title display - the title column now shows only the meaningful content of each advisory; the boilerplate
ATCSCC ADVZYheader line, bare type keyword line (e.g.FCA RQD,GROUND STOP),NAME:prefix,VALID:lines, andCONSTRAINED AREA:lines are all stripped, leaving just the core advisory identifier (e.g.FCA012:TEXAS_ZME_TO_NE); also fixed a parsing bug where<br>-delimited lines in the FAA title cell were concatenated without any separator, causing words to run together. - NAS Advisories: Canadian advisories interleaved by time - Canadian advisories (previously appended after all US advisories) are now sorted together with US advisories by send time descending so all advisories appear in a single unified chronological list.
- NAS Advisories: Zulu clock format - the header clock now displays as
HHMM/SSZ(e.g.1423/47Z) instead ofHH:MMZ, adding seconds for higher precision. - NAS Advisories: "Other" category color - the Other category badge and filter button color has been changed from muted gray to teal (
#2dd4bf) to make it visually distinct from the other categories. - NAS Advisories: advisory number readability - the advisory number badge text opacity has been increased from 50% to 80% white for better legibility against the dark background.
- NAS Status: "Compact View" dropdown renamed to "Views" - the toolbar dropdown is now labeled "Views"; the two compact view items are renamed to "NAS Status Compact View" and "Advisories Compact View"; "Fullscreen/Projector Mode" is added as a third item in the dropdown, replacing the standalone Fullscreen link.
- D-ATIS Compact View: combined ARR/DEP badge - arrival and departure ATIS badges are now merged into a single pill showing
ARR X / DEP Xwith a gradient background blending the existing sky-blue (arrival) and emerald (departure) colors; clicking anywhere on the badge (including the/separator) expands both ATIS panels simultaneously; airports with a single combined ATIS continue to show anINFO Xbadge. - D-ATIS Compact View: expanded view shows both ATIS panels - clicking the combined ARR/DEP badge now opens arrival and departure ATIS text side-by-side in stacked panels rather than toggling between them individually; a single close button on the arrival panel dismisses both.
- D-ATIS Compact View: ATIS update alert - the update indicator no longer highlights the entire badge with an amber background and border glow; instead, only the ATIS label text (e.g.
ARR K,DEP M,INFO J) pulses amber, leaving the badge chrome unchanged. - D-ATIS Compact View: removed ICAO flight category color coding - the airport ICAO identifier is no longer colored by flight category (VFR green, MVFR blue, IFR red, LIFR purple); flight category is still shown via the
ac-cat-badgeat the end of each row. - D-ATIS Compact View: INFO and ARR/DEP badge widths matched -
ac-badge--combined(INFO) and the combined ARR/DEP badge are both set tomin-width: 120pxwith the half-buttons usingflex: 1so the badge column is consistent width across all rows regardless of ATIS type.
[3.6.4] 2026-05-10
Added
- D-ATIS Compact View: FAA OIS status indicator in footer - the FAA Data Health footer now includes a second status dot for FAA OIS alongside the existing SWIM Feed dot; the dot pulses yellow while AAR data is fetching, turns green on success, and turns red on failure.
- D-ATIS Monitor and Weather Monitor: drag-to-reorder station chips - station chips in both monitors now display a
fa-grip-verticalgrab handle and can be dragged onto another chip to reorder; the new order is saved tolocalStorageand the card grid reorders in place without re-fetching data; the dragged chip fades to 40% opacity while dragging and the drop target highlights in blue. - D-ATIS Monitor Compact View and Weather Monitor Compact View: drag-to-reorder airports in station manager - airport/station items in the compact view station manager panels also display a grip handle and support the same drag-to-reorder behavior; dropping an item saves the new order and reorders the live entry list in the popout without a re-fetch.
Changed
- D-ATIS Compact View: combined ATIS badge width -
ac-badge--combinednow matches the combined width of separate arrival and departure badges; uses a CSS:only-childrule withmin-width: calc(10ch + 41px)so the badge only expands when it is the sole badge in the row.
Removed
- D-ATIS Compact View: AAR table removed from detail panel - the Arrival Rates (AAR) table has been removed from the expanded ATIS detail panel; the inline AAR rate badge on each airport row and the FAA OIS status dot in the footer are retained.
[3.6.3] 2026-05-08
Added
- Airline Identifier Reference: added US regional and cargo carriers - added 12 carriers missing from the list: Endeavor Air (9E/EDV), Envoy Air (MQ/ENY), Piedmont Airlines (PT/PDT), PSA Airlines (OH/JIA), Horizon Air (QX/QXE), Air Wisconsin (ZW/AWI), GoJet Airlines (G7/GJS), CommuteAir (C5/UCA), Contour Airlines (LF/VTE), Cape Air (9K/KAP), Kalitta Air (K4/CKS), and Southern Airways Express (9X/FDY).
- D-ATIS Monitor: "Runway info not detected" notice - when the active runways toggle is enabled on the main monitor, each ATIS row that has text but no parseable runway information now shows a small italic notice in place of runway badges; the compact view similarly shows the notice inline on the airport row when no runways can be detected from any available ATIS text.
Changed
- All compact views: "Updated" time moved to footer - the "Updated HHMMZ" timestamp has been moved from the header to the right side of the FAA Data Health footer in all three compact views (D-ATIS Monitor, NAS Status, Weather Monitor); the time is right-aligned via
margin-left: autowithin the footer's flex layout.
Changed
- D-ATIS Monitor: arrival ATIS shown before departure ATIS - both the main monitor and compact view now always render the arrival ATIS row above the departure ATIS row, regardless of the order the FAA SWIM feed returns them.
- D-ATIS Compact View: separator between arrival and departure runway groups - a vertical divider now consistently appears between the arrival and departure runway badges when an airport has separate ARR and DEP ATIS records, matching the existing behavior for combined ATIS.
Fixed
- NAS Compact View: AFP map header hidden during drag - the map popup header no longer disappears when dragging the Leaflet map; added
isolation: isolateandoverflow: hiddento the map container so Leaflet's internal stacking contexts are scoped within it and cannot paint over the header.
[3.6.2] 2026-04-29
Added
- METAR Map: Canadian and Mexican airports - added 8 major Canadian airports (CYYZ, CYVR, CYUL, CYYC, CYEG, CYOW, CYWG, CYHZ) and 7 major Mexican airports (MMMX, MMGL, MMMY, MMTJ, MMUN, MMSD, MMPR) to the map; all use the same flight category coloring and popup detail as US airports.
- METAR Map: light/dark basemap toggle - a Layers dropdown in the toolbar (icon-only) contains checkboxes for NEXRAD Radar and a Light Map option; toggling Light Map switches the base tiles between CartoDB Dark Matter and CartoDB Positron and flips the airport ICAO label colors for readability; the toolbar itself remains dark in both modes.
Changed
- D-ATIS Monitor: ATIS observation time on card header - the zulu time of the most recent ATIS observation is now shown to the left of the flight category badge in each card's header; the time is sourced from the combined ATIS when available, falling back to the arrival then departure ATIS; displayed in muted monospace to distinguish it from the category badge.
- D-ATIS Monitor: active runway parsing for KOAK - added a new pattern that recognizes approach types listed with commas before a
RWYSkeyword (e.g.ILS, AND VA, RWYS 30 AND 28R) and returns those runways as combined arrival/departure; applies to both the main monitor and compact view. - D-ATIS Monitor: active runway parsing for KATL - the
APCHS IN USEpattern no longer requires aRUNWAYS/RWYSkeyword; it now extracts all runway numbers from the text followingAPCHS IN USEdirectly, resolving formats likeSIMULTANEOUS APCHS IN USE VIS 26R, VIS 27L, VIS 28;VIS(visual approach abbreviation) added to all approach-type recognition patterns alongsideVISUAL; applies to both the main monitor and compact view. - D-ATIS Monitor: active runway parsing synced to compact view - the two KLAX-specific parsing fixes (direct
APCHS XXarrival pattern and relaxed departureIN PROGpattern withextractRwysfallback) are now applied to the compact view parser to match the main monitor behavior. - D-ATIS Monitor: Active Runways toggle moved - the Active Runways toggle is now in the airport toolbar's first row, to the right of the Clear All button, instead of the second row with the airline presets.
- D-ATIS Monitor: flight category badge fixed width - the
ac-cat-badgein the compact view now has a fixed width (3.4em, centered) so VFR/IFR (3 chars) and MVFR/LIFR (4 chars) badges are always the same size. - D-ATIS Monitor compact view: dismiss button position - the per-row dismiss (mark-as-read) button now appears immediately to the left of the flight category badge; a flex spacer element pushes both to the right edge regardless of whether the dismiss button is visible.
- D-ATIS Monitor: runway group in ATIS modal moved inline - the active runway badges now appear inside the modal block header to the right of the ATIS letter, instead of as a separate row below the header; runway group labels are hidden in the modal context; the observation time is right-aligned via
margin-left: auto. - Home page NAS Status ticker: loading state - the ticker now immediately displays a "NAS Status" label with a random loading message (drawn from the same set used on the NAS Status Dashboard) while data is fetching; the loading message is held for a minimum of 5 seconds and does not rotate or transition during that period; once the minimum time has elapsed and data has loaded the ticker transitions into live grouped data.
- Home page NAS Status ticker: grouped by program type - the ticker now cycles through five fixed sections — Flow Programs, Ground Delays, Ground Stops, Closures, and Arr/Dep Delays — each showing active programs for that type or "All Clear" in green when none are in effect; previously the ticker rotated through individual program entries without grouping.
- Home page NAS Status ticker: airport name lookup extended to ground delays and ground stops - ground delay and ground stop entries now resolve to full airport names using the same lookup used for closures; all three types share a single deduplicated name fetch on each refresh cycle.
- Home page NAS Status ticker: closure text color - the Closures group now renders in a brighter fuchsia (
#e040fb) for improved contrast against the dark ticker background. - Home page NAS Status ticker: loading message ellipsis - the loading message now always ends with
.... - METAR Map: toolbar controls compacted - the NEXRAD and Light Map checkboxes are consolidated into a single icon-only Layers dropdown; the Refresh button is now icon-only; the status bar shows only the
HHMMzupdate time (day-of-month removed, airport count removed) and "Next Refresh" countdown label.
[3.6.1] 2026-04-24
Added
- NAS Status Dashboard: active reroutes section - a new Active Reroutes section appears below Planned Initiatives when reroutes are in effect; data is sourced from the FAA RAT Reader (
fly.faa.gov), parsed server-side by the proxy, and auto-refreshes with the rest of the dashboard; each reroute displays its name, constrained ARTCC area, and valid time window in a two-column grid;FCA RQDadvisories show a teal badge,ROUTE RQDadvisories show an amber badge; clicking any reroute opens the full FAA advisory in a popup window; a "Reroute Page" link in the section header opens the FAA current reroutes page; active reroutes are included in the Copy Summary clipboard output; a Reroutes health indicator is shown in the FAA Data Health status bar. - NAS Compact View: display filter dropdown - a sliders button in the compact view header opens a small dropdown panel with toggle pills for each row type: AFP, GDP, GS, CLSD, ARR, DEP, ICE, and Reroutes; active types display in their type color, hidden types are dimmed; selections persist in
localStorage; the button turns amber when any type is hidden; clicking outside the panel closes it. - NAS Compact View: active reroutes in log - the compact view now fetches and displays active reroutes as rows at the bottom of the log using an amber color scheme and an
RRTbadge; the route name strips theFCAnnn:prefix and shows only the descriptive portion after the colon (e.g.FCA002:NORTH_TO_FLL_AREAdisplays asNORTH_TO_FLL_AREA); hovering the name shows the affected ARTCC area as a tooltip; clicking opens the FAA advisory; new reroute rows flash amber like other new items; reroutes default to hidden in the filter and must be opted in. - NAS Compact View: FAA Data Health footer - a fixed footer bar at the bottom of the compact view popout displays colored status dots for each data source (Airport Events, Enroute Events, Ops Plan, Reroutes); dots flash yellow while fetching, turn green on success, and turn red on failure; the log scrolls above the footer without content being hidden behind it.
- D-ATIS Monitor Compact View: FAA Data Health footer - a fixed footer bar at the bottom of the compact view popout displays a colored status dot for the SWIM Feed data source; dot flashes yellow while fetching, turns green on success, and turns red on failure; the list scrolls above the footer without content being hidden behind it.
- Weather Monitor Compact View: FAA Data Health footer - a fixed footer bar at the bottom of the compact view popout displays a colored status dot for the Aviation Weather Center data source; dot flashes yellow while fetching, turns green on success, and turns red on failure; the list scrolls above the footer without content being hidden behind it.
Changed
- NAS Status Dashboard: arrival and departure delay cards re-colored to yellow shades - arrival delay cards now use a bright yellow accent (
#fbbf24) and departure delay cards use a deeper amber-gold accent (#d97706); both are distinct from each other and from the existing mixed arrival/departure amber; applies to the left border, airport code text, type badge, and issue type label. - Compact views and NAS fullscreen view: styled scrollbar - the scrollable list area in all three compact views (NAS, D-ATIS Monitor, Weather Monitor) and the NAS fullscreen view now uses a slim 5px scrollbar with a transparent track and a subtle semi-transparent thumb that blends with the dark background; thumb lightens slightly on hover; Firefox uses
scrollbar-width: thinwith a matchingscrollbar-color. - Weather Monitor Compact View: observation time display - the observation time shown on each station card now displays as
HHmmZonly, without the leading day-of-month; when the observation is more than one hour old the time renders in red bold to draw attention to stale data. - NAS Status Dashboard and Compact View: reroute name display - reroute names now strip the
FCAnnn:identifier prefix and display only the descriptive portion after the colon (e.g.FCA002:NORTH_TO_FLL_AREAdisplays asNORTH_TO_FLL_AREA); applies to both the main dashboard and compact view. - NAS Status Dashboard: FAA Data Health dots flash yellow while loading - the API status indicator dots in the FAA Data Health bar now animate with a yellow color while a fetch is in progress, then resolve to green on success or red on failure; previously the dots pulsed grey during the checking state.
- NAS Status pages: animated loading bar - an indeterminate sweep bar now appears below the loading message text on initial load across all three NAS views (main dashboard, fullscreen, compact); the bar is centered, spans up to 80% of the container width, and animates with a blue shimmer; loading messages are displayed in uppercase with the trailing ellipsis removed.
- Weather Monitor and D-ATIS Monitor compact views: animated loading bar - the same centered indeterminate sweep bar and uppercase loading message treatment applied to the Weather Monitor and D-ATIS Monitor compact views.
- NAS Status Dashboard: departure delays shown before arrival delays - in the Arrival/Departure Delays section, departure delay cards now sort before arrival delay cards (alphabetically within each type); applies to the main dashboard, fullscreen view, and compact view.
- NAS Status Dashboard: arrival and departure delay cards color-coded - arrival delay cards use a sky-blue accent (
#0ea5e9) and departure delay cards use an emerald-green accent (#10b981); mixed arrival/departure delays retain the existing amber accent; applies to the main dashboard and fullscreen view.
[3.6.0] 2026-04-19
Added
- METAR Map - new tool at
/map/; displays 48 FAA Class B airports (including KAUS) as color-coded circular markers on an interactive Leaflet.js map using Leaflet.js 1.9.4; markers are colored by flight category (VFR green, MVFR yellow, IFR red, LIFR magenta); clicking a marker shows a popup with ICAO, airport name, flight category badge, and raw METAR text with the same severe/notable weather token highlighting used in the Weather Monitor (thunderstorms, freezing precip, fog, low visibility, RVR, etc.); an optional NEXRAD base reflectivity radar overlay (Iowa Environmental Mesonet) can be toggled on/off and cache-busts every 5 minutes to stay current; data auto-refreshes every 5 minutes with a live countdown; Alaska and Hawaii airports (PANC, PAFA, PHNL, PHOG, PHKO, PHTO, PHLI) are included and accessible by zooming out; default view fits the contiguous 48 states usingfitBounds; uses CartoDB Dark Matter base tiles; page is fullscreen with a dark background, no scroll, and a floating semi-transparent toolbar overlaid in the top-right corner; Leaflet zoom control and toolbar are positioned below the navbar; METAR tokens wrap only at word boundaries.
[3.5.8] 2026-04-18
Added
- Flight Tracker - new tool at
/track/; enter a callsign (e.g. DAL123) or an origin/destination airport pair (IATA or ICAO) and open live tracking results in a new tab; callsign mode supports FlightAware, FlightRadar24, ADS-B Exchange, and an "Open All Three" button; route mode supports FlightAware and FlightRadar24 (ADS-B Exchange does not have a route search); inputs auto-uppercase and accept Enter to trigger the primary action. - NAS Status Dashboard: deicing delays - airports with active FAA deicing operations are now surfaced in the Arrival/Departure Delays section; the proxy reads the
deicingfield from the FAA airport-events feed and includes the expiration time; main and fullscreen views show aDEICINGbadge with a cyan card color and a "Deicing Until HHMMz" detail line; compact view shows anICEbadge with a cyan row accent and "Deicing Until HHMMz" detail; browser notifications label the type as "Deicing" with a capital D. - Weather Monitor: low-visibility hazard highlighting - fog (
FG), vertical visibility (VV), RVR (Rnn/xxxxFT), and raw visibility tokens below 1/2 SM are now highlighted in the METAR/TAF raw text;FGhighlights amber;VVvalues below 500 ft andM1/4SMhighlight red,VV500-1000 ft and visibility under 1/2 SM highlight amber; RVR below 1200 ft highlights red, at or above 1200 ft highlights amber; applies to both the main and compact views.
Changed
- NAS Status Dashboard: Closed to GA section order - the "Closed to GA Only" section now renders below Planned Initiatives instead of above it.
- NAS Status Dashboard: airport name truncates instead of wrapping - the airport full name row on NAS cards now truncates with an ellipsis rather than wrapping to a second line; applies to all card types (GDP, Ground Stop, AFP, Arrival/Departure Delay).
- NAS Status Dashboard: airport closure text source - closure display text now prefers the
textfield from the FAA API oversimpleText, falling back tosimpleTextwhentextis absent; applies to both formal airport closure records and free-form closure entries. - NAS Compact View: scope tooltip wider - the cursor-following scope tooltip maximum width increased from 360px to 480px to better accommodate long facility lists.
- NAS Status help page: updated for recent changes - documented the Fullscreen View, DAS Delay Chart button, corrected Compact View popup dimensions, updated new-row highlight description from "amber left border" to "type-colored flash animation", and corrected scope code tooltip behavior (cursor change only, no dashed underline in compact view).
Fixed
- NAS Status Dashboard: Planned Initiatives timing not displayed - the
timefield returned by the FAA operations-plan API was being ignored; timing labels (e.g. "AFTER 1100", "UNTIL 0300") now correctly appear beside each terminal and en-route initiative entry. - NAS Compact View: DAS delay chart edge bar tooltips - hovering over the leftmost or rightmost bar in the DAS delay chart popup no longer clips the tooltip; the first bar's tooltip anchors to the left edge and the last bar's tooltip anchors to the right edge instead of centering, keeping them fully visible within the popup.
- NAS Status Dashboard: GDP card icon spacing - the map and DAS delay chart buttons on GDP cards were treated as separate flex items causing excessive space between them; both buttons are now grouped in a single wrapper so they stay flush to the right edge of the name row.
- NAS Status Dashboard: affected airport label shown twice on map - when the affected airport (e.g. KIAH) is also in the Class B reference layer, it was rendered with two overlapping labels; the background Class B dot is now suppressed for the affected airport so only the pink highlighted dot and its label appear; applies to the scope map (GDP/GS), AFP circle map, and compact view equivalents.
[3.5.7] 2026-04-15
Added
- NAS Status Dashboard: fullscreen view - new
nas/fullscreen.phpprovides a dark-mode, projector-optimized display of active NAS programs; shows all affected airports in a single card grid ordered by FCA/AFP, Ground Delay Programs, Ground Stops, Closures, and Arrival/Departure Delays with no section headers; GA-only items are excluded; a five-tile counter row at the top summarizes active program counts; cards use large airport code text, high-contrast dark styling, and thick left-border accents for visibility across a room; airport full name and NOTAM text are hidden; all interactive features from the main dashboard are preserved (scope maps, AFP/FCA maps, DAS delay charts, scope tooltips); auto-refreshes every 60 seconds; a simple back button returns to the main NAS Status page; linked from the NAS Status status bar as "Fullscreen". - NAS Status Dashboard: randomized loading messages - the initial loading state now picks at random from a pool of 40 aviation/dispatch-themed messages instead of showing a static "Loading NAS airport status..." string; applies to both the main dashboard and the compact view.
- Compact views: browser notifications on new items - all three compact views (NAS, Weather Monitor, D-ATIS Monitor) fire an OS-level browser notification when new items are detected on a background refresh; NAS notifications title reads "NAS Update" and group affected airports by program type (e.g. "Ground Stop: KJFK\nGround Delay Program: KATL, KORD"); Weather Monitor notifications list the stations with updated METARs; D-ATIS Monitor notifications list the airports with changed ATIS letters; clicking a notification brings the compact window to the front; notifications auto-dismiss after 8 seconds; a unique
tagper tool replaces the previous notification rather than stacking. - Compact views: bell button for notification permission - a
fa-bellbutton appears in each compact view header when browser notification permission has not yet been granted; clicking it triggers the browser permission prompt (required by Chrome to be a user gesture); once permission is granted the button disappears; if permission is denied the button shows a redfa-bell-slashwith a tooltip instructing the user to re-enable via browser site settings. - Compact views: document title alert on new items - when a background refresh detects new items the compact window's browser tab/taskbar title is prefixed with
(!)to draw attention even when the window is behind others; title resets when the window is focused or the user dismisses all items. - Help pages: browser notifications documentation - all three compact view help pages (NAS, Weather Monitor, D-ATIS Monitor) now include a "Browser notifications" section explaining how to enable notifications via the bell button, what each notification body looks like with an example, click-to-focus and auto-dismiss behavior, the tab title fallback, and how to re-enable blocked notifications.
Changed
- Codebase: replace Unicode special characters - replaced all em dash (U+2014) and horizontal ellipsis (U+2026) characters across the codebase with standard ASCII equivalents (
-and...respectively). - Compact views: window focus behavior clarified -
window.focus()is retained as a best-effort call but the primary alert mechanism is the document title prefix and browser notification, both of which work reliably from timer callbacks across modern browsers. - Help pages: compact view alert descriptions updated - "Window focus on update" bullet replaced with accurate "Alerts on update" language referencing the new notifications section in all three help pages.
- NAS Status Dashboard: ground stop probability color-coded - the probability of extension value on ground stop cards (
Low/Medium/High) is now color-coded green / amber / red; the label readsProb of Ext:in normal text with only the value colored; probability line appears above the end time. - NAS Status Dashboard: issue type hidden on closure cards - the
nas-issue-typelabel is no longer shown on airport closure and daily closure cards. - NAS Status Dashboard: status bar vertical alignment - the left and right sides of the status bar are now vertically centered.
- NAS Status Dashboard: status bar mobile wrapping - the status bar now wraps on narrow screens so the links row and the timestamp/refresh button stack cleanly instead of overflowing; individual links within the row also wrap if needed.
- NAS Status Dashboard: arrival/departure delay display order - reason now appears above the trend (Increasing/Decreasing) on A/D delay cards; compact view follows the same order.
- NAS Status Dashboard: delay times always in minutes - ground delay avg/max and AFP avg delay now display as
X minutesinstead ofX hours and Y minutes; arrival/departure delay min/max times are parsed from the FAA's pre-formatted strings to minutes; detail text on NAS cards is now uppercase. - NAS Status Dashboard: delay time range format - A/D delay ranges display as
60 minutes – 74 minuteswith a spaced en dash and the unit after both values.
Fixed
- NAS Status Dashboard: NOTAM text on closure cards -
simpleTextfrom the FAA API is now passed through the proxy and displayed on airport closure cards below the reason in a monospace block; helps dispatchers read the full NOTAM without leaving the dashboard. - NAS Status Dashboard: daily closures merged into Airport Closures section - daily closures now render alongside regular closures in one section; the card badge reads
CLOSUREorDAILY CLOSUREdepending on type; the separate Daily Closures section has been removed. - NAS Compact View: daily closure rows - compact view now shows daily closure airports (previously excluded); daily rows display a static
CLSDbadge (no pulse animation) and aDAILYprefix in the detail line; detection checks bothreasonandsimpleTextforDLY/DAILYkeywords. - NAS Compact View: hover tooltips on all row types - hovering over any airport/element code in the compact view now shows a tooltip; closure rows show the full NOTAM
simpleText; all other row types show the formatted reason. - NAS Status Dashboard: renamed arrival/departure delay identifiers -
adSection,adGrid, and--addelCSS modifier renamed toarrDepSection,arrDepGrid, and--arrdepto prevent ad blockers from hiding the section. - Email Subject Generator: renamed departure/arrival airport field IDs -
adDepandadArrrenamed todepAptandarrAptto prevent ad blockers from hiding those inputs. - NAS Status Dashboard: daily closure detection - daily closure check now searches both
reasonandsimpleTextforDLY/DAILYkeywords; previously onlyreason(impactingCondition) was checked, causing airports like SNA to not be flagged correctly. - NAS Status Dashboard: arrival/departure delay reason missing - proxy was reading
impactingConditionfor A/D delays but the FAA API usesreason; delay reason now populates correctly in both the main view and compact view tooltip.
[3.5.6] 2026-04-12
Added
- NAS Status Dashboard: SPT Checklist - new page (
nas/spt.php) providing a compact popout checklist of recurring dispatch posting tasks (Post NAS Summary, Post Forecast Image, Post Special Events, Post SPT Update, Post US Warning Areas, Post Terminal Weather, Post 5 Day Forecast); checking a task starts a 1-hour countdown timer; when the timer expires the checkbox auto-unchecks and the timer flashes red until the task is checked again; includes a SkyHub link and popout button in the header. - NAS Status Dashboard: ATCSCC Operations Plan in Copy Summary - the ATCSCC Operations Plan (terminal and en route items) is now appended at the bottom of the plain-text copy summary when plan data is available.
- NAS Compact View: window focus on new items - the compact popout window automatically comes to the front when a background refresh detects new programs not yet acknowledged; does not trigger on initial page load.
- D-ATIS Monitor: compact popout view - new
atis/compact.phpopens as a named popup from the main D-ATIS Monitor page via a "Compact View" button in the status bar; displays one row per monitored airport showing clickable ARR/DEP/INFO letter badges; clicking a badge expands the full ATIS text inline below the row; updated letters flash amber; window comes to the front when letters change on background refresh; reads the same airport list and letter-change history from localStorage as the main page; listens forstorageevents so adding or removing airports on the main page is reflected in the compact view immediately without waiting for the next refresh cycle. - Weather Monitor: compact popout view - new
wx/compact.phpopens as a named popup from the main Weather Monitor page via a "Compact View" button in the status bar; displays one row per monitored station with the ICAO code color-coded by flight category (green VFR, blue MVFR, red IFR, magenta LIFR), the full raw METAR inline, and a category badge and observation time on the right; METAR text turns red when the observation is more than 1 hour old; click any row to expand the formatted TAF below it; changed METARs flash with a pulsing amber "UPDATED" badge; window comes to the front on METAR changes after initial load; readswx_stationsandwx_metar_cachefrom localStorage shared with the main page; listens forstorageevents so station list changes on the main page are reflected immediately. - D-ATIS Monitor compact view: flight category - each airport row now shows a flight category badge (VFR/MVFR/IFR/LIFR) derived from the ATIS text, with the ICAO code color-coded to match; both compact views and the weather compact default to the same airport/station list as the main page when localStorage has no saved list.
- Weather Monitor compact view: hazardous weather highlighting - METAR tokens are now color-coded by severity in the compact view; severe items (red/bold): thunderstorm phenomena (
TSRA,VCTS, etc.), cumulonimbus/TCU cloud layers (BKN045CB), wind gust ≥35 kt or sustained ≥40 kt, visibility <1 SM, ceiling <500 ft; notable items (amber/bold): freezing precip, heavy precip, squalls, ice crystals, wind gust ≥25 kt or sustained ≥25 kt, visibility 1–2 SM, ceiling 500–999 ft. - Airport Information: full rewrite - data source switched from airportdb.io to Aviation Weather Center;
airport/proxy.phprewritten to proxy four AWC endpoints (/api/data/airport,/api/data/stationinfo,/api/data/metar,/api/data/taf); page now fires all four requests in parallel on lookup and renders: overview card (name, ICAO/IATA/FAA badges, location, elevation, coordinates, magnetic variation, ownership, tower, beacon, WMO ID, wx services), runways (each end's magnetic and true heading computed fromalignment+magdec, dimensions in ft and m, decoded surface type), current METAR (flight category badge color-coded VFR/MVFR/IFR/LIFR, raw text, parsed wind/visibility/clouds/temp/dewpoint/altimeter/SLP grid), current TAF (valid period, raw text formatted with line breaks at FM/TEMPO/PROB/BECMG), and radio frequencies (type code badge, decoded description for LCL/P, GND/P, CD/P, APP/P, DEP/P, D-ATIS, and others, MHz formatted to 3 decimal places); runway section appears above METAR; reference-only disclaimer modal removed. - D-ATIS Monitor compact view: Mark All as Read button - a
fa-check-doublebutton appears in the compact view header whenever one or more airport badges are flashing an update; clicking it clears all pending flash states and re-renders the list; button hides itself once no updates remain; follows the same pattern as the NAS compact view dismiss-all control. - Help pages for D-ATIS Monitor, Weather Monitor, and NAS Status - new
atis/help.php,wx/help.php, andnas/help.phpprovide inline documentation explaining how to use each tool and its compact view; each page covers data source and refresh rate, adding stations/airports, card/row anatomy, flight category colors, update alerts and stale indicators, and a full annotated breakdown of every compact view UI element with live demo mockups; a Help button added to the status bar of each main page. - Compact view help button - the home icon button in all three compact view headers (
atis/compact.php,wx/compact.php,nas/compact.php) replaced with afa-questionhelp icon that opens the corresponding help page as a named 900×700 popup window. - NAS Status Dashboard: Copy Summary and Copy Forecast Chart moved to bottom - both copy action buttons relocated from the top status bar to a new section below the FAA Data Health indicator bar at the bottom of the page.
- Crosswind Calculator: script renamed -
xwind/math.jsrenamed toxwind/xwind.jsfor consistency with the naming convention used by all other tools. - Weather Monitor compact view: UPDATED badge repositioned - the UPDATED badge now appears between the ICAO identifier and the METAR text (previously it was in the right-side metadata group); the corresponding demo diagram in
wx/help.phpupdated to match. - Help pages: width set to 800px - all three help pages (
atis/help.php,wx/help.php,nas/help.php) set to 800px max-width; demo element widths scaled proportionally. - NAS Status help page: demo cards and compact view updated - the card anatomy demo and compact view demo in
nas/help.phpnow faithfully replicate the real UI including left-border accents, header backgrounds, pill badges, issue-type/detail/reason hierarchy, per-type row colors, and correct badge colors.
Changed
- NAS Status Dashboard: Ground Stop probability of extension label - "Ext. Prob:" shortened to "Prob:" in both the full card view and the compact view.
- Weather Monitor compact view: Mark as Read button repositioned - the per-row dismiss button now appears to the left of the TAF toggle instead of between the TAF toggle and the flight category badge.
- D-ATIS Monitor compact view: Mark as Read button repositioned - the per-row dismiss button now appears to the left of the flight category badge instead of at the far right of the row.
- Compact views and footer: Unicode icons replaced with Font Awesome - dismiss button checkmarks (
\u2713) inwx/compact.js,atis/compact.js, andnas/compact.jsreplaced withfa-solid fa-check; TAF expand/collapse triangle indicators (\u25b2/\u25bc) inwx/compact.jsreplaced withfa-solid fa-chevron-up/fa-chevron-down; footer heart (❤) inincludes/footer.phpreplaced withfa-solid fa-heart. - Weather Monitor compact view: header timestamp capitalized - "Updated HHmmZ" changed to "UPDATED HHmmZ" for visual consistency with the per-row UPDATED badge.
- Crosswind Calculator: airport runway lookup and True/Magnetic toggle - the runway input now defaults to an auto-populated dropdown driven by the Aviation Weather Center airport API (
/api/data/airport); fetching an airport ICAO fills wind direction and speed from METAR, populates the runway dropdown with all available runway ends labeled with both magnetic and true headings (e.g.04L - 044°M / 031°T), and auto-fills the magnetic variation field from the airport'smagdecvalue; a Manual/Auto toggle button on the runway input switches between the dropdown and a free-entry runway number field; the True/Magnetic direction reference toggle and magnetic variation number input are combined into a single input group on one line, with True on the left and Magnetic adjacent to the variation value field; Calculate and Clear buttons are right-aligned with Clear on the left and Calculate on the right;xwind/proxy.phpextended with a?type=airportbranch to proxy the airport endpoint.
Fixed
- Weather Monitor: JetBlue Airways preset -
TJSJUcorrected toTJSJ(5-character code failed proxy ID validation). - All proxies: PHP display_errors in JSON responses - added
ini_set('display_errors', '0')to the top of all six proxy files (wx,atis,nas,airport,decode,xwind) so PHP warnings are written to the server error log instead of being injected as HTML into the JSON response body. - D-ATIS Monitor compact view: updated badge glow animation - the
ac-badge--updatedkeyframe was animatingbackground, which was silently overridden by the!importantdeclaration on the base rule; animation switched to pulsingbox-shadowso the amber glow now renders correctly. - Crosswind Calculator: crosswind direction labels swapped - "From the left" and "From the right" labels (and the summary sentence) were inverted; corrected so a positive
sin(angle)result is correctly identified as from the right.
[3.5.5] 2026-04-11
Added
- NAS Status Dashboard: Caribbean reference airports - 14 major Caribbean airports (TJSJ, MYNN, MKJP, MKJS, MUHA, MWCR, MDSD, MTPP, TNCM, TIST, TAPA, TBPB, TNCC, TTPP) added to
MAJOR_INTL_AIRPORTSreference dot layer in both full and compact views. - NAS Status Dashboard: Alaska reference airports - PANC (Ted Stevens Anchorage) and PAFA (Fairbanks) added to
CLASS_B_AIRPORTSreference dot layer in both full and compact views. - NAS Status Dashboard: Hawaii reference airports - PHNL (Honolulu), PHOG (Kahului/Maui), PHKO (Kona), PHTO (Hilo), and PHLI (Lihue/Kauai) added to
CLASS_B_AIRPORTSreference dot layer in both full and compact views. - NAS Status Dashboard: FAA Data Health indicator - status bar added at the bottom of the page showing live green/red/pulsing-gray dots for six upstream endpoints: Airport Events, Enroute Events, Aviation Weather, Operations Plan, ARTCC Boundaries, and Miscellaneous Info; each dot updates independently as its fetch resolves or rejects.
- NAS Status Dashboard: Ground Stop probability of extension -
probabilityOfExtension(e.g.MEDIUM) from the FAA airport-events API is now passed throughproxy.phpand displayed on Ground Stop cards as "Prob:" on a separate line below "Ends:".
Changed
- NAS Status Dashboard: delay data source switched to airport-events JSON -
proxy.php?type=delaysnow fetcheshttps://nasstatus.faa.gov/api/airport-events(JSON) instead ofhttps://nasstatus.faa.gov/api/airport-status-information(XML); ground delays, ground stops, arrival/departure delays, and airport closures are parsed from the JSON response; AFPs come fromenroute-events(same source as scope data); ISO timestamps formatted to "Mon DD HHmmZ" via newfmtIsoZulu(); float minute values formatted via newfmtMinutes();freeFormNOTAM entries map to closures usingsimpleTextas the reason string. - NAS Status Dashboard: RSW arrival/departure delay now displayed - switching to the
airport-eventsendpoint surfaces departure delays (e.g. RSW) that were not consistently available from the legacy XML feed;arrivalDelayanddepartureDelayare now separate fields and each generates its own entry in the Arr/Dep Delays section. - NAS Status Dashboard: AFP circle map padding increased -
fitBoundspadding for circle-geometry AFP/FCA programs (e.g. FCAMU1, FCAPV2, FCAPV3) increased from[80, 80]to[200, 200]px in both full and compact views to provide better geographic context for small-radius circles. - NAS Status Dashboard: graceful background refresh - auto-refresh and manual refresh no longer blank the page while fetching; existing cards remain visible and update in place when new data arrives; loading spinner only shown on initial page load; a failed background refresh shows "Refresh failed" in the timestamp rather than wiping content.
- NAS Compact View: map popup z-index raised -
#cpt-map-overlayz-indexincreased from1000to1200so the map popup always renders above#cpt-header(z-index: 1100) instead of sliding under it. - NAS Status Dashboard: Ground Stop color changed to rose-red - Ground Stop accent color changed from red (
#dc2626) to rose-red (#e11d48) across cards, badges, section header, counter, and scope map markers in both full and compact views to distinguish it visually from Airport Closures. - NAS Status Dashboard: Ground Delay Program color changed to fuchsia - GDP accent color changed from amber (
#d97706) to fuchsia (#c026d3) across cards, badges, section header, counter, and scope map markers in both full and compact views; color now sits between AFP purple and Ground Stop rose on the severity spectrum. - NAS Status Dashboard: section and counter order updated - counter row reordered to Flow Programs → Delay Programs → Ground Stops → Closures → Arr/Dep Delays; section card order unchanged (already: AFP → GDP → GS → Closures → AD Delays).
- NAS Status Dashboard: "Ground Delays" renamed to "Delay Programs" - counter label, section header, card badge, card issue-type label, scope map modal title, copy summary header, and copy summary intro text all updated;
fadtParamTypefrom the FAA airport-events API now drives the issue-type label on Delay Program cards (GDP→ "Ground Delay Program", other values rendered as-is). - NAS Status Dashboard: Ground Delay average delay fix -
proxy.phpwas readingaverageDelayfrom the FAA API response; the correct field name isavgDelay; average delay values (e.g. SFO 160 min → "2 hours and 40 minutes") now display correctly on cards and in the copy summary. - NAS Status Dashboard: reason field fix -
proxy.phpwas readingreasonfrom ground delay, ground stop, arrival/departure delay, and closure records; the correct FAA API field isimpactingCondition; reason text now displays correctly on all delay and closure cards in both full and compact views. - NAS Status Dashboard: Arrival/Departure Delay card layout - delay time range and trend (increasing/decreasing) now render on separate lines; trend text styled as non-bold muted text instead of bold monospace.
[3.5.4] 2026-04-10
Added
- NAS Status Dashboard: AFP circle map support - AFP/FCA programs that use a circle geometry (e.g. FCAMU1) now render correctly on the scope map in both full and compact views; circle center and radius (NM) extracted from the FAA enroute-events API in
proxy.phpand passed asafpCircledata; map bounds calculated manually (dLat = radiusNm/60,dLng = dLat/cos(lat)) to avoid Leaflet projection issues before a map view is set. - NAS Status Dashboard: international airport reference dots - 14 Canadian and 14 Mexican major airports added to the AFP map reference layer alongside existing Class B US airports; displayed at reduced opacity to distinguish from highlighted airports.
- NAS Status Dashboard: AFP circle center airport highlight - for AFP programs using a circle geometry, the nearest airport to the circle center is identified and highlighted with a fuchsia dot and permanent label on the map in both full and compact views.
- NAS Status Dashboard: AFP included/excluded airports in scope tooltip -
arrivesAny,departsAny,arrivesNone, anddepartsNonefields from the FAA enroute-events API are now shown in the scope tooltip on AFP/FCA program code elements in both full and compact views, labeled as "ARR INCL:", "DEP INCL:", "ARR EXMPT:", and "DEP EXMPT:" respectively. - Conversion Tools: Endurance calculator - new card accepts total fuel (lbs) and fuel burn rate (lbs/hr) and displays endurance as H+MM and decimal hours; positioned between Fuel Weight and Altimeter Setting.
Changed
- NAS Status Dashboard: included ARTCC label color -
nas-artcc-label--includedlabel color on AFP/FCA scope maps changed from red (#f87171) to orange (#f97316) in both full and compact views to complement the orange polygon fill. - Weather Monitor: stale METAR highlight - METAR observations older than 1 hour now display in red text (both raw METAR and all highlighted spans) in the card and Quick Look modal; text returns to normal once a fresh observation loads.
- Conversion Tools: Kelvin removed from temperature converter - Kelvin input field removed; temperature card now converts only between Fahrenheit and Celsius.
- Conversion Tools: Weight card repositioned - pounds/kilograms weight converter moved to last position in the grid and jump menu.
[3.5.3] 2026-04-08
Added
- NAS Status Dashboard: dynamic airport name lookup - airports appearing in NAS delay/closure data that are not in the static
AIRPORT_NAMESlist are now looked up via the Aviation Weather Center API (/api/data/airport) through a newproxy.php?type=airportroute; names are cached at runtime and the view re-renders once names resolve; both full and compact views updated. - NAS Status Dashboard: affected airport dot on scope maps - GDP and GS scope maps now render a fuchsia dot at the affected airport's coordinates; dot is labeled with the ICAO code (e.g.
KAGS) in a permanent fuchsia label styled to match the Class B airport reference markers; coordinates sourced from FAA airport-events API (always stored now, not just when a departure radius exists) with AWC API as fallback viacoordCache; applies to both full and compact views. - NAS Status Dashboard: GS scope map airport coordinates -
gsLat/gsLngnow stored in proxy scope data from the FAA airport-events API and passed asdata-lat/data-lngon ground stop map buttons in both full and compact views. - NAS Status Dashboard: compact view airport coordinate cache -
coordCacheandfetchMissingCoords()added tocompact.js; fetches AWC coordinates for GDP/GS airports after each render as a fallback when FAA events data does not include lat/lng.
Changed
- NAS Status Dashboard: GDP scope map polygon color - included ARTCC polygons on Ground Delay Program scope maps changed from red (
#ef4444) to orange (#f97316); applies to border, fill, Canadian airport dots, and departure radius circle in both full and compact views. - NAS Status Dashboard: AFP/FCA boundary polygon color - AFP boundary polygon on the AFP map modal changed from red (
#ff0000) to purple (#7c3aed) in the full view; compact view was already purple. - NAS Status Dashboard: GS scope map source ARTCC color - on Ground Stop scope maps the source (originating) ARTCC polygon now uses the same red as included polygons instead of the white/transparent treatment used for GDP maps; applies to both full and compact views.
- D-ATIS Monitor: rate limiting updated -
atis/proxy.phprate limiter changed from per-request time-based throttle to a fixed-window 100-requests-per-minute global counter; no minimum time enforced between identical requests. - Weather Monitor: rate limiting updated -
wx/proxy.phprate limiter replaced with the same fixed-window 100-requests-per-minute global counter; per-request 30-second TTL and Quick Look bypass removed. - Conversion Tools: Alternate Minimums calculator added - new card with two free-text fraction inputs (standard approach minimums + alternate addition); parser handles standard aviation formats (
3/4,1-1/4,1 1/4) and decimals; result displayed as a proper aviation SM fraction rounded up to the nearest 1/8 SM; positioned beside ISA Temperature Deviation in the grid. - NAS Status Dashboard: section header renamed - "CLOSED TO NON-SKED GA ONLY" section header renamed to "CLOSED TO GA ONLY" in
index.php; card badge renamed from "NON-SKED GA ONLY" to "CLOSED TO GA ONLY" innas.js. - NAS Status Dashboard: GA-only detection expanded - closures with
CLSD TO TRANSIENT GAin the reason string are now treated the same asNON-SKEDitems: routed to the GA-only section, excluded from summary counters, and excluded from the copy-to-clipboard text output. - NAS Status Dashboard: airport name convention updated - static
AIRPORT_NAMESentries updated to all-caps and reformatted to match the AWC API naming convention (airport/facility name only, city prefix removed); dynamic lookups apply the same rule by taking the substring after the first/in the AWC name field. - NAS Status Dashboard: airport name proxy response -
proxy.php?type=airportnow returns{code: {name, lat, lon}}objects instead of flat name strings, enabling coordinate caching alongside name caching. - NAS Status Dashboard: GDP lat/lng always stored -
proxy.phpnow storesgdpLat/gdpLngfrom the FAA airport-events API regardless of whether a departure scope radius is present (previously only stored whendepartureScopewas non-null). - NAS Status Dashboard: affected airport dot color - airport center dot on GDP/GS scope maps changed from red (
#ef4444) to fuchsia (#d946ef) in both full and compact views. - NAS Status Dashboard: source ARTCC label color -
nas-artcc-label--sourcecolor updated to fuchsia (#d946ef) innas.css.
[3.5.2] 2026-04-07
Added
- NAS Status Dashboard: Copy Forecast Chart button - new button copies the AWC surface forecast chart image (F006 WPC prog) to the clipboard; image is fetched server-side via
proxy.php?type=progchartto avoid CORS, rendered to a canvas, and written as a PNG blob via the Clipboard API.
Changed
- NAS Status Dashboard: Copy Summary - AWC prog chart line removed - the
AWC Prog Chart:URL line has been removed from the plain-text summary output. - NAS Status Dashboard: status bar layout - Copy Summary and Copy Forecast Chart buttons moved to a second row below the Ops Plan / Compact View links, replacing the previous standalone copy bar below the status bar.
- NAS Status Dashboard: BETA labels removed - BETA badge removed from ATIS Monitor and Weather Monitor on the homepage.
- NAS Status Dashboard: AFP FCA line color - FCA line polyline color changed to fuchsia (
#ff00ff) in both full and compact views. - NAS Status Dashboard: AFP FCA line - endpoint dots removed - circle markers on FCA line points removed; map now renders the path only in both full and compact views.
- NAS Status Dashboard: map popup size increased - AFP/FCA and scope map modals (full view) enlarged to
modal-xlwith 580px map height; compact view popup widened to 900px with 520px map height. - NAS Status Dashboard: map fitBounds padding increased - AFP polygon padding increased to 80px, FCA line padding to 220px in full view; both increased to 200px in compact view for a more zoomed-out default view.
- NAS Status Dashboard: refresh countdown leading zero - countdown display now zero-pads values below 10 seconds (e.g.
09s) in both full and compact views. - METAR/TAF Decoder: BETA label removed - BETA badge removed from the homepage tool card.
- NAS Compact View: title color -
#cpt-titlecolor changed from amber to off-white (#e8edf2). - NAS Compact View: Zulu clock color -
#cpt-zulucolor and border changed from amber to terminal green (#66ff99). - NAS Compact View: uniform row layout -
cpt-codegiven fixed width (50px);cpt-iconsalways reserves its column width; row alignment changed tocenterfor consistent spacing regardless of icon presence. - NAS Status Dashboard: source ARTCC polygon fill - source ARTCC fill changed from orange to transparent white (
#ffffffat 12% opacity) in both full and compact views; stroke remains off-white/orange to keep the boundary visible.
[3.5.1] 2026-04-06
Added
- NAS Status Dashboard: FCA line map - Flow Constrained Area entries (e.g.
FCAJX1) now include a map button in both full and compact views; renders an amber polyline with endpoint markers sourced from thelinefield inapi/enroute-events; reuses the AFP map modal/overlay; modal title shows{name} - FCA Line. - NAS Status Dashboard: FCA scope tooltip - FCA entries now show a scope tooltip built from
lowerAltitude,upperAltitude, andfcaHeadingDirection(e.g.FL180–FL600 · SOUTHBOUND) whenarrivesAny/departsAnyare empty. - NAS Status Dashboard: Canadian airport dots on scope maps - Canadian airports and FIRs (CYEG, CYVR, CYYC, CZEG, etc.) that appear in GDP/GS scope lists but have no US ARTCC boundary are now rendered as red dots with labels on the scope map in both full and compact views.
- NAS Status Dashboard: Class B airport reference markers - all 40 US Class B airports rendered as small white dots with ICAO code labels on all Leaflet maps (scope, AFP boundary, FCA line) in both full and compact views.
- Airport Information: reference-only disclaimer modal - Bootstrap modal shown on every page load warning that data is for reference purposes only and must not be used for operational flight planning or dispatch.
Changed
- NAS Status Dashboard: full view scope tooltip on code label -
fa-circle-questionscope icon removed from GDP, AFP, and GS cards; scope text now shown on hover over the airport/AFP code label (nas-card-code) directly;data-scopeattribute moved to the code span; cursor changes tohelpwhen scope is available,pointerwhen the code is also a link. - NAS Status Dashboard: compact view map icon column - AFP and GDP/GS map icons moved out of
cpt-codeinto a dedicated fixed-widthcpt-iconssibling span, ensuring uniform spacing between the code label and detail text on all rows regardless of whether a map icon is present. - NAS Status Dashboard: compact view graceful background refresh - auto-refresh and manual refresh no longer hide the row list behind a full-screen loading spinner; existing rows remain visible during the fetch; the refresh button icon spins as a subtle indicator; background fetch errors update the timestamp to "Update failed" (red) instead of replacing the view with an error state; the full loading screen is shown only on initial page load.
- NAS Status Dashboard: status bar layout - Ops Plan and Compact View links grouped left; refresh button and updated timestamp grouped right.
- NAS Status Dashboard: updated timestamp format - last-updated time now displays as
HHMMZ(e.g.1423Z) using current Zulu time in both full and compact views, replacing the FAA API timestamp string; compact view timestamp prefixed with "Updated". - NAS Status Dashboard: ground stop end time -
End_Timefield converted from local time (e.g.12:15 pm EDT) to Zulu (e.g.1615Z) inproxy.php. - NAS Status Dashboard: closure start/reopen times -
StartandReopenfields normalised fromMar 18 at 13:00 UTC.toMar 18 1300Zinproxy.php. - NAS Status Dashboard: refresh button - "Refresh" label removed; button now shows only the icon and a
XXscountdown (e.g.45s) in both full and compact views. - NAS Status Dashboard: compact view Full View link - "Full View" text replaced with a Font Awesome house icon (
fa-house). - NAS Status Dashboard: compact view scope tooltip -
fa-circle-infoscope icon removed from compact rows; scope text now shown on hover over the entire code label (cpt-code); cursor changes tohelpwhen scope is available. - NAS Status Dashboard: AFP map button style -
nas-afp-map-btncolor updated to matchnas-scope-map-btn(muted gray border and text, subtle hover). - NAS Status Dashboard: map accent color - source ARTCC polygon/label and AFP boundary polygon color changed from pink (
#ec4899) to orange (#fb923c) in both full and compact views. - NAS Status Dashboard: scope map label colors - included ARTCC center labels changed to light red (
#f87171) in both full and compact views. - NAS Status Dashboard: compact map fitBounds deferred - all
fitBoundsandsetViewcalls in compact view wrapped insetTimeout(fn, 0)to ensure Leaflet measures the container after the overlay is painted, fixing zoom accuracy. - NAS Compact View: live Zulu clock -
HHMM/SSZamber clock added to the compact view header; ticks every second; styled with a bold amber border box to distinguish it from the "Updated HHMMZ" timestamp. - METAR/TAF Decoder: split inputs - single textarea replaced with separate labeled METAR and TAF inputs; pasting into one disables the other; both can be decoded simultaneously when fetched; decoder output separated by a divider.
- METAR/TAF Decoder: AWC fetch - ICAO input and "Fetch METAR & TAF" button added to the decode box;
proxy.phpfetches both raw METAR (rawOb) and TAF (rawTAF) from the Aviation Weather Center and auto-decodes on load. - METAR/TAF Decoder: card wrapper - input area wrapped in a bordered card with amber section labels per field.
- Airline Codes: searchable dynamic table - static HTML table replaced with JS-rendered table sourced from
airlines.js; live search across name, IATA, ICAO, and country; sortable columns with asc/desc indicators; yellow highlight on matches; result count shown. - Airline Codes: expanded dataset - added ~25 missing carriers including Southwest Airlines, Ryanair, easyJet, Wizz Air, easyJet Europe/Switzerland, Frontier, Spirit, Allegiant, Sun Country, SkyWest, Norwegian, Transavia, Transavia France, Republic Airways, Mesa Airlines, Porter, Flair, Sunwing, Breeze, Avelo, ITA Airways, Iberia Express, Jazz Aviation, and Lynx Air; cleaned up verbose country names and trailing
*from some IATA codes. - Aircraft Type Designators: searchable dynamic table - static HTML table replaced with JS-rendered table sourced from
aircrafts.js; live search across model, ICAO, and IATA; sortable columns;-shown for types with no IATA code; yellow highlight on matches. - Aircraft Type Designators: expanded dataset - added Airbus A321XLR, Boeing 737 MAX 8-200 / 767-200ER / 767-300ER/F, Gulfstream G600 / G700 / G800, Dassault Falcon 8X / 10X, Bombardier Global 7500, Learjet 70/75, Cessna Citation Latitude / Longitude, Cirrus SR20 / SR22, Embraer E175-E2 / E275, Pilatus PC-24, ATR 42-600S; cleaned HTML entities, cleared
[to be determined]andN/AIATA values. - D-ATIS Monitor: auto-refresh reduced - refresh interval reduced from 3 minutes to 1 minute.
- D-ATIS Monitor: preset dropdown placement - airline preset dropdown moved from the toolbar row to the same flex row as the airport chips.
- Weather Monitor: auto-refresh reduced - refresh interval reduced from 10 minutes to 1 minute.
- Weather Monitor: preset dropdown placement - airline preset dropdown moved from the toolbar row to the same flex row as the station chips.
- Weather Monitor: BETA label removed - removed from page heading.
- Crosswind Calculator: two-column layout - inputs stacked vertically in a left column (
col-md-5); results and wind diagram in a right column (col-md-7); stacks to full-width on mobile. - T-CALC: renamed from Time Calculator - tool directory renamed
time/→tcalc/, files renamed totcalc.js/tcalc.css; navbar label updated to "T-Calc";$toolidentifier, page title, OG tags, and sitemap URL all updated.
[3.5.0] 2026-04-05
Added
- NAS Status Dashboard: AFP polygon map - Airspace Flow Program cards in both the full view and compact view now include a map button that renders the AFP boundary polygon on a Leaflet map; polygon coordinates sourced from the FAA
api/enroute-eventsendpoint viaproxy.php; full view uses a Bootstrap modal; compact view uses a custom dark-themed overlay; purple polygon with translucent fill; both maps use CartoDB Dark Matter tiles. - NAS Status Dashboard: AFP scope tooltip - AFP cards now display a scope tooltip (facilities/fix lists from
arrivesAny/departsAnyonapi/enroute-events) matching the GDP/GS scope tooltip behaviour; labels showARRIVALS:andDEPARTURES:facility groups separated by·. - NAS Status Dashboard: AFP advisory link - clicking an AFP code or its scope icon opens the FAA advisory URL (sourced from
api/enroute-events) in a popup window, consistent with GDP and GS behaviour. - NAS Status Dashboard: Planned Initiatives section - new two-column section (Terminal Planned / Enroute Planned) sourced from
api/operations-planrendered below active programs; each initiative shows timing and description; Operations Plan advisory link added to the section header. - NAS Status Dashboard: Miscellaneous Info section - FAA
api/miscellaneous-infonotices rendered in a monospaced list below Normal Airports. - NAS Status Dashboard: Operations Plan link - link to the ATCSCC Operations Plan advisory added to the left of the last-updated timestamp in the full view status bar; opens in a popup window.
- NAS Status Dashboard: Compact View - Operations Plan link - Ops Plan button added to the compact view header alongside Refresh and Full View; opens advisory in a popup window.
- NAS Status Dashboard: Compact View - scope icon always visible - scope icon (
fa-circle-info) now always renders on GDP, GS, and AFP rows regardless of whether scope data has loaded; tooltip appears once the FAA events feed populates. - NAS Status Dashboard: GDP / GS scope map - Ground Delay Program and Ground Stop cards (full and compact views) now include a map button; opens a Leaflet map showing all ARTCC boundaries with the source center highlighted in pink, affected (included) facilities in red with white labels, and - for range-based programs - a dashed radius circle centered on the airport with a center dot; ARTCC boundary data sourced from FAA
api/artcc-boundariesviaproxy.php; coordinates, departure scope radius, source center, and included facilities piped throughproxy.php?type=events.
Changed
- NAS Status Dashboard: per-issue airport cards - airports with multiple active programs (e.g. a Ground Delay Program and a Non-Sked closure) now render as separate cards routed to their respective sections, rather than being combined into a single card.
- NAS Status Dashboard: scope icon placement - scope info icon (
fa-circle-info) moved to the left of the airport/AFP code on both full and compact views; clicking the scope icon also opens the advisory URL. - NAS Status Dashboard: GDP scope tooltip - departure scope radius - tooltip now includes
departureScopeas{radius} NMahead of included facilities (e.g.SCOPE: 1600 NMorSCOPE: 1000 NM + CYHZ CYOW...); handles programs whereincludedFacilitiesis null butdepartureScopeis set. - NAS Status Dashboard: AFP Avg delay on separate line - average delay for AFP cards now renders on its own line below the time window rather than dot-separated on the same line.
- NAS Status Dashboard: AFP map button placement - map button moved from the card header to the
nas-card-nameline, right-aligned alongside the reason text. - NAS Status Dashboard: full view section order - Planned Initiatives section positioned above Normal Airports.
- NAS Status Dashboard: Compact View - ARR/DEP badge colors - Arrival badge uses sky blue, Departure badge uses emerald green for clearer visual distinction.
- NAS Status Dashboard: Compact View - CLSD badge pulse - Airport Closure badge now pulses red (matching the Ground Stop badge pulse behaviour).
- NAS Status Dashboard: Leaflet JS integrity hash - corrected SRI hash for Leaflet 1.9.4 JS in
index.phpandcompact.php.
[3.4.4] 2026-04-04
Added
- NAS Status Dashboard: Compact View - Dismiss All button - "Dismiss All" button (double-checkmark icon) added to the compact view header; visible only when at least one new/flashing row is present; clicking it acknowledges all flashing rows at once, persists them to
localStorage, and hides the button. - NAS Status Dashboard: Compact View - Ground Stop badge pulse - the
GSbadge on active Ground Stop rows continuously pulses between its normal translucent orange and a bright solid orange, independent of new-row flash state, to visually flag active ground stops at a glance. - NAS Status Dashboard: Compact View - opens in popup window - the "Compact View" link on the main NAS page now opens
compact.phpin a minimal popup window (no menubar, toolbar, location bar, or status bar) sized for use as a desktop panel. - NAS Status Dashboard: Compact View - new item flash + acknowledge - new rows detected since the last fetch flash with a pulsing background animation in their type accent color; each new row shows a
✓acknowledge button that stops the flash and marks the item as seen; seen state is persisted inlocalStoragekeyed by type and airport code; items that disappear from the feed and return will flash again. - NAS Status Dashboard: Compact Live View - new standalone page at
/nas/compact.php; shows only active Airspace Flow Programs, Ground Stops, Ground Delay Programs, Arrival/Departure Delays, and non-daily Airport Closures (NON-SKED and daily DLY entries excluded); line-by-line log format with color-coded type badges (CLSD/GS/GDP/AFP/ARR/DEP) and left border accents; auto-refreshes every 3 minutes via the existingproxy.phpfeed; includes last-updated timestamp, countdown refresh button, and a "Full View" link back to the main NAS page; all-clear state shown when no active programs; designed for use as a resizable desktop panel. - NAS Status Dashboard: Compact View link - "Compact View" link added to the NAS status bar; opens compact page in a new tab.
- NAS Status Dashboard: Compact View - Arrival/Departure Delays - A/D delay programs now appear in the compact view; badge shows
ARRorDEPbased on the delay type; detail displays the min–max delay range and trend (e.g.15–45 · Increasing); sky-blue left border accent and badge color distinguish A/D rows from other program types; NON-SKED GA-only entries excluded. - NAS Status Dashboard: Airport Closures section - non-daily, non-GA airport closures now render in their own dedicated "AIRPORT CLOSURES" section separate from Ground Delay Programs;
nas-section-head--closurestyle added tonas.css. - NAS Status Dashboard: Daily Closures counter - summary row now includes a "Daily Closures" counter to the right of Arr/Dep Delays; styled with a softer rose tint to visually distinguish from the Closures counter; daily entries excluded from the main Closures counter.
Removed
- D-ATIS Monitor: dev test helpers -
injectTestCard()andremoveTestCard()console functions removed fromatis.js.
Changed
- NAS Status Dashboard: auto-refresh interval - full view auto-refresh reduced from 180 seconds to 60 seconds.
- NAS Status Dashboard: Closures counter consolidation - "Closures" and "Daily Closures" summary counters merged into a single "Closures" tile showing the total count of all closures (non-daily + daily, excluding NON-SKED-only entries); separate Airport Closures and Daily Closures sections in the main view are unchanged.
- NAS Status Dashboard: section order - full view sections reordered to: Airspace Flow Programs → Ground Delay Programs → Ground Stops → Airport Closures → Arrival/Departure Delays → Daily Closures → Non-Sked GA → Normal Airports.
- NAS Status Dashboard: Compact View section order - compact view rows reordered to: Airspace Flow Programs → Ground Delay Programs → Ground Stops → Airport Closures → Arrival/Departure Delays; Daily Closures and Non-Sked GA excluded from compact view.
- NAS Status Dashboard: Compact View text capitalisation - all text in the compact view uppercased via
text-transform: uppercaseonbody. - NAS Status Dashboard: Compact View badge width -
cpt-badgegiven a fixedwidth: 45pxso 2-, 3-, and 4-character badges (GS, GDP, CLSD, etc.) align consistently. - NAS Status Dashboard: Compact View live indicator - animated green pulsing dot added to the left of the "NAS LIVE" header title; title font size increased to 16px.
- NAS Status Dashboard: Compact View dark background - compact page switched from the light
--dt-bgpage background to a dark navy (#141e2d); row backgrounds use translucent color tints; text, badges, and border accents updated throughoutcompact.cssfor dark-mode contrast. - Site-wide: Font Awesome icons replace UTF-8 symbols - all UI icon characters replaced with Font Awesome 6.7.2 equivalents: refresh arrow (
fa-rotate-right) in NAS full and compact views; all-clear check (fa-circle-check) in NAS full and compact views; external-link arrow (fa-up-right-from-square) on the Compact View link and the Zulu Time navbar link; backspace key (fa-delete-left) in the Time Calculator; directional arrows (fa-arrow-down,fa-arrow-up) in the SAT/TAT converter; remove-chip close icon (fa-xmark) in the D-ATIS Monitor. - Site-wide: Font Awesome loaded on all pages - FA 6.7.2 CDN link added to pages that were previously missing it: NAS Status Dashboard, Time Calculator, Airport Information, NOTAM Filter, ACARS Formatter, Aircraft Codes, Airline Identifiers, Contact, and the homepage.
[3.4.3] 2026-03-31
Added
- NAS Status Dashboard: Canadian airport support - YYZ, YVR, YUL, YYC, YEG, YOW, YHZ, and YWG added to
AIRPORT_NAMESandSUPPORTED_AIRPORTS; airports now show full names on NAS cards and appear in the normal operations grid.
Changed
- ATC Strip Editor: restored to active status - retirement notice removed; tool is fully operational.
[3.4.2] 2026-03-30
Added
- METAR / TAF Decoder - new tool at
/decode; paste any METAR or TAF for a plain-English breakdown; auto-detects report type; decodes station, time, wind (including variable sector and gusts), visibility (SM and metric), RVR, present weather (intensity, descriptor, precipitation, obscuration), sky condition (cloud amount, height, CB/TCU), temperature/dewpoint with spread advisory, altimeter (inHg and hPa), and remarks (AO1/AO2, SLP, precise T/Td, pressure tendency, wind shift, precipitation amounts, thunderstorm location); TAF decoder splits report into change groups (Initial, FM, TEMPO, BECMG, PROB, INTER) each rendered as a distinct color-coded section; raw token shown alongside each decoded value; added to navbar and sitemap. - Conversion Tools: ISA Temperature Deviation calculator - new card accepts actual temperature (°C) and pressure altitude (ft); outputs ISA standard temperature and ISA deviation (e.g. ISA+5 / ISA−3) color-coded warm/cold; info popover shows full standard ISA temperature table (SL through FL450) in °C and °F.
- Conversion Tools: Pressure Altitude calculator - new card accepts field/indicated altitude (ft) and altimeter setting (inHg or hPa); outputs pressure altitude and QNH correction, color-coded above/below standard.
- Conversion Tools: Density Altitude calculator - new card accepts pressure altitude (ft) and OAT (°C); outputs density altitude and ISA deviation using standard aviation approximation (PA + 118.8 × ΔT).
- Conversion Tools: RVR / Visibility calculator - new card converts runway visual range between feet and meters (bidirectional) and displays both the FAA standard visibility equivalent (AIM table: 1600 ft = ¼ SM ... 6000 ft = 1¼ SM) and the mathematical statute-mile value; FAA match highlighted in blue; info popover shows complete FAA standard table.
- Conversion Tools: jump menu - pill-style navigation bar above the calculator grid links directly to each calculator; icons match card headers; pills fill blue on hover; smooth scroll with
scroll-margin-topoffset so cards clear the fixed navbar.
Changed
- NAS Status Dashboard: Ground Delay Programs detail lines split - Avg and Max delay times now render as separate lines instead of a single dot-separated string.
- NAS Status Dashboard: Daily Closures detail lines split - Closed and Reopens times now render as separate lines instead of a single dot-separated string.
[3.4.1] 2026-03-26
Added
- Shared validators utility - new
assets/lib/validators.jswithvalidateICAO(),validateAirportCode(), andvalidateNotamDate()functions; loaded by Weather Monitor, Airport Information, and NOTAM Filter; eliminates duplicated inline validation logic and standardises error messages across tools. - Flight category CSS tokens -
--dt-vfr,--dt-mvfr,--dt-ifr,--dt-lifradded to:rootinglobal.css; all.vfr/.mvfr/.ifr/.lifrcolor and background references inatis.cssandwx.cssupdated to use the tokens. - Shared drag-and-drop styles -
.dt-dragging,.dt-drag-over-top,.dt-drag-over-bottomextracted fromatis.cssandwx.cssintoglobal.css; tool-specific prefixed duplicates removed;atis.jsandwx.jsupdated to reference the shared class names. - Shared station chip styles -
.station-chipand.chip-removeextracted fromatis.cssandwx.cssintoglobal.css; ~30 lines of duplicate CSS removed. - NAS Status Dashboard: Ground Stops dedicated section - ground stops now render in their own "GROUND STOPS" section (above Ground Delay Programs) with per-airport cards showing end time and reason; previously ground stops were merged into the Ground Delay Programs section;
nas-section-head--gstopstyle added tonas.css.
Fixed
- NAS Status Dashboard: Ground Stops not rendering -
nas/proxy.phpwas iteratingGround_Stop_List->Ground_Stopbut the FAA API wraps each entry in<Program>tags; corrected to->Programso ground stop data is now parsed and displayed. - Weather Monitor: Mark All Read not removing UPDATED badge -
dismissAllFlash()was clearingwxFlashStateand removing the card pulse animation but never removing the.wx-updated-badgeDOM element; badges are now explicitly removed from each card.
Changed
- Accessibility: footer text contrast -
--dt-nav-linkraised from#94a3b8to#b8c5d6to meet WCAG AA contrast ratio on the navy background; navbar toggler icon SVG colour updated to match. - Accessibility: navbar logo alt text - logo
<img>altattribute changed from empty string to"Dispatch Tools Home"since the image is inside a link. - Accessibility: Weather Monitor drag handle labels -
aria-label="Reorder card"added to drag handle<span>elements generated inwx.js. - Weather Monitor: ICAO validation uses shared validator -
addStation()andlookupStation()now callvalidateICAO()from the shared utility. - Airport Information: input validation uses shared validator - form submission now calls
validateAirportCode()from the shared utility. - NOTAM Filter: date validation uses shared validator -
notamDateIsValid()now delegates tovalidateNotamDate()from the shared utility. - Proxy error responses: structured format -
nas/proxy.php,airport/proxy.php, andwx/proxy.phperror responses now include acodefield (e.g.upstream_connection_error,invalid_icao,rate_limited) and an ISO 8601timestamp;@error suppression removed from allfile_get_contents()calls;airport/proxy.php$http_response_headerreference made null-safe. - NAS Dashboard JS: modernised to ES6 -
nas.jsconverted from ES5 (var) to ES6 (const/let) throughout;'use strict'added at top.
Added
- NAS Status Dashboard: Airspace Flow Program support - AFP entries from the FAA API are parsed in
proxy.phpand displayed in a dedicated "AIRSPACE FLOW PROGRAMS" section; each AFP card shows the FCA identifier, reason, time window (Z), average delay, and altitude band; AFP count added to the summary counters row (purple/indigo). - NAS Status Dashboard: Arrival/Departure Delays section - A/D delay programs extracted from the airport card system and given a dedicated "ARRIVAL / DEPARTURE DELAYS" section with per-airport cards showing type (ARRIVAL/DEPARTURE badge), delay range, trend, and reason.
- NAS Status Dashboard: Daily Closures section - daily closure airports now appear in their own dedicated section with a styled section head.
- NAS Status Dashboard: Non-Sked GA section - GA-only closures moved to a dedicated section with a matching section head.
- D-ATIS Monitor: dev test helper -
injectTestCard()andremoveTestCard()exposed onwindowfor browser-console testing of stale ATIS indicators; injects a dummyTESTcard with ARR and DEP rows timestamped 90 minutes in the past.
Changed
- Weather Monitor: UPDATED badge styled red - badge color changed from amber to red (
#dc2626) for higher visibility. - Weather Monitor: UPDATED badge click-to-dismiss - clicking the UPDATED badge removes it and clears the card's updated state; badge shows a pointer cursor and darkens on hover.
- Weather Monitor: UPDATED card pulse animation - updated cards now animate with a breathing amber glow and pulse between light yellow (
#fef9c3) and deeper yellow (#fef08a) to make changes more noticeable. - NAS Status Dashboard: section layout refactored - page now renders five independent named sections in order: Airspace Flow Programs → Ground Delay Programs → Arrival/Departure Delays → Daily Closures → Closed to Non-Sked GA; each section self-manages visibility and is hidden on loading/error via a shared
DATA_SECTIONSarray inshowState. - NAS Status Dashboard: "Affected Airports" renamed to "Ground Delay Programs" - section head uses dark amber (
#92400e) with yellow rule to match the ground delay color language. - NAS Status Dashboard: summary counters reordered - counters now read left to right matching section order on the page: Flow Programs → Closures → Ground Stops → Ground Delays → Arr/Dep Delays.
- NAS Status Dashboard: summary counters now equal-width - counter columns changed from fixed
col-sm-3tocol-sm(equal auto-width) to accommodate five counters in a single row. - NAS Status Dashboard: section head styles consistent - all named sections (AFP, Ground Delay Programs, A/D Delays, Daily Closures, Non-Sked GA) use the
nas-section-headpattern with distinct per-section colors and ruled lines. - D-ATIS Monitor: modal stale indicator - stale
<pre>background restored torgba(239, 68, 68, 0.1); block-level stale wrapper removed. - NAS Status Dashboard: browser caching disabled -
Cache-Control: no-storeandPragma: no-cacheheaders added tonas/index.php. - D-ATIS Monitor: browser caching disabled - same no-cache headers added to
atis/index.php. - Weather Monitor: browser caching disabled - same no-cache headers added to
wx/index.php.
[3.4.0] 2026-03-25
Added
- Conversion Tools - new tool (
convert/) with aviation conversion cards: SAT/TAT (static air temp from total air temp, Mach, and pressure altitude); temperature (°F ↔ °C ↔ K); fuel weight (lbs ↔ gallons with density selector for Jet-A, 100LL, Avgas); altimeter setting (inHg ↔ hPa); distance (NM ↔ km ↔ SM); speed (kt ↔ mph ↔ km/h); weight (lbs ↔ kg); Mach number (Mach ↔ KTAS given SAT); altitude (ft ↔ m); icing condition check. Added to navbar and homepage. - ATC Strip Editor: full ICAO FPL parser/editor -
atc.jswritten from scratch with a complete parse → edit → generate workflow for ICAO flight plan strings; covers Fields 7–19 including F10 equipment/surveillance (all Nav, SSR, CPDLC, SATCOM, ADS codes), PBN code lookup, and structured Field 18 key/value editing; outputs a properly formatted multi-line FPL strip; sampleatc/strip.txtbundled. - NAS Status Dashboard: daily closure support - closures whose reason contains
DLYare flagged as daily closures; rendered with a dedicated.nas-card--daily-closurecard variant (distinct border, code, badge, and issue-type colors) and a "DAILY CLOSURE" badge.
Changed
- NAS proxy: switched to
nasstatus.faa.govXML API -nas/proxy.phpnow fetches fromhttps://nasstatus.faa.gov/api/airport-status-information(XML) instead of the oldexternal-api.faa.gov/aswsJSON endpoint; proxy parses the XML withsimplexml_load_stringand re-emits normalised JSON matching the existing client shape; per-airport status endpoint removed. - Homepage: ATC Strip Editor and Conversion Tools cards added - both new tools appear as
col-md-6 col-lg-3cards in the homepage grid. - D-ATIS Monitor: Mark All Read button - new button in the status bar clears all unread ATIS update indicators at once; hidden when no cards have pending updates; right-aligned alongside the Refresh Now button.
- Weather Monitor: Mark All Read button - same pattern as D-ATIS; raw METAR strings are cached to localStorage (
wx_metar_cache) and compared on each fetch; stations with changed METARs receive a yellow "UPDATED" badge and glow outline; Mark All Read clears all indicators and hides the button. - D-ATIS Monitor: combined ATIS badge gradient - the "INFO" type badge now renders a 315° gradient from ARR blue to DEP purple instead of a flat grey.
- Conversion Tools: icing condition logic revised - structural icing now evaluates as NONE only when TAT > 0 °C and not in visible moisture; if TAT ≤ 0 °C without moisture the SAT-based severity scale still applies (covering the 0 to −40 °C supercooled droplet range). Induction icing now accepts TAT: no moisture + TAT > 10 °C = NONE; no moisture + TAT ≤ 10 °C = POSSIBLE with note; in moisture logic unchanged (SAT ≤ +5 °C = EAI required, SAT +5–10 °C = POSSIBLE). Removed the aerodynamic heating note about aft-body surfaces.
- D-ATIS Monitor: stale ATIS indicators - ATIS rows older than 1 hour (compared to current Zulu time) receive a light red row background, a muted red letter, and a red timestamp to indicate the observation may be out of date.
- D-ATIS Monitor: stale indicators in modal - the Quick Look modal mirrors stale/updated state: the ATIS text block gets the same light red background as the row, the timestamp turns bold red, and the letter inherits the amber flash (updated) or muted red (stale) color matching the main page.
- D-ATIS Monitor: modal live refresh - while a modal is open it fetches fresh ATIS data every 2 minutes, updates the card in the grid, and re-renders the modal body; stale indicators recalculate on every render so they appear as soon as an ATIS ages past 1 hour without requiring a page refresh; the refresh timer is cleared when the modal is closed.
- D-ATIS Monitor: IATA airport code support - the airport input now accepts 3-letter IATA codes (e.g. JFK, LAX) in addition to 4-letter ICAO codes; US non-CONUS airports (Hawaii, Alaska, territories) are resolved via a built-in exception map; continental US airports use the K + IATA convention; deep links (
/atis/#JFK) also accept IATA codes.
[3.3.3] 2026-03-20
Added
- Crosswind Calculator: METAR auto-fill - new ICAO input field fetches the current METAR via Aviation Weather Center API and auto-populates wind direction and speed; displays the raw METAR string as confirmation; handles calm winds, variable wind direction, and gusts
- Crosswind Calculator: wind diagram - a 250×250 SVG runway diagram appears alongside results showing the relative wind direction as a rotating arrow; arrow animates smoothly with a spring easing when the angle changes; runway number label updates dynamically
Changed
- Homepage: four-column grid - tool cards now display in a 4-column grid on large screens (
col-lg-3), up from 3 columns - Homepage: card label vertical alignment - tool card labels are now vertically centered within the card body using flexbox
- Crosswind Calculator: stacked layout - inputs moved above results; input fields are now arranged in a single horizontal row (ICAO, runway, direction, speed, buttons) that stacks on mobile
- Crosswind Calculator: METAR status placement - METAR fetch status message now appears between the inputs and results sections
- D-ATIS / WX Monitor: drag-and-drop drop target - drop target indicator is now more prominent: thicker 4px insertion line, blue outline ring around the target card, light blue background tint, and a 3px nudge toward the drop position with smooth animation
- D-ATIS: updated row highlight -
.atis-row-updatedbackground opacity increased from 6% to 14% for better visibility
[3.3.2] 2026-03-19
Added
- Time Calculator - new tool (
time/) for adding and subtracting 24-hour times in HHMM format; traditional calculator layout with digit keys, operator keys (+ / −), equals key spanning two rows, and a double-zero key; supports chaining operations, 1440-minute modulo wrapping (times wrap midnight correctly), and full keyboard input (0–9, +, −, Enter, Backspace, Escape, Delete); no-scroll layout pins the calculator to the top of the viewport
Changed
- Equipment Translator: layout redesign - removed nested container, replaced all inline styles with CSS classes; FAA suffix display is now a styled card using design tokens; reference tables use
table-smand a new.eq-codeclass for monospace code cells; Field 10a/10b sections wrapped indt-cardpanels; Field 10b icons now usetext-secondaryconsistently - WX Monitor: TAF section fill - TAF section background color now extends to the bottom of the card by making
.wx-carda flex column and giving.wx-section--tafflex: 1 - Email Subject Generator: conditional sections - Reroute, Security, and Notice of Violation form sections now show only when their corresponding type is selected from the dropdown, reducing visual clutter
- Email Subject Generator: subject output bar - output text is now rendered in a monospace font; Copy and Reset buttons added inline with the output; Copy button shows a "Copied!" confirmation state for 2 seconds
- NAS Status Dashboard: counter cards - severity counters now use colored backgrounds (red for closures/ground stops, amber for ground delays, yellow for arrival/departure delays) instead of colored left borders
- NAS Status Dashboard: airport cards - redesigned to Bootstrap 5 aesthetic with white card backgrounds and colored left-border accents per severity level; normal airports use a pill-style badge
- D-ATIS / WX Monitor: station chips -
.station-chiprestyled to Bootstrap 5 pill convention (border-radius: 50rem, updated padding and color tokens) - Airport lookup: Look Up button - removed legacy
input-group-appendwrapper for Bootstrap 5 compatibility
Fixed
- WX Monitor: JSON parse error on unreachable stations - proxy now normalizes all AWC API responses to valid JSON: 204 No Content returns
[], 4xx/5xx upstream errors return a{"error": "..."}with HTTP 502, and 200 responses with a non-JSON body (e.g. AWC HTML error pages) are caught and normalized; all four.json()calls in the client also use.catch(() => null)as a second layer of defence
Removed
- ICAO Document Library (
icao/) - tool and all associated files removed; navbar reference removed
[3.2.0] 2026-03-18
Added
- Airport Information - new lookup tool (
airport/) displays detailed airport data for any ICAO identifier: name, ICAO/IATA codes, type, city, country, elevation, coordinates, and Wikipedia link; runway grid with dimensions, surface, lighting, and closed status; full ATC frequencies table; powered by airportdb.io via a server-side PHP proxy that keeps the API token private - D-ATIS: Deep link / hash routing - navigating to
/atis/#KLAXautomatically opens the Quick Look modal for that airport;hashchangeevents are also handled so in-page hash navigation works without a reload - WX Monitor: Quick Look - new "Quick Look" button fetches the current METAR and TAF for any ICAO and displays them in a modal without adding the station to the monitor; METAR and TAF are fetched concurrently; Quick Look requests bypass the 30-second rate limiter
- WX Monitor: Deep link / hash routing - navigating to
/wx/#KLAXautomatically triggers Quick Look for that station on page load;hashchangeis handled for in-page navigation
Changed
- Bootstrap 4.5 → Bootstrap 5.3.8 - all pages migrated to Bootstrap 5 CDN; breaking changes addressed:
data-toggle/data-target→data-bs-toggle/data-bs-target,ml-*/mr-*→ms-*/me-*,dropdown-menu-right→dropdown-menu-end,.close→btn-close,badge-*→bg-*, modal JS API updated from$('#id').modal('show')tonew bootstrap.Modal(element).show() - Font Awesome local → CDN - replaced local
assets/css/fontawesome.cssandassets/webfonts/with Font Awesome 6.7.2 via CDNJS; FA 6 chosen over 7 to preserve backward-compatible FA5 icon class aliases - Typography - all font-family references updated from
Ubuntu/Ubuntu MonotoUbuntu Sans/Ubuntu Sans Monoacross all CSS files to match the current Google Fonts family names - WX Monitor: Quick Look modal styling - METAR and TAF text blocks now match the D-ATIS modal style: bordered, padded, monospace pre block with
#f8f9fabackground
Removed
assets/css/fontawesome.css- replaced by CDN linkassets/webfonts/- all 15 local Font Awesome web font files removed
[3.1.1] 2026-03-17
Added
- D-ATIS Monitor - new live dashboard (
atis/) showing active arrival and departure runways for user-selected airports sourced from the FAA SWIM Digital ATIS feed; cards display ICAO code, current ATIS information code, runway badges for arrivals and departures, and last update time; cards flash on ATIS update; airports are fully user-configurable (add/remove/reset defaults) with persistence via localStorage; auto-refreshes every 5 minutes via PHP proxy - D-ATIS: Ad-hoc airport lookup - new "Look up" button fetches ATIS for any airport and displays it in the detail modal without adding the airport to the monitor; uses a dedicated single-airport endpoint (
atis.info/api/{ICAO}) via the proxy; handles both combined and split arrival/departure ATIS; shows a clear message when no D-ATIS is available - D-ATIS: Flight category badges - each card now shows a VFR / MVFR / IFR / LIFR badge derived from the ATIS text; card left-border color updates to match the flight category
- D-ATIS: Full-text modal - clicking any card or type row opens a Bootstrap modal showing the complete ATIS broadcast text for that airport; supports viewing individual arrival or departure ATIS separately
- D-ATIS: ATIS update detection - the monitor detects when an ATIS information code advances between refreshes; updated cards animate with a flashing border and show an "UPDATED" badge until acknowledged; previously-seen codes are persisted to localStorage so updates are detected across page reloads
- Open Graph meta tags -
og:title,og:description,og:image,og:type, andog:urladded to all tool pages for improved social sharing previews; sharedog-image.jpgadded toassets/img/
Changed
- D-ATIS: Separate arrival/departure type rows - airports with split D-ATIS now show distinct ARR and DEP rows on each card instead of a single entry; airports with a single broadcast show an INFO row
- D-ATIS: Time parsing fix -
formatAtisTimenow correctly handles bareHHMM/HHMMZstrings (e.g."1200Z") without misparsing them as year 1200; ISO timestamps continue to be handled as before - D-ATIS: Auto-refresh interval reduced from 5 minutes to 3 minutes
- NAS: AFP/FCA notice wording corrected from "Flight Control Areas" to "Flow Control Areas"
- NAS: Summary counts now exclude NON-SKED entries (non-scheduled / transient GA operations) so displayed counts reflect scheduled airline traffic only
[3.0.0] 2026-03-15
Added
- NAS Status Dashboard - new live dashboard (
nas/) showing all FAA-monitored airports with active delays, ground stops, ground delay programs, and closures; color-coded by severity (closure → ground stop → ground delay → arr/dep delay); airports closed only to non-sked transient GA are greyed out and sorted to the bottom; auto-refreshes every 3 minutes; powered by the FAA SWIM API via a PHP proxy (nas/proxy.php) - Shared
includes/navbar.php- single source of truth for the navigation bar across all pages; active link state driven by a$toolvariable set per page - Shared
includes/footer.php- single source of truth for the footer and analytics injection assets/css/global.css- project-wide design system with CSS custom properties (color tokens, spacing, typography)- Weather Monitor - stale METAR time indicator - observation times older than 1 hour flash red
- Weather proxy rate limiter - server-side (PHP file lock) prevents duplicate requests within 30 seconds; client shows live countdown on rate-limit response
Changed
- NOTAM Filter complete rewrite - replaced the old Sabre-format-only tab-switching interface with a live filtering system; filters panel is always visible above tabbed input/output panes; quick filter chips (RWY CLSD, AD CLSD, LOC OTS, ILS OTS, RWY LIGHTS OTS, SERVICES, RWY FICON) toggle on/off instantly; keyword filter supports AND-match or exact match; date range filter with +6h/+8h/+16h/+24h presets; results grouped by airport with sidebar airport selectors; key terms highlighted in output; state managed in JS (no cookies); all original NOTAM parsing logic (D-NOTAM, Q-NOTAM Swift, Q-NOTAM Fusion) preserved
- Complete visual redesign - new "Midnight Aviation" theme: deep navy navbar/footer (
#0d1b2a), sky-blue primary accent (#1a9bd7), amber section labels (#d97706), light slate page background (#eef2f7) - Bootstrap primary color, button, link, and focus ring overrides applied globally via
global.css- no Bootstrap recompile needed - All 12 PHP pages (
index.php, all tools,changelog.php) rewritten to useincludefor shared navbar and footer instead of duplicated inline HTML - All pages updated to root-relative asset paths (
/assets/...) for consistency regardless of directory depth - Page layout standardized:
dt-page,dt-page-header,dt-cardutility classes replace ad-hoc inline styles - Navigation restructured: NOTAM and Equipment promoted to primary nav; Aircraft Codes, Airline Identifiers, ATC, and Zulu Time moved to "More" dropdown
- Email Subject Generator: subject display and section dividers replaced with styled CSS components (
email-subject-output,dt-section-rule) - Crosswind Calculator: section label and headwind card accent colors updated to new palette
- Weather Monitor: toolbar and card borders updated to global border token
- ATC Strip Editor: retired tool page cleaned up - dead commented-out code removed, retirement notice simplified
- Homepage tool grid updated - placeholder cards removed, WX and NOTAM cards added with beta/retired badges
Removed
notam/initialize.js- initialization logic folded intonotam.js; file deleted
[2.6.0] 2026-03-08
Added
- Headwind and tailwind component output to Crosswind Calculator
Changed
- Rewrote Crosswind Calculator with corrected math for both headwind/tailwind and crosswind components
- Crosswind Calculator results now display as labeled cards with left/right crosswind direction
- Improved input validation on Crosswind Calculator with inline error messages
- Updated README.md with full project documentation
Removed
- Beta warning from Crosswind Calculator
[2.5.1] 2025-10-19
Changed
- ATC Strip Editor
- Homepage
Removed
- NOTAM Filter
[2.5.0] 2024-07-04
Changed
- Updated security levels to align with policy
- CSS updates to Email page
- References from zulu.dispatchtools.com to zulu.is
- Updated flight plan brochure link
- Updated N-Number registration link
Removed
- "Mask" Reason from email pages
- Extra security level codes
[2.4.4] 2022-05-29
Changed
- Error Pages
[2.4.3] 2021-05-26
Changed
- JS code for Subject Generator. (silly typos)
- Updated variables for Subject Generator JS
Removed
- Extra line break for "Emergency" on Subject Generator
[2.4.2] 2021-04-20
Changed
- Notice of Violation email template
- Wording for Notice of Violation questions
- Corrected the ability to use numbers lower than 0 on the crosswind calculator
Removed
- Mask Compliance option on email template
[2.4.1] 2021-03-03
Added
- New "Notice of Violation" to subject generator
[2.4.0] 2020-12-22
Added
- New options for Email Subject Generator
Changed
- Some homepage pictures
[2.3.1] 2020-12-21
Changed
- Homepage layout
[2.3.0] 2020-12-20
Added
- Zulu Time
[2.2.0] - 2020-09-28
Fixed
- Mobile menu now functions correctly. Thanks Val.
- Changelog page now has proper menu
[2.1.1] - 2020-09-26
Fixed
- Page names
[2.1.0] - 2020-09-26
Added
- ICAO Equipment Translator
- Airline List
- Equipment List
Changed
- Menu items updated for new pages
Removed
- "active" tag for menu items
- unreleased modal from Airline List
[2.0.7] - 2020-09-12
Added
- ICAO Equipment Translator
- Font Awesome - loaded locally
- Font Awesome - Web Fonts - loaded locally
Changed
- Menu items for ICAO Equipment Translator
[2.0.6]- 2020-09-03
Added
- ICAO pages (staging)
Removed
- "Pushed" for mask compliance because they could be in the air
[2.0.5] - 2020-08-27
Changed
- Amended design on ACARS page
- CSS changes (all pages)
[2.0.4] - 2020-08-26
Changed
- Important nav links stuff
[2.0.3] - 2020-08-26
Changed
- Location of "Mask Compliance" to make it more visible
- Notice for "Crosswind Calculator"
[2.0.2] - 2020-08-22
Added
- Dynamic loading of version number on pages
- Using Ubuntu Mono for some inputs
Changed
- Includes file format for new version numbering
- Layout of email subject generator
- Wordings in the email subject generator
[2.0.1] - 2020-08-22
Changed
- Header and nav on changelog page
Removed
- Internal template file (not seen)
[2.0.0] - 2020-08-22
Added
- changelog.php - Parses the changelog into web format
- assets/lib/parse.php - Parser for changelog
- LICENSE
- README.md
- New dropdown in Email Subject Generator for "Mask Compliance"
- Beta disclaimer to NOTAM Filter
- Beta disclaimer to Crosswind Calculator
- New Logo
- New Font (Ubuntu)
- Homepage notice will be up for 30 day after update
Changed
- Migrated to Boostrap 4.5
- Updated to a clean and modern theme
- Logo in the header
- New homepage layout with quick links to services
- Offloaded javascript from in web page to a separate file for faster loading
- Updated ACARS Formatter
- Updated ATC Strip Editor
- Reformat disclaimer in ATC Strip Editor
- Updated Email Subject Generator to new format
- Migrated NOTAM filter to new layout
- Migrated Crosswind Calculator to new layout
- Email subject parsing
- ACARS Formatter parsing
- Use a CDN to load some style sheets
- Improved mobile friendliness
- Improved small display friendliness
- Modal in strip editor changed tense of action
- Modal in strip editor is larger
- Layout of Crosswind Calculator
- "Reason" in Email Subject Generator is descriptive
- "Reason" in Email Subject Genetator is limited to 50 characters
Removed
- Unused files
- Non-minified CSS/JS in release
- Old images not used
- Backup files
- style css per page
- The N/A feature for Emergency and Pushback in Email Generator
[1.1.4] - 2019-06-30
Changed
- Made links open up in a new tab to preserve data
- Fixed error with ADS-B and RNAV being inop
[1.1.3] - 2019-06-19
Changed
- Finally made the ATC strip editor play nicely with ADS-B deferrals
- Changed references to lookup and replace ADS-B hex code
- Spellcheck is my friend
[1.1.2] - 2019-06-16
Changed
- Home page background color
[1.1.1] - 2019-06-16
Changed
- Minor bug fixes
[1.1.0] - 2019-06-15
Added
- X-Wind calculator
- ADS-B options in ATC Strip Editor
Changed
- Moved around various files to cleanup directories
- Cleaned up structure
- Rearranged menu items
- Clean up from server move
Removed
- Folders and files not needed anymore
- Testing files
[1.0.5] - 2018-10-30
Removed
- Modal for ACARS
- File cleanup
[1.0.4] - 2018-10-05
Changed
- Reformatted homepage
- New image representations
- NOTAM filter changed to βeta page
[1.0.3] - 2018-09-30
Changed
- Fixed footer spacing
- Home page images
- Normalized spelling of site
- ACARS formatter checked button swap
- Font normalization for all pages
- Adjusted modal spacing on ACARS page
- Added TSA level 0 to email subject generator
[1.0.2] - 2018-09-29
Changed
- Minor update
[1.0.1] - 2018-09-29
Added
- Version numbering in header
- Moved elements to include files
Changed
- Auto hide footer
Removed
- Left over files that aren't needed
[1.0.0] - 2018-07-01
Added
- ACARS Formatter
- ATC Strip Editor
- Email Generator
- NOTAM Filter