Speed/Limit: An OSM-powered mobile (Flutter) app to prevent accidental speeding tickets

Hi everyone,

(Disclaimer: I’m unashamedly using AI to help me with this post! Naturally I’ve proof-read it first, but some of it probabably comes across as preaching to the converted!)

I’m Ross, and I bloody love all things to do with maps! I’ve been a big traveller in my life (>50 countries in my 57 times around the sun), and hope to do a lot more in the future. I’m also a life-long technologist (see ‘rossgerring’ on LinkedIn)

I’ve been driving for around 40 years across multiple countries. In that time, I’ve picked up a handful of speeding tickets - not because I was deliberately breaking the law, but because of a momentary lapse in awareness. Either the speed limit signage wasn’t obvious, or my speed had quietly crept up. Every time, it’s infuriating - not because of the fine, but because it feels like punishment for something you never meant to do.

So I built Speed/Limit to solve exactly this problem.

Why Existing Solutions Aren’t Enough

Yes, Google Maps, Waze, and Apple Maps display speed limits and warnings. But they have real limitations:

  • You often have to actively navigate to see speed data

  • Visual and audio warnings are easy to miss while concentrating on the road

  • If the speed limit is wrong or missing, you can’t fix it

  • Millions of drivers use older cars, hire cars, or vehicles without built-in systems

The core problem isn’t a lack of speed limit data. It’s not being alerted loudly and clearly enough at the exact moment it matters.

How Speed/Limit Works

Speed/Limit continuously monitors your GPS speed against the legal speed limit for your current road. When you exceed the limit by more than 5% (fully configurable), it triggers a combination of unmissable alerts:

  • Visual alerts - bright red and white flashing screen

  • Audio alerts - uses your phone’s alarm stream, cutting through music and calls

  • Haptic feedback - phone vibration for multi-sensory awareness

This isn’t a subtle nudge. It’s a clear signal that you’re speeding - right now.

Why OSM Matters Here

Speed/Limit uses OpenStreetMap data for all speed limit information (but you all know this!!!). This is crucial because:

  • Global coverage from day one, not just major roads or a handful of countries

  • Free and open data, accessible to everyone

  • Community-maintained, ensuring continuous improvement

  • Works anywhere without licensing restrictions or proprietary data deals

But here’s the thing: OSM data is only as good as the community that maintains it (again, you all know this!). And Speed/Limit gives users a direct way to make it better.

The Contribution Loop

If you encounter a missing or incorrect speed limit while using Speed/Limit, you can fix it with a single tap - right where you are, in the moment. Your update goes straight into OSM, helping not just you, but every driver who comes along later.

Instead of saying “this data is wrong,” you can make it right. The global OSM community gets better data. Drivers get better alerts.

Key Features

  • Floating Overlay Mode (Android) - sits above your navigation app, only appearing when needed

  • Country-Aware Intelligence - automatically detects location and switches between mph/km/h

  • Smart Corridor Caching - reduces data usage while keeping responsiveness high

  • Minimal, thoughtful design - alerts only activate above 20 mph, with built-in cooldowns to avoid annoyance

  • One-click OSM contributions - fix data where you find it

Optional premium features include voice announcements, customizable thresholds, and an ad-free experience. The core function - monitoring speed and alerting when you exceed the limit -remains completely free.

What I Need From You

I’m launching this to real users now, and I’d love the OSM community’s help:

  1. Test it - Try it out, especially on roads where you know the OSM data is incomplete or incorrect. Let me know what you find.

  2. Use it where data matters - Help improve OSM in your region by fixing missing or incorrect speed limits directly in the app.

  3. Feedback - What’s working? What’s not? What would make this more useful?

  4. Spread the word - If you find it helpful, share it with others. Help OSM get the recognition it deserves.

I’m particularly interested in hearing from contributors in different countries and regions - OSM’s global nature is one of Speed/Limit’s greatest strengths, and I want to make sure it works well everywhere.

Availability

  • Android: Available now on the Google Play Store

  • iOS: Coming soon

You can find it here: https://play.google.com/store/apps/details?id=com.speedlimit.app

For more information about the app, visit: https://www.itomic.com.au/speed-limit-because-the-best-speeding-ticket-is-the-one-you-never-get/

For feedback, questions, or to report issues with speed limit data, please do so right here in this forum and/or https://www.facebook.com/speedlimitmobapp


Why I’m Posting This Here

Speed/Limit wouldn’t exist without OpenStreetMap. The community that builds and maintains this data deserves to know about the real-world applications it enables. I’m genuinely excited to work with you all to make this better - and to help demonstrate why OSM matters.

Looking forward to hearing from you.

Ross

2 Likes

p.s.

How the “one-tap contribution” works: I’m very conscious of OSM’s expectations around edit quality and mechanical edits. The app does not do bulk/mechanical edits. The intent is to make it easy for a user to (a) create an OSM Note at the current location, or (b) open an explicit editing flow where the user is logged in, reviews the change, and confirms it with an appropriate changeset comment.

Licensing/attribution: The app includes clear on-screen attribution to OpenStreetMap and notes the ODbL availability. (Happy to share screenshots or wording if anyone wants to sanity-check.)

Data + infrastructure: The app uses OSM data specifically for speed limit determination. I’m mindful of OSMF service policies (tile usage / API usage) and I’m happy to outline exactly what endpoints/services I’m calling and how often, and what is self-hosted/cached, if that’s helpful.

Please ask me anything!

1 Like

Ah, that’s the first hint for this app I can find. Google just doesn’t produce anything for the
created_by Speed/Limit Flutter App it adds to changesets. When introducing new apps to a world-wide user group, please make sure that the app can be identified and bugs can be reported.

Looking for it since weeks, because it adds strange tags to the database, e.g.

source:maxspeed:action = added
source:maxspeed:app = Speed/Limit
source:maxspeed:category = medium
source:maxspeed:country = US
source:maxspeed:named_numbered = named
source:maxspeed:urban_rural = urban

It seems that none of these should appear in the OSM database.

12 Likes

You say it doesn’t work below 20 mph so how does it deal with 20 kph limits?

Touching a phone screen whilst driving is not something anyone should be doing and an offence here and in many other countries.

Speed limit edits almost always involve the splitting of ways.

6 Likes

Hi @mueschel - Thank you for flagging this – you’re absolutely right, and I appreciate you taking the time to investigate.

Apologies for the difficulty finding information about the app. It’s a recent launch, so visibility is still limited and lots of learning to do. Here are the details:

Google Play: https://play.google.com/store/apps/details?id=com.speedlimit.app
Apple App Store: (pending review)
Support Email: support@itomic.com.au
Privacy Policy: Speed/Limit - Privacy Policy

The tags were originally added for an internal “leaderboard” feature that tracked user contributions. The idea was to query these tags via Overpass to identify Speed/Limit edits. However, we’ve since migrated all contribution tracking to our own Firestore database, making these tags unnecessary. In short: they were vestigial code from a deprecated feature that I failed to clean up. Sorry! Will be remove in the next build (working on it now)

Question: do I/we need to clean up those old/incorrect tags?

Thanks @trigpoint - you make 3 excellent points.

Re: the 20 mph threshhold - yes, another legacy threshhold that I will remove in the next build.

Re: Touch a phone screen while driving: I certainly can’t vouch for the laws in all countries, but here’s what I know/think (happy to be debated/corrected!)

  1. Every time you load the app, it starts with an “Important Safety Notice” you can choose to accept or decline, including a ‘Safety First’ line that says “Only interact with the app when it is safe to do so”
  2. I believe that in many countries it’s only legal for a driver to touch the screen if it’s mounted, i.e. not in the hand AND it’s safe to do so.
  3. Google Maps and Waze facilitate touching of the screen (presumably with similar disclaimers), so there’s a precedent for these sorts of apps.
  4. I’ve intentionally made the clickable speed limit feedback buttons as large as reasonably possible for maximum ease of use and minimum distraction.

Re: Speed limit edits almost always involve the splitting of ways - you’ve touched on a point that I don’t have an easy answer to (and wish I did!). I totally recognise that sections of a road, with different speed limits, don’t always line up with the way id(s) for those sections of road. Long shot… maybe if people are repeatedly resetting the speed limit for a stretch of road, this is a strong indicator that way ids and road sections are not lining up, and therefore in need of revision, after closer inspection. I’m wide open to ideas on this one, and happy to help with the app if I can.

Thanks all!

Is the app open source licensed? Which license applies?

1 Like

The app is not open source — it’s a small project with a modest subscription model, and open-sourcing would make it difficult to sustain development.

That said, I’m committed to transparency with the OSM community:

  • The app (now!) uses only standard OSM tags (maxspeed, source:maxspeed=sign)
  • All contribution tracking is done in our own database, not OSM
  • I’m actively engaging here to ensure our approach aligns with community standards

If there are specific concerns about how the app interacts with OSM data, I’m happy to discuss the approach in detail. Thank you!

I’m really keen to have some more iOS testers onboard, using TestFlight.

Any takers? :grinning_face:

If your app consume OSM API you should be aware of API Usage policy

Sure!

Looking here or here, I’ve some issue: the app changed the value 3 times in 3 seconds. How can it be?
[Here)(OSM history) and here you updated the road twice at the same second, just in the reverse direction. You’re driving too fast, or your app hasn’t been checked enough. www.openstreetmap is not the right database to do tests.
Revert all changes including “Speed/Limit app” in the comment field, then investigate?

1 Like

While I’m all for making it easier to contribute to OSM, the comments I’m seeing don’t give me much faith in contributions from this app at this point. I’d love to see what the answer to @trial’s comment about the multiple edits is, as well as how you track where the speed limit changes start, end, and how you’ll handle splitting ways.

At this stage, this app looks like it still needs further testing using the dev servers and not the live database, to address the issues already mentioned.

7 Likes

This way also seems concerning. I can see your app setting it to 30, then a minute later changing it to 20. Less than 24 hours later, we see the same thing. And then 2 days ago I can see yourself changing it to 30 again, and at the exact same time, another user of your app changing it straight to 40.

I can absolutely get behind making adding speed limits easier, but I think there’s issues in the process of going from noticing a wrong speed limit to that correction being made in OSM through this app. Maybe it should be more of a review based system, or a way for users to record where speed limits are wrong for later review and submission (once start and end points are confirmed and ways split if necessary).

I’d also recommend uploading in batches, not in individual changesets per change, otherwise this app will become a nuisance to anyone reviewing changesets in areas where it is used.

It’s a good idea, but I think it needs some work before it’s actually used for real edits.

7 Likes

Ok, I’ll ask: to what extent were LLM code generators used when creating this app?

And second question: what is your experience with OSM before starting working on this app?

If possible, answers preferred not from an LLM, or if not, please limit the answers to two paragraphs each

9 Likes

Hi @Jarek and thanks for your questions.

A bit of background on me in think is appropriate: Ross Gerring - Itomic | Web/App Specialists | LinkedIn

I was a professional programmer from ‘89 to ‘93 (Chase Manhattan Bank, now JP Morgan Chase), then a professional website developer from ‘98 to about 2005, after which I increasingly paid other designers/developers to do the work for me… i.e. I moved into management/leadership.

Here’s a non-income generating Flutter app (including mapping components) that my team produced (at great expense over a long period of time, including mapping components): https://play.google.com/store/apps/details?id=com.itomic.squashplayer

I’m now leading the charge to embrace all that AI has to offer for our business - adapt or die, right?

So cutting to the chase: yes, I’ve been leaning heavily on Cursor + the latest LLMs (favouring Opus 4.5 right now, of course) to build and support the Speed/Limit app. I also use Codemagic (for iOS builds) and of course Firebase, Google Play Console and Apple App Store Connect.

Regarding my prior experience with OSM… over the years, me personally, plus my team, have worked with lots of mapping and related packages over the years in websites and apps, mostly working with Google Maps/Places and Leaflet.js. I can’t say specifically which websites we’ve incorporated OSM before, but it’s hard to imagine that we haven’t worked with OSM before in some capacity. We (of course) prefer FOSS where possible, practical and effective.

Sorry for a longer reply than you asked for! But I just wanted to reassure you that I’m a seasoned technologist, and not just a vibecoding newbie with zero prior technical experience or exposure!

Hi @fortera_au ,and sincerely thanks for your feedback.

I’m encouraged and inspired by this:

Welcome to OpenStreetMap, the project that creates and distributes free geographic data for the world. We started it because most maps you think of as free actually have legal or technical restrictions on their use, holding back people from using them in creative, productive, or unexpected ways.

Of course for the app to work and be of benefit to people, it has to be able to access a global database of speed limits. Paying for such speed limit data sets would kill the project dead (I’m not Google).

Is there a better global source of ‘free’ speed limit data than OSM? I don’t think so.

(I’m keep an eye on https://overturemaps.org/ - which OSM contributes to)

I believe that the Speed/Limit app presents as an opportunity to drastically increase and improve the global speed limit data for the benefit of everyone who uses OSM.

BUT!!! Yes, there is an undeniable quality control challenge. By making it so easy for anyone to update speed limits on the section of road they’re currently travelling, it IS open to abuse and/or accidental updating.

Tbh I was surprised to learn (pls correct me if I’m wrong!) that OSM doesn’t have its own automated quality control system for user-contributed data?

I’d be delighted to help improve the quality control of speed limit data at my end, and am wide open to suggestion about how the OSM community recommends I could best achieve this, specifically in relation to speed limits, but potentially also in relation to splitting ways.

Certainly I can batch up the changes at my end, and apply some suitable quality control checks on it before submitting it.

fyi: From a UX perspective, I felt that it’s important that when someone submits an updated speed limit, that the app immediately adapted to assume/believe that the new limit IS the correct new limit for the current way ID, rather than waiting to read the updated data back from OSM (because there’s a lag). Therefore we make use of local caching on the phone to achieve this, i.e. to take the local cache first as gospel… but only for 5 minutes (if memory serves), after which it reverts to whatever OSM says it is.

Intruitively I think the quality control around speed limits is going to be easier than the splitting of ways. I struggle to imagine a scenario where the users of the app were given this power/functionality directly!

I’m in this for the long haul, and very pleased to be a positive force in this community.

Comments pls?

Sincerely thanks for this reminder

Currently I don’t believe our app is breaching the API Usage policy, but certainly as it gets more widely used, there is that risk. A “nice problem to have”, from one perspective, but not if it means there’s a negative impact for others.

Who’s the best person for me to reach out to, to discuss? I’m very happy to chat in a Google Meet, not just in IRC or forums.

@trial - you’re absolutely correct, my apologies.

We have a leaderboard in the app to show contributions by user. This data is coming/polled from our own Firestore storage, NOT from OSM.

The app includes “anti-gaming” logic to ignore multiple attempts by one user to update the speed limit for the same way over a short period of time.

But what was missing from the app was a throttle on how frequently the user could make these submissions to OSM.

I’m fixing this right now, and it’ll be included in the latest release. Instead of instant submissions to OSM on each click, the app will batch them up so that, per 5 mins, only the most recent/latest update to a speed limit for a specific way ID will be submitted.

I’m very keen to hear from others if they recommend (or not) that the above improvement is a suitable approach. Wide open to making improvements!

yes, please clean them up

there is not a lot of them, but they should be removed

The app seems to add source:maxspeed=sign which is not always true and needs to added specifically.
The limit is often derived from the road classification and whether it is a single or dual carriageway.