Windows-GPU-UNLOCK
Windows GPU UNLOCK: RTX3090 UEFI port, Korean no-reset Windows boot guide, verified source and benchmark evidence
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
SkyCheck — Drone Flight Check (DE · FR · AT · CH · ES · DK · IE · NL · PT)
SkyCheck is a free single-page web app for quickly pre-checking drone flights. It aggregates real-time data from several official sources and provides an immediate flight recommendation. Our use cases: surveying, inspection, image films, TV & film productions, and A2/STS drone licence training at www.multikopterschule.de.查看完整 README ↗🌍 Language: English · Deutsch · Français · Español · Polski
SkyCheck is a free single-page web app for quickly pre-checking drone flights. It aggregates real-time data from several official sources and provides an immediate flight recommendation. Our use cases: surveying, inspection, image films, TV & film productions, and A2/STS drone licence training at www.multikopterschule.de.
🔒 Privacy-first · runs in the browser · nothing to install. SkyCheck collects no data, sets no tracking, and needs no account or sign-up — it can't spy on you because there is no backend that stores anything. Everything runs directly in your browser; the data you see is fetched live and gone the moment you close the tab. There's nothing to install either: "adding it to your home screen" (as a PWA) simply creates a shortcut that opens this web page — essentially a bookmark with an icon. No app package is downloaded, no permissions are granted, no background process runs.
Weather, air traffic, METAR/TAF, Kp-index and geocoding are identical everywhere; only the geo-zone source is country-specific and selected automatically from the hostname.
| Country | Live app | Geo-zone source |
|---|---|---|
| 🇩🇪 Germany | skycheck-de.netlify.app | DiPUL WMS — uas-betrieb.de |
| 🇫🇷 France | skycheck-fr.netlify.app | ED-269 dataset (French UAS zones) |
| 🇦🇹 Austria | skycheck-at.netlify.app | Austro Control ED-269 — auto-updated monthly |
| 🇨🇭 Switzerland | skycheck-ch.netlify.app | BAZL / geo.admin.ch — WMS + Identify API |
| 🇪🇸 Spain | skycheck-es.netlify.app | EASA Common Repository (vector) or ENAIRE servAIS (WMS) — switchable on the start screen, EASA default |
| 🇩🇰 Denmark | skycheck-dk.netlify.app | Trafikstyrelsen — ArcGIS FeatureServer (vector) |
| 🇮🇪 Ireland | skycheck-ie.netlify.app | EASA Common Repository — ArcGIS (vector, preliminary) |
| 🇳🇱 Netherlands | skycheck-nl.netlify.app | EASA Common Repository — ArcGIS (vector, ED-318) |
| 🇵🇹 Portugal | skycheck-pt.netlify.app | EASA Common Repository — ArcGIS (vector) |
| 🇱🇺 |
All fourteen are the same deployment of
skycheck.htmlfrom this repo, each served on its own Netlify site. Country detection: hostname (skycheck-<xx>.netlify.app) or the URL parameter?country=de|fr|at|ch|es|dk|ie|nl|pt|lu|no|ee|se|be. Default:de. Each country variant also presets the UI language, a capital-landmark search hint, and country-scoped address search.
📦 Current version: v26.10.118.1
Version format: vYY.MM.major.subversion, matching PointCloud Manager. The
existing sequential SkyCheck release is the major component; feature
releases start at subversion 0, while local fixes and hotfixes increment only
the final component. The complete version is visible in the browser tab and
the app header.
| Area | Details |
|---|---|
| Flight recommendation | Traffic-light system (Go / Warn / No-Go) based on wind, gusts, precipitation and Kp-index |
| Weather | Wind gusts, wind speed, wind direction, temperature, dew point, visibility, cloud cover, precipitation — data from DWD via BrightSky |
| METAR / TAF | Real-time aviation weather from nearby airports (NOAA Aviation Weather Center), including flight-category light VFR / MVFR / IFR / LIFR |
| Wind profile | Extrapolation of wind speed by altitude (10 / 60 / 120 / 150 m AGL) via power law |
| Kp-index | Current Kp from NOAA + GFZ Potsdam Hp30 bar chart (last 4 × 30 min + forecast) |
| Air traffic | ADS-B real-time flight movements in the surroundings with altitude colours and radar icons (Airplanes.live) |
| Aircraft alarm view | Full-screen map with audible aircraft alarm: announces approaching aircraft within an adjustable radius |
| Airspace map | Country-specific drone geo-zones (DE: DiPUL · FR/AT: ED-269 · CH: geo.admin.ch · ES: ENAIRE · DK/IE: ArcGIS) — no-fly zones, control zones, nature reserves; search radius switchable between 5 m and 100 m |
| 48 h forecast | Hourly weather forecast over 2 days (scrollable, drone-flight light per hour) |
| 5-day overview | Daily overview with min/max temperature, wind and traffic-light rating |
| Hints & warnings | Contextual warnings (GPS interference at high Kp, increased air traffic, no-fly reasoning) |
| 5 languages | German, English, French, Spanish, Polish — switchable on the landing page |
| PWA | Installable as a web app (install banner with 30-day cooldown), works offline for static content |
sw.js) + Web App Manifest (manifest.json) for PWA support| Source | Data | CORS |
|---|---|---|
| DWD BrightSky | Weather data (hourly, 7 days) | ✅ |
| NOAA Aviation Weather Center | METAR / TAF | ❌ → Netlify Function awc.js |
| GFZ Potsdam | Kp-index, Hp30 (30-min resolution) | ❌ → Netlify Function gfz.js |
| NOAA SWPC | Kp-index fallback | ✅ |
| Airplanes.live | ADS-B flight movements | ✅ |
| Photon (Komoot) | Geocoding / location search | ✅ |
| Windy.com | External link for detailed cloud view | — |
| Geo-zones 🇩🇪 DiPUL / uas-betrieb.de | Drone airspace zones (WMS + GetFeatureInfo) | ✅ |
| Geo-zones 🇫🇷 ED-269 dataset | French UAS zones (data/uas-zones-fr.json) | via zones-fr.js |
| Geo-zones 🇦🇹 Austro Control / dronespace.at | Austrian UAS zones, ED-269 (data/uas-zones-at.json) | via zones-at.js |
| Geo-zones 🇨🇭 BAZL / geo.admin.ch | Swiss UAS zones (WMS + Identify) |
skycheck.html ← entire app (HTML + CSS + JS, ~9.4k lines)
coordinates.html ← GPS2UTM coordinate page: GPS → ETRS89/UTM, Gauss-Krüger, DHHN2016
coordinate-tools.js ← coordinate maths for that page (UTM, Gauss-Krüger approximation, GCG2016 geoid)
ctr-hoehenregeln.html ← info page: DFS/DAS control-zone height rules (NfL 2026-1-3960/-3981), cross-section graphic and airport gallery
img/ ← WebP images for that page (height-grid guide + airport gallery)
manifest.json ← PWA web app manifest
sw.js ← service worker (caching)
icon-192x192.png ← app icon (small)
icon-512x512.png ← app icon (large)
skycheck-icon.svg ← source icon (vector)
netlify.toml ← Netlify config (function bundle includes + root URL rewrite)
netlify/
functions/
awc.js ← NOAA AWC proxy for METAR/TAF (CORS workaround)
gfz.js ← GFZ Potsdam proxy for Kp-index/Hp30
zones-fr.js ← France UAS zones (reads spatial 2° tiles, bbox-filtered)
zones-at.js ← Austria UAS zones (reads data/uas-zones-at.json; ?all=1 = full overlay)
zones-ed269.js ← LU/NO/EE/SE/BE UAS zones (reads data/uas-zones-<cc>.json; exact area test; ?all=1 = full overlay)
notam-no.js ← Norway: live proxy for temporary NOTAM restriction areas (dronesoner.no, on click only)
notam-se.js ← Sweden: live proxy for NOTAM and AIP SUP restriction areas (LFV, on click only)
notam-be.js ← Belgium: live proxy for NOTAM zones and temporary no-fly zones (Droneguide, on click only)
data/
uas-zones-fr.json ← ED-269 France UAS zones (monthly snapshot, replaceable)
fr-zones-tiles/ ← generated spatial index for the Netlify function
context/fr/ ← bundled viewport tiles for the four France context layers
uas-zones-at.json ← ED-269 Austria UAS zones (about 290 zones, auto-updated)
uas-zones-at.version ← marker of the last imported Austro Control release (idempotency)
uas-zones-{lu,no,ee,se,be}.json ← ED-269 Luxembourg / Norway / Estonia / Sweden / Belgium UAS zones (weekly snapshots)
uas-zones-{lu,no,ee,se,be}.version ← markers of the last imported snapshot per country (idempotency)
dipul-airac/ ← extracted DiPUL AIRAC air-traffic layers (weekly check)
<cc>-protected.json ← context: protected areas (OSM, ODbL) — cc ∈ at,ch,es,dk,ie,fr
<cc>-motorways.json ← context: motorways (OSM, ODbL)
<cc>-powerlines.json ← context: high-voltage power lines (OSM, ODbL)
<cc>-rail.json ← context: main railway lines (OSM, ODbL)
gcg2016v2023-cm.i16 ← compact GCG2016 quasi-geoid grid (Int16, cm) for the coordinate page
scripts/
build-eu-zones.mjs ← builds the LU/NO/EE/SE/BE ED-269 snapshots from the official sources
gen-context.mjs ← reusable generator: Overpass → simplified GeoJSON (lines + polygons)
fetch-context.sh ← robust driver: curl-fetch (retry) + gen-context per layer, idempotent
build-fr-spatial-data.mjs ← builds the 2° spatial tiles for France (zones index + context layers)
build-gcg-web-grid.mjs ← converts the official GCG2016 GeoTIFF into the compact web grid
README.md ← how to add context layers for a new country
test-coordinate-tools.cjs ← Node check for coordinate-tools.js (`node scripts/test-coordinate-tools.cjs`)
tests/ ← Node tests (`node --test "tests/*.test.mjs"`)
.github/
workflows/
update-at-zones.yml ← monthly job: fetch newest Austro Control ED-269 → commit data file
update-eu-zones.yml ← weekly job (Mondays): refresh the LU/NO/EE/SE/BE ED-269 snapshots → commit data files
update-de-airac.yml ← weekly job: check the Mobilithek AIRAC offer → extract the DiPUL air-traffic layers
redirect.html ← optional redirect page
🇨🇭 CH needs none of the above — the map overlay is the geo.admin.ch WMS layer and the zone detail comes from the geo.admin.ch Identify REST API, both called directly from the browser (CORS-open). No Netlify function, no hosted data file, no update workflow.
SkyCheck uses an adapter pattern for country-specific geo-zone sources. Country is detected from the hostname (e.g. skycheck-ch.netlify.app) or the URL parameter ?country=de|fr|at|ch|es|dk|ie|nl|pt|lu|no|ee|se|be. Default: de. Weather, ADS-B, METAR/TAF and Kp-index are global; the UI language, the search-hint landmark and the geocoding bounding box are set per country.
| Country | Geo-zone source | Overlay | Detail list / status | Data & updates |
|---|---|---|---|---|
| 🇩🇪 DE (default) | DiPUL WMS (uas-betrieb.de) | WMS tiles | WMS GetFeatureInfo | live service (official, always current) |
| 🇫🇷 FR | ED-269 dataset | client-side polygons/circles | zones-fr.js (bbox filter) | data/uas-zones-fr.json (~3.6k zones, replaceable) |
| 🇦🇹 AT | Austro Control ED-269 | all zones drawn client-side (about 290) | zones-at.js (bbox filter) | data/uas-zones-at.json — auto-updated monthly via GitHub Actions (update-at-zones.yml) |
| 🇨🇭 CH | BAZL / geo.admin.ch ch.bazl.einschraenkungen-drohnen | WMS tiles | geo.admin.ch Identify REST API | live service (CORS-open) — no function, no file, no workflow |
| 🇪🇸 ES | ENAIRE servAIS SRV_UAS_ZG_V0 | WMS tiles | ArcGIS Identify REST API | live service (CORS-open) — no function, no file, no workflow |
| 🇩🇰 DK | Trafikstyrelsen ArcGIS FeatureServer | client-side vector polygons (~870, colour-coded) | ArcGIS query (bbox) | live service (CORS-open) — no function, no file, no workflow |
| 🇮🇪 IE | EASA Common Repository ie_geozones | client-side vector polygons (76) | ArcGIS query (bbox) | live service (CORS-open, preliminary EASA data) |
| 🇳🇱 NL | EASA Common Repository Netherlands_ED318 | client-side vector polygons (~162) | ArcGIS query (bbox) | live service (CORS-open) — no function, no file, no workflow |
| 🇵🇹 PT | EASA Common Repository / ANAC Portugal_Geo_Zones_Polygons | client-side vector polygons (~314) |
Three integration styles: WMS + point query (DE, CH, ES — official live services render the whole country and answer point queries directly), client-side ArcGIS vector (DK, IE, NL, PT — GeoJSON pulled live from an ArcGIS FeatureServer, drawn as colour-coded polygons), and hosted ED-269 file + Netlify function (FR, AT, LU, NO, EE, SE, BE — a JSON dataset in the repo, filtered server-side; AT refreshes itself monthly, LU/NO/EE/SE/BE weekly).
Zone counts pulled directly from each country's live source (DE via DiPUL WFS across all 31 categories; ES via ENAIRE ArcGIS; FR/AT from the ED-269 datasets; CH from the geo.admin.ch GeoJSON; DK/IE via ArcGIS FeatureServer; LU/NO/EE/SE/BE from the weekly ED-269 snapshots in data/), normalised by land area:
| Country | Geo-zones | Area (km²) | Zones per 1 000 km² |
|---|---|---|---|
| 🇩🇪 Germany | 88 635 | 357 592 | ≈ 248 |
| 🇪🇸 Spain | 15 787 | 505 990 | ≈ 31 |
| 🇨🇭 Switzerland | 1 232 | 41 285 | ≈ 30 |
| 🇩🇰 Denmark | 870 | 42 952 | ≈ 20 |
| 🇧🇪 Belgium | 582 | 30 689 | ≈ 19 |
| 🇱🇺 Luxembourg | 43 | 2 586 | ≈ 17 |
| 🇫🇷 France | 3 642 | 551 695 | ≈ 6.6 |
| 🇪🇪 Estonia | 241 | 45 339 | ≈ 5.3 |
| 🇳🇴 Norway | 1 390 | 385 207 | ≈ 3.6 |
| 🇦🇹 Austria | about 290 | 83 879 | ≈ 3.4 |
| 🇮🇪 Ireland* | 76 | 70 273 | ≈ 1.1 |
| 🇸🇪 Sweden | 390 | 450 295 | ≈ 0.9 |
* Ireland's figure is from the EASA Common Repository, which is still preliminary (the national IAA dataset lists ~87) — so its count is indicative, not complete.
Germany stands out drastically — roughly 5.6× the absolute count of the next country (Spain) and about 8× the zone density of Spain/Switzerland, 37× France and 73× Austria. The reason is Germany's uniquely fine-grained zoning: it designates zones for categories the others largely don't — e.g. industrial sites (24 482), residential properties (10 793), railway installations (9 819), nature reserves (9 012), even public outdoor pools (6 600). (Counting granularity differs between national datasets, which is itself the point: Germany zones far more categories at far finer resolution.)
Under Article 15(3) of Commission Implementing Regulation (EU) 2019/947, every member state that defines UAS geographical zones must make that information publicly available in a common unique digital format — the EUROCAE ED-269 / ED-318 standard — explicitly for geo-awareness purposes, i.e. so that apps and systems like SkyCheck can inform pilots. The Open Data Directive (EU) 2019/1024 additionally frames such public-sector geospatial data as re-usable (geospatial being a "high-value dataset" category). In other words, the data is legally required to be openly accessible; SkyCheck merely displays each country's official source, with attribution. Exact re-use terms are still set nationally, so the individual data providers are credited above.
The Aviation Weather and GFZ APIs don't send CORS headers, so they go through Netlify Functions:
awc.js — proxies aviationweather.gov/api/data/{metar,taf}, adds CORS headers, 10 s timeout, 90 s cachegfz.js — proxies kp.gfz.de requests (Kp-index, Hp30)Weather, air traffic, METAR/TAF and Kp-index are loaded in parallel. The GFZ Hp30 tile loads asynchronously in the background without blocking the main view — the status page therefore appears in ~1 second.
The WMS GetFeatureInfo request uses a 101×101 pixel grid. The effective search radius is controlled via the bounding-box size δ:
δ = Math.max(0.001134, radiusM * 101 / (4 * 111320))
This allows the search radius to be precisely scaled between 5 m and 100 m (empirically calibrated).
# Simple HTTP server (Python)
python3 -m http.server 8091
# → http://localhost:8091/skycheck.html
# With Netlify Functions (recommended — otherwise no METAR/TAF/Kp)
npm install -g netlify-cli
netlify dev
# → http://localhost:8888/skycheck.html
Note: Without
netlify dev, the METAR/TAF and GFZ tiles will fail on localhost because/.netlify/functions/*is not available. Weather, ADS-B and airspace work with the plain HTTP server as well.
| Criterion | Warning | No-Go |
|---|---|---|
| Wind gusts | > 7 m/s | > 10 m/s |
| Kp-index | > 3.3 (GPS impaired) | > 5.0 (GPS unreliable) |
| Precipitation | > 0 mm | > 0.3 mm |
| Geo-zone | unrestricted, nature buffer zone | active no-fly zone |
| Version | Change |
|---|---|
| v26.10.118.1 | 🇸🇪 Sweden's permanent restricted areas now show red. 146 of the 160 restricted areas (LFV layer mais:RSTA, from ground) are now classified as prohibited (red traffic light, red polygon) instead of authorisation required (yellow) — consistent with the temporary NOTAM/AIP SUP restricted areas. The descriptions from the data, including notes on possible permits from the Transportstyrelsen, are unchanged; 5 km airport areas stay authorisation required. The 14 areas whose official description requires a permit only when announced by NOTAM or AIP SUP (e.g. the southern Stockholm archipelago, northern Gotland) stay authorisation required (yellow); once activated they appear red via the live button. Owner's decision; snapshot data/uas-zones-se.json regenerated, no client change. |
| v26.10.118.0 | 🇸🇪🇧🇪 Sweden and Belgium. Two new country variants (skycheck-se, skycheck-be) with official zones as weekly refreshed ED-269 snapshots (data/uas-zones-{se,be}.json, 390 / 582 zones). Sweden: seven LFV WFS layers plus the Transportstyrelsen ED-318 zone file (CC BY 4.0); restricted areas and 5 km airport areas = authorisation required; control zones, traffic (information) zones, 1 km heliport areas and danger areas = conditional; the 68 UAS zones with their validity windows as stated in the file. Belgium: Droneguide WFS (skeyes, for the BCAA), without the world time-zone polygons and without zones starting above 120 m AGL (like the official map's default view); licence not stated by the publisher; reuse per the BCAA's documented reply (ref. G26-187 of 2026-09-16) with four notices that the app shows permanently below the zone list. Live button now also for Sweden (notam-se: NOTAM areas with the official chart's filter, ground level only, plus currently valid AIP SUP areas near ground level) and Belgium (notam-be: NOTAM zones and temporary no-fly zones), alongside Norway. New rule for all five ED-269 countries: a zone counts as "currently inactive" when every activation window has ended or starts more than 24 hours from now ("Not yet active — starts UTC"); windows starting within 24 hours count as running. Build script and workflow cover se (directory of eight files) and be (one file); unknown restriction values or altitude texts abort that country's build. 299 Node tests. Fix wave after the final review: source attribution for the five snapshot countries (Sweden with the CC BY 4.0 link and "adapted") in the map attribution; Swedish SUP legal links encoded correctly; NOTAM classification RD/W… conditional, every other R… prohibited; live hits ordered active – snapshot zones – inactive; Belgium one-liner in the map panel above the NOTAM hint; per-country step time limits in the workflow. |
SkyCheck does not track or store any user data. The app is purely a web application — even the "installation" as a PWA only places an app icon and does not install anything persistently. Data is loaded only temporarily and disappears when you leave the app.
Germany, France, Austria, Switzerland, Spain, Denmark & Ireland · Operation in VLOS · No liability for completeness or accuracy of the displayed data. Using the app does not replace any required official authorisation. SkyCheck is an orientation aid — the legally required authorisation and final airspace clearance are issued via the competent national portals (e.g. DFS Aviation Services for DE, Austro Control Dronespace for AT, skyguide for CH).
Data sources are subject to their respective licences (DWD Open Data, GFZ CC BY 4.0, Airplanes.live Fair Use, NOAA Public Domain, DiPUL, Austro Control, BAZL / swisstopo geo.admin.ch, ENAIRE, Trafikstyrelsen, EASA).
| skycheck-lu.netlify.app |
| DAC Luxembourg — ED-269 snapshot (auto-updated weekly) |
| 🇳🇴 Norway | skycheck-no.netlify.app | Luftfartstilsynet / dronesoner.no — ED-269 snapshot (auto-updated weekly); NOTAM restricted areas on click |
| 🇪🇪 Estonia | skycheck-ee.netlify.app | EANS (utm.eans.ee) — ED-269 snapshot (auto-updated weekly); short-term areas may be up to 7 days old |
| 🇸🇪 Sweden | skycheck-se.netlify.app | LFV / Transportstyrelsen (daim.lfv.se, CC BY 4.0) — ED-269 snapshot (auto-updated weekly); NOTAM and AIP SUP areas on click |
| 🇧🇪 Belgium | skycheck-be.netlify.app | BCAA / skeyes Droneguide (map.droneguide.be) — ED-269 snapshot (auto-updated weekly); NOTAM zones and temporary no-fly zones on click; BCAA notice permanently below the zone list |
ch.bazl.einschraenkungen-drohnen| ✅ |
| Geo-zones 🇪🇸 ENAIRE servAIS / EASA Common Repository | Spanish UAS zones — ENAIRE SRV_UAS_ZG_V0 (WMS + ArcGIS Identify) or EASA geozone_EASA (ArcGIS vector, viewport-based); switchable, EASA default | ✅ |
| Geo-zones 🇩🇰 Trafikstyrelsen | Danish UAS zones (ArcGIS FeatureServer, GeoJSON) | ✅ |
| Geo-zones 🇮🇪 EASA Common Repository | Irish UAS zones ie_geozones (ArcGIS, ED-318, preliminary) | ✅ |
| Geo-zones 🇳🇱 EASA Common Repository | Dutch UAS zones Netherlands_ED318 (ArcGIS vector, ED-318, ~162 zones) | ✅ |
| Geo-zones 🇵🇹 EASA Common Repository / ANAC | Portuguese UAS zones Portugal_Geo_Zones_Polygons (ArcGIS vector, ~314 zones; KML-derived schema) | ✅ |
| Geo-zones 🇱🇺 DAC Luxembourg | Luxembourg UAS geographical zones, ED-269 snapshot (data/uas-zones-lu.json, 43 zones; licence CC0) | via zones-ed269.js |
| Geo-zones 🇳🇴 Luftfartstilsynet / dronesoner.no | Norwegian UAS zones, ED-269 snapshot (data/uas-zones-no.json, 1390 zones; licence NLOD 2.0); temporary NOTAM restricted areas loaded on click (notam-no.js) | via zones-ed269.js |
| Geo-zones 🇪🇪 EANS | Estonian UAS zones, ED-269 snapshot (data/uas-zones-ee.json, 241 zones; licence: not stated by the publisher); short-term areas may be up to 7 days old | via zones-ed269.js |
| Geo-zones 🇸🇪 LFV / Transportstyrelsen | Swedish UAS zones, ED-269 snapshot (data/uas-zones-se.json, 390 zones; licence CC BY 4.0), composed from seven LFV WFS layers and the Transportstyrelsen ED-318 zone file; NOTAM and AIP SUP areas loaded on click (notam-se.js) | via zones-ed269.js |
| Geo-zones 🇧🇪 BCAA / skeyes Droneguide | Belgian UAS zones, ED-269 snapshot (data/uas-zones-be.json, 582 zones; licence: not stated by the publisher); zones starting above 120 m AGL are left out, like the official map's default view; reuse per the BCAA's documented reply (ref. G26-187 of 2026-09-16), with four notices shown permanently below the zone list; NOTAM zones and temporary no-fly zones loaded on click (notam-be.js) | via zones-ed269.js |
| Context layers (🇦🇹🇨🇭🇪🇸🇩🇰🇮🇪🇫🇷) OpenStreetMap (ODbL) | Optional overlays — protected areas, motorways, power lines, railways (static GeoJSON snapshots in data/<cc>-*.json, generated via scripts/); informational only, not part of the flight-status check. DE already has these via DiPUL | ✅ |
| ArcGIS query (bbox) |
| live service (CORS-open) — no function, no file, no workflow |
| 🇱🇺 LU | DAC Luxembourg ED-269 | all zones drawn client-side (43) | zones-ed269.js (exact area test) | data/uas-zones-lu.json — auto-updated weekly via GitHub Actions (update-eu-zones.yml) |
| 🇳🇴 NO | Luftfartstilsynet / dronesoner.no ED-269 | all zones drawn client-side (1390) | zones-ed269.js (exact area test) | data/uas-zones-no.json — auto-updated weekly via GitHub Actions (update-eu-zones.yml); NOTAM areas live on click (notam-no.js) |
| 🇪🇪 EE | EANS ED-269 | all zones drawn client-side (241) | zones-ed269.js (exact area test) | data/uas-zones-ee.json — auto-updated weekly via GitHub Actions (update-eu-zones.yml); short-term areas may be up to 7 days old |
| 🇸🇪 SE | LFV / Transportstyrelsen ED-269 (CC BY 4.0) | all zones drawn client-side (390) | zones-ed269.js (exact area test) | data/uas-zones-se.json — auto-updated weekly via GitHub Actions (update-eu-zones.yml); NOTAM and AIP SUP areas live on click (notam-se.js) |
| 🇧🇪 BE | BCAA / skeyes Droneguide | all zones drawn client-side (582) | zones-ed269.js (exact area test) | data/uas-zones-be.json — auto-updated weekly via GitHub Actions (update-eu-zones.yml); NOTAM and temporary no-fly zones live on click (notam-be.js); notice below the zone list |
| v26.10.117.2 | Installed app starts light. manifest.json splash and theme colours changed from dark to the light #eef4fb, and the iOS status bar style from black-translucent to default, matching the light default interface introduced in v26.10.117.0. Already installed apps pick up the new colours with a delay or after reinstalling, depending on the operating system. |
| v26.10.117.1 | 🛟 Zone data outage is now visible. If the geo-zone lookup fails (HTTP error, timeout, offline), SkyCheck now shows "Zone data unavailable" with a yellow traffic light instead of "no restrictions" in green — in all twelve countries. The zone list shows a notice box with a link to the official source; the map panel shows a grey entry. A successful lookup with no hits stays green; local file fallbacks stay in place. A hanging service runs into the outage notice after 20 seconds; while the lookup runs, the banner shows "Checking airspace …" instead of "no restrictions". Germany: a 200 answer that is not GeoServer output counts as a failure; Denmark and Germany show partial results together with the outage notice. Not covered: (1) the full-country map overlay; (2) Germany: a DiPUL layer that answers with a server error is skipped for the rest of the session, and its zones are then missing without a notice; (3) while a lookup is running, the zone list and map panel may still show the previous point's entries; (4) the banner's weather line keeps the old language after a language switch until the next check. 147 Node tests. |
| v26.10.117.0 | 🇱🇺🇳🇴🇪🇪 Luxembourg, Norway and Estonia. Three new country variants (skycheck-lu, skycheck-no, skycheck-ee) with official ED-269 geozones as weekly refreshed snapshots (data/uas-zones-{lu,no,ee}.json, 43 / 1390 / 241 zones; sources: DAC Luxembourg CC0, Luftfartstilsynet / dronesoner.no NLOD 2.0, EANS). New Netlify function zones-ed269 with an exact area test (point in polygon or edge within the search radius). Zones whose activation windows have all ended stay visible as "currently inactive" (yellow instead of red). Norway: temporary NOTAM restriction areas are loaded live on click via the new function notam-no, drawn dashed red and counted for the traffic light for 5 minutes. Estonia: a fixed hint says short-term areas may be up to 7 days old. Zone names are now HTML-escaped in the status banner and map panel. The interface now starts in light mode by default (a stored choice, including dark, is respected). 39 Node tests. |
| v26.08.116.8 | 🌍 CTR height-rules page: 5 more languages (FR/ES/IT/NL/PL), SVG-flag language switcher + cross-section graphic rework. ctr-hoehenregeln.html. (1) Languages: now available in 7 languages — German, English and new French, Spanish, Italian, Dutch, Polish (full i18n of all text, HTML blocks, tables, SVG graphic labels and cards; aviation terminology). (2) Language switcher: replaced the DE/EN text toggle with an SVG-flag dropdown — shows the active language's flag, click to pick another; robust inline SVG flags (no emoji-flag fallback issues); detection via ?lang=, localStorage and navigator.language. (3) Graphic: the cross-section was reworked for clarity — the Zone-2 hill became a flat low-height plateau, the aerodrome now sits on its own reference elevation (flat), Zone-1 height bars removed (no general clearance → no height rule), the confusing floating aerodrome-elevation reference line removed, a labelled flat "cap = aerodrome elev. + 25 m" ceiling line added, the building cluster redrawn as a wider skyline spanning the Zone-2/3 boundary, and the misleading "to scale" note on the 800 m visibility marker dropped. |
| v26.08.116.7 | 🇩🇪 CTR height-rules page: NfL 2026-1-3959 (BMV principles) added — general operating conditions + 800 m visibility annotation. ctr-hoehenregeln.html (DE+EN). Adds the overarching NfL 2026-1-3959 (BMV principles for UAS in Class D airspace, the basis for 3960/3981) as the first reference. New "Further conditions" box summarising the general NfL-3959 conditions, led by a highlighted see-and-avoid warning: ATC provides no separation (incl. no wake-turbulence separation) and no traffic information — collision avoidance is solely the remote pilot's responsibility. Further: minimum visibility ≥ 800 m (except near obstacles / under individual clearance), autonomous flights prohibited, BVLOS & swarm permitted. The cross-section SVG gains a to-scale "Visibility ≥ 800 m" annotation (top-left sky, kept away from the obstacle scenes to avoid misreading the exception). Only ctr-hoehenregeln.html; APP_VER bump. |
| v26.08.116.6 | 🇩🇪 CTR height-rules page: gallery extended to all 24 CTR-D airports, grouped by DFS/DAS + self-documenting filename scheme. ctr-hoehenregeln.html. The height-grid gallery now covers all 24 German CTR-D — the 6 missing airports were added: Erfurt-Weimar (EDDE), München (EDDM) (DFS) and Dortmund (EDLW), Paderborn-Lippstadt (EDLP), Niederrhein/Weeze (EDLV), Mönchengladbach (EDLN) (DAS). The gallery is split into two labelled groups — DFS aerodrome control · NfL 2026-1-3960 · 15 CTR-D and DAS aerodrome control · NfL 2026-1-3981 · 9 CTR-D. All gallery images were renamed to a self-documenting scheme hoehengrid_<nfl>_<dfs|das>_<slug>_<icao>.webp (18 existing via git mv, 6 new converted); the ports array gained NfL + authority fields; lead text 18 → 24. |
| v26.08.116.5 | 🇩🇪 CTR height-rules page: second general ruling NfL 2026-1-3981 (DAS) + both rulings cited together. ctr-hoehenregeln.html (DE+EN). Adds NfL 2026-1-3981 (CTRs under DFS Aviation Services / DAS aerodrome control) as the counterpart to the existing NfL 2026-1-3960 (DFS). Both rulings are now cited together at every authoritative point (eyebrow, subtitle, clearance box, accuracy notes, footer, meta description, obstacle-analysis link, references list). New subtitle line makes the full scope explicit: the same heights apply across all 24 CTR-D — 15 under DFS, 9 under DAS aerodrome control; plus a lead sentence explaining DFS vs DAS (same rules, different responsible ATC unit). Only ctr-hoehenregeln.html; APP_VER bump. |
| v26.08.116.4 | 🇩🇪 CTR height-rules graphic: obstacle rule + further-documents list. ctr-hoehenregeln.html (DE+EN). The cross-section SVG now visualises the obstacle rule (±30 m / +15 m green envelope): a wind turbine (Zone 4, above the cap), a radio mast (Zone 3, in a locally raised spot that would otherwise be 0 m / red → "sonst = 0 m"), and a cluster of 3 buildings on a flat Zone-3 plateau where the tallest within 30 m sets the +15 m reference — each with a ✓ drone, plus a ⚠ drone just outside (>30 m). New "Further documents" section (.reflist) with 3 new DFS references (DFS rule PDF, DFS-AS brief-info PDF, DFS-AS web page) alongside the existing core documents. |
| v26.08.116.3 | 🇩🇪 CTR height-rules link on the start page. The landing-page source/button row (.l-sources) now shows an accent-outlined feature chip "📐 CTR-Höhenregeln" as its first item (relative link ctr-hoehenregeln.html, opens in a new tab). New .l-src-feature CSS class sets it apart from the grey source chips. Link only, no logic change. |
| v26.08.116.2 | 🇩🇪 CTR height-rules page: obstacle-rule clarification + DFS procedure-info reference. ctr-hoehenregeln.html (DE+EN), purely additive: (a) a new note box "Obstacle rule: no blanket +15 m" (obstacleNote) — obstacle proximity (≤ 30 m laterally, ≤ 15 m above an obstacle) is the only case for exceeding the zone heights, and it grants no right to fly ≥ 15 m above ground everywhere (terrain is not an obstacle); links a legal analysis document (Google Doc); (b) the "near obstacles" rule card made more precise; (c) the DFS procedure-info PDF (dipul.de) appended as a "(DFS-Info)" link at all 15 NfL hyperlinks (static HTML + i18n DE/EN). |
| v26.08.116.1 | 🔧 CARTO basemap replacement. CARTO ended anonymous basemap access (tiles now carry an "API KEY REQUIRED" watermark). The 'Dark' style now uses regular OSM tiles inverted via CSS filter (no API key, zoom 19); the redundant 'Hell'/light CARTO style was removed (cycle: Dark → OSM → Satellite). CSP cleaned up. |
| v26.08.116.0 | 🇩🇪 CTR height-rules page: dark mode, DE/EN switch, English translation. ctr-hoehenregeln.html gains a top bar with a theme toggle (☀️/🌙; sets data-theme, persists to localStorage, honours prefers-color-scheme + ?theme=; early inline setter against FOUC) and a DE/EN language toggle (persists ctrhr-lang, honours ?lang=, defaults to the browser language). A full i18n system (T={de,en}, applyLang) translates every static node (data-i18n/data-i18n-html) and rebuilds the SVG scene, rule cards and gallery alt text per language. The German text stays in the HTML as a no-JS/SEO fallback. |
| v26.08.115.1 | 🇩🇪 CTR height-rules page: accuracy chapter, safety reserve, NfL links. ctr-hoehenregeln.html: (a) a "− safety reserve (≈ 5 m)" term in the explainer formula (red, flagged explicitly as a recommendation the live grid does NOT subtract — the calculation in skycheck.html is unchanged); (b) a closing chapter "Wie genau sind diese Höhenwerte?" (DEM source & zoom→resolution table, height accuracy RMSE/LE90, forest/slope effects, rounding logic, DGM1 note); (c) bugfix: the two error-effect cards wrongly used the numbered .steps class (a blue "1" badge covered the title) → switched to an unnumbered .factgrid; (d) NfL 2026-1-3960 now linked at all five visible spots (previously only intro + footer). |
| v26.08.115.0 | 🇩🇪 CTR height-rules page: tutorial + airport gallery. ctr-hoehenregeln.html gains (1) an illustrated tutorial "So funktioniert das Live-Höhengitter" — an annotated Stuttgart screenshot with five numbered callouts (grid button, colour raster, legend, tooltip, status overlay), a five-step card list, and an explainer with the formula max height (AGL) = min(cap over ground, airport elevation + cap − terrain height); (2) a gallery of 18 German airports with a CTR-D, as a lazy-loaded WebP grid (img/hoehengrid-flughoehen-drohnen-<city>.webp, ~2.5 MB total). All screenshots recompressed to WebP (1600 px). The NfL 2026-1-3960 is now also linked in the intro. |
| v26.08.114.3 | 🇩🇪 Height-grid legend + rules infographic. The height-grid legend now shows altitude ticks below the ramp (0 · 25 · 45 · ≥65 · 100 m), an ⓘ button opening a new hosted page ctr-hoehenregeln.html (a cross-section infographic of the maximum drone flight heights per CTR zone under NfL 2026-1-3960; the official NfL PDF is linked in its footer), and the legend was raised above the fullscreen button so the two no longer overlap. CSP extended with Google Fonts for the new page. |
| v26.08.114.2 | 🇩🇪 Height datum labels. The ground elevation in the zone panel now shows the DEM's vertical datum (“≈ X m MSL (DEM, EGM96)” — Terrarium tiles = EGM96, Open-Meteo fallback = EGM2008), and the height-grid hover popup adds the terrain height at the cursor as DHHN2016 (“… m AGL · ground ≈ X m DHHN2016”; the DEM's orthometric MSL equals DHHN2016 in Germany to within sub-metre, below the DEM's own accuracy). |
| v26.08.114.1 | 🇩🇪 Point ground elevation from DEM tiles (reliable). The ground elevation shown in the zone panel (“≈ X m MSL”) relied solely on Open-Meteo's elevation API and went blank (“—”) at its daily limit (Daily API request limit exceeded); it now comes primarily from the DEM elevation tiles (no daily limit, consistent with the height grid), with Open-Meteo only as a tolerant fallback (the centre point is enough). The “m MSL” label was already there. |
| v26.08.114.0 | 🇩🇪 Height grid on DEM elevation tiles + check robustness. The height grid now reads terrain from DEM elevation tiles (Terrarium/AWS Open Data, ~25 m/px) instead of many Open-Meteo point queries: a few PNG tiles give full-resolution terrain for the whole CTR → natural terrain ridges, the Domberg is now visible, build ~1.6 s, and the hover is instantly precise (no more waiting). The heatmap is a single crisp L.imageOverlay (no tile seams/artefacts) and the traffic-light scale is calibrated to the DFS caps (25 m orange, 45 m yellow). Robustness (fixes live bugs from 113.2): weather/Kp/traffic are each non-fatal so one failing source no longer blanks the whole check; fetchWeather uses a 6-day window + timeout (the 7-day window was timing out at BrightSky); a $alarm typo is fixed. |
| v26.08.113.2 | 🇩🇪 Height grid refined. Finer ~300 m tiles on a canvas renderer (was ~940 m) so cells hug the round CTR boundaries — coarse tiles overlapped the edges and could show a green Zone-4 value at a Zone-3 point. Terrain is now bilinearly interpolated from a coarse support grid, with per-chunk retry and nearest-neighbour gap-filling, so a throttled elevation request no longer blanks half the CTR. The hover now computes the maximum height at the exact cursor position (an instant interpolated value, then the precise Open-Meteo elevation at that point) — noticeably lower on hills such as the Domberg — shown as a dark chip below the cursor so it no longer overlaps the DiPUL zone tooltip. Mobile: the geo-zone panel is always placed below the (multi-row) button bar, so they no longer overlap (S24 Ultra and smaller). The height formula itself was already correct. |
| v26.08.113.0 | 🇩🇪 Height grid now covers the whole CTR (WFS redesign). The traffic-light heatmap now spans the entire DFS control zone (like the Czech GRID) instead of a pin-centred 3 km grid, and is computed once per CTR and cached — clicking new positions inside the same CTR no longer rebuilds it (fixing the heatmap/button inconsistently disappearing after a few clicks). New data source: the DiPUL WFS (dipul:kontrollzonen) delivers the exact sub-zone polygons (each U_CONTROL_ZONE_1…4 with its MSL lower limit); every cell is assigned to its correct sub-zone by point-in-polygon, terrain is fetched (Open-Meteo) and coloured via computeCtrFlightInfo — so the 2/3/4 steps are real rather than one detected zone applied everywhere. Toggle stays visible throughout Germany; binding remains DiPUL / NfL. |
| v26.08.112.0 | 🇩🇪 Height grid (toggleable). A traffic-light heatmap of the maximum flight height per cell inside a DFS control zone (CTR 2–4) — inspired by the Czech DroneMap GRID. Hybrid: DiPUL's WMS shows the sub-zone boundaries; the new overlay colours a 13×13 terrain grid (~3 km, Open-Meteo batch) via the existing computeCtrFlightInfo using the CTR zone detected at the location. Own map toggle + legend; appears only inside a German CTR 2/3/4. It is an approximation (one detected sub-zone applied across the grid — flat terrain in one zone reads fairly uniform; the 2/3/4 steps appear when moving between sub-zones) — binding remains DiPUL / NfL. |
| v26.08.111.0 | 🇳🇱🇵🇹 Netherlands and Portugal added (skycheck-nl, skycheck-pt). Both use the EASA Common Repository ArcGIS FeatureServers (client-side vector polygons, CORS-open) via the existing IE-style adapter: NL is ED-318 (~162 zones, coloured by restriction), PT is a KML-derived schema (~314 zones, coloured by Restriction, type from FolderPath — Aeroportos, CTRs, Zonas Militares, protected areas — ANAC contact). Country wiring (detection, names, bbox, landmark, CC, zone-source strip, country tile) and the full-overlay mechanism extended to nl/pt. For Czech Republic the clean official ED-269 route is on the roadmap (the ŘLP DronMap API is AES-obfuscated, the commercial Dronecharts WMS needs permission). |
| v26.08.110.2 | Landing-page order clarified. Country-specific SkyCheck variants now come first, followed by SkyAlarm, PointCloud Manager, GPS2UTM and MetaLens. |
| v26.08.110.1 | Cross-app navigation completed. SkyCheck now includes a PointCloud Manager card alongside SkyAlarm and GPS2UTM. |
| v26.08.110.0 | GPS2UTM integration and shared version format. The landing page links to GPS2UTM with the shared white/red/cyan wordmark. SkyCheck now uses vYY.MM.major.subversion, shown completely in the app header, footer and browser tab. |
| v1.09 | Collapsible map controls on every screen size. The compact one-row toolbar and collapsed weather/elevation/coordinate details now also replace the former desktop overlays, so split-screen and wide previews use the same interface as phones. |
| v1.08 | Compact mobile map overlays. The map toolbar is reduced to one row on phones; search radii 5/100/200 m and the 1.5 km alarm circle open on demand. The zone list stays visible while weather, terrain and coordinates are collapsible; address popups no longer duplicate GPS coordinates. |
| v1.07 | GPS coordinate conversion and vertical datum. WGS84/ETRS89 positions now show UTM immediately plus expandable Gauss-Krueger and GCG2016/DHHN2016 details. coordinates.html is a mobile live-GPS converter with the official Lübben control point as a built-in numerical check. |
| v1.06 | Polished light map overlays. The map controls, status panel, fullscreen button and map-style switch now use bright translucent surfaces on OSM. Controls follow a consistent rectangular 32 px system, while coloured context-layer toggles retain their category colour. Verified visually on desktop and 390 px mobile. |
| v1.05 | Theme/map pairing and local Austria fallback. Light interface now selects the standard OSM basemap, dark interface selects CARTO Dark; the separate map-style button can still override this afterwards. Local previews load the bundled Austro Control ED-269 file when Netlify Functions are unavailable, restoring all Austrian airport/control zones and point details. |
| v1.04 | Global light interface. A sun/moon button on the landing page and results navigation switches the complete SkyCheck interface, persists the preference, and keeps the integrated alarm view in sync. The same implementation applies to all seven country variants; map styling remains independently selectable. |
| v1.03 | France performance. The four OSM context layers are no longer loaded as full country files but bundled per 2° viewport tile — for Paris this cuts the transfer from ~4.1 MB to ~0.25 MB gzip. The French zones function also reads only the relevant spatial tiles on a cold start instead of the full 8.8 MB dataset. |
| v1.02 | Point-analysis performance. No blocking full-screen loader, an animated analysis circle, parallel queries, short-lived spatial caches, canvas rendering and improved browser/CDN caching. |
| v0.98 | Browser tab title now follows the UI language. The <title> tag was a static German string never wired to i18n, so every non-DE site showed a German tab title. Now document.title is set from a docTitle i18n key inside applyLang() — it updates on load (per country default language) and on every manual language switch, in all five languages |
| v0.97 | Context layers extended to CH, ES, DK, IE, FR. The Austria overlays from v0.96 (protected areas, motorways, power lines, railways) now exist for all non-DE countries (DE already has them via DiPUL). The client is generalised — CONTEXT_META + CONTEXT_COUNTRIES, one data file per country (data/<cc>-<layer>.json); the toggle group appears automatically for any listed country. The generator is now a single reusable tool (scripts/gen-context.mjs + a robust fetch-context.sh driver with curl-retry and resume) that stitches OSM segments into long polylines before simplifying, which shrank the large countries a lot (FR motorways 9 → 3.5 MB, ES 6 → 2.9 MB before gzip). France is clipped to a metropolitan bounding box (the ISO area would drag in overseas territories). Adding a future country = generate the data + add the code to CONTEXT_COUNTRIES (see scripts/README.md) |
| v0.96 | 🇦🇹 Austria context layers. skycheck-at can now overlay four extra, individually toggleable layers — protected areas (national parks, Natura 2000, nature reserves, landscape-protection areas, nature parks, biosphere reserves, protected landscape elements, natural monuments), motorways, high-voltage power lines and main railways. Sourced from OpenStreetMap (ODbL) as static, pre-simplified GeoJSON snapshots in data/at-*.json (generators in scripts/), lazy-loaded on toggle and drawn as coloured client-side vector overlays. They are informational context (distance-keeping guidance) — the binding zone check stays Austro Control / dronespace.at, so they do not feed the flight-status evaluation. Inspired by drohnenkarte.at, which uses the same open sources |
| v0.95 | Hotfix for v0.94: the global de-DE→_locale() replacement had also hit the _LOCALES map's own definition (de: _locale()), which read _LOCALES while it was still initialising — a temporal-dead-zone error that stopped the whole app from starting. Restored the 'de-DE' literal. (node --check passes on syntax; this was a runtime-only regression, caught in the live smoke test.) |
| v0.94 | Full i18n audit — no more German leaking into other languages. Several dynamically-rendered sections (dew-point/icing analysis, METAR/TAF labels, estimated cloud base, loader/error messages, aircraft-marker popups, alerts, the "Updated" timestamp) were either hardcoded in German or only re-rendered their static labels on a language switch — so English/French users still saw German. Now every user-facing string routes through the i18n table (16 new keys × 5 languages), a _locale() helper drives all date/time formatting (was hardcoded de-DE), and switching language re-renders all dynamic result sections, not just the static data-i18n labels |
| v0.93 | Landing polish & per-country correctness. (1) New start-screen tile "SkyCheck in other countries" listing every other country variant as a direct link, styled like the wordmark (Sky white · Check cyan · -xx coral); the current country is omitted and the labels follow the UI language. (2) Per-country geo-zone sources: the source strip on the start and results pages (and the map layer toggle, formerly "DiPUL zones") now show the correct provider for each country instead of DiPUL everywhere — DE DiPUL/DFS, FR Géoportail, AT Austro Control, CH BAZL, ES ENAIRE/EASA, DK Trafikstyrelsen, IE EASA. (3) Settings fully localised in all five languages (previously German-only); the DiPUL layer-mode option — which only affects Germany — is now hidden outside DE, leaving just the country-agnostic 48 h forecast setting |
| v0.92 | 🇪🇸 Spain source toggle: the start screen now lets you pick the geo-zone source — EASA Common Repository (client-side ArcGIS vector, coloured by zone type, viewport-based; default) or ENAIRE servAIS (the previous official WMS). EASA renders cleaner, transparent per-zone polygons instead of the ENAIRE full-country WMS blanket; choice persists in localStorage |
| v0.91 | 🇮🇪 Bugfix: getLegalLink crashed on numeric legal values (Denmark's Paragraf field is a number), which took down the whole render pipeline for DK — coerced to string before the regex match |
| v0.90 | 🇩🇰 Denmark (skycheck-dk) & 🇮🇪 Ireland (skycheck-ie): two client-side ArcGIS vector adapters — DK from Trafikstyrelsen's FeatureServer, IE from the EASA Common Repository (ED-318, preliminary). Both fetch GeoJSON directly (CORS-open), colour polygons by category and support the full-country overlay |
| v0.89 | Address search restricted to the active country via Photon countrycode filter (removes cross-border neighbours the bounding box let through) |
| v0.88 | Country-scoped address search: geocode() was hard-wired to Germany (lang=de + a German bounding box) — every country variant only returned German suggestions. Now a per-country bounding box + UI-language are used |
| v0.87 | Per-country defaults: capital-landmark search placeholder (DE Brandenburg Gate, FR Eiffel Tower, AT St. Stephen's, CH Federal Palace, ES Puerta del Sol) and country-based default UI language on first visit |
| v0.86 | 🇪🇸 Spain (skycheck-es): new country adapter using the DE/CH pattern — ENAIRE servAIS WMS layer for the overlay + ENAIRE ArcGIS Identify for the detail list/status (structured altitude limits, legal links). CORS-open, no function/file/workflow |
| v0.85 | 🇨🇭 Switzerland (skycheck-ch): new country adapter using the DE pattern — geo.admin.ch WMS layer for the map overlay + geo.admin.ch Identify REST API for the detail list/status. Both CORS-open, so no Netlify function, no hosted file and no update workflow are needed |
| v0.84 | 🇦🇹 AT map overlay now draws all Austrian zones (full-country overlay via ?all=1, like the DE WMS) instead of only the point-filtered zones at the marked location |
| v0.83 | 🇦🇹 Austria (skycheck-at): new country adapter. zones-at.js parses the Austro Control ED-269 dataset; data/uas-zones-at.json is auto-updated monthly by a GitHub Actions workflow (update-at-zones.yml) |
| v0.78–v0.82 | Security & quality pass (XSS escaping + CSP, METAR visibility unit fix, 5-language completeness, alarm-defect fixes, ice/fog/visibility in the live view) — see docs/code-review-2026-07-16.md |
| v0.76 | Fix race condition: FR zone overlay polygons / circles now appear on first map render (previously they only showed up after a double-click that re-fetched). The drawZoneOverlay call ran before the map was created; now a re-draw triggers after map init using the cached lastZones |
| v0.75 | Country-name i18n: landing-page badge and footer show the active country name in the chosen UI language (e.g. FR domain + ES UI → "Verificación de vuelo de dron · Francia"). New COUNTRY_NAMES lookup table, _country() helper, {country} placeholder interpolated by _t(). fltcatDisclaimer decountryfied (EU-wide rule, no country mention needed) |
| v0.74 | FR map overlay: geo-zones in FR mode are now drawn as Leaflet polygons / circles on the map (in addition to the list). zones-fr.js returns geometry; drawZoneOverlay() renders client-side. Zone toggle remains compatible |
| v0.73 | Country-adapter architecture (stage 1): multi-country support for geo-zones. Country detection via URL param (?country=fr) or hostname; new Netlify function zones-fr.js reads ED-269 JSON for France (data/uas-zones-fr.json, ~3.6k zones), DE keeps DiPUL WMS |
| v0.72 | Info modal text corrected (target audience, specific category, new privacy section); README converted from German-only → 5 languages |
| v0.71 | 5 languages supported (DE / EN / FR / ES / PL); language switcher on landing page |
| v0.70 | Flight-category info modal (VFR / MVFR / IFR / LIFR) |
| v0.69 | Cloud-cover link to Windy, METAR wind with ° symbol and colour codes |
| v0.68 | SkyAlarm link on landing page |
| v0.67 | Map-style button raised above Leaflet attribution (z-index fix) |
| v0.66 | Low-altitude overlay narrowed, map-style cycler in main map |
| v0.65 | Fix: literal \n characters in the METAR section HTML |
| v0.64 | New Netlify Function awc.js as CORS proxy for NOAA AWC (METAR/TAF) |
| v0.63 | fetchZones δ formula empirically calibrated, default radius 100 m |
| v0.58 | Geo-zone radius coupling 5 m / 100 m |
| v0.57 | PWA install banner (beforeinstallprompt) |
| v0.54 | METAR/TAF integration, airport markers on map, METAR card |
| v0.35 | Aircraft alarm view (full-screen, ADS-B, Haversine, Web Audio, Leaflet map) |
| v0.27 | DE/EN language switcher, full I18N |
| v0.20 | APP_VER variable, Kp measurement timestamp |
| v0.15 | GFZ loaded async, Netlify Function as primary proxy, load time ~1 s |
| v0.14 | Netlify serverless function gfz.js as a reliable CORS proxy |
| v0.10 | GFZ Hp30 bar chart (4 × measurement + forecast) |