Changelog - msupino/NavigationApp GitHub Wiki

๐Ÿ‡ฎ๐Ÿ‡ฑ ืขื‘ืจื™ืช

Changelog

2026-10-17 โ€” merged this period (auto-generated)

  • Fix Haifa CVFR chart overlay (#2678)
  • Keep search open after desktop route creation and Escape (#2680)
  • Add arrow-shaped map notes (#2683)
  • Restore Escape dismissal of search-opened inspectors (#2686)

2026-10-16 โ€” merged this period (auto-generated)

  • Phones: Saved routes and the assistant open without raising the keyboard (#2665)
  • Tour: build the route before checking it (#2666)
  • Search: "?" examples that submit; a found point opens its inspector; Enter on a coordinate goes there; the go-to dot blinks (#2669)
  • Leg inspector: โ†ป on speed; speed and altitude fields aligned and sized to five digits (#2671)
  • Airfield inspector: an Airfield layer choice with the plates that field publishes; no duplicate VORs from IFR sheets (#2673)
  • Airfield inspector: NOTAMs, charts and layers share one layout (#2675)

2026-10-15 โ€” merged this period (auto-generated)

  • Leg inspector: true track, leg length, time and fuel; one plus on a plus button (#2654)
  • Route graph: SHARO โ†” PELEG, 2000 to PELEG / 1500 back (#2657)
  • AIP drift: an unreachable index is not drift (#2659)
  • Wiki patches workflow; fix garbled Hebrew formula blocks (#2661)
  • Saved routes carry their planning form through the library and Drive (#2663)

2026-10-14 โ€” merged this period (auto-generated)

  • Tour: new and uncovered buttons join existing steps (no new steps) (#2648)
  • Perf: map turn stops repainting every renderer per frame (JS 4.3 s โ†’ 1.5 s on a phone budget) (#2650)
  • Filing: the flight plan's departure is the one filed; ask when it has passed, with an override (#2652)

2026-10-13 โ€” merged this period (auto-generated)

  • Alerts on a paired watch: Flight alerts channel, NavAid icon, one group, longer life (#2619)
  • Charts: never dimmed; every chart says when it has no data where the map is (#2620)
  • Review of today's main: no-data probes, nearest field on a field, Direct to keeps names, focus, Hebrew (#2623)
  • Magnifier: imagery under the points after a pan (map-pane offset); centred on the cursor (#2625)
  • Map zooms to z18 (64ร—) on every chart, one shared limit (#2626)
  • Right-click quick actions on the map (desktop) (#2629)
  • App update: the automatic Wi-Fi download shows its progress, and Download joins it (#2631)
  • Every way of adding a point builds the same route (frequency changes, snap, guards) (#2632)
  • Print: optimized for a black-and-white printer (#2634)
  • Tests: createImageBitmap stub takes its parameter (CodeQL on devโ†’main) (#2636)
  • Print/PNG: Image-quality slider, progress panel, every page sharp (A3 197 โ†’ 394 dpi at High) (#2637)
  • Print: only the print dialog (hidden frame); printing in the Android app (APK 1.26); B&W memory; comm-failure fit (#2639)
  • Route templates: From and To in separate lists (Via where a pair has two) (#2640)
  • Flight plan: ETD, ETAs, last light + airfield hours; in-flight alerts; prints without a tab (#667) (#2643)
  • Map: Fit button under Clear map; Location takes the A3/A4 frame off (#2646)
  • Inspector UI/UX pass: same actions on every point to fly to; note title; 24px targets; contrast (#2645)

2026-10-12 โ€” merged this period (auto-generated)

  • Edit column: Route check at the top, tick icon, dimmed without a route (#2588)
  • Settings: aircraft gal/h and taxi/takeoff gal, shared with the flight plan (#2590)
  • Tour: the Edit step lights the edit buttons, not Route check (#2593)
  • Tests: stub OpenFlightMaps tiles (why every PR's e2e has been failing) (#2592)
  • Route templates: frequency changes from the chart; NMASD by direction - DONT MERGE (#2589)
  • Revert #2589 (was titled DONT MERGE; merged by auto-merge) (#2597)
  • Tests never load third parties: stub Esri imagery and live data feeds, with a guard (#2594)
  • Analytics: production host only, never an automated browser (#2600)
  • Tour: comm-fail step says 'a squawk reminder', not 'with squawk 7600' (#2595)
  • Auto-merge respects a DONT MERGE title (#2599)
  • Comm change: AFULA towards ZMGID/EITAN stays on Pluto East; Pluto West at ZMGID, not Megiddo (#2601)
  • Reverse route re-derives frequency changes (ZMGID Pluto East on LLHZโ†’LLIB) (#2602)
  • Waypoint panel toggles: same place, same shape, one pressed look (UI/UX pass) (#2604)
  • Remove a scratch script committed by accident (zz-t.js) (#2609)
  • Route templates: frequency changes from the chart; NMASD by direction; ZASHD not a change point (#2598)
  • Inspector: chart point shows mandatory / on-request reporting (#2613)
  • Hebrew numbers read in order; nearest field on known points; terrain row after language switch (#2615)
  • Inspector: every kind of point reads alike (place rows, Direct to, VOR rows, 3-across actions on a phone) (#2617)

2026-10-11 โ€” merged this period (auto-generated)

  • CI: notify the owner when the CAA updates the AIP (#2584)
  • Airfield panel: published operating hours, within / outside now (#2583)
  • What-is-here sheet: 'Start route here' on an empty map, 'Add to route' after (#2586)

2026-10-08 โ€” merged this period (auto-generated)

  • GPS details: in the app, say why there is no satellite data (#2569)
  • CI: Review runs from push and dispatch stop cancelling each other (#2571)
  • Default base map: OpenFlightMaps (#2573)
  • OpenFlightMaps base map sits on top of OpenStreetMap (#2575)
  • Updates: Wi-Fi joined soon after start now triggers the download (#2577)
  • SIGMET counts agree; Charts menu in Extra layers order; route direction 'Not relevant' (#2579)
  • Wind field anywhere: the grid follows the map (#2581)

2026-10-07 โ€” merged this period (auto-generated)

  • Measure label, measurement kept on reload, quiet reconnect, phone touch targets (#2548)
  • Measure: only from the aircraft, exclusive with Add/Note, cleared by Clear map (#2553)
  • Dimmed means not usable: ruler, hazard rows, every unusable button (#2555)
  • GPS status line + device extras: barometer, keep-awake, haptics, brightness (+ battery, full screen, GDL90, Bluetooth GPS, off) (#2556)
  • Settings: pressure unit + altitude from; security: Capacitor 8.4.3, APK 1.25 (#2559)
  • Dev dependency: smol-toml 1.9.0 (Dependabot #16) (#2562)
  • Panels stay below the strip; in-flight alerts also show as a bubble (#2564)
  • App updates say what they are waiting for; look again when Wi-Fi returns (#2565)
  • GPS details fit a phone: related numbers share a row (#2567)

2026-10-06 โ€” merged this period (auto-generated)

  • VOR readout: the current VOR, stacked clear of the coordinates on a phone (#2534)
  • Dial: true north on tap; refresh when the connection comes back (#2538)
  • Map tour: first-launch walk round the controls (#2537)
  • Measure label stays readable zoomed out (#2542)
  • Map buttons no longer drop a measure point (#2541)
  • New-user route intro off by default in code (as in the gist) (#2535)
  • CodeQL #173: declare sigmetMeta beside its loader (#2546)

2026-10-05 โ€” merged this period (auto-generated)

  • Edit column everywhere, no mode chip, loop tap without the panel, hazard controls dim on an empty 24 h (#2520)
  • APK: ask to restart onto an update; offer a newer APK (#2522)
  • Five review cycles over 1.22 โ†’ 1.23: grip frame, NOTAM list on All, desktop edit column placement (#2524)
  • Edit buttons work in Hebrew; dimmed buttons say why; strip keeps the speed; exit question; GPS glide (#2526)
  • World map: shaded relief background (Natural Earth, offline) (#2528)
  • Measure tool: distance, bearing and time to a point; zoom readout on two lines (#2530)
  • Dial tap in flight steps magnetic 0/90/180/270; world relief full to zoom 8 (#2531)

2026-10-04 โ€” merged this period (auto-generated)

  • Aerodrome charts: fit to the airport symbol on the VFR chart (#2513)
  • APK 1.22 (versionCode 22) (#2515)
  • NOTAM, SIGMET and AIRMET lists move by their title (#2517)
  • One shared corner-grip resize; SIGMET/AIRMET lists resizable (#2519)

2026-10-03 โ€” merged this period (auto-generated)

  • Menu and bottom bar: tall rows, one icon set, five tabs with Comm fail apart (#2492)
  • Phone strip in flight: language switch steps aside, readout fits its line (#2494)
  • Settings rows: one line, controls aligned, at any text size (#2496)
  • Chart symbols by zoom: shrink when zoomed out, per-layer hide below zoom (#2499)
  • LSA chart legend: frequency points, route types, field types, activity sites (#2501)
  • Inspector size per kind; NOTAMs in bubble/leg panels; SIGMET/AIRMET decoder and map focus (#2504)
  • Freq table and Alt pairs to Settings; NOTAM-closed bubble says so; 44px card buttons (#2506)
  • AIRMET/SIGMET lists as the NOTAM list, map taps and SIGMET layer; planning form needs a route (#2508)
  • Aerodrome chart (ืชืจืฉื™ื ืฉื“ื”) as a map overlay (#2510)

2026-10-01 โ€” merged this period (auto-generated)

  • Public share review: size cap, key cache, Public toggle mid-share, own old ids; New link in-app (#2473)
  • VOR/DME and DME stations drawn with the chart symbols (#2476)
  • Public pilots: own public ids cached, not parsed per packet (review round, 0 open) (#2475)
  • Map buttons: round dark-glass style, one icon set (#2480)
  • CVFR-legend airfield and reporting-point symbols; new own-aircraft icon (#2478)
  • Heading line: G1000-style trend vector in a turn (#2483)
  • .ai docs: embedded APK, gist layers, public share, chart symbols, map buttons, trend vector (#2485)
  • Ask in the app, never with alert/confirm/prompt (silent in the APK) (#2487)
  • Dialogs: correct the "silent in the APK" claim (#2488)
  • Phone: edit column at the top left (Add waypoint, Add note, Undo, Clear map) (#2490)
  • Centred questions; toasts stacked at the bottom (#2489)

2026-09-30 โ€” merged this period (auto-generated)

  • Clear offline CVFR keeps the APK's built-in chart (zooms 7โ€“12) (#2465)
  • APK 1.21: put back built-in CVFR tiles a clear removed (#2467)
  • Public share: see and be seen by every NavAid pilot (private link unchanged) (#2469)
  • Public pilots review: secret out of the address, bounded keys, readable dark label (#2471)

2026-09-29 โ€” merged this period (auto-generated)

  • Heading line: turn predicted for at most 30 s and 60ยฐ (#2433)
  • APK starts offline: embedded app, CVFR z7-z12 inside, updates on next launch (#2435)
  • APK keeps the saved data (served at navaid.supino.org), review fixes, APK 1.10 (#2437)
  • Save / My routes: labeled buttons with state (menu, Plan tab, menubar) (#2439)
  • App version row: see the build, take an update now (mobile data too) (#2441)
  • README: install the Android app (direct or Obtainium) (#2443)
  • Built-in defaults match the live gist (offline first launch looks the same) (#2445)
  • Bundle the live gist as a snapshot (reverts #2445's default changes) (#2447)
  • CodeQL #161, #167: superfluous argument; gist snapshot writes plain settings only (#2448)
  • App version row: download progress (#2450)
  • Phone font size scales all text evenly (APK textZoom), buttons wrap (#2451)
  • APK 1.20 (versionCode 11) (#2454)
  • World map: major cities (capitals + 1M+), English and Hebrew (#2455)
  • Review fixes: failed chart copy never blocks updates, no double download, lighter Save row (#2458)
  • Text never clipped at a larger phone font (audited to 200%) (#2461)
  • Flight plan on a phone: legs always reachable, summary line readable (#2463)

2026-09-28 โ€” merged this period (auto-generated)

  • Review of main (5 passes): comm-failure fix wait, one store listing, level country names (#2426)
  • SIGWX legend: one square, turned in quarter steps; zoomable viewer (#2425)
  • Curve the heading predictor in gentle turns (#2429)
  • Heading predictor: the phone's gyro gives the turn a head start (#2431)

2026-09-27 โ€” merged this period (auto-generated)

  • Dial number: true north while planning, magnetic heading in flight (#2419)
  • Zoom out to a continent on every chart (#2421)
  • Keep vector layers on their coordinates when zoomed out to a continent (#2423)

2026-09-26 โ€” merged this period (auto-generated)

  • open flightmaps layer, offline maps for any chart, and an always-offline world map (#2409)
  • Magnetic variation: automatic (WMM) or manual; the dial number reads magnetic (#2414)
  • Review fixes: export lists only drawable charts; variation row follows the gist (#2416)
  • Default speed โ†ป; variation row one line; disclaimer button Accept / ืžืกื›ื™ื (#2418)

2026-09-25 โ€” merged this period (auto-generated)

  • Heading-up button reads magnetic; bearing dial needle points at north (#2410)

2026-09-24 โ€” merged this period (auto-generated)

  • Count the mail hand-offs, anonymously (#2399)
  • Comm failure button: route to the nearest published comm-failure procedure (#2402)
  • Hebrew: comm failure is ืชืงืœืช ืงืฉืจ (#2404)
  • Comm failure survives a language switch; clearer 'fly the chart' line (#2406)
  • Hide "Show plates for" while airfield charts are off (#2401)

2026-09-23 โ€” merged this period (auto-generated)

  • Keep the legend off the map clock's controls (#2374)
  • Merge main into dev after a squashed promotion (#2376)
  • Register the route-check feature flag, and let it reach the button (#2379)
  • Dispatch on a missing required context, not just a missing run (#2378)
  • Keep the clock and the search panel off the printed chart (#2382)
  • Let the planning form and the route check close what is already open (#2384)
  • Put three toolbar labels back into sentence case (#2386)
  • Let the offline-maps window open a second time (#2387)
  • Say what a chart window is, and what it is called (#2388)
  • Refuse a coordinate that is not a position (#2389)
  • Publish the commit the deploy run is actually for (#2391)
  • Stop an orphaned offline-maps listener eating every Escape (#2393)
  • Offer the tower's phone as a link that dials it (#2395)
  • Make the parking phone dial, and stop calling it a tower phone (#2397)

2026-09-22 โ€” merged this period (auto-generated)

  • Now: reset every clock face, and be available whenever one is off live (#2364)
  • Move the bottom-edge popups clear of the phone deck (#2366)
  • Print SIGWX beside the chart it names, in both languages (#2367)
  • Let SIGWX claim a valid time it can actually draw (#2369)
  • Seed the shared valid time to an hour the enabled layers can draw (#2370)
  • Name the chart, the hour, and one rule for the clock (#2372)

2026-09-21 โ€” merged this period (auto-generated)

  • Three from the review: an unreadable forecast, a leg with no altitude, and why the margin is asymmetric (#2356)
  • Adding to the route leaves the map, not another panel (#2358)
  • Keep the chart viewers' valid-time dropdowns current (#2360)
  • Propose an EOBT on the quarter hour, an hour out (#2362)

2026-09-20 โ€” merged this period (auto-generated)

  • Read the TAF, and stop pretending scattered cloud is not in the way (#2354)

2026-09-17 โ€” merged this period (auto-generated)

  • A pass over the planning form: what it is, and in what order it is read (#2335)
  • Keep the compass card on the circle, and give it a way back (#2333)
  • Add the level the flight is missing, not the next rung of a ladder (#2336)
  • Name the button for the action, not for the exam (#2337)
  • Keep the planning form's header while the sheet scrolls (#2338)
  • Start the cumulative clock at a waypoint, not only at the departure field (#2340)
  • Restore Google Analytics, disclose it, and make its removal fail the build (#2342)
  • Four things the review found, three of them mine from today (#2344)
  • Three more from a review of the review fixes (#2346)
  • The disclaimer's links are the app's blue, not the browser's (#2350)
  • Route check: the four things that can say "not this plan, not at this time" (#2348)
  • dev is red: SIGMET/AIRMET is not a Hebrew translation gap (#2352)

2026-09-16 โ€” merged this period (auto-generated)

  • An X on the follower's banner, and three questions asked in the app (#2313)
  • Share the altitude the pilot is reading, and keep sharing while recording (#2315)
  • Say "still here" when there is no new position to send (#2317)
  • The wire carries the cockpit's numbers, and the follower prints them (#2319)
  • A nav table: the wind-triangle sheet the flight plan deliberately is not (#2321)
  • One TOC, a window that moves and resizes, and a clock you can find (#2323)
  • Review: three ways the planning sheet came up short and said nothing (#2324)
  • ISA at two degrees, and the search at the top of the phone menu (#2325)
  • A searched airfield opens its panel (#2326)
  • The reference sheet's last row is wrong, and the fixture now says so (#2328)
  • Five exercises as fixtures, and a spec that works all of them (#2330)
  • Ask before an exercise replaces the route on the map (#2331)

2026-09-15 โ€” merged this period (auto-generated)

  • App Store: a safety notice, an embedded build, and the paperwork (#2286)
  • Take the map clock off a phone when nothing answers to it (#2295)
  • The safety notice: after the boot screen, and once per language (#2297)
  • refresh plate designations from the CAA index (#2299)
  • Open the safety notice on every launch (#2301)
  • Legal pages stop choosing the planner's language, and stop overclaiming offline (#2303)
  • A HE / EN switch on the safety notice (#2306)
  • Make the notice's language control a dropdown (#2308)
  • Do not name, or read from, that flight-plan service (#2310)
  • Sign every Follow me packet, so a follower can read but not publish (#2305)

2026-09-14 โ€” merged this period (auto-generated)

  • Only announce a new build when the build actually changed (#2274)
  • Chart markers open on release on touch, as they already do with a mouse (#2276)
  • Fit the flight plan's action row on one line (#2278)
  • A refusal you can see, and a sheet that stays where it was put (#2280)
  • Keep the flight plan inside the space the deck leaves it (#2282)
  • Two fixes for the follower's side of Follow me (#2284)
  • The Satellite heading is the same chip as every other one (#2287)
  • Refresh the eight LLBG approach plates the CAA has amended (#2290)
  • Take the published SID sheets, and re-fit what was fitted to the old images (#2292)

2026-09-13 โ€” merged this period (auto-generated)

  • Put the map clock away while a position is live (#2252)
  • Put the follow-me icon with the in-flight group, not under the dial (#2256)
  • Option B: the phone gets a strip, a deck, a sheet and a chart that answers (#2255)
  • Deck: a running button lights its whole cell, and Follow me asks in the app (#2259)
  • Stop sharing that cannot get stuck, a deck that toggles, and a strip that fits (#2262)
  • One aeroplane per page: a viewer does not share, and the banner clears the strip (#2264)
  • A gist switch for sharing while watching, off by default (#2266)
  • Safe-area edges on iPad, and the inspector switch that had no control (#2268)
  • The point chooser obeys the rule the panel obeys (#2270)
  • Share the plan beside the position, and offer it to the viewer (#2272)

2026-09-12 โ€” merged this period (auto-generated)

  • Paint the two dropdowns that were still the browser's (#2226)
  • No clock on a panel with nothing timed in it (#2227)
  • Paint the frequency table's aerodrome filter too (#2229)
  • Run the suite the change can actually break (#2230)
  • Keep the live readout on one line (#2233)
  • Drop the voice-alerts spec and plan: it shipped (#2236)
  • Flown against planned, an expanded profile, and a readout that fits (#2240)
  • Say which NOTAMs are new since you last looked (#2241)
  • Delete the specs and plans whose features have shipped (#2243)
  • Stop the live readout from swapping its fields every second (#2245)
  • Keep the speed's place on the readout before the first one arrives (#2247)
  • Clear map takes the shown recorded track with it (#2249)
  • One chrome language on the phone, and one panel at a time (#2251)

2026-09-11 โ€” merged this period (auto-generated)

  • Keep a drawn route on the chart it was planned on (#2215)
  • Profile a saved route without loading it (#2217)
  • Save the profile as a picture (#2219)
  • One follow-me link per device, whatever it is called (#2221)
  • Show the altimeter's altitude on a recorded profile (#2223)
  • Two frames in the saved-route library, and a filter to pick one (#2224)

2026-09-11 โ€” merged this period (auto-generated)

  • Let the look-ahead clock keep up with the clock (#2203)
  • Bump smol-toml past the malformed-document DoS (#2204)
  • Put density altitude on the same clock as everything else (#2206)
  • Take the density-altitude slider off the panel (#2208)
  • Read the runways next to the density altitude (#2210)
  • Inspector: one badge per section, a clock on the panel, a position on one line (#2211)
  • Say what the Share button shares (#2213)

2026-09-10 โ€” merged this period (auto-generated)

  • One clock, on the map (#2195)
  • Give a note its own angle (#2198)
  • refresh plate designations from the CAA index (#2197)
  • Let the Android app actually save a file (#2201)

2026-09-09 โ€” merged this period (auto-generated)

  • Refresh the AIP plates the CAA amended (13 files, 4 aerodromes + 4 strips) (#2183)
  • Record what a reworked plate was derived from, so drift can tell why it differs (#2186)
  • Ship each Eilat chart once, and take the designations that exposed the duplicates (#2188)
  • Refresh the fifteen Ben Gurion charts that back no overlay (#2190)
  • Clear map takes the extra layers with it (#2193)
  • Write down what each plate IS, in the CAA's own words (#2192)

2026-09-08 โ€” merged this period (auto-generated)

  • The AIP drift job never saw the drift: tee ate the exit code (#2178)

2026-09-07 โ€” merged this period (auto-generated)

  • Hebrew: knots in Hebrew, and a runway id that keeps its colon (#2170)
  • Keep inspector content and resize controls within the screen (#2173)
  • Keep the runway-wind time on the label line (#2175)

2026-09-06 โ€” merged this period (auto-generated)

  • Move the follow-me cryptography pin past GHSA-jwv3-5hgf-82ww (#2150)
  • Fix four findings from the origin/main review (#2152)
  • Freq table comm labels, and no "undefined" in a sent email (#2154)
  • Two defects I introduced with the review fixes (#2156)
  • Stop the frequency table stacking a resize listener per re-render (#2158)
  • A NIL report is a station saying it has nothing (#2160)
  • Assert the iOS app-bound domain, and make the offline shell bilingual (#2162)
  • NIL is a report body, not a word anywhere in the text (#2164)
  • Airfield surface wind: a barb at every field, on the shared look-ahead (#2166)
  • Anchor the airfield-wind barb on its airfield, and halo it (#2168)

2026-09-05 โ€” merged this period (auto-generated)

  • Review findings: inspector reachability, NOTAM docs, i18n scan coverage (#2144)
  • Lift three pure helpers out of showFlightPlan() (#2147)
  • Dispatch the promotion checks that are missing, not the ones we guessed (#2148)

2026-09-04 โ€” merged this period (auto-generated)

  • Report issue times in the weather box, and inspector text zoom (#2135)
  • refresh plate designations from the CAA index (#2138)
  • Inspector: stop the read on close, and gist-gate the satellite zoom buttons (#2139)
  • Let the inspector be resized, and remember the size (#2142)

2026-09-03 โ€” merged this period (auto-generated)

  • wx box: match the no-report state to AD/WS, and say 'No information' (#2108)
  • wx box: separate METAR / TAF / AD-WS blocks, each stating presence or absence (#2111)
  • Inspector: a header tap no longer collapses the phone bottom sheet (#2113)
  • Runways: drop LLIB 05/23, correct LLES to 10/28 (AIP audit) (#2115)
  • Flight plan: 'Request parking' button for destinations that require it (#2117)
  • aip-plate-titles: retry the CAA index instead of failing on a cold start (#2119)
  • LLHZ parking: use the coordination address the current AIP publishes (#2121)
  • Route templates: Herzliya โ†” Megiddo via Eiron (#2124)
  • Parking request: say when the AIP publishes no address (#2123)
  • Name the personal data the Drive settings sync uploads (#2126)
  • Show the Drive sync disclosure only while the opt-in is ticked (#2129)
  • Name email in the sync disclosure โ€” replyTo is on the allowlist (#2131)
  • Stack chart modals above the inspector that opens them (#2132)
  • Zoom in the plate viewer and the satellite thumbnail (#2133)

2026-09-02 โ€” merged this period (auto-generated)

  • Weather overlays: loading banner for wind/temp + SIGWX charts (#2104)
  • Fix all ten findings from the origin/main review (#2106)

2026-09-02 โ€” merged this period (auto-generated)

  • Read the airfield METAR/TAF aloud from the inspector (#2083)
  • TAF decode: expand BECMG/TEMPO, drop empty visibility (#2085)
  • AD/WS weather label: RTL in Hebrew (stop forcing LTR) (#2087)
  • METAR readability: 'Temperature', speak QNH as digits (#2089)
  • wx decode: spell out truncated words + expand units for speech (#2091)
  • wx decode: label the cloud segment 'Clouds' (#2093)
  • wx decode: show SM unit on a '6+' visibility (#2095)
  • Weather source: IAA MobileAeroinfo primary (native metric), AWC fallback (#2097)
  • iaa weather: decode ' so row ids match (use IAA, not AWC fallback) (#2098)
  • log IAA weather detail pages (temporary) (#2100)
  • iaa weather: add &mode=weather to detail URL (unblock Imperva) (#2102)

2026-09-01 โ€” merged this period (auto-generated)

  • Ask to reload once per build, not once per controllerchange (#2067)
  • Draw an AIRMET only while it is in force (#2069)
  • Hazard controls never disappear; AD/WS in the airfield weather box (#2073)
  • Toolbar: Export/Import after Extra layers, before Print (#2076)
  • AIRMET rides the shared look-ahead slider (#2078)
  • wiki-screenshots: skip boot splash, stop clipping the plan modal (#2079)
  • Review follow-ups: dedupe look-ahead time helper, deterministic og-preview tile-wait (#2081)

2026-08-31 โ€” merged this period (auto-generated)

Docs

  • correct the NOTAM feed source (IAA Mobile AeroInfo) (#2054)

Other

  • Add attribution to filed flight plans (#2044)
  • Keep fresh inspector clear of map controls (#2047)
  • Keep the wind field from blanking map tiles (#2050)
  • Fix pale bands from missing CVFR tiles (#2052)
  • Curve the turn predictor from a windowed slope, not the last two fixes (#2056)
  • Follow me: let the link be copied before a position is flowing (#2058)
  • Mobile: a tap on the map closes an open toolbar menu (#2060)
  • Add an AIRMET layer from the IMS Tel Aviv FIR feed (#2062)
  • Read an AIRMET's text: decoded modal from a button and a tap (#2064)
  • Repair a self-crossing AIRMET polygon from the IMS vertex order (#2066)

2026-08-30 โ€” merged this period (auto-generated)

  • Keep CVFR automatically available offline (#2034)
  • Sort NOTAMs by flight relevance (#2037)
  • Show airfield names in NOTAM sheets (#2040)

2026-08-29 โ€” merged this period (auto-generated)

  • Fix follower link startup and aircraft tracking (#2003)
  • Add Python Follow Me route simulator (#2007)
  • Self-heal stale chart feeds before alerting (#2012)
  • Curve the live aircraft predictor during turns (#2015)
  • Keep Follow Me status below the toolbar (#2010)
  • Show one reload prompt per app update (#2019)
  • Fix Follow Me startup resume (#2022)
  • Fix MQTT feeder exception handling (#2025)
  • Add future NOTAMs to airfield NOTAM list (#2028)
  • Reuse the filtered NOTAM sheet for airfields (#2030)

2026-08-28 โ€” merged this period (auto-generated)

  • Follow me: a live position link, with no server of ours (#1974)
  • An offline map floor, fetched on load rather than remembered (#1977)
  • Retire the flight plan's Return route picker, behind a flag (#1973)
  • Follow me: viewer boots without the gist, feed survives a dropped socket (#1980)
  • Follow me: a share that survives the app restarting (#1983)
  • Fix Follow me freshness and delivery state (#1986)
  • Fix Hebrew mobile toolbar expansion jump (#1989)
  • Fix responsive toolbar and inspector state transitions (#1993)
  • Unify compact airfield and instrument chart controls (#2000)

2026-08-27 โ€” merged this period (auto-generated)

  • Bump the hotspot key so the reset reaches everyone (#1919)
  • Haifa's clearance frequency, and no rows for services a field lacks (#1921)
  • Make a marked hotspot look marked (#1923)
  • The waypoint action row: order, and one meaning for the red circle (#1926)
  • One pressed style, and it is red (#1928)
  • Review: airspace retry, traffic race, a settable endpoint, and honest DA sources (#1929)
  • LLHA clearance is 127.80: the NOTAM that installed it was replaced (#1931)
  • Read the frequency a NOTAM states, and show it as its own dated row (#1934)
  • Follow the NOTAM frequency wherever the call sign is used (#1935)
  • A locked map still pans from on top of the route (#1937)
  • The outstanding punch list: pinch teleport, silent airspace failure, doc drift, four minors (#1939)
  • Review fixes: the leg-press pan fix never reached touch, and the pinch guard was backwards (#1941)
  • Re-engaging follow restores a zoom you can fly at (#1942)
  • The Freq table follows the NOTAM too (#1944)
  • A NOTAM is the value in force, not a new default (#1946)
  • One reset rule for the Freq table, and order it by ICAO (#1947)
  • A Source column on every frequency row: AIP or NOTAM (#1949)
  • The NOTAM source opens its NOTAM, and Hebrew calls the AIP ืคืžืดืช (#1950)
  • Opening a NOTAM from the Freq table leaves the table open, and the table says when it scrolls (#1952)
  • Name each Freq table row for its field and its service (#1953)
  • Follow zoom knows whether you are in a CTR (#1955)
  • Frame the aeroplane on the first fix, not only when the switch is tapped (#1957)
  • Sync production merge history into dev (#1960)
  • Preserve production merge ancestry in dev (#1962)
  • An iPad is not a desktop: ask the pointer, not the width (#1966)
  • ios-location-permission: iOS app does not request location permission (#1964)
  • keep screen awake while NavAid is active (#1970)

2026-08-26 โ€” merged this period (auto-generated)

  • refresh plate designations from the CAA index (#1886)
  • Read the coordinate spellings the field plates actually use (#1888)
  • Draw the traffic around you on the moving map (#1890)
  • Put live traffic behind a gist switch (#1892)
  • Live traffic: no fix needed, read through the APK (#1895)
  • Stop crying outage over one dropped request (#1897)
  • Draw the traffic as aeroplanes, the way a traffic display does (#1899)
  • Dim the traffic switch in a browser, do not take it away (#1901)
  • Pin the menu button on a phone; scroll only the menus (#1903)
  • Review fixes: the lock the split ignored, repaints per pointer event, speech that would not stop (#1906)
  • Density altitude in the airfield panel, an hourly day ahead (#157) (#1904)
  • Airspace on the map, read from the AIP (#669) (#1909)
  • AIP drift check, and the control zones from AD 2.17 (#1911)
  • Say what the density-altitude slider moves (#1912)
  • Give a slider its own line on a phone (#1914)
  • Stop cutting the density-altitude clock in half (#1915)
  • Put the hotspot switch with the other safety switches (#1916)
  • Every airfield gets a density altitude, not just the coded ones (#1918)

2026-08-25 โ€” merged this period (auto-generated)

  • Hold a route to one return per track (#1859)
  • Pin a real sortie that retraces three legs on one turn (#1862)
  • Say in the inspector that a point IS the turning point (#1868)
  • A turn the route proves is not the pilot's to unset (and Hebrew in the panel's register) (#1870)
  • Keep the turning-point controls still: line under the button, Add-frequency dimmed not removed (#1874)
  • Add the ATS routes chart (ENR 6.1) to Extra layers (#1876)
  • Offer the ATS sheet's reporting points as a waypoint source (#1878)
  • Let any chart be the map under the chart (#1880)
  • Put the legend back where it was after expanding it (#1883)
  • Add the IFR charts as a layer, for the fields that publish one (#1882)

2026-08-24 โ€” merged this period (auto-generated)

  • explicit-hotspots-visible: preserve waypoint hotspot overrides (#1820)
  • Add X-Plane FMS export and fix FDR return turns (#1824)
  • Offer the turning point only where it means something, and let Fit choose the page (#1826)
  • Say why Fit page to route is unavailable (#1828)
  • Make every tuning label say what it changes (#1830)
  • Fix what the review of the last four changes turned up (#1832)
  • Wrap the compass angles, and drop the georeferencer's dead parameters (#1834)
  • Fix the georeferencer's rotated plates and refuse fits it cannot place (#1837)
  • Stop the georeferencer's own notes arguing with the map (#1839)
  • Keep withdrawn charts out of the waypoint-source list (#1841)
  • Keep the legend where it was put, and start it collapsed on a phone (#1843)
  • Check the route library has not changed before overwriting it (#1845)
  • One escaper for every file NavAid writes (#1848)
  • Review follow-ups: validate imported tracks, one escaper (#1850)
  • Draw an out-and-back leg as two lines, not one (#1852)
  • Review-loop hardening: CI shell-injection surface, rotate-dial a11y, stale lint directive (#1854)
  • Spread the cumulative-time kites over a repeated track too (#1857)

2026-08-23 โ€” merged this period (auto-generated)

  • Show a localized message on the boot screen (#1791)
  • Fix non-preview main review findings (#1794)
  • return-route-turning-point: Fix return-route hotspot and inspector state (#1797)
  • turn-freq-change: Remove frequency changes at turning points (#1800)
  • turn-freq-change: Reconcile restored route callouts (#1804)
  • mobile-legend: Keep the legend fully visible on phones (#1802)
  • Hide references from the unselected direction (#1807)
  • Delete merged topic branches (#1810)
  • Add global visibility toggle (#1814)
  • heli-nav-source: Make helicopter waypoints follow the helicopter layer (#1817)

2026-08-22 โ€” merged this period (auto-generated)

Features

  • say when an Extra-layers chart is still loading (#1764)
  • the first load says it is loading (#1766)
  • Back closes what is open, and asks before it closes the app (#1768)

Fixes

  • pinching over a waypoint no longer opens its inspector (#1761)
  • the written pages are named, not shown as "airport Chart" (#1762)
  • the daily refresh cannot take a designation away (#1769)

Other

  • Fly an aircraft round the NavAid mark on the loading screen (#1771)
  • Say 'not following', not 'map stays put' (#1773)
  • Fly the loading-screen circuit in three dimensions (#1774)
  • Give the in-flight controls marks a pilot recognises (#1778)
  • Draw NavAid's mark as a leg flown, not a plane alone (#1776)
  • Draw Beer Sheva's CVFR routes on the map (#1781)
  • Keep the charts window's head still, and its width fixed (#1780)
  • Let the promotion workflow update the branch it promotes (#1783)
  • Draw the last three fields' CVFR routes (#1784)
  • Fix LLRS CVFR overlay georeference (#1787)

2026-08-21 โ€” merged this period (auto-generated)

Features

  • the screen stays awake for Location, not only for a recording (#1740)
  • one gist-set default behind the overlay opacity slider (#1743)
  • the charts menu shows each plate's own designation, refreshed daily (#1745)
  • a time-frame toggle, so a NOTAM that starts soon is readable (#1756)

Fixes

  • Rosh Pina's plates are laid down turned, not square (#1747)
  • the cumulative-time kite is painted above the frequency callout (#1748)
  • ten more plates laid down the way they were drawn (#1752)
  • the primed map admits it is a mode, and Escape leaves it (#1754)
  • two menu rows were painting past their own edges (#1758)

Other

  • Rosh Pina plates refreshed to the 1/26 AIP amendment (#1742)
  • refresh plate designations from the CAA index (#1750)

2026-08-20 โ€” merged this period (auto-generated)

Features

  • reverse turns the chart 180ยฐ; fix a freq callout left behind by its waypoint (#1728)
  • shade ground that threatens the planned altitude, mark below-MSA legs (#1730)
  • ATIS reminder + marker, voice-alerts map button, QNH cadence tunable (#1731)

Fixes

  • LTR labels in Hebrew, two-colour heading marks, sim panel stops duplicating map controls (#1734)
  • the chart code stays before the name on a Hebrew map (#1736)
  • the follow lock is always on the map (#1738)

2026-08-19 โ€” merged this period (auto-generated)

Features

  • north up / heading up, a button above the follow lock (#1703)
  • featureAssistant hides the assistant button and panel (#1705)
  • in-flight notifications withdraw themselves after 15 seconds (#1706)
  • tunable kite/callout placement, 11 in-flight knobs, freq-callout drag fix (#1708)
  • ?hotspots=1 โ€” ring every junction waypoint on the chart (#1723)

Fixes

  • at most two altitude calls per leg (#1702)
  • the cumulative kite's hit box follows its tuned angle (#1710)
  • kite presses open the leg panel on release, drags never open it (#1712)
  • CSV formula injection, invented stationary course, dropped parked fixes, touch panel parity (#1714)
  • closed card keeps its controls on one row and its labels whole (#1716)
  • shorter GPS labels so the closed row survives a large system font (#1718)
  • live-site-only chart tiles, and a warm-started gist (no first-paint jump) (#1720)
  • licence field takes digits; ship the deployed config as the defaults (#1726)

2026-08-18 โ€” merged this period (auto-generated)

Features

  • the phone compass supplies the heading when the GPS has no course (#1682)
  • the footer plane icon shows the simulator is connected (#1686)
  • the inspector steps out of the way while a finger drags on the map (#1694)
  • the frequency arrow gets out of the way while its end is dragged (#1696)

Fixes

  • tapping a map control suspended following; a gyro-only orientation read as a compass (#1684)
  • Clear map dims the Route direction picker and resets it (#1697)
  • every draggable piece of the route is locked while tracking (#1698)
  • a dragged cumulative kite stops at the waypoint's edge (#1700)

Tests

  • a tablet gets the crosshair through the pointer clause, not the width one (#1692)

CI

  • the promotion PR no longer starts a duplicate suite it cannot approve (#1688)

Other

  • no 'load a route' nudge; phone compass when the GPS has no course; test hygiene (#1680)

2026-08-17 โ€” merged this period (auto-generated)

Features

  • the live speed/altitude/heading line is bigger, and tunable (#1676)

Fixes

  • three defects found in a full review of main (#1669)

Tests

  • stop the suite fetching live map tiles (#1668) (#1670)

Other

  • Merge named route point chooser entries (#1646)
  • Sync main into dev (5c1612a) (#1647)
  • Automate direct dev promotion (#1650)
  • Keep Print dialog labels stable on repeated activation (#1653)
  • Align dev automatically during production promotion (#1654)
  • Avoid duplicate production promotion checks (#1656)
  • Add route waypoint hotspot toggle (#1658)
  • Derive waypoint hotspots from CVFR graph (#1662)
  • Exclude one-way legs from waypoint hotspots (#1664)
  • Always print selected VOR frequency (#1666)
  • in-flight map behaviour: inspector stays shut, a gesture holds the view (#1673)
  • in-flight map controls: follow switch, centre crosshair, readout clearance (#1678)

2026-08-16 โ€” merged this period (auto-generated)

  • Show live flight readout on desktop (#1615)
  • Prevent repeated TOP alerts in waypoint circles (#1619)
  • Report the off-course heading to fly (#1621)
  • Sync main into dev (3e45a5d) (#1618)
  • Clarify and validate simulator bridge URLs (#1624)
  • Exclude Android-only plugin from iOS (#1627)
  • Sync main into dev (5ce015e) (#1625)
  • Sync main into dev (e2d60e3) (#1629)
  • Allow iOS app to poll local HTTP simulator bridges (#1632)
  • Sync main into dev (515432f) (#1633)
  • Fix native simulator connectivity and in-flight alerts (#1636)
  • Sync main into dev (dc6bb66) (#1639)
  • Show unavailable dated weather overlays (#1642)
  • Sync main into dev (19adcf7) (#1643)

2026-08-15 โ€” merged this period (auto-generated)

Features

  • OrcaRouter as an assistant provider (#1579)

Fixes

  • the gist could not turn spoken alerts on by default (#1575)
  • the primed map wears the add cursor, and the intro can be switched off (#1584)

CI

  • shard both e2e suites across four runners (#1582)

Other

  • Fix print/export route framing and direction (#1587)
  • Keep Print fit actions visible and center the page frame (#1590)
  • Fix protected dev promotion automation (#1594)
  • Sync main into dev (fe379d7) (#1596)
  • Sync main into dev (9b4901b) (#1601)
  • Improve Print layout, fit tuning, and loop labels (#1598)
  • Preserve waypoint revisit at a turning point (#1606)
  • Sync main into dev (914172e) (#1607)
  • Fix CodeQL unused profile variables (#1611)
  • Sync main into dev (199ab02) (#1612)

2026-08-14 โ€” merged this period (auto-generated)

Features

  • speak the in-flight alerts (native TTS, browser fallback for testing) (#1558)
  • in-flight alerts โ€” voice, cone-based leg tracking, comm-change readout, heading in the readout (#1565)
  • choose which direction's leg kites to draw (#1567)
  • exported filenames carry the turning point too (#1569)
  • switch the return path off from the tuning gist (#1570)

Fixes

  • the simulator footer button did not render in the APK (#1557)
  • sync main into dev with a real merge, not a squash (#1560)
  • update the dev-sync guard test to match the merge-based workflow (#1562)
  • no reverse warning when there is no route to reverse (#1572)

Other

  • i18n: the leg-direction picker is 'Route direction' (#1574)

2026-08-13 โ€” merged this period (auto-generated)

Features

  • restore defaults for the flight plan's Advanced fields (#1553)

Fixes

  • a hint's after-target reaches to the next comm-change point, not a fixed hop count (#1544)
  • inspector VOR ref select clipped its 'โ€” none โ€”' placeholder (#1548)
  • inspector VOR ref select still clipped under a squeezed row (#1550)
  • kites can silently block adding a waypoint (#1551)
  • the GPS readout read right to left in the Hebrew UI (#1555)

2026-08-12 โ€” merged this period (auto-generated)

Features

  • ?graphlegs=1 โ€” draw every published leg with its stored direction (#1528)
  • plain-language preamble above the ICAO block in a filed mail (#1533)
  • frequency-NOTAM pointer in the inspector, and AIP frequency corrections (#1535)
  • Speed (kt) override for field 15, plus a confirm gate when it disagrees with the route (#1539)
  • device notifications for in-flight alerts (leg approach + altitude off plan) (#1545)

Fixes

  • blocked sat on the wrong entry of 7 one-way legs (no kite, wrong direction) (#1527)
  • drop closedHint from CVFR โ€” four for four wrong, nothing corroborates it (#1531)
  • point mode exports route-graph nodes, not the retired flat array (#1532)
  • four findings from /code-review on main (editor + io.js) (#1538)
  • comm-change call sign is a direction property, not a before-dependent one โ€” plus same-freq suppression (#1542)

2026-08-11 โ€” merged this period (auto-generated)

Features

  • map presence for bubble-closure NOTAMs + freetext list search (#1507)

Fixes

  • sixteen findings from the origin/main review + KNTRY arrival boundary (#1504)
  • four round-2 review findings (CTR memo invalidation + tune panel) (#1506)
  • round-3 sweep โ€” editor round-trip data loss, GPS teardown, SW tile race (#1510)
  • round-4 findings โ€” MAY near RWY/FREQ numbers, iOS GPS teardown (#1512)
  • round-5 findings โ€” MAY regex regression, GPS registration gaps (#1514)
  • 10 code-review findings across gps/core/draw/ui (#1515)
  • two corridor edges miscaptured as unconditionally closed (#1517)
  • round-6 review findings โ€” MAY dates, NOTAM search cache, bubble framing (#1521)
  • refuse unroutable/unfilable segments, and drop a fabricated CVFR time gate (#1524)

Other

  • Merge main into dev (pre-promo sync) (#1509)
  • drop the dead turnConsent latch (eslint warning) (#1511)

2026-08-10 โ€” merged this period (auto-generated)

Features

  • one route graph for CVFR, heli and LSA (#1479)
  • LSA bubbles โ€” published polygons, selectable, searchable (#1484)
  • LSA points from the second capture โ€” codes, GORAL, TAALL/MACHR, six airstrips (#1485)
  • base layers can be pulled or restored through the gist (#1488)
  • the panel shows each control's registry key (#1492)
  • corridor availability, auto-route, live NOTAM closures (#1499)
  • the route clock starts at the CTR boundary (#1501)

Fixes

  • out-and-back plans ask for the landing coordination again (#1487)
  • a leg can show its drift cone when the global toggle is off (#1489)
  • bubble altitude bands say ืจื’ืœ on the Hebrew UI (#1491)
  • bubbles carry the legend's class โ€” the secondary source's hours are gone (#1494)
  • a layer switch closes a bubble or nav-waypoint inspector (#1496)
  • old saved routes join and expand again; subject carries departure time (#1498)

Tests

  • retire the equivalence proof; the graph defends itself (#1486)

Other

  • drop two requires the graph migration left dead (#1493)
  • Merge main into dev (before the promo) (#1503)

2026-08-09 โ€” merged this period (auto-generated)

  • file an out-and-back as one plan, name every reporting point, and ten missing CVFR links (#1478)
  • ring the point a search flew to (#1481)

2026-08-08 โ€” merged this period (auto-generated)

Features

  • hide a single leg's drift lines from the leg inspector (#1474)

Fixes

  • four defects from the 9899de7 review, and the tests that let them hide (#1470)
  • unfreeze the weather feed, and three defects from the 83b93d3 review (#1475)

2026-08-07 โ€” merged this period (auto-generated)

Features

  • make every map-fit padding and zoom adjustable (#1460)

Fixes

  • keep the leg's VOR and hidden kite through Reverse, and stop invisible ink driving page fit (#1451)
  • stop the closed menu covering the Zulu clock, and size it to its controls (#1455)
  • restore PR preview deployments, and the rest of the a7d386f review findings (#1453)
  • confirm each assistant route change, and stop consent lasting the session (#1443)
  • stop a branch name executing in the Pages build, and stop previews wiping the offline cache (#1456)
  • stop Pages deploys queueing each other to death (#1461)
  • freeze the source cache-bust at a placeholder instead of bumping it per PR (#1462)
  • cut the preview payload ~93% so Pages can finish deploying (#1466)
  • the VOR coverage ring goes when the reference does, from every path (#1463)
  • an optional library must not black out the app, and particles must not speed up with bearing (#1467)

Other

  • ignore a node_modules symlink, not just the directory (#1458)

2026-08-06 โ€” merged this period (auto-generated)

Features

  • press a waypoint in add mode to route through it, and drag a loop's shared point (#1437)
  • hide a leg's nav kite from the leg inspector (#1446)

Fixes

  • flight-critical findings from the first full-codebase review (#1430)
  • no MSA from partial terrain, and never draw a frozen GPS fix as live (#1431)
  • unfreeze the SIGWX feed โ€” the job list lost its last chart (#1434)
  • weather charts labelled with the right day, and a boot that survives blocked storage (#1435)
  • stop losing the per-leg reference VOR and the dragged cumulative-time kites (#1439)
  • AbortSignal.timeout fallback for the simulator poll, and correct two guide claims (#1441)
  • stop response order deciding the weather chart, and stop a level change blanking it (#1440)
  • give toolbar selects room for their arrow, and shrink the closed mobile menu (#1447)
  • call the leg marker a navigation arrow, not a kite (#1450)

Other

  • untrack the node_modules symlink, and stop it recurring (#1433)

2026-08-05 โ€” merged this period (auto-generated)

Features

  • cross-country plan form, route-driven flight type, required pilot email (#1407)
  • landing-site acknowledgement, field-to-field rule, filing address off the sync blob (#1415)

Fixes

  • review findings โ€” recipient checks, the two-plans message, and the light-theme lock (#1417)
  • a first-time setting is a local edit again, and the pads fit a 320px screen (#1419)
  • let the remote settle the ambiguous key, and stop the pad stretching signatures (#1420)
  • adopt a legacy baseline once instead of asking the remote about it (#1421)
  • a route can close back onto its own departure field (#1424)
  • harden workflows, data feeds, and documentation (#1423)

CI

  • grant actions:write so the post-merge dispatch actually fires (#1410)
  • stop squashing merges between long-lived branches (#1427)
  • make the aviation feed rules testable, and fix a crash they hid (#1428)

Other

  • record main's squashed promo as merged into dev (#1426)

2026-08-04 โ€” merged this period (auto-generated)

Features

  • default speed carries the legs nobody typed a speed on (#1399)
  • build and submit the ICAO flight plan for the drawn route (#1405)

Fixes

  • second-review follow-ups โ€” silent import failures, assistant NOTAM scope, profile joins (#1390)
  • one answer for the altitude of a leg with none entered (GPX wrote sea level) (#1393)
  • repair the Drive settings allowlist, and guard it against drift (#1392)
  • round-7 review โ€” three touch targets, and RTL disclosure carets (#1394)
  • enforce the tool tier the tools already declared (#1398)
  • sync the colour pickers, close the guard hole, version the narrowed sliders (#1397)
  • track the leg-speed pin per direction, and carry on every path (#1403)

Tests

  • cover the other writers of the default leg speed (#1404)

CI

  • scope the pages lock to the publish job so required checks always report (#1395)
  • hand the auto-merge watch to a fresh run instead of failing (#1401)

2026-08-03 โ€” merged this period (auto-generated)

Features

  • JSON export for recorded GPS tracks (#1378)
  • put default leg speed under View/Set, below the layer picker (#1381)
  • remember the NOTAM overlay per chart (CVFR / LSA / heli) (#1386)

Fixes

  • guard empty exports, import a library from either entry point, define nine English-only strings (#1380)
  • code-review follow-ups โ€” restore saved panel positions, make the track export honest (#1384)
  • first-run pass โ€” phone menu opener, clipped altitude, bottom-band pile-up, assumed altitudes, search tip (#1383)

Tests

  • pin leg ETE to a known 30 NM length, and lock V/S out of leg time (#1388)

2026-08-02 โ€” merged this period (auto-generated)

Features

  • dock the search on desktop, and store positions per language (#1374)

Fixes

  • blank legs inherit the route altitude, else fly 800 ft AGL instead of sea level (#1376)

2026-07-30 โ€” merged this period (auto-generated)

  • stop advertising pages that are not pages (#1369)
  • waypoint selection, plus a Google Earth tour speed picker (#1372)

2026-07-29 โ€” merged this period (auto-generated)

Features

  • leg-arrow + waypoint opacity, colour and size, grouped (#1363)
  • choose which chart the nav waypoints come from (#1366)

Fixes

  • dialogs take focus and hand it back; 44px targets; simulator keeps its aria-modal promise (#1354)
  • the clipping warning covers the labels, not just the waypoints (#1357)
  • the VOR swatch is the symbol the map actually draws (#1361)
  • saved colours and opacity survive the gist load (#1365)

Other

  • Merge pull request #1358 from msupino/dev

promote: print-clipping warning covers labels and names what is clipped (dev -> main) (#1359)

2026-07-28 โ€” merged this period (auto-generated)

Features

  • V/S shapes the drawn climb, speed alone drives the clock (#1348)

Fixes

  • one route readout on mobile, and no dead band in the menu card (#1346)
  • show the empty-route hint once per browser (#1350)
  • round-3 audit โ€” cap label growth, keep the legend clear, warn before clipping a print (#1352)

2026-07-27 โ€” merged this period (auto-generated)

Fixes

  • all 15 code-review findings (sync convergence, hit regions, export panel) (#1329)
  • review round 5 + green the three long-standing test failures (#1331)
  • use published AIP antenna positions for the VOR stations (#1332)
  • make the core actions discoverable and reachable on a phone (#1336)
  • extending a route keeps the speed already being flown (#1340)
  • round-2 UI audit โ€” one ETE, a readable landing view, and no panel fights (#1342)
  • one flight-plan entry, one ETE, and totals that stay put (#1344)

Other

  • move the remaining hardcoded presentation values into the gist registry (#1334)
  • separate the flight-plan column titles from the CSV export contract (#1337)

2026-07-26 โ€” merged this period (auto-generated)

Fixes

  • opening any chart-menu item closes the Charts submenu (uniform) (#1321)
  • remove unused legLen locals (#90/#91) (#1322)
  • patch brace-expansion DoS (>=5.0.7) in mobile lockfile (#1323)
  • patch tar DoS (>=7.5.21) in the mobile lockfile (#1325)
  • address 6 code-review findings (settings sync, hit-test, heading, dead tune keys) (#1327)

Other

  • Hebrew keywords + og:locale he_IL alternate (#1319)

2026-07-25 โ€” merged this period (auto-generated)

Features

  • CAAI nav-map polish โ€” right-side minute ticks + identification-point ovals (#1297)
  • float the print menu at the inspector location (mobile โ†’ modal) (#1302)
  • optional settings sync across devices (#1307)

Fixes

  • keep identification-point ovals put when the route is reversed (#1299)
  • freq-change callout defaults opposite the nav kites (not static 270ยฐ) (#1300)
  • speed/alt-change kite halo shows only the outer band (#1304)
  • clamp an open section dropdown into the viewport (RTL wrapped Print menu) (#1308)
  • A3 / A4 / A4ร—2 on one row (orientation below) (#1311)
  • HTZUKโ†’Country Club 1200 one-way (reverse blocked) + no nav kite on blocked legs (#1313)
  • kite hit-test covers the full rotated footprint (not just the centre) (#1316)

Tests

  • drop static value-mirror tests, keep schema + consistency (#1315)

2026-07-24 โ€” merged this period (auto-generated)

Features

  • fixed physical print sizes โ€” waypoint 7mm, note 21ร—14mm, kite 18.5+10ร—21mm (#1287)

Tests

  • de-flake the 5 real-mouse comm-change-note tests (#1292)

2026-07-23 โ€” merged this period (auto-generated)

  • waypoint-label opacity slider (50%) + gist-only kite/note opacity (50%) (#1285)
  • heading predictor line with 2/5/10 NM range marks (#1289)

2026-07-22 โ€” merged this period (auto-generated)

Features

  • name exported files for the route endpoints (#1281)

Docs

  • dated, prefix-grouped section like the wiki changelog (#1283)

2026-07-21 โ€” merged this period (auto-generated)

Features

  • make every toolbar checkbox default gist/tune-controllable (#1272)

Fixes

  • stacked-Escape close + reset buttons for zoom/size sliders (#1274)
  • scale note boxes with map zoom like the leg/nav kites (#1276)

Other

  • remove leftover Unity 2019 / plotter references (#1279)

2026-07-20 โ€” merged this period (auto-generated)

Features

  • list the reference VOR(s) with their frequency (#1265)

Fixes

  • address all 8 code-review findings (#1262)
  • don't open the inspector when a pan starts on a selectable marker (#1268)

Data

  • 8 Haifa/Megiddo/Rosh Pina CVFR routes (#1267)

CI

  • make the dev-to-main auto-PR idempotent under concurrent runs (#1264)

Other

  • CI flake audit (no-op) (#1270)

2026-07-19 โ€” merged this period (auto-generated)

  • show the A4ร—2 cut line on the page frame (#1256)
  • re-stroke the coastline the white-knockout erases (#1260)

2026-07-18 โ€” merged this period (auto-generated)

Features

  • A4ร—2 page size โ€” the A3 frame exported as two A4 tiles (#1252)

CI

  • nightly wiki-screenshots refresh (02:30 UTC) (#1253)
  • nightly wiki-changelog automation from merged PRs (#1257)

The authoritative changelog lives in CHANGELOG.md in the repo. Highlights since the HTML5 rewrite:

2026-07-18 โ€” A4ร—2: an A3 chart from two A4 pages

  • A4ร—2 page size joins A3/A4 in Print: it draws the A3-size frame and Save PNG slices it into two A4 pages at the same 1:250 000 scale (WYSIWYG halves, PAGE n OF 2 labels, dashed tape guide, true-size DPI). Print both and tape โ€” an A3 chart without an A3 printer. Landscape frame โ†’ two portrait pages; portrait frame โ†’ two landscape pages.

2026-07-16 โ€” Airfield-plate picker + clearer labels

  • Show plates for picker in Extra layers โ†’ Airfield plates: limit the plate overlays to All airfields (default), Auto (route start + end) (the first & last airfield on your route, updated live), or a single field โ€” so neighbouring fields' plates don't overlap. Remembered in navaid.plateAirfield.
  • Clearer plate labels โ€” Show CVFR entry/exit routes, Show circuit patterns, Show helicopter entry/exit routes, Show comm-failure joining.
  • Long plate labels now wrap on the narrow mobile toolbar.

2026-07-15 โ€” Overlay georeferencing pass + in-app align editor

  • Align overlays โ€” a hidden ?align=1 tool adds an Align overlays toggle to Extra layers โ†’ Airfield plates: select a shown plate and drag to pan / scale / rotate it against the base map, then Copy coords to bake the fix. Overrides persist in localStorage["navaid.overlayBoundsOverrides"].
  • Rotated overlays โ€” plates can now be stored as three corners (tl/tr/bl) and rendered with L.imageOverlay.rotated; the LLHZ and LLBO circuit plates ship rotated.
  • Re-georeferenced plates โ€” circuit / CVFR / training overlays regenerated from their source AIP graticules (incl. byop Annex charts), full-page with the chart header, so scale and lat/long register precisely.

2026-07-14 โ€” CVFR, comm-failure & helicopter overlays + grouped menu

  • CVFR routes overlay (7 fields), Comm-failure entry overlay (LLHA, LLHZ) and Helicopter routes overlay (4 fields) join Extra layers, each a georeferenced IAA plate with its own opacity slider (default 60 %).
  • Data: new cvfr_overlay / commfail_overlay / heli_overlay fields in airfields.json; images in docs/cvfr-img/, docs/commfail-img/, docs/heli-img/.
  • Grouped menu โ€” Extra layers is now organised into titled, bordered frames: NOTAMs & wind, Weather charts, Airspace and Airfield plates.

2026-07-13 โ€” Circuit & training-area overlays

  • Circuit overlays โ€” a Show circuit overlays toggle in Extra layers lays each airfield's georeferenced circuit / VFR plate on the map, with an opacity slider (default 60 %). 13 Israeli GA airfields (LLHZ, LLHA, LLIB, LLBS, LLAR, LLBO, LLEY, LLMZ, LLFK, LLKS, LLKZ, LLMG, LLRS). Each plate is pinned so its runway sits on the real runway.
  • Training-area overlays โ€” a separate Show training areas toggle overlays the training-zone (ืื–ื•ืจื™ ืื™ืžื•ืŸ) plates with its own opacity slider. 6 airfields (LLHA, LLHZ, LLIB, LLBS, LLMG, LLRS), bounds taken from each plate's graticule so they register with the CVFR base map.
  • Data: new circuit_overlay / training_overlay fields in airfields.json; images in docs/circuit-img/ and docs/training-img/.

2026-07-08 โ€” GPS tracks, offline map packs, Drive sync, LSA bubbles, Android APK

  • GPS track recording (docs/app/gps.js): footer โบ Record GPS track / โน Stop & save records the flown path from the device GPS and stores it as a track overlay (a coloured polyline, not a waypoint route) in Saved routes, exportable as GPX; ๐Ÿ“ Show my location shows live own-ship without recording. A live readout shows points ยท elapsed ยท ground speed ยท altitude. See GPS track recording.
  • Track show = one-at-a-time + zoom + glow: showing a recorded track (Saved routes โ†’ Show, or right after a recording stops) now shows only one track at a time (showing one hides the rest), fits the map to it, and highlights it with an amber glow for 10 seconds before reverting to the plain line.
  • Offline downloadable map packs (docs/app/offline-tiles.js): โฌ‡ Download offline maps (Charts section, chart layers only) pre-downloads the current chart layer's tiles (zoom 7โ€“13) so the map works with no internet; a tile count / progress + cancel are shown, and ๐Ÿ—‘ Delete offline maps removes them. Distinct from the PWA app-shell caching. See Offline and PWA.
  • Google Drive sync (docs/app/gdrive.js): Sync with Google Drive in the Saved routes dialog backs the library up to the user's own Drive using only the private drive.appdata area (NavAid can't see other Drive files), with a newest-wins two-way merge. Works in the web app (Google Identity Services popup) and in the Android APK (native Google Sign-In). See Features.
  • LSA bubbles overlay (docs/app/draw.js, data/lsa-areas.json): Show LSA bubbles (Extra layers) overlays LSA airspace areas on the Low Alt layer, with weekend / always types in distinct legend colours (green = always, tan + black outline = weekend) and named bubbles; ๐Ÿ“‹ LSA bubbles (Charts) lists them, click one to zoom to it. See Extra layers.
  • Android APK (mobile/): NavAid now ships as a self-updating Android APK (a Capacitor shell loading the live site) from GitHub Releases, adding lock-screen GPS recording (foreground service), offline chart packs, and native Google Drive sign-in. See Offline and PWA.

AI assistant (BYOK chat)

  • New AI Assistant โ€” a ๐Ÿ’ฌ chat panel that answers questions and plans routes in plain language using your own LLM key. Runs fully in the browser (no backend); the key stays local.
  • Four providers: Google Gemini (free tier), Anthropic (Claude), OpenRouter, and DeepSeek โ€” provider-agnostic adapters over one tool layer; per-provider key/model.
  • Tooling over the app: NOTAMs, weather, airfield/VOR lookups, full per-leg route detail, and route building/editing. Route planning follows real CVFR routing โ€” a curated template, else the published leg network (reporting points inserted) โ€” and never draws a "direct" leg that isn't an actual route.
  • Tiered safety: reads are free, route edits apply immediately but are Undo-able, and save asks for confirmation; the assistant never invents a NOTAM/weather/frequency (planning aid only).
  • Movable UI: launcher docked in the bottom-right control column; the panel is draggable and resizable, with position/size remembered.

Extra layers menu + uniform toolbar look

  • Renamed the Weather โ†’ Information โ†’ ๐Ÿ—‚ Extra layers section. Every map layer (SIGMET, NOTAM, wind effect, wind field, wind/temp PWX, SIGWX) is now a uniform card: a Show โ€ฆ toggle on top, controls below, identical spacing and slider widths. See Extra layers.
  • One look for every menu: all section dropdowns share the same button / card style โ€” left-aligned, flat in dark mode, bordered in light. The Export menu is no longer centre-aligned and the Extra-layers cards no longer show a stray border in dark mode.
  • NOTAM list filter by airfield or global (FIR); clicking a NOTAM in the list pans/zooms to it and blinks it on the map.
  • Time sliders matched: the NOTAM timeline and wind-field time slider read the same โ€” +Nh ยท HH:MMZ (bare clock at 0); a fixed-width slider no longer resizes as its value changes.

Weather section, IMS overlays, gist config, mobile shell

  • Weather toolbar section (before Simulator) groups SIGMET, wind (+ Fetch wind), the IMS PWX overlay, and the SIGWX viewer. See Extra layers.
  • IMS PWX wind/temperature overlay: full-page chart georeferenced onto the map, by flight level (FL050/FL030) and valid time (Z), with a Sign opacity slider (default 60 %) + reset and a model-run readout. Mirrored hourly from IMS (CORS-blocked PDFs โ†’ PNGs on the ims-data branch) with retries and last-good retention.
  • IMS SIGWX viewer: significant-weather charts in an in-app image viewer by valid time; stays visible (and reports "unavailable") rather than hiding when a run can't fetch them.
  • Runtime config from a gist: loadRemoteConfig applies a { key: value } gist over the baked-in tuning defaults at boot (cache-busted), so visual constants โ€” including the IMS overlay opacity / offset / scale โ€” can be tuned without a redeploy.
  • More tunable constants: live-aircraft size, go-to & satellite markers, profile axis/padding, alt-pair opacity, map-label min-zoom, and default wind dir/speed (now calm 000/0).
  • Waypoint inspector opens on release: grabbing a waypoint highlights it but only opens the inspector on a clean click โ€” dragging to reposition no longer pops the panel.
  • Clear store moved to the Edit section and now wipes the current route too (it used to re-persist on reload).
  • Capacitor mobile shell (mobile/): native iOS/Android wrapper around the web app.

Staging โ€” Keyboard shortcuts, cumulative-time kites, freq-change refinements

  • Split route leg by double-click: double-click an existing route leg to insert a blank WP # waypoint at that coordinate. The inserted waypoint is selected immediately; both new legs inherit the original leg's speed, altitude pair, return / one-way flags and per-leg VOR reference, with leg-marker offsets reset for the new geometry.
  • VOR/DME reference and radial/DME readouts: new docs/vor.json dataset, View-section Show VOR stations overlay, persistent VOR ref selector, separate bottom VOR readout, inspector radial/DME rows, and Flight Plan Radial/DME columns with per-leg VOR overrides. Marker visibility is independent from radial/DME calculations.
  • Local frequency overrides: the new ๐Ÿ“ก Freq table (Charts section) is a searchable editor for per-call-sign frequency defaults โ€” override a frequency, reset a row, or Restore originals. Overrides persist under navaid.commFreqOverrides and apply everywhere a call sign is used. The inspector and table frequency inputs are validated to the 118 โ€“ 136.975 MHz band, with a Template row and โ†ป reset showing/restoring the catalog default.
  • Flight-plan CSV export: a CSV button on the Flight Plan modal downloads the table as UTF-8 (with BOM, so Hebrew opens correctly in Excel), CRLF line endings, standard CSV quoting.
  • Google Earth fly-through overhaul: the tour now samples multiple cameras per leg (~every 1.5 nm) for a continuous glide, blends headings smoothly through turns (no snap), keeps a continuous heading across the 360ยฐ wrap, opens with a smooth shot instead of a bounce, and grounds the start/end cameras to airfield field elevation (elev_ft). Airfield elevations were sourced from Wikipedia and added to airfields.json.
  • Freq-reset button fix: the inspector / Freq-table โ†ป reset bound the same handler to pointerdown and click, firing twice per tap; a pointer-handled flag now makes it fire once while keeping keyboard activation.
  • Keyboard shortcuts split: D deletes waypoints/notes only, X deletes a frequency-change callout, Z adds one, and Delete/Backspace handles all selected-item deletion.
  • Cumulative-time kites per leg: each leg shows an inbound cumulative-time pentagon at B and an optional return kite at A, both draggable around their anchor waypoint. Gated by a View-section toggle (showCumTime), default on.
  • Leg line-width slider: legLineWidth and driftLineWidth in the Display section control stroke weight for the route line and drift dashes (restored from saved preferences).
  • Hidden tuning panel: ?tune=1 exposes visual constants (drift dashes, kite geometry, colors, font sizes, frequency-callout settings) as page-local previews. ?tune=0 explicitly disables it. Each slider group has a โ†ป reset button. A "Colors" group covers ink, selected, kite text, leg halo, and airfield/nav-WP tints.
  • Legend: moved from View menu to a floating Leaflet control (bottom-left). Updated to say "Freq change" instead of "ATC change" and "nav waypoints" for the short label.
  • Map legend: triangle = airfield, circle = waypoint, red circle = Freq change. DOM-only, excluded from PNG exports.
  • Show/Add Freq Changes defaults on and uses the new navaid.showFreqChanges key, ignoring old stored-off navaid.showCommChange values so existing users see the layer.
  • ATC-change rings and lightning callouts: known comm-change points render as red rings; matching route waypoints get editable lightning callouts with waypoint, call sign, and frequency inspector fields.
  • Call-sign catalog: docs/comm-change.json now includes default frequencies and Hebrew labels; waypoint mappings restrict the inspector dropdown to allowed call signs.
  • Route-aware defaults: commRouteCalloutDefaultsMap() picks the correct call sign based on route order, neighbouring freq-change boundaries, and nearby airfields.
  • Deleted-callout persistence: callouts deleted by the user are suppressed on reload via navaid.route.suppressedCC. "Add freq change" clears the suppression and re-creates the callout. Suppressions clear when the waypoint moves away, the route is cleared, or a new file loads.
  • Route-safe lifecycle: deleting a waypoint removes its linked frequency callout, deleting a callout leaves the waypoint, and moving a waypoint away from its comm-change point removes the stale callout.
  • United inspector: waypoint inspector shows inline freq-change editing (call sign dropdown, frequency input, reset location) instead of a read-only badge โ€” shared with the note inspector via appendFreqEdit().
  • Export-PNG "Include cumulative time" checkbox (default on) controls whether cumulative-time kites appear in the exported image.

Activity-based toolbar, floating search, UI cleanup

  • Toolbar reorganised by activity: 5 sections (Edit / Map / Route / Display / Print) โ†’ 4 (Build / View / Charts / Export) plus Display + Print kept (#192). Sections retitled around what you're trying to do rather than what kind of widget lives there.
  • Floating search overlay (#194): the nav-WP search moved out of the toolbar Build section into a top-center overlay. Press Ctrl-F / Cmd-F anywhere, or click the ๐Ÿ” Find button. Escape or โœ• to close.
  • Modal close affordance unified to a top-right โœ• corner button โ€” flight plan, plate viewer, and charts modal all match the inspector pattern (#193).
  • Orientation toggle next to A3 / A4: replaces the per-click chooser modal. Single โ–ญ / โ–ฏ button flips between landscape and portrait. Default is portrait (most CVFR routes are tall); persisted across reloads โ€” fixed by changing let pageOrient โ†’ var so the boot restore reaches the toggle's lexical binding (#195).
  • Numbers โ†’ Charts rename of the section containing ๐Ÿ“‹ Flight Plan + ๐Ÿ—บ๏ธ Airport Charts (#193).
  • Ctrl-F hijacks native find-in-page โ€” the canvas has no text to search anyway, so the key now opens the nav-WP overlay.
  • Bug fix batch: needsHalo('out') checks outboundSpeed (#173); toHMS extracts hours so totals >60 min display correctly (#174); waypoint/note drag paths round coords to 5 dp (#175); Escape keydown listener leak in plate + charts modals (#176); exportPNG octx restore in try/finally (#177); SW awaits cache.put + cache.delete and falls back to cached / for offline navigation (#178/#179/#180).
  • Test coverage: 115+ Playwright specs across 13 files. Notable additions: route persistence, JSON import rejection, Google Earth KML coordinate match, PWA cache, GA-blocking fixture, all six bug regressions, search overlay, orient persistence + PNG filename, full toolbar surface.
  • GA blocking in test runs (tests/_setup.js) โ€” every Google Analytics / GTM request aborts and window.dataLayer.push is stubbed so CI and dev runs never pollute the production GA4 property.
  • Pages artifact size dropped from ~1.8 GB to ~140 MB (#169) โ€” docs/byop/ now ships only at the production root; staging and PR previews rm -rf <preview>/byop and sed PLATE_BASE to /NavigationApp/byop/.

Plates viewer + bug-fix batch

  • Airfield charts viewer (#105): clicking a waypoint whose name matches an airfield ICAO shows its BYOP charts in the inspector, grouped by category (Approach, SID, STAR, Ground, VFR/Airport, Other). Click a chip to open the PDF in a full-screen modal with Close, Download, and Open-in-Tab.
  • Charts toolbar button โ€” ๐Ÿ—บ๏ธ button in the Route section opens a standalone modal listing all airfields with BYOP plates in collapsible per-airport sections, grouped by category. No waypoint selection required.
  • BYOP PDFs moved from Git LFS to docs/byop/ โ€” served directly from GitHub Pages CDN (no monthly bandwidth quota). 14 charts with Rotate:270 metadata flattened upright via qpdf --flatten-rotation.
  • Escape key closes Flight Plan, orientation picker, and charts viewer modals (#86).
  • Google Earth mode selection โ€” Web vs App choice on download (#128).
  • A3/A4 auto-fit โ€” fitPageFrame() zooms the page frame to the route bounds (#119).
  • Removed unused normLegLabel() from core.js (#126).
  • Mag var clamping โ€” the clamped value is written back to the input field (#85).
  • Language bootstrap preserves existing query-string parameters (#87).
  • Search dropdown splits the 12-slot budget evenly (6 nav-waypoints + 6 airfields) instead of filling with one type (#124).
  • PR preview deployments โ€” any open PR targeting main or dev is auto-deployed to /pr/NNN/ and /branch/BRANCH_NAME/.
  • Lint gate in deploy.yml โ€” build and deploy only proceed after a lint pass.
  • Cancel-in-progress enabled on the Pages deploy group so a burst of pushes cancels stale builds.
  • Review workflow โ€” ESLint, Semgrep, CodeQL, and Lighthouse run on every push and PR (advisory, not blocking).

PR #97 promotion bundle

  • Toolbar UX: language picker is always visible; GitHub and Wiki footer links were added; Hebrew UI keeps those brand names in English; leg inspector titles use From -> To.
  • Bug-fix batch: issues #70-#75 fixed drag cleanup, note hit-testing, retryable dataset fetches, corrupt-route preservation, PNG export locking, and invalid rotation persistence.
  • Export fixes: map opacity is honored in PNG export (#77); flight-maps.com tile grids are clipped to chart bounds and HTTP 404 tiles are skipped silently (#79); Airfields are included in PNG export overlays.
  • Strict validation: route, nav-waypoint, and airfield JSON validation requires documented fields and correct types while allowing extras (#101). Corrupt saved navaid.route data is preserved with a user warning instead of overwritten.
  • Airfields: docs/airfields.json adds 16 LL* airfields, a Show Airfields overlay, blue triangle markers, ICAO / English / Hebrew search, snap-on-drop / drag, hide-on-overlap, and plates filename metadata for future inspector integration.
  • Google Earth: KML flythrough camera tilt is fixed at 70ยฐ.
  • CI / Deploy: CI lint checks JS, JSON, XML, HTML, cache-bust consistency, and service-worker cache naming. Deploy rewrites ?v= and NavAid.version to the branch short SHA; both workflows support manual dispatch, and Deploy queues runs with cancel-in-progress: false.
  • BYOP plates: docs/byop/ contains 141 PDFs as regular git blobs (~133 MB) from the CAAI AIP 02-25 snapshot. They are not served by Pages and are not opened by the app yet; UI integration is tracked separately (#105).

Bilingual + rotation polish

  • Bilingual UI: Hebrew root (/), English at /?lang=en; full string localisation; language picker.
  • Map rotation: 360ยฐ compass dial, bearing persisted; PNG export handles rotated views.
  • Nav-waypoint search: type to jump; Hebrew + English match; outside-click closes; Escape clears.
  • Hebrew nav-waypoint names: 256 points with he field; nav-waypoints.json cache-busted.
  • โŸณ button rotates waypoint name labels 90ยฐ.
  • Google Earth tour (renamed from "Fly Route"): confirm-then-save, timestamped filename.
  • Export / Import rename (was Save / Load).
  • Flight Plan modal: editable Speed and Altitude columns; Print button.
  • Toolbar collapse persistence across reloads and language switches; defaults collapsed on first visit.
  • Layer picker: OSM -> OpenStreetMap with migration.
  • SW cache bumped to navaid-v3 / v4.

2026-05-21

  • PR #11 - Editable flight-plan names; Fly Route writes Google Earth KML tour.
  • PR #10 - Short / empty notes stay landscape (56 px min width).
  • PR #9 - Split app.js into five ordered modules (core / draw / interact / io / ui); route-info panel into toolbar footer; layer picker into toolbar.
  • PR #8 - PWA install + manifest + offline service worker + app icons; toolbar collapse on phones; per-note Rectangle / Oval; exportPNG timeout + failed-tile warning.
  • PR #7 - Max-quality PNG export at the layer's max native zoom (z13 for CVFR).
  • PR #6 - Draggable A3 / A4 page frame.
  • PR #5 - New og-preview.jpg (bottom-to-top route).
  • PR #4 - Production promote: snapping, modes, name toggle.
  • PR #3 - NavAid rebrand, Pages workflow (main -> /, dev -> /staging/); "Show Navigation Waypoints" overlay.
  • PR #2 - Initial HTML5 deploy pipeline and staging/production split.

See CHANGELOG.md for the full record.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ