ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
리옹의 거리와 구역을 배우고, 빈 지도에서 거리 찾고, 강조된 거리 이름 확인, 구역 탭, 타이머 선택 가능
Learn the streets and arrondissements of Lyon: find streets on a blank map, name highlighted streets, tap districts, with an optional timer.
교육HTML · PythonGitHub @theo-mazars온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A map quiz for learning the streets and arrondissements of Lyon. Find a street on a blank map, name a highlighted street, tap the right district, or browse the city in Explore mode. An optional timer adds a speed bonus.
It's a single static page with no backend or tracking, and only one external request (Google Fonts). Progress is kept in each visitor's browser.
| Find mode | Points |
|---|---|
| Right street | 100 |
| Another street within 250 m | 50 |
| Wrong street, right arrondissement | 20 |
| Anywhere else | 0 |
Name and Districts modes score 100 for right and 0 for wrong.
With the timer on, an answer within 3 seconds keeps full points. After that, points slide gradually to 70% at the buzzer, so a right answer is always worth at least 70. Wrong answers get no speed bonus, and running out of time scores 0. A street counts as "known" when its last score is 70 or more.
You need Python 3.8 or later (standard library only):
python3 scripts/build.py # writes dist/index.html
python3 -m http.server -d dist # then open http://localhost:8000
You can also open dist/index.html directly in a browser.
The Dockerfile builds the page in a Python stage and serves it with nginx on port 80.
docker build -t lyon-streets .
docker run --rm -p 8080:80 lyon-streets # http://localhost:8080
Dokploy: create an Application from this GitHub repository (or upload a zip of it with the Drop option). Set the build type to Dockerfile, with Dockerfile path Dockerfile and context ., then add a domain on port 80.
Any static host (GitHub Pages, Netlify, an S3 bucket…): run scripts/build.py and upload dist/index.html. It's the only file needed.
src/template.html the page (HTML, CSS, JS) with a __DATA__ placeholder
data/lyon-data.json processed street and district data (~200 KB)
scripts/build.py template + data -> dist/index.html
scripts/process.py raw OpenStreetMap export -> data/lyon-data.json
deploy/nginx.conf nginx config used by the Dockerfile
Dockerfile two-stage build: Python builds the page, nginx serves it
The data comes from OpenStreetMap through the Overpass API. The current file was exported on 19 October 2026.
On overpass-turbo.eu, run this query:
[out:json][timeout:180];
area["name"="Lyon"]["admin_level"="8"]->.lyon;
(
way(area.lyon)["highway"~"^(trunk|primary|secondary|tertiary|residential|unclassified|living_street|pedestrian)$"]["name"];
relation(area.lyon)["boundary"="administrative"]["admin_level"="9"];
);
out geom;
If it fails with "error (0)", the server is busy: change the Overpass server in Settings, for example to https://overpass.kumi.systems/api/.
Export the raw data as JSON (the file with an elements list), not GeoJSON. Save it as export.json in the project folder; .gitignore keeps it out of the repository.
Process it and rebuild:
python3 scripts/process.py export.json
python3 scripts/build.py
The street count in the header and the date in the footer update automatically.
Check the map. The Rhône and Saône are drawn from the arrondissement borders that run down the rivers, plus a few border segments chosen by OpenStreetMap way ID (RIVER_EXTRA_WAYS in process.py). If OSM editors have split or renumbered those, the script prints a warning and that stretch of river goes missing; update the IDs to fix it.
localStorage, so they don't sync between devices and are lost if the browser's site data is cleared.The code (src/, scripts/, deploy/, Dockerfile) is released under the MIT Licence.
The street and district data in data/ is derived from OpenStreetMap and is available under the Open Database Licence (ODbL) 1.0. See data/LICENSE.md.
Map data © OpenStreetMap contributors. The page shows this credit in its footer; keep it if you reuse the data.