- Bytt del-knappen frå tekstpila ↪ til ein innebygd Material-stil
SVG (20×20). Den førre Unicode-pila vart teikna mykje mindre enn
ℹ og ↻ av dei fleste fontar — no har alle tre ikona same visuelle
vekt på tvers av nettlesarar og operativsystem.
- Lagt til ein controllerchange-lyttar som utløyser ein omlasting
*neste* gong appen vert lagt i bakgrunnen (visibilityState ===
'hidden'), ikkje umiddelbart. Slik tek nye distribusjonar effekt
utan brukarinngrep, men utan å rive vekk skjermen midt i ein
tilfluktsromnavigering. registerType: 'autoUpdate' åleine sørgjer
for at den nye SW-en skipWaiting + clientsClaim, men det reload-ar
ikkje den allereie køyrande JavaScripten — denne lyttaren stettar
det utan å bryte noregisseringsflyt.
Påverkar ikkje fråkopla bruk: omlasting skjer berre etter at ein ny
SW har vorte aktivert, og ein ny SW kan berre installerast medan
nettverket er tilgjengeleg. Sjølve omlastinga løyser alle ressursar
frå presjekken og fungerer fråkopla.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Bytt djuplenkjenøkkel frå lokalId til romnr fordi Geonorge
regenererer lokalId-UUID-en på kvar eksport (556/556 endra på sju
dagar), medan romnr er DSB sin stabile rom-nummer-nøkkel. Dokumentert
i ARCHITECTURE.md.
- PWA: ny del-knapp som genererer same HTTPS-djuplenke som Android-appen
(Web Share API med utklippstavle-fallback).
- PWA: vald tilfluktsrom overlever no posisjonsoppdateringar og
manuell dataoppdatering — sporast på romnr i staden for lista.
- Android: kart-bufferspørsmålet dukkar berre opp éin gong per økt
("Hopp over" sit), og forceRefresh viser lasteoverlegg + hindrar
samtidige refresh-kall.
- i18n.ts: vakta DOM-skriving slik at vitest køyrer utan jsdom.
- Oppdatert pakka tilfluktsromdata frå Geonorge.
Refs #15
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Fjern maximum-scale/user-scalable på viewport slik at siden kan
zoomes (WCAG 1.4.4). Leaflet håndterer gestikk på kartet selv.
- Legg til Apple-meta-tagger for standalone-modus og statuslinje.
- Vis engangsbanner på iOS Safari om å legge til på hjemskjerm,
siden iOS ikke støtter beforeinstallprompt.
- Gi tydelig statusmelding når bruker avslår kompasstilgang i
stedet for å stille reversere til kartmodus.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fila vart lagt til .gitignore i 012da23 men var framleis spora.
Ho vert generert av `bun run fetch-shelters` og skal ikkje versjonerast.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SMS-appar gjenkjenner ikkje eigendefinerte URI-skjema som klikkbare
lenkjer. Brukar no https://tilfluktsrom.naiv.no/shelter/{id} som
opnar appen direkte (Android App Links med autoVerify) eller fell
tilbake til PWA i nettlesaren.
Android: DEEP_LINK_DOMAIN i build.gradle.kts, HTTPS intent-filter,
oppdatert handleDeepLinkIntent og shareShelter med HTTPS-URL.
PWA: assetlinks.json for Android-verifisering, djuplenkjehandtering
i app.ts, base-sti endra frå './' til '/', config.ts for domene.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Info-knappen (ℹ) åpner nå sivilforsvarsdialog med alle 5 steg,
med «Om»-lenke i bunnen (som Android-appen)
- Laste-overleggets knapper («Lagre kart» / «Hopp over») får
tekst fra i18n i stedet for å være tomme
- Kompassvisningen resizes canvas når den blir synlig, fikser
0×0-canvas når den initialiseres mens containeren er skjult
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Appen kan nå serveres både på / og under en understi som
/tilfluktsrom uten endringer.
- Sett base: './' i vite.config.ts
- Endre alle absolutte stier i index.html til relative
- Oppdater manifest.webmanifest med start_url: "." og scope: "."
- navigateFallback uten ledende skråstrek
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Leaflet vendora:
- Fjerna CDN <link> for Leaflet CSS (allereie bundla via npm-import)
- Kartmarkør-ikon brukar bundla bilete i staden for unpkg URL-ar
- CSP stramma: unpkg ikkje lenger naudsynt i style-src/img-src
Slett buffer:
- «Slett lagra data»-knapp i om-dialogen
- Slettar localStorage, IndexedDB og tenestararbeidar-bufferar
- Lokalisert til en/nb/nn
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Geonorge er distribusjonsplattforma, men dataeigar er DSB
(Direktoratet for samfunnstryggleik og beredskap). Oppdatert
om-side og personverntekst i alle tre språk (en/nb/nn) for
både Android og PWA.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Om-side (Android + PWA):
- Ny AboutDialog med personvernerklæring, datakjelder og opphavsrett
- Opphavsrett flytta frå sivilforsvardialogen til om-sida
- Tilgjengeleg via «Om denne appen»-lenke i sivilforsvarsdialogen (Android)
og ny om-knapp i statuslinja (PWA)
- Lokalisert til en/nb/nn
Personvern og sikkerheit:
- Lagra GPS-posisjon utløper etter 24 timar (widget_prefs)
- Widget viser «Trykk for å oppdatere» når posisjon manglar eller er utløpt
- Eigendefinert User-Agent (Tilfluktsrom/1.6.1) i OkHttp
- Content Security Policy (CSP) meta-tag i PWA
- Tenararbeidar bufrar berre HTTP 200-svar (ikkje opake)
- Kartbuffer-metadata runda til ~11km presisjon i localStorage
- crossorigin="anonymous" på Leaflet CSS
i18n-opprydding:
- Unicode-escapes erstatta med UTF-8-teikn i nb.ts og nn.ts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tilgjengelegheit (Android + PWA):
- Semantiske landemerke (header, main, aside, role=dialog)
- aria-live-regionar for statusoppdateringar og lasteoverlegg
- Fokusindikatorar (:focus-visible) og prefers-reduced-motion
- Auka trykkmål til 48dp (infoknapp, oppdater, del, widget)
- contentDescription på kart, kompass og framdriftsindikator
- aria-current og role=listitem på tilfluktsromliste
- Fokusfangst og fokusgjenoppretting i lasteoverlegg
- Ikkje-farge-indikator (▶) for valt tilfluktsrom
- Dynamisk lang-attributt basert på oppdaga språk
- Lokaliserte aria-label (en/nb/nn)
Nordindikator:
- DirectionArrowView teiknar diskret «N»-markør på omkrinsen
- Roterer uavhengig av hovudpila for kompasskalibrering
- Berre på stor kompassvisning, ikkje minipila
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Android: HapticFeedbackConstants.VIRTUAL_KEY på alle knappar og
listeelement. PWA: navigator.vibrate(10ms) på same interaksjonar.
Closes#11
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Legg til role=img og aria-label på retningspil-canvas
- Oppdater aria-label dynamisk med avstand ved val av tilfluktsrom
- Legg til direction_arrow_description-streng i alle tre språk
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Endrar status_text frå #B0BEC5 (~4.5:1) til #CFD8DC (~6.5:1) mot
#16213E-bakgrunnen, i både Android-appen og PWA-en.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add scripts/fetch-shelters.sh: downloads Geonorge data, converts
UTM33N→WGS84 via PWA script, copies to both Android assets and
PWA public dirs
- Bundle pre-processed shelters.json (556 shelters) in APK assets
so the app works immediately on first launch with no network
- ShelterRepository.seedFromAsset(): seeds Room DB from bundled
JSON on first launch, marks as stale so network refresh is
attempted in the background
- MainActivity.loadData(): seeds from asset before trying network,
always attempts background refresh when data is stale
- Add version.properties (1.1.0, versionCode=2) as single source
of truth for versioning
- build.gradle.kts reads version from properties file and exposes
via BuildConfig
- Bump PWA version to 1.1.0 to match
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove accidentally committed node_modules/ and dist/ directories,
and add .gitignore to prevent them from being tracked.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vite + TypeScript PWA that mirrors the Android app's core features:
- Pre-processed shelter data (build-time UTM33N→WGS84 conversion)
- Leaflet map with shelter markers, user location, and offline tiles
- Canvas compass arrow (ported from DirectionArrowView.kt)
- IndexedDB shelter cache with 7-day staleness check
- Service worker with CacheFirst tiles and precached app shell
- i18n for en, nb, nn (ported from Android strings.xml)
- iOS/Android compass handling with low-pass filter
- Respects user map interaction (no auto-snap on pan/zoom)
- Build revision cache-breaker for reliable SW updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>