This one started as a plain weather app and got more interesting when I realised the data was already a puzzle. If you know it is 21 °C, humid, thundery and the five-day trend is flat, you can narrow down where on Earth you are. That is a game.
MeteoGuessr is both halves: a genuine weather app built on an interactive 3D globe, and a guessing game that reuses the same live data as its clues.
The globe
The globe is Three.js, rotatable and zoomable, textured with NASA blue-marble imagery. Click anywhere and you get current conditions — temperature, humidity, wind, pressure, visibility — plus a five-day forecast. Cities can be searched by name and bookmarked as favourites, kept in local storage, and a ticker along the bottom scrolls live temperatures from major cities worldwide.
A layer toggle cycles the globe between plain, country borders, capitals and cities. Separately, weather overlays paint temperature, precipitation or wind across the entire sphere — those are built by sampling a 288-point grid (24 longitudes × 12 latitudes) and interpolating it into a texture, which is the part of this project I enjoyed building most.
Weather IQ
The game shows the weather of a mystery location and asks you to name it, across four difficulty levels: from guessing the country with every hint available, up to guessing the city with only a hemisphere and a first letter. Wrong guesses cost points, the penalty scales with difficulty, and the high score is kept locally.
How it is built
React 18 and Three.js, bundled by Vite, with a small Vitest suite over the coordinate maths. Weather comes from Open-Meteo, geocoding from Open-Meteo’s search API and reverse geocoding from OpenStreetMap’s Nominatim — all free and open, so the app needs no API keys and costs nothing to run.
Where it stands
Deployed as a preview. Everything described here works; what it does not yet have is the polish of a finished product — the globe is heavy on first paint, and the game could use more rounds and a shared daily challenge rather than a purely local high score.