Activity
-
Implement case insensitive postcode match by Caio a day ago
-
Fix missing svg styles for /app by Caio 2 days ago
-
Use f32 instead of f64 for predictions 💬 by Caio 2 days ago
There's no real reason for f64: the source is a u16 with a small scale factor. I thoughtlessly went for the wider type because geo coords, projector and dataset metadata all use higher precision So: lat/lon input is still f64 since it's relevant for projecting into the grid, but the in-memory grid is f32-based, which cuts the runtime ram cost in half (from ~100MB to 50) with no loss
-
Make /app behave more like an app 💬 by Caio 2 days ago
Auto pull coordinates, periodic refresh, doesn't leave /app
-
Split /app from index 💬 by Caio 3 days ago
Trying to share here will get more in the way than help
-
Less error prone logo by Caio 3 days ago
-
Make chuva.caio.co/app a "PWA" by Caio 4 days ago
-
Add a little png logo 💬 by Caio 4 days ago
I'll miss you, emoji icon.
-
Use css instead of <center> 👴 by Caio 5 days ago
-
"Modern" <br> shouldn't have trailing slash? 💬 by Caio 5 days ago
Showing my age here eh
Chuva
Rain prediction for The Netherlands
- Live: https://chuva.caio.co
- Demo: https://chuva.caio.co/demo
- Git Repository: https://caio.co/de/chuva/
History
Earlier this year (2025) I got fed up with how slow and full of ads the service I used before got, then I found out that KNMI publishes precipitation predictions so I quickly hacked something that dumped what wanted to the terminal
For months, this is all that chuva was: a script downloading the most recent dataset and me ssh'ing into the server to call the program. Then came October with a lot of random rain that barely gets you wet which prompted me to make it easier to access it.
I kept the support for plain-text predictions since I like to avoid
going to the browser to prevent distractions. You can use it too if
you like, either via the accept header or a txt=1 query string:
$ curl -H accept:text/plain https://chuva.caio.co/demo
It's 10:48
▃▄ ▄▆▆▅▁ ▁▄▅▄▂
^
- Rain ends in 36 minutes
- Rain from 12:15 until 12:40
Project Layout
In alphabetical order:
caveman: Ahyper-based,serde-less http1 thing that can answer traditional web requests and knows to shutdown gracefullydataset: An API for interacting with the KNMI dataset. It loads the dataset to RAM in a format that makes it super easy to answer the "what's the forecast for a given coordinate" questiondownload-dataset: The "cron job" that retrieves the most recent datasetetc/systemd: A skeleton of the systemd unit files that drive the servicemoros: The web server, front-end for chuva.caio.co. Designed to be killed/restarted periodically to pick up the most recent datapostcode-fst: Code to generate the compact dictionary with dutch post codes used bymoros
License
This software is licensed under the European Union Public License (EUPL) v. 1.2 only