If you hear nothing on iOS:
β’ Check the silent-mode switch on the side of the phone β flip it OFF (no orange).
β’ Tones use Web Audio which is muted by the silent switch. Voice is NOT muted.
β’ Turn up the volume buttons (Ringer volume, not Media).
If voice doesn't work:
β’ iOS may need a few seconds to load voices on first launch.
β’ Wait, then re-open Sound check.
β’ Some voices need download in Settings β Accessibility β Spoken Content.
If tested in an in-app browser (TikTok/Facebook):
β’ Open the page in real Safari or Chrome instead.
Confirm destination
Drive to
β
β
Capture point
Which side of the road?
New speed limit (km/h)
Name the point
Edit point
Name
Type
Speed limit
Directional
Road type
Capture bearingβ
Side
Status
Missed Feedback
Sound alert
Mapped to this point's type (alert group). Manage the full Sound Alerts catalogue in Settings β Sound Alerts.
Heartbeat ping
Per-type override for the continuous proximity ping (the beeping cadence that speeds up as you approach). When OFF, this type stays silent on approach even if the global ping is on. Threshold alerts (2000/1000/500 m) still fire.
Lat
Lng
Destinations
Add destination
Name
Use current GPS position. Start GPS first to get a fix.
Lat
Lng
Hide this dialog and tap a location on the map. The next tap fills in coordinates automatically.
Pick a captured point to use its coordinates.
Settings
Display
Theme
Auto picks Day (6amβ6pm) or Night based on your device clock. Day/Night force one theme regardless of time.
Show compass
The small N-pointing dial in the top-right of the map. Tap it to reset bearing to north; rotates as the map turns.
Show help text
Show or hide the explanatory paragraphs (like this one) under each setting. Turn off for a denser, more compact Settings screen once you know what each row does.
Alerts
Alert engine
Legacy Β· current alert engine controls real alerts (default). Shadow Β· legacy still controls alerts; intelligence engine evaluates in parallel and logs decisions. Active Β· intelligence can suppress legacy alerts on low-confidence cases. Trusted observations (confidence β₯ 3 or 3+ confirmations) are protected from suppression except on strong direction mismatch.
One-tap restore of the original alert engine. Use this immediately if Shadow or Active mode does anything unexpected while you're driving β it's always available, and Legacy is the safe fallback.
Sound
Voice speaks the point name out loud (e.g. "Speed cam in 500 meters"). Tone plays distinctive radar-style beeps per point type without speech.
Voice type
Chooses which system voice speaks. None disables all speech (tones still play if Sound = Tone).
Announce side in voice
When ON, voice appends ", left" or ", right" if the captured point has a side recorded.
Alert distances (meters)
Tap a chip to remove Β· alerts fire when you cross each distance
An alert fires each time you cross one of these distance rings approaching a point. More rings = more warnings; fewer = less noise. Only fires for the closest point ahead, so two nearby cameras don't double up.
Flash border at (m)
Distance at which the Next ahead card on the main screen pulses red. Purely visual β independent of audio alerts.
Repeat alert Γ times
How many times each distance announcement repeats. 1 = say it once. 3 = say "Speed cam in 500m" three times in a row.
Repeat gap (sec)
Pause between repeats of the same alert. Smaller = more urgent rapid fire; larger = breathing room.
Tone frequency (Hz)
Pitch of the proximity-ping tone. Higher = sharper / more cutting; lower = softer. Tap to preview after changing.
Proximity ping start (m)
Distance at which the continuous beep starts. Cadence speeds up automatically as you close in: slow (~1.2s) β₯ start, faster (~0.5s) β₯ start/2, fastest (~0.2s) within startΓ0.2.
Proximity ping
Master toggle for the continuous countdown ping. Threshold-cross alerts (above) still fire when this is off.
Sound Alerts
Per-sound Frequency controls how the
Try preview plays β High = 3Γ firm, Medium = 2Γ
normal, Low = 1Γ soft. Used For uses real
capture type keys (Speed cam, Speed zone, β¦) and reserved system
targets. This panel is preview / mapping only; live alert
triggering is unchanged.
Speed limit alerts
Mode
What plays when you're driving faster than the current speed limit + the threshold below. Off = silent (red LIMIT sign still flashes). Beep/Voice/Both = audio cue when you cross the limit.
Trigger when over by (km/h)
How many km/h over the limit before the alert fires. 5 means a 100 km/h zone won't alert until you hit 105.
Here-now announcement
Says "X is here" the moment you arrive at a captured point. Once it fires, the regular distance announcements ("in 500 m") for that point are suppressed to avoid double-ups.
Speed threshold (km/h)
Above this speed β triggers within 100 m of the point (more reaction time at highway speed). Below β within 50 m (tighter ring for city driving).
Say Γ times
How many times "X is here" repeats in one announcement (concatenated as "X is here. X is here.").
Trips
Records distance driven, duration, and max speed for each session. Independent of Start GPS β start a trip to log, start GPS to track. Most users want both on.
GitHub backup
β Token is stored in browser localStorage in plain text. Use a fine-grained personal access token with write access to one private repo only. Anyone with physical access to this device's storage can read it.
Token
GitHub fine-grained PAT. github.com β Settings β Developer settings β Personal access tokens β Fine-grained. Permissions: Contents = Read & write on the target repo.
Repo
Format: owner/repo. e.g. jane/road-alert-backup. Repo must already exist.
File path
Filename inside the repo. Created on first backup. Can include subfolders: backups/jane.json.
Auto-backup every 5 min
When ON, the app pushes a fresh snapshot to GitHub every 5 minutes if data has changed since the last backup. Status shown in the green ticker on the bottom of the main screen.
No backup yet
Backup now pushes immediately, ignoring the change-check. Restore pulls the remote file and OVERWRITES local data (asks for confirmation first).
Reset database clears all local points + destinations on this device (keeps settings + GitHub config). Your GitHub backup is left untouched, so you can Restore to undo. New database clears local data AND pushes the empty database to GitHub, replacing the backup with a clean slate. Both ask for confirmation.
Data
Audit: scroll every captured point for the active destination; mark each one keep or delete.
Disabled: points marked as gone (auto-retired after 3 "no" confirmations or manually disabled) β can be re-enabled here.
Export/Import: download/upload all data as a JSON file (manual backup outside of GitHub).
Edit JSON: directly edit the underlying data structure β power-user tool, can break things.
Cache
Force the browser to drop cached JS/CSS and fetch the latest version. Use this if a new release doesn't appear after a normal refresh. Your saved data (destinations, points, settings, tokens) is not affected.
Data architecture
Loading statusβ¦
Opens the audio diagnostic page β verify the speech engine works, preview the per-type tones, debug iOS silent-switch issues.
Storage safety net
Tap "Report" to inspect storage.
Report Β· logs an inventory of every localStorage key + sizes + schema detection. Snapshot Β· creates a local safety snapshot under roadalert:migrationSnapshot:* (separate from GitHub Backup; never modifies live road memory). Validate Β· validates every snapshot + the live data without writing anything. Duplicates Β· static classification of suspicious point pairs from stored coords only (no GPS). Observe-only β no merge, no delete, no mutation.
Audit Β· 0 points
Disabled points
Trip log
Edit data (JSON)
π― Alert audit (0)
Next ahead
β
Recent alert activity
Recent feedback activity (0)
π Debug log (0)
GPS altitude (diagnostic only)
Altitude: β
Vertical accuracy: β
Quality: β
Migrate to global point store
Dry-run. This shows what WOULD change. Nothing is touched until you confirm. A full backup is saved to localStorage before the real migration runs β you can restore from it any time the backup still exists.