Projects

SkyForecast

A mobile weather app whose interface changes with the conditions it is reporting.

Role
Software Engineer
Status
shipped
  • SkyForecast — the weather interface in three different conditions

Problem

A forecast is only useful if it reads at a glance. SkyForecast pulls live conditions for a location and moves the interface with them, so the screen looks like the weather it is describing before you have read a number off it.

Architecture

mountsreadsfetchesdrivesReact Native appclientReact NavigationclientDevice locationexternalWeather APIexternalDynamic themingclient
Architecture of SkyForecast.
Read this diagram as text
  • React Native app mounts React Navigation
  • React Native app reads Device location
  • React Native app fetches Weather API
  • Weather API drives Dynamic theming

Engineering decisions

The stack, reasoning not written up yet:

React Native · Expo · NativeWind · React Navigation · Weather API

The hard part

A theme that changes with the weather changes while someone is looking at it. Conditions arrive from the API in categories that do not map onto anything visual — light rain and drizzle should not produce two different screens — so the app reduces them to a small set of visual states and transitions between those rather than re-theming on every field that moves. Location is the other half: a device that cannot get a fix, or is refused permission, still has to show something, so the last known location is kept and labelled as such instead of the screen going blank.

Result

Location-based current conditions and multi-day forecasts, with temperature, humidity and wind detail, weather animations, and a theme that changes with the conditions being shown.