Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Nook — sleep spots for people on the move
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Nook is een meertalige kaart voor bikepackers en tourfietsers, wereldwijd. Engels is de standaard; de taalkeuze biedt twintig veelgesproken talen plus Nederlands. De app helpt bij het vinden van slaapplekken langs een route. De vaste bronlagen bevatten OpenStreetMap-campings, CampWild-shelters en Welcome To My Garden-tuinen in 233 landen en gebieden, plus Vrienden op de Fiets en officiële Deense plekken; eigen GPX-data blijft lokaal in de browser.
python3 -m http.server 8000
Open daarna http://localhost:8000.
De taalkeuze staat op iedere pagina en wordt onthouden. Vertalingen worden lokaal geserveerd; alleen de gekozen taal wordt geladen. Zie de taalinstructies voor de 21 talen, vertaalbestanden en controles.
Op een HTTPS-host kan Nook via de browser aan het beginscherm worden toegevoegd. De PWA bewaart de website, regels en routebronnen voor offline herladen. De compacte kaartindex, bekeken plekdetails en kaarttegels worden lokaal gecachet nadat ze eenmaal geladen zijn; nieuwe bronpagina's en nog niet bekeken kaartgebieden vereisen internet.
Het eigen domein is ridewithnook.com. De buildinstellingen en domeinkoppeling voor Cloudflare Pages staan in de domeininstructies.
Lees vóór een publieke demo of LinkedIn-post docs/launch-security.md. De repository bevat security headers in _headers, een CSP-vangnet in de HTML en statische databestanden in plaats van bezoeker-gestuurde API-verzoeken. Voor echte hostbescherming blijven CDN- of edge-rate-limits nodig.
data/ geserveerd. Bezoekers sturen geen live Overpass-zoekopdrachten vanuit Nook.Plek voor vannacht gebruikt, na toestemming, de actuele telefoonpositie. Met 15, 35 of 70 kilometer resterende fietsafstand worden maximaal negen kandidaten gerangschikt. Bij een actieve GPX gebeurt dat op voortgang langs de route; zonder GPX op hemelsbrede afstand.tourism=camp_site en tourism=caravan_site, opgehaald via OpenCampingMap, als normale bronpins met dezelfde clustering, filters en detailpanelen als andere locaties. De momentopname van 18 oktober 2026 bevat 199.621 camping- en camperterreinpins wereldwijd. Het land van iedere plek volgt uit exacte landsgrenzen (datasets/geo-countries), niet uit een rechthoek om het land. Losse camp_pitch-objecten worden niet als aparte campings getoond, omdat dat vaak individuele staanplaatsen binnen één camping zijn.image- of Wikimedia Commons-verwijzing aanwezig is.utmark: minimaal 150 meter van bewoonde huizen of hutten en doorgaans maximaal twee nachten op dezelfde plek. Plaatselijke regels en brandgevaar kunnen dit beperken.scripts/fetch-wtmg-public.mjs haalt de openbare WTMG-tuinlaag op. scripts/fetch-opencampingmap-campings.mjs haalt OSM-campings op via OpenCampingMap en bewaart die als lokale momentopname; scripts/fetch-osm-campings.mjs blijft beschikbaar als directe Overpass-fallback. scripts/fetch-campwild-public.mjs haalt de publieke CampWild-kaartlaag op. De bouwstap bewaart in de website alleen kaartpositie en praktische bronvelden. scripts/build-public-data.mjs genereert daarna public-data.js met metadata en via scripts/build-map-data.mjs een compacte binaire kaartindex en kleine detailbestanden in data/map-details/. Alle bronvelden blijven behouden.
Wereldwijd vernieuwen (landsgrenzen uit datasets/geo-countries, publiek domein via Natural Earth):
curl -sSL -o /tmp/countries.geojson https://raw.githubusercontent.com/datasets/geo-countries/main/data/countries.geojson
node scripts/fetch-opencampingmap-campings.mjs --grid=15 --countries-geojson=/tmp/countries.geojson --output=/tmp/nook-osm-campings.json --timeout=180
node scripts/fetch-campwild-public.mjs --output=/tmp/campwild-places.json
node scripts/fetch-wtmg-public.mjs /tmp/wtmg-public.json
node scripts/build-public-data.mjs --countries-geojson /tmp/countries.geojson
Zonder ruwe Vrienden-op-de-Fiets- of Ud-i-Naturen-export houdt de build de nu gepubliceerde plekken van die bronnen aan. scripts/generate-countries.mjs --countries-geojson=… vult de landenlijst in app.js aan voor nieuwe landen; bestaande, handmatig afgestelde landen blijven staan.
1NITE TENT staat op de kaart als apart gastnetwerk. De import gebruikt uitsluitend openbare kaartcoördinaten, een afgeleide locatie-ID en landcode. Hostnamen, beschrijvingen en e-mailadressen worden niet overgenomen. Vooraf afspreken en contact verlopen via de oorspronkelijke kaart; het gaat om één gratis nacht, geen bevestigde reservering. De detailkaart toont de coördinaten om de locatie op de bronkaart terug te vinden.
node scripts/import-1nitetent.mjs --countries-geojson /tmp/countries.geojson
node --test scripts/test-1nitetent.mjs scripts/test-map-data.mjs
Gebruik het hierboven genoemde landenbestand. Met --input /pad/naar/campgrounds.geojson kun je een al gedownloade openbare feed verwerken. De import bewaart alle andere providers en vervangt alleen de 1NITE TENT-laag. Dubbele posities, ongeldige coördinaten en punten zonder betrouwbare landkoppeling worden overgeslagen; het script rapporteert de aantallen. De momentopname van 21 oktober 2026 bevat 2.655 unieke plaatsen in 38 landen uit 2.675 bronrecords. Na het vernieuwen gelden dezelfde gezamenlijke cache-/dataversiestappen als voor de andere kaartbronnen.
De kaart bevat 1.280 aanvullende onbewaakte hutten met opgegeven slaapplaatsen uit Refuges.info, na controle op sluitingsmeldingen, landkoppeling en overlap. De brondata en afgeleide records hebben CC BY-SA 2.0-attributie. Bivakzone.be en Statskog staan als aanvullende bronlinks in het overzicht. Zie de bronnenbeoordeling voor selectie, licentie, beperkingen en vernieuwingsinstructies.
De kaart gebruikt OpenStreetMap-kaarttegels en Supercluster 8.0.1 (de ruimtelijke clusteringbibliotheek van Mapbox). Landen zijn een optioneel filter; de kaart opent en clustert op echte locaties, ook over de grens. map-worker.js bouwt en filtert de index buiten de hoofdthread en stuurt alleen zichtbare clusters/pins terug. Er worden geen duizenden Leaflet-markers meer gemaakt voordat er geclusterd wordt.
Alle 224.244 kaartposities worden meteen bij het openen geladen, ongeacht land of zoomniveau. Inzoomen gebruikt diezelfde reeds geladen index; de aantallen zijn clusters van bestaande plekken. De eerste kaartdownload bestaat uit data/map-index.json en data/map-points.bin.gz (circa 2 MB gecomprimeerd voor 224.244 punten). Browsers zonder DecompressionStream gebruiken dezelfde punten via data/map-points.bin (circa 3,6 MB). Volledige beschrijvingen, bronlinks en voorzieningen worden pas opgehaald bij een plekdetail of kandidatenlijst, in batches van maximaal 128 plekken. De oorspronkelijke landbestanden zijn daarmee vervangen, zonder verlies van bronrecords.
Na het vernieuwen van de openbare data maakt scripts/build-public-data.mjs automatisch de kaartindex en detailbestanden. De bestaande index/batches kun je zonder externe brondata opnieuw opbouwen met:
node scripts/build-map-data.mjs
node --test scripts/test-map-data.mjs scripts/test-service-worker.mjs scripts/test-feedback.mjs
Bij een datavernieuwing: verhoog ook de asset-/dataversie in app.js, map-worker.js, index.html en service-worker.js, zodat offlinecaches de nieuwe index en bijbehorende details samen verversen. Gebruik geen losse oude index met nieuwe detailbestanden.
De kaartbibliotheken staan met hun licenties in vendor/; er is geen pakketinstallatie of externe JavaScript-CDN nodig. De Leaflet-stylesheet is gecontroleerd tegen het officiële npm-pakket; de HTML behoudt integriteitscontrole.
Bij schuiven en knijpzoomen transformeert Leaflet één canvaslaag met de bronpins; er is geen afzonderlijk bewegend HTML-element per pin. Op grote schermen begrenst Nook de Retina-bitmap tot ongeveer zes miljoen pixels, met behoud van ten minste de CSS-pixelresolutie; kleine schermen houden hun oorspronkelijke scherpte. Tekenen en hitdetectie gebruiken dezelfde geografische projectie. Chromium kan de kaarttegels en pins als afzonderlijke oppervlakken verplaatsen. Tegelupdates tijdens het slepen zijn begrensd tot circa vier per seconde om extra layout- en tekenwerk te beperken. Resultaten worden pas na het gebaar ververst. Een buffer rondom het kaartbeeld voorkomt herberekenen bij kleine verschuivingen. Toetsenbord- en schermlezerbediening blijft beschikbaar via bijbehorende knoppen die hun canvaspin markeren bij focus.
Clusterklikken gaan direct naar het volgende kaartgebied. Browserzoom blijft beschikbaar voor tekst en panelen; de kaart verwerkt eigen knijpgebaren. Er zijn geen globale touch-handlers die snelle tikken op knoppen annuleren. Kaarttegels laden tijdens het schuiven en alleen voor het uiteindelijke zoomniveau. Permanente kaartknoppen en plekpanelen gebruiken geen achtergrondblur tijdens kaartbewegingen.
Kaarttegels hebben een eigen cache met maximaal 256 tegels. Het weggooien van oude tegels verwijdert geen compacte kaartindex of bekeken plekdetails. Offline HTML komt uit de huidige app-versie; een update bewaart lokale routes, voorkeuren en caches van andere apps op hetzelfde domein. Als browseropslag vol is, blijven geslaagde netwerkdownloads bruikbaar.
De onderkaart gebruikt altijd de gedetailleerde OSM-tegels (256 px), op elk apparaat.
Een extra browsercontrole is beschikbaar met een geïnstalleerde Playwright/Chromium (aanwezig in de cloudomgeving):
node scripts/test-map-browser.cjs
node scripts/test-desktop-map-browser.cjs
node scripts/test-app-browser.cjs
Start daarvoor de lokale server. Met NOOK_TEST_URL kun je ook een andere testhost controleren en met NOOK_CHROMIUM een lokaal Chromium-pad kiezen. In een proxyomgeving kun je met NOOK_BROWSER_HOME een apart browserprofiel met de vertrouwde platform-CA aanwijzen; TLS-controle blijft aan. De controle test echte touch-hitdetectie op canvas, hergebruik bij kleine verschuivingen, toetsenbordfocus en bewaren van het kaartdetailniveau. De native tests controleren daarnaast dat kaartgebaren niet worden geannuleerd en dat de gzip-index exact dezelfde punten bevat als de fallback. De browsercontrole test ook snel achter elkaar tikken op de zoomknop en een echt tweevinger-knijpgebaar, met een controle dat de pinlaag tijdens het gebaar niet wordt herbouwd.
De aanpak volgt de optimalisatieprincipes uit MapLibre's richtlijnen voor grote datasets en deck.gl's performance guide: minder tekenen, stabiele lagen, minder updates en gecomprimeerde data.
De tweede browsercontrole doorloopt import, ongeldige GPX-bestanden, verwijderen/herstellen, instellingen en kaartbeeld bewaren, snelle touchkeuzes, plekdetails, downloadherstel en offline herladen. De informatiepagina's worden op 320, 390, 844 en 1440 pixels gecontroleerd op leesbaarheid, bereikbare laatste rijen en zichtbare bronlinks. Zie de productreview van 18 oktober 2026 voor bevindingen en resterende verbeterpunten.