Why this exists
I surf Senggigi most mornings. Every surf app I tried either showed data that didn't match the ocean, or buried the honest answer under features I didn't need.
Foam is my attempt to build something honest: show what the models actually say, be upfront about what they can't know, and give a plain-English read of the morning so I can decide whether to paddle out without thinking too hard.
It's a personal tool first. I'm the only tester. If it's useful to anyone else, good.
Where the data comes from
Open-Meteo Marine
Primary swell height, period, and direction. Wind wave height. Water temperature. Free, no key. Updates hourly.
Harmonic tide model
Tide height and high/low times, computed from astronomical constituents (the moon and sun). No API, always available. Calibrated against Stormglass observations.
Open-Meteo UV
UV index and daily max. Reliable.
Claude Haiku
The plain-English summary at the top. Gets the current rating, swell angle, tide movement, and this morning's wind as context. Runs once every 30 minutes.
What you can trust
Wave height is the hardest thing to forecast for Senggigi, and it's where Foam does the most work. The free models report a mean swell period, but the size a wave breaks at is driven by its peak period, which is longer. Foam estimates the peak period, uses it to model how much the swell stands up as it shoals toward the bay, then scales for the headland sheltering. Earlier versions skipped this and read consistently small, a waist-to-head session would show as thigh-high. It's a calibrated estimate, not a physics simulation, and it's tuned against real sessions and Surfline.
Wind here is a thermal sea breeze. The global models get whether it's light or strong about right, but the exact direction can be well off near the coast, they tend to show the broad regional flow rather than the local breeze. Trust the strength; treat the direction as a hint.
How to read it
The summary at the top is the quickest read. It matches the condition rating, if the rating is poor, the summary won't pretend otherwise. It also knows whether the tide is rising or falling and what the wind was doing this morning, so it can flag if something's about to change.
The charts are scrubable. Drag left or right to see any hour of the day. The value in the header updates as you go.
The swell compass shows where swell is coming from. For Senggigi, the optimal window is roughly SSW to WNW (210–280°). If the swell is outside that range, a note appears below the compass.
The wave energy section shows power in kW/m, a better measure of punch than height alone. Under 3 is too small. 3–8 is fun for most. Above 8 is for people who can actually surf.
The tide chart is the most accurate thing on the page. Senggigi has about a 1.5m tidal range, it affects wave quality noticeably.
Stay in the loop
I'll send occasional updates when the forecast improves or new spots get added. No noise.
Built by Ilya · Senggigi, Lombok