Releases: roadstrapp/roadstr-app
Releases · roadstrapp/roadstr-app
Release list
roadstrapp.0.4.5.apk
v0.4.5 (14)
Search & POI
- Search now favors places near you. Nominatim results are biased toward your GPS position and re-sorted by distance — fixes generic terms like "cinema" or "supermercato" ranking a same-named place on the other side of the world above the one down the street.
- New category/brand search (Overpass-powered): typing "farmacia," "benzinaio," or a store brand name now searches OSM directly within a radius of your position, sorted by real distance — independent of Nominatim's global relevance ranking.
Speed cameras
- Added an OSM-sourced speed camera layer (
highway=speed_camera/enforcement=maxspeed), shown on the map with a distinct muted marker and included in the proximity beep — additive to, never replacing, community-reported Nostr cameras.
Parking
- Save your parking spot — a dedicated button for "I'm here now," plus a long-press map option for "actually it was back there" when you've already walked off. Local-only, never touches Nostr, persists until you clear it.
Favorites: export, encryption, sync
- Export favorites to JSON, with optional password encryption (PBKDF2 + AES-256-GCM).
- Encrypted cross-device sync via Nostr — favorites publish as a self-encrypted NIP-44 event (kind 30078); relays only ever see ciphertext, nobody but you can read the contents. NIP-44 was implemented from scratch (the Nostr library in use didn't support it) and covered by round-trip tests.
- Onboarding now explains the encrypted/anonymous sync option.
Arrival precision
- Arrival radius on the last leg is now dynamic based on live GPS accuracy (10–40 m) instead of a flat 60 m — tight and precise with a good fix, still forgiving in a parking garage or urban canyon.
Voice
- Male voice option added for every supported language except French (Kokoro-82M has no French male voice) — pick it in Settings, with a live preview sample.
- 6-stage speech speed slider, also previewable before committing.
- Smoother navigation camera: replaced the fixed-duration tween with a continuous exponential-smoothing follow — removes the faint stutter that showed up when a new GPS fix landed mid-animation.
- Secondary instruction panel width fixed to exactly half the screen (was growing unbounded with long text); speed-limit sign no longer overlaps the bottom nav panel.
Cursor
- Removed the extra cursor styles (muscle car, SUV, compact, vespa, moto, bike) — down to *arrow. The others were too tacky.
Security & privacy
- Full security audit: removed a dead, exported deep-link intent-filter that any website could have triggered.
- Replaced a Russian-hosted Overpass mirror with a Swiss one — no more real-time GPS coordinates going to a VK/mail.ru-operated server.
- Fixed a crash from using a stale screen reference after an async gap.
- Verified: private keys never leave secure storage, all incoming Nostr events are signature-verified, no tracking/analytics SDKs, encrypted local settings.
- License clarified as GPL-3.0 (copyleft) — README previously and incorrectly said MIT.
- Cleaned up ~120 lint warnings and dead code.
roadstrapp.0.4.4.apk
v0.4.3 (12)
Navigation
- Speed limits actually work now. The root cause:
annotations=maxspeedis a Mapbox-only extension — vanilla OSRM (including the FOSSGIS server we use) never returned it. Speed limits now come from Overpass, with class-based inference (motorway/trunk/residential/living_street) for the many roads that have no explicitmaxspeedtag, 3 rotating mirrors for reliability, and support in free-roam driving (not just active navigation). - Recenter button now pulls a fresh one-shot GPS fix instead of reusing the last stream sample, so it snaps to your actual current position.
- Compass/heading button is a real toggle in both navigation and free-roam — free-roam heading-up mode now rotates the map with the magnetometer instead of doing nothing.
- Secondary instruction panel (next-turn preview) enlarged ~100% — bigger icon, bigger text, easier to read at a glance.
Voice
- Turn instructions and hazard/ZTL alerts no longer cut each other off mid-sentence. Maneuvers are priority (interrupt immediately); ambient alerts queue and wait their turn, keeping only the most recent one.
- Fixed a race in audio ducking where a stale utterance could release focus meant for a new one, breaking the "duck other media" behavior.
Security
- Nostr events are now cryptographically verified (event hash + BIP-340 signature) before being trusted — a malicious relay could previously fabricate road reports or confirmations under any pubkey.
- One vote per identity per event confirmation (was previously unlimited/re-countable).
- Local settings (favorites, search history) are now AES-256 encrypted at rest, key held in the Android Keystore.
debugPrintis silenced in release builds — no more street names/coordinates/TTS phrases in logcat.- Event comments capped at 500 chars to prevent relay-side payload abuse.
Onboarding
- Welcome page now shows the real app logo and a privacy notice recommending a VPN (Mullvad, Bitcoin-payable) given that road reports propagate over Nostr.
- nsec login page now shows the same security disclaimer as the profile screen.
- Fixed the Kokoro voice download completion indicator — it was implemented but never actually triggered (listener was waiting on a stream event that never fires); now shows a white check on a green circle when the download finishes.
- GrapheneOS guidance now mentions setting location permission to "Allow all the time," not just "while in use."
roadstrapp.0.4.1.apk
🔒 v0.4.1 — Navigation polish & security hardening
Navigation fixes
- TTS timing — Voice announcements now adapt to transport mode. Walking uses tighter distances (far 60 m · near 15 m); cycling uses intermediate distances (far 150 m · near 30 m); driving is unchanged. Back-to-back announcements on short steps are suppressed to prevent the "silencing" effect.
- Walking arrival radius — Arrival is now confirmed at 15 m instead of 40 m when navigating on foot, so a 300 m route no longer triggers arrival halfway through.
- Arrival screen removed — The 👍/👎 feedback dialog is gone. On arrival the destination pin turns green with a ✓ icon and stays visible on the map; a brief banner auto-dismisses after 6 seconds.
Security hardening
- EncryptedSharedPreferences enabled — All four
FlutterSecureStorageinstances now useencryptedSharedPreferences: true, encrypting both keys and values via Android Keystore (not just values). - NWC URI moved to SecureStorage — The
nostr+walletconnect://URI (which contains a Lightning wallet private key) was stored in plain Hive. It is now stored in Android Keystore-backed SecureStorage. Automatic migration from Hive on first launch. - Routing API keys moved to SecureStorage — GraphHopper Cloud and OpenRouteService API keys were stored in plain Hive. Migrated to SecureStorage with the same automatic migration path.
- WebView hardened — The Wikipedia/search WebView now blocks any navigation to non-HTTPS URLs via
onNavigationRequest. - ADB backup disabled —
android:allowBackup="false"added toAndroidManifest.xml. Preventsadb backupfrom extracting app data (including the Hive settings file) from an unlocked device with USB debugging enabled. - Release logging — Replaced a
print()call ingps_service.dart(visible in logcat in release builds) withdebugPrint()(stripped in release).
Migration note: NWC URI and routing API keys are migrated automatically from Hive to SecureStorage the first time each relevant screen is used after the update. No manual action required.
roadstrapp.0.4.0.apk
First-launch onboarding
- 4-page flow on first install: features showcase → Nostr identity → permissions → ready.
- Nostr login via Amber NIP-55 (recommended) or nsec key (stored in Android Keystore). Profile name and avatar fetched from relay immediately after login.
- Dedicated GrapheneOS guidance: grant Precise location and "Allow always" to keep GPS active in background.
- Optional Kokoro AI voice model download (82 MB) with live progress bar — can be deferred to Settings.
- Pages freely swipeable. Fully localised in all 27 supported languages.
ZTL / restricted zone ahead warning
- Checks whether an upcoming turn leads into a restricted zone at the moment the instruction is announced — before the user enters.
- Orange banner + spoken voice warning at that point. One warning per step, no repeated alerts.
- Distinct from the existing red banner shown when already inside a ZTL.
- Warning spoken in the user's language at runtime.
Missed-turn rerouting
- After advancing to a new step, a 2.5-second guard timer verifies the user is actually approaching the next waypoint.
- If distance hasn't improved and speed is above 3 km/h, silent reroute triggers automatically.
TTS announcement improvements
- Urban steps now receive an immediate voice announcement right after a maneuver, replacing the previous premature 220 m trigger.
- Announcement distances adapt to road type and current speed.
Cursor styles overhaul
- 7 selectable cursors rendered from SVG assets: Arrow, Muscle Car, SUV, Compact, Vespa, Racing Moto, Bicycle.
- Settings cursor grid replaced with a dropdown with live icon preview.
Localisation sweep
- Event categories, transport mode chips, time labels, and weather strings now fully localised across all 27 supported languages.
- 40 new ARB keys covering all onboarding screen strings.
Other improvements
- Route preview panel now supports drag-to-close gesture with spring-back animation.
- Secondary nav instruction row shows distance to next maneuver.
roadstrapp.0.3.4.apk
v0.3.4 — Nav UX overhaul, roundabout icons, speed alerts
New features
- Nav banner now full-width edge-to-edge, covering the status bar area, with ~30% larger text
- Next-step preview row below the main instruction
- Roundabout exit icon: custom-drawn painter, exits 1–6, CCW arc — no Overpass API needed
- TTS: ordinal symbols (1°, 2°…) normalised to spoken words before synthesis
- Adaptive TTS announcement distances based on road type and current speed
- Speed limit exceeded → red speedometer arc, text and border
- Speed camera proximity alert: dual-tone beep (350 Hz + 440 Hz) within 250 m
- Weather row (Open-Meteo, no API key) in Alternatives panel and Pin panel
- Drag-to-close gesture on Alternatives panel
Bug fixes
- Search bar restored to floating position (was accidentally pinned to screen top edge)
- Roundabout painter geometry corrected: arc now sweeps counter-clockwise (right-hand traffic)
- Alternatives panel horizontal overflow fixed; title/chip spacing improved
- Avoid motorways / avoid tolls chips now shown only when GraphHopper is selected
roadstrapp.0.3.3.apk
Roadstr 0.3.3
Navigation
- Map and cursor follow direction of travel — definitive fix:
_toggleHeadingModeis now a real toggle;_recenterre-enables heading mode during active navigation - Rerouting on U-turn — added bearing-difference check (>150° at >10 km/h) as a second reroute trigger alongside the existing distance check
Routing
- Route alternatives — panel shows multiple options when available (distance >5 km)
- Cycling mode — new "Bike" chip routing through the dedicated OSRM cycling endpoint, preferring cycle paths
- Route preferences — "Avoid highways", "Avoid tolls", "Shortest route" chips (shown only with GraphHopper/ORS, hidden on OSRM)
- Drag-to-close — alternatives panel closes on downward drag or flick; includes slide-in animation on open
Weather (Open-Meteo, no API key required)
- Temperature, condition and wind speed shown in the alternatives panel and quick-search pin popup
- Lazy async loading, silent failure when offline
UI fixes
- Fixed overflow in alternatives panel on narrow screens (<360dp): title and mode chips are now on separate rows with horizontal scroll
- GPS camera animation:
_gpsAnimMs = 600for continuous 60fps movement
roadstrapp.0.3.2.apk
Minor bugfixes and updated translations.
roadstrapp.0.3.1.apk
Added vocal directions and bugfixes.