Veloq: Route and section matching, mapping app

G’day all,

These holidays, I got itchy feet and developed a “geo-first” app for intervals.icu, with a strong focus on maps, GNSS traces and route matching. I noticed a lack of visual insight into activities on mobile, despite the huge amount of incredible data and insights David has already developed here, and I wanted to get my hands dirty with app development to fill the gap.

Thanks again to David and the team for their work on such an awesome API!!

The app is called Veloq (https://veloq.fit). It will be released on both iOS and Android, and I’m looking for some internal testers to validate its features on both platforms (link to internal testing below). It is and will remain open source, but will become paid apps on the stores to cover the cost of maintaining the app store fees and to encourage continued maintenance. Despite this, the releases will be published on GitHub for free if you can install them yourself, and, if interested, you can contribute and report bugs. There is a demo mode (what you see in the screenshots) that lets you browse without logging in.

One of the app’s more important features (well at least the one I spent the most time on), is its ability to match routes and automatically generate frequently visited sections to track over time. This is done by caching your activities in memory and running against a library written to match GNSS traces (which still needs some testing and tweaking). And if the auto-generated sections are not enough, you can add your own custom sections to see your progress over time in any of the activities that pass through them.

Importantly to note… None of your data is ever sent anywhere; the only service it contacts outside of intervals.icu is an OAuth proxy to make it easier to login. Otherwise, all route analysis is performed locally on your phone, optimised to run there, but may run slowly on older phones – you can disable this feature if it impacts the usefulness of the app.

For those interested in testing: This is still in heavy development, preparing for a release, so be mindful of bugs and report them as best you can :slight_smile:

Testing links:
iOS - veloq (beta)
Android - veloq (beta) (To be able to access the Android testing, join the testing group here first)

Cheers!


Some additional information

Languages:

  • English (US, UK, Australian)
  • Danish
  • Dutch
  • French
  • German (Germany, Swiss)
  • Italian
  • Japanese
  • Polish
  • Portuguese (Portugal, Brazil)
  • Simplified Chinese
  • Spanish (Spain, Latin America)

…and some more screenshots:

7 Likes

the android link say this

Ah, my mistake, the closed testing stream before I release for Android is invite-only. This is my first rodeo. Send me a dm with your email if you’d like to be a part of the closed testing.

Join the testing group: https://groups.google.com/g/veloq-testing

I tried your apps…fantastic.

I also tried creating segments or sections, as you call them, without any problems, and I can also see the history.
Are you having problems with Strava’s patent regarding segments and their classification?

@david , It would be great to have this implemented on intervals

Hey Manuel, thanks for testing it out. Sorry that Android testing is a bit more of a pain to join than iOS .. :melting_face:!

I wouldn’t say there’s a classification problem, because a section in the app is a bit different to a segment in Strava. They are pieces/sections of real activities trace data that have been found to have frequent overlaps, cut out, and then rediscovered using average minimum distance. If an activity occurs in close proximity in either a forward or reverse direction (and sometimes in different spatial geometries), it is also considered related, which can result in false positives that you may discover.

If the autodetection misses something, you can manually cut a section from one of your activities. It then lives alongside the autogenerated sections and is matched the same way - unsupervised clustering doesn’t always get it right.

As far as I’m aware, Strava matches these much better, requires user input to draw coordinates, and considers more details to determine whether something is a match. The data is generated amongst other users and maintained via leaderboards, whilst sections are based solely on geometric proximity of repetition with your own data on your device.

PS. Thanks to those who have been testing and providing crash reports – I have fixed a few crashing issues when using the maps and pushed an update.

1 Like

be Just a small friendly FYI: IIRC Strava has some patents around segments, mostly related to rankings / comparisons / leaderboards rather than the general idea of slicing GPS tracks.

Your approach feels quite different anyway (personal, on-device, no crowdsourced leaderboards), so this is definitely not a red flag — just one of those things that’s good to be loosely aware of.

Really cool concept btw, enjoying following the progress

2 Likes

Correct…I don’t see the problem with having this feature in Intervals too…

In Android app Is not possibile creare a part of route.
I tried manu tomes but nothing

I have modified this to allow longer sections. You will also see the trace length before saving. Give it a go and see if it fixes the problem for you.

The version update is live for testing if you do an update (v0.0.7)

There are some factors involved here in determining if it’s too long. At the moment, it relies on the activity’s GPS data for that section not exceeding a threshold of 100Kb (I’ve changed this to 500Kb in the update), but this depends on your activity’s GPS point density and whether your device records per second or per 30 seconds, for example.

I have not tested very long sections, so it would be great to get your feedback, especially if you notice any crashes or slowdowns for these longer sections, and I will take note of displaying something more intuitive than green/yellow/orange/red on the screen once I determine the effects it has on processing, storing and recalculating.

Also, I am terribly sorry to iOS users; there have been a significant number of crashes that just don’t happen on Android due to the way the map library functions on iOS. This release should be much more stable, but all the crash reports have been extremely helpful, thank you!

1 Like

With new version , all works , but it’s not possible to rename the new section.
I wrote the new name , confirm but the name remain CUSTOM SECTION

1 Like

Great to hear, and thanks for the feedback – I’ll look into it

1 Like

Very cool app! Works good so far :slight_smile:

Some minor feedbacks/questions:
Sections
I think it is great that you automatically provide forward and reverse direction, if available. However, for me it doesn’t make sense that the PR is for both, it should be seperatly. One forward PR and one reverse PR.

Graphs in activity overview
Would be great to be able to pick a timepoint and receive the value like in most other applications.

I am testing on android

1 Like

Thanks for testing!

Ah yes, I did have that in mind when I changed for forward and reverse plots, and I completely forgot about it..!

For the plots, I’m making some changes for the next release to add y-axis labels. I’ve also changed the scrubbing time. But already, if you hold your finger on the plot you will see the scrubbing bar value and a marker on the map showing where it happened. Let me know if it doesn’t work.

If anyone uses GitHub feel free to add issues here so I can track them easier, but here in this thread is also fine

2 Likes

This release is great!! I gave Veloq another try after continual crashes on iOS first time around - I can see really see this app slotting nicely into my fitness analysis - many thanks.

1 Like

Thanks for sharing this. I’ll give the iOS app a try :slight_smile: I was doing something really similar, just as a PWA, and not a “native” app. Routes, “Sections”, and data only on the client side. I miss this data minimization approach on many external projects :slight_smile: But I am still more on an early “pre-alpha” phase :wink:

What I miss is a native menu. It’s not intuitive that you can click the bubbles with fitness metrics and so on, and that they open a new page.
And I miss the section overview page (or didn’t find it), so showing all defined sections in an overview.

1 Like

I get Network request failed when trying to login with Intervals

Cheers, that’s valuable feedback. How do you imagine the menu? I have been trying to keep it the same minimalist design language that is in quite a lot of apps so it feels natural for most people, and focus it on simply the important points at first glace, hence the buttons.

But at the same time, I was attempting to customise it more – such that in the settings (pressing on the profile icon), you can choose your focus: Running, Cycling, Swimming, and the buttons at the top change. For example, for the performance page, the cycling button shows FTP, but for runners, it shows lactate threshold.

Initially, it was just going to be the fitness/form page, but I started wanting too much, and I see already that there’s a bit of an issue with fitting all the data in on every phone. Perhaps one option would be to allow a more granular customisation of this row.

The section overview page is in the training page under “Routes”.


1 Like

Ok, will try to give feedback directly in GIT next time.

One more feedback here: the overll map (heatmap with all the activities) still lacks performance (sometimes stuck and cannot zoom in/out for a few seconds, selecting an acivity needs ca 10 sec to actually select it, etc)

Also i cannot find the option to changes metrics (miles or kilometers) if it already exists?

Otherwise i start to really like the app and see great potential! I will keep tesing

1 Like

I took a look and the OAuth proxy isn’t reporting any errors. Are you able to see the intervals login page at all or the choice of permissions to give the app?

If you want, you can also login to the app with your API key from settings directly, and it bypasses the proxy completely.

Just note that this gives the app full permission to your account (there is nothing the app would do to it anyway, it only reads from intervals), but you lose independent control of permissions so I would recommend trying again with OAuth (the “Sign in with intervals.icu” button)

1 Like

All my Apps on iOS have the Menu on the bottom, like Strava:

2 Likes