app | ||
frontend | ||
lib | ||
tests | ||
CHANGELOG.md | ||
default.nix | ||
elm.json | ||
HACKING.md | ||
LICENSE | ||
Makefile | ||
Procfile | ||
README.md | ||
screenshot.png | ||
souplesse.cabal | ||
track.gpx |
Souplesse
This readme describes what may someday be, not what is today
Reads a GPX file which you generated by cycling around, and tells you interesting(sic) things about it.
The principle we aspire to is that the measurement is subsidary to the ride, not the purpose of the ride. The purpose of the ride is to enjoy cycling, or to see new places, or to get from A to B, and the purpose of Souplesse is to see if we can get any useful numbers out of the riding you were doing anyway without making you do more of it.
So, the general idea is that given some ride data it can tell you how long/how often you spent at a given level of effort (e.g. heart rate), or output (power, speed, cadence, rate of ascent).
Canned views
ride view
graph of (selected variables) / time, with buttons to select variables slider for threshold level all points above threshold are highlighted and interval times above threshold shown zoom in/out on time range show the selected points on a map
calendar view
note this will need some kind of server-side storage so that the system remembers all your gpx files
shows dates that you rode for each ride, show time at effort some kind of slider for effort level
Query view
Not yet decided if this is useful, something that allows graphs of arbitrary functions of properties (e.g. to look at power/cadence ratio, or ... some other weirdness)
Tech notes
Use nix-shell
. Inside the shell
-
use
make
to build frontend (Elm) and backend (Haskell/Yesod) and run tests for both. Refer to the Makefile (which is gratuitously x86-64-specific, sorry) for details -
Procfile
describes all the things I like to run in different tabs, including a Docker container for Postgres. Best used with Overmind: runovermind start -D
and thenovermind connect
to fire up a tmux session
Sample data
The upload form deliberately doesn't have CSRF (for now, at least) so that you can chuck a bunch of GPX files at it using curl
for i in tmp/Tracks/*.gpx ; do curl --form f1=@$i 'http://localhost:3000/upload'; done
This should be safe to do repeatedly because it will refuse upload of tracks where the database already contains any points in the time range of the uploaded track