plain text weather forecast
☂
=============================================
About
brolly.sh is a minimalist, plain text weather forecasting site. Use it to view weather from around the world, with:
- 7 day forecast
- Previous day log (so you can confirm it definitely was cooler / hotter / wetter / drier yesterday!)
- Hourly rain, wind, temperature, conditions
- Hourly UV, air quality and pollen, including pollen type specific forecasts, within the EU / UK
- Location search and last 5 locations
---------------------------------------------
Styling and UX
The site is deliberately styled as a single long scrollable column, to work on mobile phones. You can view it on desktop too, there's just a lot of white space!
I naturally took a lot of inspiration from plaintextsports.com. Despite not being a sports fan, I love its aesthetic. But, you'll hopefully see that this site isn't a rip off, and has its own deliberate look and feel.
Figuring out the best way to display weather is a lot of fun. You need to enable easy scrolling through a forecast, and easy ability to compare a time range across days. I focussed on the 'single page, single day' model, with navigation that lets you quickly flick between days.
Visualisations are really important to showing information at a glance. I spent a lot of time designing the different visualisations and making them work with only characters. My favourite is the hourly heat map used for pollen count.
It's also frustrating to have an interactive site, where you can't share a page with a friend and have them see what you're seeing. To solve this, all page state (i.e. location, selected day, expanded / collapsed sections), is stored in the URL. You can share or bookmark the specific view, and know that you'll always be able to come back to it.
---------------------------------------------
Weather Forecasts and Location Search
brolly.sh works around the world. It uses open-meteo.com to search locations and retrieve weather data from 30+ models depending on location. This hopefully keeps the quality of the forecast high, regardless of your location.
Open-meteo has a very generous free tier, however to avoid putting unnecessary strain on the API, weather results for a location are cached for 5 minutes. You can see when the results were last fetched in the forecast page footer.
---------------------------------------------
Tech Stack
brolly.sh is written in Go and plain HTML/JavaScript/CSS, and deployed using PocketBase.
Every page is a PocketBase route, and is rendered server side. Some light JavaScript handles re-loading backend rendered content without page jumps when using interactive features like next / previous day navigation.
PocketBase has a built in SQLite database. This is used for caching forecasts via a custom implemented read through LRU cache, and for storing aggregated site stats. You can see site usage on the /stats page.
The server is wrapped in a docker container, and deployed as a single instance to DigitalOcean. It's enjoyably simple!
---------------------------------------------
AI
I manually designed the site, defined its architecture, structure etc.
I have however used AI to implement significant portions, whilst keeping the most interesting bits to work on myself.
I have mixed feelings about AI. I wouldn't have had the time to build this site without it, and use it heavily in my day job to improve velocity. But, there are also points where I deliberately avoid using it, either to keep the joy of focusing on a problem, or to make sure I'm not accidentally AI 'doom scrolling' my way through life. Everything is a balance.
=============================================