chore: checkpoint initial — Zektyc dataset, avant humanisation

- site vitrine + fingerprint test + zmap + z-panel
- remplacement duckdns -> riricdev.tail5ea5cd.ts.net (canonical/og/alternates/docs)
- suppression du token DuckDNS (plus utilisé)
This commit is contained in:
riricdev 2026-09-06 13:03:25 +02:00
commit 8e7ec41f18
104 changed files with 19256 additions and 0 deletions

View file

@ -0,0 +1,108 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="ZMap archives and changelog: all versions of the free OpenStreetMap Android mapping app with EV charging stations." />
<meta name="robots" content="index, follow" />
<title>Archives &amp; changelog · ZMap · Zektyc</title>
<link rel="canonical" href="https://riricdev.tail5ea5cd.ts.net/zmap/en/archives" />
<meta name="theme-color" content="#070a0f" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Zektyc" />
<meta property="og:title" content="Archives &amp; changelog · ZMap" />
<meta property="og:description" content="Every ZMap version with its changelog and download links." />
<meta property="og:url" content="https://riricdev.tail5ea5cd.ts.net/zmap/en/archives" />
<meta property="og:image" content="https://riricdev.tail5ea5cd.ts.net/og-image.png" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="fr_FR" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" href="/css/style.css?v=7" />
</head>
<body>
<header id="h"></header>
<main class="legal" id="main">
<p class="legal-note"><a href="/zmap/en/">← Back to ZMap page</a></p>
<h1>ZMap — Archives &amp; changelog</h1>
<p class="legal-meta">Every published version, with its changelog and APK.</p>
<div class="dev-banner">
⚠️ All versions are public <strong>development builds</strong> meant for
testing. Archived APKs remain downloadable, but the latest version is
always recommended.
</div>
<section class="projects-page">
<article class="card">
<h3>v0.5.0 <span class="tag-latest">latest</span> <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 20, 2026 · 6,011 KB · <a href="/zmap/zmap-0.5.0.apk" download>⬇ Download</a></p>
<ul>
<li>Precise per-road speeds: server database of speed limits (OSM maxspeed) for all roads.</li>
<li>Each trip point is snapped to its actual road; its speed is returned with the route.</li>
<li>The phone keeps the full trip in local cache (offline while driving).</li>
</ul>
</article>
<article class="card">
<h3>v0.4.1 <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 20, 2026 · 6,012 KB · <a href="/zmap/zmap-0.4.1.apk" download>⬇ Download</a></p>
<ul>
<li>Fix: starting navigation no longer blocks if the speed server is slow — the trip always starts.</li>
<li>Restricted-access stations (private, customers, employees…) hidden by default and shown in yellow.</li>
</ul>
</article>
<article class="card">
<h3>v0.4.0 <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 19, 2026 · 6,012 KB · <a href="/zmap/zmap-0.4.0.apk" download>⬇ Download</a></p>
<ul>
<li>New UI: light/dark theme, toasts at the top of the screen, loading screen on startup.</li>
<li>Color-coded stations: green = open, red = closed, yellow = private access, with the kW power shown under each icon.</li>
<li>Privacy settings: WebSocket on/off, clear local cache, hide private stations.</li>
<li>Smoothness: keyboard auto-hide, animations, search bar hidden while driving.</li>
<li>Faster route calculation: max speeds fetched in a single request instead of one per point.</li>
</ul>
</article>
<article class="card">
<h3>v0.3.0 <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 19, 2026 · 6,001 KB · <a href="/zmap/zmap-0.3.0.apk" download>⬇ Download</a></p>
<ul>
<li>GPS-style driving navigation: camera behind the arrow, "turn left" steps, arrival time, speed and speed limit.</li>
<li>Car selection (Tesla Model Y, Zoé, e-208, ID.3, EV6…) with compatible station filtering.</li>
<li>Detailed connectors: Type 2, CCS, CHAdeMO… and consumption / range estimates.</li>
<li>Offline cache and secure WebSocket channel with auto-reconnect.</li>
</ul>
</article>
<article class="card">
<h3>v0.2.0 <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 19, 2026 · 5,963 KB · <a href="/zmap/zmap-0.2.0.apk" download>⬇ Download</a></p>
<ul>
<li>Route calculation (OSRM) with distance, duration and steps.</li>
<li>Charging stations along the route.</li>
<li>Place search (city, street, landmark).</li>
<li>Energy consumption and battery percentage estimates.</li>
</ul>
</article>
<article class="card">
<h3>v0.1.0 <span class="tag tag-dev">dev</span></h3>
<p class="legal-note">Aug 19, 2026 · 5,932 KB · <a href="/zmap/zmap-0.1.0.apk" download>⬇ Download</a></p>
<ul>
<li>First release: free OpenStreetMap map.</li>
<li>EV charging stations across Europe (Switzerland included).</li>
<li>Zektyc gateway to avoid Overpass rate limits.</li>
</ul>
</article>
</section>
</main>
<footer id="f"></footer>
<script src="/js/theme.js" defer></script>
<script src="/js/components.js?v=6" defer></script>
</body>
</html>

123
public/zmap/en/index.html Normal file
View file

@ -0,0 +1,123 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="ZMap: a free Android mapping app using OpenStreetMap, showing EV charging stations across Europe (Switzerland included)." />
<meta name="robots" content="index, follow" />
<title>ZMap · Zektyc</title>
<link rel="canonical" href="https://riricdev.tail5ea5cd.ts.net/zmap/en/" />
<meta name="theme-color" content="#070a0f" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Zektyc" />
<meta property="og:title" content="ZMap · Zektyc" />
<meta property="og:description" content="Free OpenStreetMap map with EV charging stations across Europe (Switzerland included). Android app with automatic updates." />
<meta property="og:url" content="https://riricdev.tail5ea5cd.ts.net/zmap/en/" />
<meta property="og:image" content="https://riricdev.tail5ea5cd.ts.net/og-image.png" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="fr_FR" />
<meta name="twitter:card" content="summary_large_image" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" href="/css/style.css?v=7" />
</head>
<body>
<header id="h"></header>
<main class="legal" id="main">
<p class="legal-note"><a href="/">← Back to home</a></p>
<h1>ZMap</h1>
<p class="legal-meta">Free Android mapping app · v0.5.0</p>
<a class="btn btn-ghost" href="/zmap/en/archives">🗂️ Archives &amp; changelog</a>
<a class="btn btn-ghost" href="/zmap/en/road-speeds">🧭 Per-road speeds</a>
<div class="dev-banner">
⚠️ <strong>Development build.</strong> All versions published here are
development builds meant for testing. They are public but may contain
bugs or UI changes.
</div>
<section class="projects-page">
<article class="card">
<h3>OpenStreetMap map</h3>
<p>
ZMap displays a free map based on OpenStreetMap tiles, with no account,
no trackers and no data collection. Move around freely with multi-touch
(pinch to zoom), the map and stations load based on your position.
</p>
</article>
<article class="card">
<h3>EV charging stations</h3>
<p>
ZMap queries the OpenStreetMap database (via the Zektyc proxy) and
displays EV charging stations across Europe, Switzerland included.
Tap a station to see its details: operator, power, connectors
(Type 2, CCS, CHAdeMO…), whether it is free and its address.
</p>
</article>
<article class="card">
<h3>Search &amp; navigation</h3>
<p>
Search for a place (city, street, landmark…) from the search bar.
ZMap then computes your route, shows distance and duration, and
highlights the charging stations along the way. Tap the directions
icon then the map to choose a destination.
</p>
</article>
<article class="card">
<h3>Turn-by-turn driving</h3>
<p>
A GPS-style navigation mode: the camera follows the car and stays
oriented behind the arrow (the road direction, not the phone's),
with "turn left" steps, arrival time, speed and road speed limit.
The map is dimmed so the blue route stands out.
</p>
</article>
<article class="card">
<h3>Built for your car</h3>
<p>
Pick your model (Tesla Model Y, Zoé, e-208, ID.3, EV6…): ZMap
computes consumption and range on your trip, and only shows stations
compatible with your connectors (Type 2, CCS, CHAdeMO…).
</p>
</article>
<article class="card">
<h3>Connected &amp; offline-ready</h3>
<p>
ZMap connects to the Zektyc server over secure WebSocket
(auto-reconnect, offline mode banner on disconnect). Before you
leave, the map, route and stations are cached on the phone: during
the drive, data usage is nearly zero.
</p>
</article>
<article class="card">
<h3>Automatic updates</h3>
<p>
ZMap automatically checks for new versions and updates itself, without
going through the Play Store.
</p>
</article>
<article class="card">
<h3>Download</h3>
<p>Latest version: <strong>0.5.0</strong></p>
<a class="btn btn-ghost" href="/zmap/zmap-0.5.0.apk" download>⬇ Download APK (6 MB)</a>
<p class="legal-note">
Compatible with Android 7.0 (API 24) and above. The app is signed
with a release key.
</p>
</article>
</section>
</main>
<footer id="f"></footer>
<script src="/js/theme.js" defer></script>
<script src="/js/components.js?v=6" defer></script>
</body>
</html>

View file

@ -0,0 +1,204 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="ZMap's per-road speed database: 90.5 million sampled points, 3.6 million km of roads mapped with their speed limit (OpenStreetMap), across all of Europe." />
<meta name="robots" content="index, follow" />
<title>Per-road speeds · ZMap · Zektyc</title>
<link rel="canonical" href="https://riricdev.tail5ea5cd.ts.net/zmap/en/road-speeds/" />
<meta name="theme-color" content="#070a0f" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="Zektyc" />
<meta property="og:title" content="Per-road speeds · ZMap" />
<meta property="og:description" content="ZMap knows the speed limit of every road in Europe: 90.5 million points, 3.6 million km, built from OpenStreetMap data." />
<meta property="og:url" content="https://riricdev.tail5ea5cd.ts.net/zmap/en/road-speeds/" />
<meta property="og:locale" content="en_US" />
<meta property="og:locale:alternate" content="fr_FR" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="stylesheet" href="/css/style.css?v=7" />
<style>
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 12px;
margin: 24px 0;
}
.stat {
background: rgba(255, 255, 255, 0.04);
border: 1px solid rgba(255, 255, 255, 0.08);
border-radius: 10px;
padding: 16px;
text-align: center;
}
.stat b {
display: block;
font-size: 1.7em;
line-height: 1.2;
color: var(--accent, #4dd6a8);
}
.stat span {
font-size: 0.85em;
opacity: 0.7;
}
table.speeds {
width: 100%;
border-collapse: collapse;
margin: 16px 0;
}
table.speeds th,
table.speeds td {
text-align: right;
padding: 6px 10px;
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
}
table.speeds th:first-child,
table.speeds td:first-child {
text-align: left;
}
.bar {
display: inline-block;
height: 10px;
border-radius: 3px;
background: var(--accent, #4dd6a8);
vertical-align: middle;
}
code {
background: rgba(255, 255, 255, 0.06);
padding: 1px 6px;
border-radius: 4px;
font-size: 0.9em;
}
</style>
</head>
<body>
<header id="h"></header>
<main class="legal" id="main">
<p class="legal-note"><a href="/zmap/en/">← Back to ZMap</a></p>
<h1>Per-road speeds</h1>
<p class="legal-meta">
ZMap's internal database · how it is built and what it contains
</p>
<div class="dev-banner">
🧭 <strong>Navigation feature.</strong> ZMap snaps every point of your
route to its actual road and reads its speed limit from a local database
covering all of Europe — then keeps it cached on your phone for offline
driving.
</div>
<section class="projects-page">
<article class="card">
<h3>The idea</h3>
<p>
Most navigation apps need a connection to know the speed limit. ZMap
does it differently: a per-road speed-limit database is built from
OpenStreetMap data and lives on the server. When a route is computed,
each trip point is snapped to the nearest road and given its speed.
The full route — speeds included — is then cached on the phone: while
driving, no network request is needed.
</p>
</article>
</section>
<div class="stats-grid">
<div class="stat"><b>90.5M</b><span>sampled points</span></div>
<div class="stat"><b>3.6M km</b><span>of roads with a known speed</span></div>
<div class="stat"><b>5,104</b><span>cells of 0.5° × 0.5°</span></div>
<div class="stat"><b>370 MB</b><span>compressed grid (gzip)</span></div>
<div class="stat"><b>40 m</b><span>sampling step along roads</span></div>
<div class="stat"><b>5 B</b><span>per point (lon, lat, speed)</span></div>
</div>
<section class="projects-page">
<article class="card">
<h3>How it is built</h3>
<ol>
<li>
<strong>Source:</strong> the OpenStreetMap Europe extract
(Geofabrik, 34.8 GB) contains 98.2 million roads
(<code>highway</code>).
</li>
<li>
<strong>Filtering:</strong> <code>osmium tags-filter</code> keeps
only the roads (8.5 GB), then only those carrying a speed
(<code>maxspeed</code>) are kept — about 13 million.
</li>
<li>
<strong>Sampling:</strong> a point is placed every 40 metres along
each road, with its speed in km/h.
</li>
<li>
<strong>Indexing:</strong> Europe is split into 0.5° cells
(≈ 55 km), each subdivided into 32 × 32. Every point is quantized
to ≈ 0.76 m and stored in 5 bytes, then the cell is gzip-compressed:
90.5 million points in 370 MB total.
</li>
</ol>
<p>
It is fully reproducible: the build script
(<code>build_maxspeed.py</code>) runs end to end on a small server.
</p>
</article>
<article class="card">
<h3>What is inside</h3>
<p>
Share of points by speed limit (most common values) :
</p>
<table class="speeds">
<tr><th>Limit</th><th>Share</th><th></th></tr>
<tr><td>50 km/h</td><td>26.2%</td><td><span class="bar" style="width:100%"></span></td></tr>
<tr><td>30 km/h (30 zones)</td><td>18.5%</td><td><span class="bar" style="width:71%"></span></td></tr>
<tr><td>90 km/h</td><td>9.5%</td><td><span class="bar" style="width:36%"></span></td></tr>
<tr><td>80 km/h</td><td>9.2%</td><td><span class="bar" style="width:35%"></span></td></tr>
<tr><td>70 km/h</td><td>6.0%</td><td><span class="bar" style="width:23%"></span></td></tr>
<tr><td>60 km/h</td><td>5.7%</td><td><span class="bar" style="width:22%"></span></td></tr>
<tr><td>100 km/h</td><td>4.6%</td><td><span class="bar" style="width:18%"></span></td></tr>
<tr><td>40 km/h</td><td>3.3%</td><td><span class="bar" style="width:13%"></span></td></tr>
<tr><td>48 km/h (30 mph, UK)</td><td>2.8%</td><td><span class="bar" style="width:11%"></span></td></tr>
<tr><td>97 km/h (60 mph, UK)</td><td>2.4%</td><td><span class="bar" style="width:9%"></span></td></tr>
<tr><td>32 km/h (20 mph, UK)</td><td>2.1%</td><td><span class="bar" style="width:8%"></span></td></tr>
<tr><td>20 km/h (pedestrian zones)</td><td>2.1%</td><td><span class="bar" style="width:8%"></span></td></tr>
<tr><td>120 km/h</td><td>1.8%</td><td><span class="bar" style="width:7%"></span></td></tr>
<tr><td>130 km/h (motorways)</td><td>1.7%</td><td><span class="bar" style="width:6%"></span></td></tr>
<tr><td>110 km/h</td><td>1.4%</td><td><span class="bar" style="width:5%"></span></td></tr>
</table>
<p class="legal-note">
<em>Numeric</em> values found in OpenStreetMap. Actual limits may
differ (roadworks, temporary signs, weather). Roads with no limit
(e.g. some German sections) have no <code>maxspeed</code>: ZMap then
shows no speed.
</p>
</article>
<article class="card">
<h3>In the app</h3>
<p>
The server returns, with every route, an array of speeds aligned with
the geometry points (one value per point). The phone stores
everything in its local cache: while driving, the current section's
limit is read without network, and offline mode keeps the whole trip.
Snapping a 4,500-point route takes about 170 ms on the server.
</p>
</article>
<article class="card">
<h3>Accuracy and coverage</h3>
<ul>
<li>Coverage: all of Europe, longitude −12° to 46°, latitude 27° to 72°.</li>
<li>Snapping: the nearest road within 40 m of the point.</li>
<li>Point location accuracy: ≈ 0.76 m.</li>
<li>Data: OpenStreetMap, free (ODbL licence).</li>
</ul>
</article>
</section>
</main>
<footer id="f"></footer>
<script src="/js/theme.js" defer></script>
<script src="/js/components.js?v=6" defer></script>
</body>
</html>