Electric scooters are silent. Unlike new electric cars that must emit a pedestrian warning sound at low speeds, scooters roll quietly until they’re right behind you. I got tired of nearly startling people on sidewalks and built a quick phone-based solution.

I wanted the phone in my pocket to monitor speed through GPS and play a short beep when I crossed a safe threshold. Nothing more. No maps, no tracking, no social features.

The app is written in Swift and SwiftUI. It uses Core Location to pull speed in real time. A simple threshold—set at 15 km/h by default—triggers an AVAudioPlayer sound. The UI shows current speed in large digits with a colored arc that shifts from blue to orange as speed increases. A toggle lets you mute the alert without stopping location updates.

Xcode and simulator

Xcode with the speed calculation logic on the left, running simulator on the right showing 25 km/h and active sound toggle.

I kept the code deliberately small. Location manager delegate updates a published speed property. A timer throttles the audio trigger so the beep doesn’t stutter. Permissions are requested once on first launch. Background location is enabled but limited to “when in use” to respect battery and privacy.

The hardest part was reliable speed from GPS on an iPhone in a pocket. Urban canyons and tunnels create noisy readings. I added a simple moving average over the last five samples and ignored updates when accuracy was worse than 10 meters. It’s not perfect but good enough for personal use.

I also learned that Apple throttles location updates aggressively when the screen is off. The beep still fires, but the displayed speed on the lock screen widget is less responsive. That’s an acceptable trade-off.

Three design decisions came directly from real usage:

First, the threshold is user-adjustable. Some cities allow faster scooter speeds on bike lanes; others don’t. Hard-coding 6 km/h like car regulations would have been useless.

Second, the alert is a single short tone, not a continuous sound. Continuous noise drains battery and annoys the rider. A 200 ms beep every 1.5 seconds is enough to warn nearby pedestrians without making me look like an emergency vehicle.

Third, no data is stored or sent. The app doesn’t even have analytics. After a few close calls I realized the value was in the moment, not in post-ride reports.

I finished the project in two evenings. It’s not on the App Store because it serves one person—me. Yet the exercise revealed how thin the line is between “clever hack” and “useful daily tool.” The moment I rode with it I stopped worrying about silent approaches.

If you ride a silent electric vehicle and share sidewalks, the same approach can be implemented in an afternoon. Grab Core Location, pick a conservative speed, add one sound file, and respect background rules. The resulting friction reduction for both rider and pedestrian is immediate.

I still carry it every time I take the scooter. Simple problems sometimes deserve simple tools.