I’ve been working on this app since 2023 and I feel like it now matured to a point where is worth showing off ![]()
Point WX - Production Link
This is a (proudly) personal/non-commercial project allowing one to make different visualisations of weather and climate data provided by the amazing open-meteo API . It is updated in real time and can show parameters for every location on Earth.
One of the most popular figure created by people visiting is this one, showing (at once) the evolution of temperature (compared to the long-term average, to see whether a period was warmer/colder than normal), short-term and long term forecasts.
The app uses a combination of many libraries including Dash, Plotly (duh), Dash Leaflet, Dash Mantine Components, Dash Bootstrap Components, Pandas, … It has been running on a local server (gunicorn-nginx) with (very!) limited resources which was (again proudly) able to handle many high-load events with hundreds of people using the app at the same time.
Some of the challenges I had to solve while developing this (which became so much easier to crack nowadays with the help of Claude)
- Creation of a dynamic dropdown element which updates automatically while a user is typing to show a list of locations. This took me WEEKS in the good ol’ days without LLMs. Some favourite locations are also stored in the cache.
- Adapt the layout automatically for Desktop and Mobile, keeping the figure elements to a minimum
- Automatically scroll to the figure when it’s ready, hide it when it’s not, include navigations button to move easily also on mobile
- Full geolocation support with map updates
- Full url-params support for better sharing (modifying pages components updates the select/dropdown and viceversa)
- Figure persistence while moving from page to page (Dash pages limits this)
Implementation details can be found in the repo (at the top).
Of course this is still far from being perfect: it’s a full monolith without back/front distinction, but until now given the limited usage I never had the need to divide the architecture.
Give it a try and I hope you like it ![]()

