An open API service indexing awesome lists of open source software.

https://github.com/titaniumbones/river-levels

Tiny website & node service to track river levels in Southern Ontario
https://github.com/titaniumbones/river-levels

Last synced: 5 months ago
JSON representation

Tiny website & node service to track river levels in Southern Ontario

Awesome Lists containing this project

README

          

* Southern Ontario Stoke & Swell

This repository houses code for an experimental "conditions dashboard" for *whitewater river levels* and *surf spot wave forecasts* in southern Ontario. It draws data from various sources & presents it mostly in *line chart form* for quick checks of current conditions. The project is supposed to provide *a centralized spot to check forecasts*, but also *an opportunity for me to learn various newer web technologies*, so you shouldn't rely on it or expect any kind of data persistence at all, at least for the present.

** Access

Working on a proper deployment schedule, but for now everything in my dev repo is just synced to https://riverlevels.hackinghistory.ca, where you can access [[https://riverlevels.hackinghistory.ca/rivers.html][Actual Live River Data]] and [[https://riverlevels.hackinghistory.ca/lakes.html][Simulated Lake Surface Forecast Data]], with the hope of bringing the wave tool online soon. Just beginning work on [[rivers-react.html][a React implementation]] which may eventually replace what's already here.
* Feature List (user facing)

If the checkbox is ticked, then the feature has been implemented; if not, it's planned but doesn't work yet.

- *Rivers*
- [-] river info tabs with the following info:
- [X] current water levels w/ level quality estimate
- [X] basic info about the river (route description)
- [X] directions links for put-in and take-out
- [ ] display map with all identified points (put-in, take-out, and other info such as alternate put-in/take-out, notable features, etc.)
- [ ] weather forecast
- [ ] links to recent radar/rainfall info (this will be tough to implement without some way to estimate river catchment areas, which is a bit of a big ask)
- [ ] journalling: allow user to provide a brief journal entry, and optionally retrieve
- [ ] historical gauge data
- [ ] historical weather data
- *Waves*
- [ ] surf spot info tabs with the following info:
- [ ] latest point forecast via GLOS wave/wind forecasts
- [ ] spot description (wave info & quality in various wind/wave directions)
- [ ] current buoy reading (if available)
- [ ] direction links
- [ ] windy forecast map link
- [ ] GLOS forecast map link
- [ ] journalling: allow user to provide a brief journal entry, and optionally retrieve
- [ ] historical forecast data via GLOS
- [ ] historical buoy data if available
- [ ] historical weather data
- *Both*
- [ ] offline caching of data to allow use of charts when wifi fails.
- [ ] *DATA ATTRIBUTION* -- I haven't added this yet *at all* so please, if you're using the site, don't share widely -- I'm in copyright violation, or at least good-neighbour violation.

* Data Sources

*ADD ATTRIBUTION*

* Contributions/Suggestions

*Please use the [[https://github.com/titaniumbones/river-levels/issues][Github Issues Tracker]]* for ideas/bug reports/improvements. Thanks!

* Technical Description
** TODO Describe Internal Data Structures (rivers, gauges, surf spots, etc)
*** River Definitions
River definitions are Javascript Simple Objects with the following structure:
#+begin_src js
thisRiver = {
name: "string", // unique name
shortName: "string" // abbreviation to use in tab construction
// gauge-related props will be folded into a new array property `gauges`
// at a future date, to allow for multiple gauge readouts
"gaugeType": "wateroffice", // one of 'wateroffice', 'cvc', or 'grca'
"gaugeID": "02GA005", // unique gauge ID
"slug": "irvine", // used in the cunstruction of element classes & ids
"units": "cms", // generally 'cms' or 'height'
// will eventually be replaced with more complex objects
// cf. leaflet & gmaps for some plausible properties
"points":{
"putin": [43.702321, -80.445578] ,
"takeout": [43.662701, -80.453265]
},
// use this to color-code the levels
"levels": [[0,4.6,"bad"], [4.6,8,"shoulder"], [8,50,"good"],[50,100,"shoulder"]],
// not really using this right now -- can be used to set a runnability threshold
"minHeight": 4.6
}
#+end_src

** TODO Document JS code w/ js-doc
yeah.... that needs doing
** TODO Describe technical roadmap
*** v 0.1
- tabs work with no issues
- biggest CSS issues are resolved
- river def'n is set
- add maps
*** v 0.2
- extraneous files ruthlessly purged
- relevant libraries (e.g. gaugeParser.js) merged bck into this project
- stop using org files for literate programming, switch to plain old html/css/js
*** v 1.0
- offline storage
- journal implemented
*** v 2.0 (or whatever) rewrite in react