- Platsrutan: MapLibre GL 6.11 (självhostad, verifierad mot npm) med globprojektion, dag-/nattskugga i realtid med mjuk skymning, Natural Earth-konturer, röd nål, scroll- och knappzoom - "Spara som min plats" (bara i webbläsaren) i stället för automatisk sparning - "Dela min pin": öppet anonymt index i Cloudflare D1. Servern avrundar till 0,1°, slår själv upp stad/land (ingen fritext), en pin per ägare, borttagbar, spärr via saltad IP-hash som går ut - vendor/ markerad som -text i .gitattributes (filerna hålls byte-exakta) Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
# 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
|