Changelog - msupino/NavigationApp GitHub Wiki
๐ฎ๐ฑ ืขืืจืืช
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- Heading-up button reads magnetic; bearing dial needle points at north (#2410)
- 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)
- 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)
- 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)
- 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)
- Read the TAF, and stop pretending scattered cloud is not in the way (#2354)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- The AIP drift job never saw the drift: tee ate the exit code (#2178)
- 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)
- 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)
- 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)
- 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)
- 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)
- Weather overlays: loading banner for wind/temp + SIGWX charts (#2104)
- Fix all ten findings from the origin/main review (#2106)
- 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)
- 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)
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)
- Keep CVFR automatically available offline (#2034)
- Sort NOTAMs by flight relevance (#2037)
- Show airfield names in NOTAM sheets (#2040)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
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)
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)
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)
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)
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)
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)
- 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)
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)
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)
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)
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
-
blockedsat 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)
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)
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)
- 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)
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)
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)
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)
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)
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)
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)
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)
- stop advertising pages that are not pages (#1369)
- waypoint selection, plus a Google Earth tour speed picker (#1372)
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)
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)
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)
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)
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)
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)
- waypoint-label opacity slider (50%) + gist-only kite/note opacity (50%) (#1285)
- heading predictor line with 2/5/10 NM range marks (#1289)
Features
- name exported files for the route endpoints (#1281)
Docs
- dated, prefix-grouped section like the wiki changelog (#1283)
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)
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)
- show the A4ร2 cut line on the page frame (#1256)
- re-stroke the coastline the white-knockout erases (#1260)
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:
- 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.
-
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.
-
Align overlays โ a hidden
?align=1tool 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 inlocalStorage["navaid.overlayBoundsOverrides"]. -
Rotated overlays โ plates can now be stored as three corners
(
tl/tr/bl) and rendered withL.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.
- 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_overlayfields inairfields.json; images indocs/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.
- 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_overlayfields inairfields.json; images indocs/circuit-img/anddocs/training-img/.
-
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 privatedrive.appdataarea (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.
- 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.
- 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 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-databranch) 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:
loadRemoteConfigapplies 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.
-
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.jsondataset, 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.commFreqOverridesand 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
smoothshot instead of a bounce, and grounds the start/end cameras to airfield field elevation (elev_ft). Airfield elevations were sourced from Wikipedia and added toairfields.json. -
Freq-reset button fix: the inspector / Freq-table โป reset bound the same handler to
pointerdownandclick, firing twice per tap; a pointer-handled flag now makes it fire once while keeping keyboard activation. -
Keyboard shortcuts split:
Ddeletes waypoints/notes only,Xdeletes a frequency-change callout,Zadds one, andDelete/Backspacehandles 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:
legLineWidthanddriftLineWidthin the Display section control stroke weight for the route line and drift dashes (restored from saved preferences). -
Hidden tuning panel:
?tune=1exposes visual constants (drift dashes, kite geometry, colors, font sizes, frequency-callout settings) as page-local previews.?tune=0explicitly 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.showFreqChangeskey, ignoring old stored-offnavaid.showCommChangevalues 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.jsonnow 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.
- 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โvarso 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 andwindow.dataLayer.pushis 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>/byopandsedPLATE_BASE to/NavigationApp/byop/.
- 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 withRotate:270metadata flattened upright viaqpdf --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
mainordevis 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).
-
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.routedata is preserved with a user warning instead of overwritten. -
Airfields:
docs/airfields.jsonadds 16LL*airfields, a Show Airfields overlay, blue triangle markers, ICAO / English / Hebrew search, snap-on-drop / drag, hide-on-overlap, andplatesfilename 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=andNavAid.versionto the branch short SHA; both workflows support manual dispatch, and Deploy queues runs withcancel-in-progress: false. -
BYOP plates:
docs/byop/contains 141 PDFs as regular git blobs (~133 MB) from the CAAI AIP02-25snapshot. They are not served by Pages and are not opened by the app yet; UI integration is tracked separately (#105).
-
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
hefield;nav-waypoints.jsoncache-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->OpenStreetMapwith migration. - SW cache bumped to
navaid-v3/v4.
- 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.jsinto 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;
exportPNGtimeout + 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.