Skip to content

Beachiness

LIVE

Is it actually a beach day?

A tiny tool that ranks nearby beaches by the conditions that actually make it worth going.

Independent project · Product & engineering

Open Beachiness

Why I built it

I live in the north of Portugal, where ‘sunny’ does not always mean ‘good beach day’… you can leave an inland area with blue skies and arrive at the coast to find cloud, wind and a completely different temperature.

Weather apps had all the data, but I still had to translate it into the only question I actually cared about:

So I built the answer I wanted.

Beachiness search screen with a place field set to Trofa, a 50 km radius slider, and day and period selectors above a Find beaches action.
Pick a place, radius, day and time period, or just use the current location.

One question, several signals

Beachiness only asks for a few things: where you are, how far you want to go, when you want to go, and roughly what part of the day you care about. Then it checks nearby beaches and turns a pile of weather signals into one ranked list.

The score combines variables like temperature, cloud cover, wind, wave height, rain risk and UV, and it ranks the beaches and explains why each one scored the way it did.

Beachiness showing a map of the coast north of Porto with five numbered beach pins, above a ranked list of the top five beaches carrying a score and temperature, wind, wave and UV readings.
Nearby beaches are ranked for the selected period instead of simply sorted by distance.

The score is deliberately boring

There is no AI in the scoring, on purpose.

Each condition gets a weight, the scores are combined, and the result becomes a 0–100 Beachiness score.

The current weighting gives the most importance to temperature, followed by cloud cover and wind, with waves, rain and UV contributing to the rest.

Temperature · 30%
Cloud cover · 20%
Wind · 20%
Waves · 15%
Rain · 10%
UV · 5%

The useful part was not finding the fanciest model. It was making the decision predictable, explainable and easy to trust.

From score to decision

A number is not the decision. So Beachiness also explains why a beach ranks well, what to watch out for, and the conditions behind the score.

So instead of opening several forecasts and trying to combine them mentally, I get one ranked list and can still inspect the underlying conditions.

Beachiness beach detail panel for Praia de Vila Chã showing a score of 91, the reasons it ranks well, a watch-out note about high UV, and tiles for average temperature, apparent temperature, wind, gusts, cloud cover, rain risk, waves and UV.
The score stays inspectable: the app shows both the reasoning and the underlying conditions.

Small tool, finished problem

Beachiness was built for me. I was not trying to create a travel platform or a weather business. I just wanted to remove one recurring decision from summer weekends.

It is still live, and when I want to choose between nearby beaches, it does exactly what I built it to do.

What I learned

Compress the decision, not the data

The individual weather metrics were already available.

The weather data already existed. The useful part was turning it into the decision I actually wanted to make.

Not every problem needs AI

A transparent scoring function was simpler, cheaper and easier to trust than a model would have been. The least exciting technical choice was the better product choice.

Built with

React · TypeScript · Vite · Leaflet · OpenStreetMap · Open-Meteo · GitHub Pages
Beaches and place lookup · OpenStreetMap Overpass & Nominatim
Weather and waves · Open-Meteo Forecast & Marine