Fair warning: a bit of a two-parter for ya here – this is both a blog post and a portfolio entry for The Weather Sucks
Not long ago, I got really frustrated with the way the weather app I used worked. It would take a good 5 minutes to load the information I needed – even over a wifi connection. I also got frustrated with the ads, both persistent banner ads and intermediate pop-up ads. I think it was trying to load a bunch of data and either parsing it slowly or inefficiently or it was purposely moving slow to get me to purchase an upgrade. Either way it wasn’t working for me. So I wanted to build something that would work for me.
I started searching weather APIs and figured out that the NWS has a free API. There’s one third of the equation. I needed a way to figure out a user’s location (or the location they wanted to get the forecast for). The NWS API requires latitude and longitude – they won’t geocode an address or generic identifier. So not only did I need to know where the user is in layperson’s terms, I also needed to transpose their location in to a latitude and longitude (known as geocoding).
Google Maps has a good function for that, but I thought it was a lot of weight and would defeat the purpose of trying to build something lightweight, fast, and simple. So I found Here, which offers a lot of different location-based services. Most relevant to me was their easy to use, fast, and accurate Geocoding service.
With these two problems solved, I just needed a front end. I wanted to go really simple and just use a brutalist design, but I quickly learned that wasn’t actually what I wanted to do and I picked up Bulma. Haven’t looked back. I’ve talked about Bulma before and my thoughts haven’t changed much – I still like how easy it is to use and how light it is. One thing that has changed, though, is that I actually like the fact that there is no stock JavaScript. That’s great.
So I slapped all this together, bought the domain and SSL cert, designed an icon, and sent it! Check it out at https://theweathersucks.xyz.