Each "screen" is it's own component in
@nuxt_jsand actually had it's own page which allowed for easier debugging during development.
All of the data comes from the
@weatherchannelAPI. I had A LOT of fun finding the best endpoint setup to build out the screens efficiently. There's something so nice when reverse engineering and knowing the API you're using has everything you need. developer.weather.com
My original version had a lot of smart caching built in but then the
@weatherchannelreminded me it was their API and we could hit it as hard as we needed. 🥲 I was like, oh yeah... I think we still do a little browser caching though.
I brought that work into
@figmaand very carefully laid out the screen evolutions alongside screenshots from the original broadcast.
You truly don't understand the power of
@tailwindcssuntil you try and tackle a problem like this. The way it is able to adapt to the interface's needs it just outstanding.
This really became obvious when I added RTL support for Arabic.
@tailwindcsshas incredible RTL support and when I saw those shadows shift from the left to right, I shed one tear. 🥲
I developed a sort of broadcast engine powered by
@greensockwhich handles the entire broadcast playback timeline. Each screen can have it's own duration and cue up its own voiceover intros.
But the real interesting bit is how
@greensockallowed me to recreate the "Local on the 8s" scheduling. The experience autoplays on the 8s of the hour (08, 18, 28, 38, 48, 58) and if you arrive at say 6:19, you would be put 1 minute into a broadcast.
This allows the HTML site to feel a bit more like a live TV broadcast when in reality we're just carefully managing time. At one point, I allowed the user to touch and hold to pause the
@greensocktimeline like an
@instagramstory but that feature did not make the cut.
Since date and time are so important to the interface, I found the
@date_fnslibrary also very helpful.
Both of the maps are powered by
@Mapboxand I designed new styles in Mapbox Studio for both the regional forecast and current radar screens.
To choose which regional locations were shown on the regional forecast and the latest observations screens, I actually created a local database of major cities. This allowed for a more controlled visualization. Then I just used
@turfjsto find the best locations near the user.
The TV turn on effect is just come careful CSS animating. And, the countdown screen was inspired by classic
@weatherchannelbumper/intro graphics.
The countdown visualization is actually a
@PixiJSpowered element because I knew I wanted it to be fullscreen and it allowed handling the animation a bit easier.
All of the music and voiceovers are powered by
@GoldFireStudiosHowler.js. It's just easier that way.
I was able to add 20 languages (so far) using the
@nuxt_jsi18n module, which ended up being a lot of fun.
Special shout out to
@evilmartiansfor their Martian Mono font. It ended up being the perfect alternative to the original typeface and had the benefits of variability.
