open source · MIT · no login

trova lo spot
di kitesurf giusto.

Vento, onda e marea da sorgenti open data, su un globo interattivo. Niente login, niente database, niente API key obbligatorie — gira out-of-the-box.

Next.js 15 · three.js · 5 sorgenti open data · 50 spot

Home di Kiteplanet: globo three.js con i pin degli spot e la strip delle sorgenti dati.
cosa fa

tutto quello che ti serve prima di entrare in acqua.

  • Globo interattivo

    Coste reali, atmosfera Fresnel, pin con snapshot live e cicloni come spirali rotanti. Ruota il mondo e trova lo spot.

  • Vento, onda, marea

    Forecast 72h da Open-Meteo, osservazioni real-time dalle boe NOAA, maree da Stormglass dove serve.

  • Raccomandazione kite

    Per ogni ora: ON / MARGINAL / OFF e la misura di kite consigliata, calcolata sui dati reali dello spot.

  • Resiliente per design

    Ogni sorgente passa per withResilience: timeout, fallback, 5 stati. Niente pagine bianche, niente loading infiniti.

  • Modalità demo / live

    Toggle persistito su cookie. In demo i dati sono mock deterministici — provala senza chiavi né rate limit.

  • Bilingue IT / EN

    UI e pagina sorgenti dati in italiano e inglese, cookie-based, senza ricaricare.

Scheda spot: condizioni attuali, scala Douglas dello stato del mare, forecast a slot in streaming.

la scheda spot, in streaming

La shell renderizza subito; ogni sorgente ha la sua <Suspense> e appare appena pronta. Un provider lento non blocca gli altri — condizioni, stato del mare e forecast arrivano in parallelo.

Pagina sorgenti dati: ogni provider con stato, cosa fornisce, env vars e licenza.

sorgenti dati trasparenti

La pagina /data-sources (bilingue) descrive ogni provider: cosa fornisce, come viene usato, env vars, licenza e gli spot che lo consumano. Il badge dice subito se è live, in demo o se serve una key.

com'è fatto

qualche scelta tecnica, per i curiosi.

È un progetto personale, ma le decisioni sono documentate. Ecco quelle che non si vedono dal README.

Provider Registry + withResilience

Ogni sorgente esterna implementa la stessa interfaccia e passa SEMPRE per un wrapper unico: timeout via AbortController, errori catturati, sempre uno di 5 stati. La UI si adatta allo stato — non al caso.

Streaming SSR + React cache()

I fetcher sono memoizzati per-request con cache(): più <Suspense> boundary che chiedono lo stesso dato pagano una sola fetch. Streaming per-sezione, dedupe gratis.

Demo / live a doppio livello

La mode vive su cookie (idratazione server-side, zero flash) con localStorage di fallback. Atterri in demo: forecast deterministico, nessuna fetch, nessuna chiave. Il toggle salva la preferenza.

Globo three.js fatto a mano

Terra triangolata con earcut (gestione antimeridiano), coste reali da world-atlas, atmosfera Fresnel. Estetica "carta sketchy": filtro SVG turbulence, font hand-drawn, palette carta.

sorgenti dati

cinque sorgenti open, dietro un'astrazione comune.

ProviderCategoriaKeyFree tier
Open-Meteovento, onda, SSTnoillimitato
NOAA NDBCosservazioni real-time (boe)noillimitato
NHCcicloni tropicali attivinoillimitato
Wikipediasummary enciclopediconoillimitato
Stormglassmaree10 req/giorno

L'app gira al 100% senza API key: i provider che ne richiedono una mostrano un badge "API key required" finché non la aggiungi. Stormglass si attiva solo sugli spot dove la marea vale il budget.

la tua copia

da fork a online in pochi minuti.

  1. 1. Forka la repo

    Clona il fork in locale: pnpm install e pnpm dev. Funziona subito, senza chiavi.

  2. 2. Deploy su Vercel

    L'app usa streaming SSR, quindi serve un runtime Node. Vercel è il target raccomandato — un click col bottone qui sotto.

  3. 3. (Opzionale) Stormglass

    Vuoi le maree? Aggiungi STORMGLASS_API_KEY nelle env di Vercel e abilita il flag sugli spot che ti interessano.

  4. 4. Vetrina su Pages

    Questo sito statico (website/) si pubblica da solo su GitHub Pages a ogni push — ospita la vetrina, non l'app.

Deploy with Vercel → Apri la demo live Ogni passo è documentato nel README della repo.