Files
PublicCloud/README.md
T
Linus OlofssonandClaude Opus 5.5 aeb1c76428 Jordglob, spara plats och delade pins på stadsnivå
- 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>
2026-09-25 00:23:33 +02:00

84 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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