# PublicCloud – himlen över Örebro Källkoden till **https://publiccloud.se**: en helskärmshimmel som följer solen, månen och det aktuella vädret, med en klocka i mitten och fyra glasrutor runt den. ## Vad sidan gör **Himlen** - **Dag och natt följer klockan.** Dagfilmen spelas från verklig soluppgång till solnedgång och nattfilmen från solnedgång till soluppgång, en bildruta åt gången, med mjuk övertoning mellan rutorna. - **Vädret läggs ovanpå** (Open-Meteo, var 10:e minut): klart (molnen tonas bort), växlande (solen genom molnen), mulet, dimma, duggregn, regn och kraftigt regn med droppar som rinner på "glaset", åska med blixtar och snö. - **Vind** (hastighet, byar, riktning): snett regn, blåsande snö och droppar, vindstråk, höstlöv (sep–nov) och byar. Vyn är vänd mot söder, så västlig vind blåser åt vänster. **Natten** - **Månen** med rätt fas och position. Vid växlande molnighet skärs den av molnen i filmen, eftersom molnen ligger i lagret ovanför månen. - **Stjärnor** som glittrar realistiskt (scintillation, utan strålkors). - **Mulet** ger ett mörkt molntäcke. - **Norrsken** styrs av NOAA:s Kp-index: gröna band med ljus underkant som kommer lågt från horisonten och sveper upp över himlen. - **Nymåne-överraskning:** en egen SVG-siluett av en fotograf som sitter på en månskära med kameran (`img/moon-photographer.svg`). Den visas bara vid nymåne, när det är mörkt och klart. **Fyra rutor** - **Just nu:** väder, temperatur, vind, måne, sol och plats. - **Plats:** en jordglob (MapLibre GL 6.11, globprojektion) med dag- och nattskugga i realtid, kust- och landsgränser (Natural Earth), en röd nål för vald plats, scroll- och knappzoom, "Utgå från min plats" (GPS), klick på globen och standardplatsen Örebro slott. Allt räknas om för vald plats. - **Spara som min plats:** sidan startar där nästa gång (sparas bara i webbläsaren). - **Dela min pin:** ett öppet, anonymt index på stadsnivå. Servern avrundar positionen till 0,1°, slår själv upp stad och land (ingen fritext) och visar alla delade städer som glödande punkter på globen. Ägaren kan ta bort sin pin. Spärr: en delning per nätverk och 5 min (saltad IP-hash som går ut, IP sparas aldrig). - **Kväll & natt:** betyg för stjärnhimlen, chans till norrsken (Kp nu och prognos), meteorregn samt fullmåne och nymåne. - **Fotoljus:** gyllene och blå timmen med väderprognos, månens upp- och nedgång, dimma, regnbåge och nattlysande moln. Textstorleken anpassas automatiskt så att allt får plats. På mobil staplas rutorna. **Molnlager och ikoner** (standard, `?lager=0` stänger av): tre procedurella molnlager som driver med vinden på olika djup (månen och solen ligger mellan lagren), samt animerade SVG-väderikoner i rutorna. ## Struktur ``` site/ public/index.html hela sidan (HTML, CSS, JS – inga byggsteg) public/img/moon-photographer.svg nymåne-överraskningen public/_headers cache-regler (filmerna cachas i ett år → nytt filnamn vid ny film) public/video/ day-v2 / night som WebM (VP9) + MP4 (H.264, reserv för äldre Safari) public/vendor/maplibre-6.11.2/ MapLibre GL JS (självhostad, verifierad mot npm-registrets integritet, BSD-3) public/vendor/ne/ Natural Earth 1:110m kust- och landsgränser (public domain) worker.js Cloudflare Worker: statiska filer + HTTP Range (206) för /video/* + /api/pins (GET/POST/DELETE) wrangler.jsonc Worker-konfiguration (namn publiccloud-sky, D1-databasen publiccloud-pins) db/schema.sql tabellerna pins, ratelimit och geocache tools/ upscale-slowmo.sh hur filmerna togs fram: Real-ESRGAN x4plus (uppskalning) + RIFE v4.6 (slowmotion) ``` ## Driftsättning Sajten körs som en Cloudflare Worker med statiska filer och custom domain `publiccloud.se`. ```bash cd site export CLOUDFLARE_API_TOKEN=... # konto-token med Workers-rättighet export CLOUDFLARE_ACCOUNT_ID=... npx wrangler d1 execute publiccloud-pins --remote --file db/schema.sql # första gången npx wrangler secret put PIN_SALT # slumpat salt för IP-spärren npx wrangler deploy ``` ## Testparametrar | Parameter | Exempel | Effekt | |---|---|---| | `t` | `?t=2026-10-10T23:30%2B02:00` | startar klockan vid en viss tid | | `speed` | `?speed=600` | kör klockan snabbare | | `weather` | `?weather=thunder` | tvingar väder: clear, partly, overcast, fog, drizzle, rain, heavyrain, thunder, snow | | `wind`, `winddir` | `?wind=75&winddir=270` | tvingar vind (km/h, grader) | | `kp` | `?kp=7` | tvingar Kp-index (norrsken) | | `nymane` | `?nymane=1` | visar nymåne-överraskningen oavsett månfas (på natten) | | `lager` | `?lager=0` | stänger av molnlager + animerade ikoner (på som standard) | | `instant` | `?instant=1` | inga övertoningar (för skärmdumpar) | | `debug` | `?debug=1` | visar bildruta, sol, väder, vind, måne, norrsken | ## Datakällor - Väder och prognos per timme: [Open-Meteo](https://open-meteo.com/) (gratis för icke-kommersiellt bruk) - Kp-index nu och 3-dygnsprognos: [NOAA SWPC](https://www.swpc.noaa.gov/) - Karta: [OpenStreetMap](https://www.openstreetmap.org/copyright) via [Leaflet](https://leafletjs.com/) 1.9.4 (cdnjs, SRI) - Platsnamn: OpenStreetMap Nominatim (i webbläsaren för vald plats, i Workern för delade pins) - Konturer: [Natural Earth](https://www.naturalearthdata.com) (public domain) - Sol- och månberäkningar: formler från SunCalc (Vladimir Agafonkin), inbäddade i sidan - Meteorregn: American Meteor Society / IMO:s kalendrar