https://github.com/scorphus/seebuddy
Live water + weather conditions for swim-friendly lakes around Munich
https://github.com/scorphus/seebuddy
Last synced: 28 days ago
JSON representation
Live water + weather conditions for swim-friendly lakes around Munich
- Host: GitHub
- URL: https://github.com/scorphus/seebuddy
- Owner: scorphus
- License: bsd-3-clause
- Created: 2026-05-03T09:39:12.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-05-03T17:18:31.000Z (3 months ago)
- Last Synced: 2026-05-03T18:38:11.612Z (3 months ago)
- Language: Go
- Homepage:
- Size: 211 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# seebuddy
Live water and weather conditions for swimmable lakes around Munich.
```sh
just backend # encore run on :4000 (regenerates sqlc + TS client first)
just frontend # vite dev server on :5173 (proxies /lakes to :4000)
```
First time only: `just frontend-install` to install the npm deps.
## What it does
A cron job polls each adapter periodically and stores readings in a
shared `readings` table. The `GET /lakes` endpoint returns the catalog
of known lakes plus the latest reading for each. The frontend renders
that as a grid of cards: water temperature in focus, air/humidity/wind
secondary, weather emoji from the WMO code, and a stale badge when the
reading is older than 90 minutes.
## Layout
```
backend/
├── lakes/ # only Encore service: catalog + cron + GET /lakes
├── adapters/
│ ├── adapter.go # Adapter interface
│ ├── wachplan/ # Wasserwacht LoRaWAN sensors (Lußsee, Langwieder See)
│ ├── gkd/ # Bavarian state service HTML scraper
│ └── openmeteo/ # lakes without a dedicated sensor; uses Open-Meteo
└── openmeteo/ # shared lat/lon current-weather client
frontend/ # Vue 3 + Vite + Tailwind
```
## Adapters
- **wachplan**: water + air temperature + humidity from sensors run by
[Wasserwacht München-West](https://sensors.mein-wachplan.de/), built and
operated by Bernhard Rohloff. Currently covers Lußsee and Langwieder See.
- **gkd**: water temperature scraped from
[gkd.bayern.de](https://www.gkd.bayern.de/de/seen/wassertemperatur)
(Gewässerkundlicher Dienst Bayern, the official Bavarian state service).
Covers Ammersee, Pilsensee, Schliersee, Starnberger See, Tegernsee, and
Wörthsee.
- **openmeteo**: lakes without a dedicated sensor. Pulls air temperature,
humidity, wind, and weather code from [Open-Meteo](https://open-meteo.com/)
using the lake's lat/lon.
Adding a new lake = edit the relevant adapter's lake list.
Adding a new data source = new adapter package + register in
`backend/lakes/cron.go`.
## Other commands
```sh
just test # encore test ./...
just lint # go vet + gofmt check
just gen # gen-sqlc + gen-client
just gen-sqlc # sqlc generate
just gen-client # encore gen client → frontend/src/client.ts
```
## License & SLA
Personal project. BSD-3-Clause. No SLA — be nice to upstream services.
## Attribution
GKD water temperature data is provided under
[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/):
> Datenquelle: Bayerisches Landesamt für Umwelt, www.lfu.bayern.de