souplesse/README.md

74 lines
2.2 KiB
Markdown

# Souplesse
![screenshot](screenshot.png)
_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: run `overmind start -D` and then `overmind 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