+
+Mer detaljert med containere, porter og `.env`: db, api og viewer er den faste stacken på
+det delte `pgstac`-nettverket, scanneren kjøres on-demand, og alle deler samme `.env`.
+Katalog-JSON går rett fra nettleser til API (CORS), mens fil-bytene går via viewerens
+`/s3`-proxy som signerer mot privat S3.
+
+
+
+Tjenestene i diagrammene er forklart i [Hva vi har satt opp](#hva-vi-har-satt-opp).
+
+## Hvordan scanningen fungerer
+
+Scanneren tar en bucket + prefix og gjør dette per kjøring:
+
+1. Lister opp filene under prefixet (boto3).
+2. For hver fil leser den ut metadata. Den laster ikke ned hele fila der det går an, den
+ leser bare header/footer (PMTiles-header, parquet-footer, COG-header) for å holde det
+ billig.
+3. Bygger ett STAC-item per fil, med asset-href som peker på viewerens `/s3`-proxy
+ (`
+
+Inni en collection ligger items med bbox-kart og liste:
+
+
+
+### Slik ser det ut i databasen
+
+Alt dette ligger i Postgres. pgstac lager sitt eget skjema med blant annet `collections`-
+og `items`-tabellene. Hver scannet mappe blir en rad i `collections`, og hver fil blir en
+rad i `items` (med geometri, collection-referanse og datetime). Du trenger ikke å gå inn i
+databasen for å bruke systemet, men det er greit å se hvor dataene faktisk havner:
+
+
+
+
+
+## Ekstra metadata per filtype
+
+Utover det vanlige (bbox, projeksjon, datetime) leser vi ut felter som er nyttige å se i
+browseren. Alle items får `file:size` (filstørrelse i bytes). Resten avhenger av filtype.
+Der det finnes en standard STAC-extension bruker vi den, ellers et eget namespace.
+
+**GeoParquet / GeoJSON**
+- `table:columns` (kolonnenavn + datatype) og `table:row_count` (antall rader)
+- `vector:geometry_types`, f.eks. `LineString Z`, `Polygon`
+- `vector:encoding`, f.eks. `WKB`
+- `proj:epsg` utledet fra geo-metadataen
+- noen `proc:sample`-rader som forhåndsvisning av dataene
+
+For parquet leses dette fra footeren, så vi slipper å lese hele fila.
+
+
+
+**PMTiles**
+- `pmtiles:tile_type` (vector/raster), min/max zoom, center
+- `pmtiles:name` og `pmtiles:vector_layers` (lagene + feltskjemaet i hvert lag)
+- `pmtiles:clustered`, `pmtiles:tile_compression`
+- teller for tiles (`pmtiles:addressed_tiles_count` osv.). Merk at dette er antall tiles,
+ ikke antall features (features dupliseres på tvers av zoomnivåer).
+
+Alt dette leses gratis fra PMTiles-headeren.
+
+
+
+**COG / GeoTIFF**
+- bånd, dtype, nodata og statistikk (via rio-stac)
+- `cog:compression`, `cog:blocksize`, `cog:overview_count`, `cog:predictor` fra
+ COG-headeren
+
+## MapLibre-preview for PMTiles
+
+For PMTiles-items får du en egen "Data preview"-fane i vieweren som rendrer tile-ene
+direkte med MapLibre. Den henter PMTiles via `/s3`-proxyen (med Range, så den laster bare
+de tile-ene den trenger) og tegner vektorlagene oppå et basiskart. Da ser du faktisk
+innholdet i fila uten å laste den ned.
+
+
+
+Basiskart-stilen settes med `BASEMAP_STYLE_URL` (default er MapLibre sin demo-stil, kan
+byttes til f.eks. Norkart-stilen).
+
+## Bruke katalogen i QGIS
+
+Siden `api` er en helt vanlig STAC API kan du også koble deg på fra QGIS med STAC
+API Browser-pluginen. Legg inn API-URL-en som en STAC-tilkobling, så dukker collections og
+items opp i Browser-panelet og kan lastes rett inn i kartet:
+
+
+
+Hvert item viser metadataene vi har lagt på, inkludert projeksjon, bbox og extensions:
+
+
+
+## Kom i gang lokalt
+
+Du trenger Docker. Så er det tre steg: lag `.env`, lag det delte nettverket, og start
+stacken.
+
+```sh
+cp example.env .env # fyll inn verdiene (se under)
+docker network create pgstac # engangs, delt nettverk som alle tjenestene henger på
+docker compose --env-file .env up -d # starter db + api + viewer (ikke scanner)
+```
+
+Sjekk at det lever:
+
+```sh
+docker compose ps
+curl -s localhost:8082/collections | jq . # STAC API (tom til en scan har kjørt)
+curl -s localhost:8080/healthz # viewer
+open http://localhost:8080 # STAC Browser
+```
+
+Nå kjører db, api og viewer. Katalogen er tom til du har kjørt en scan (se neste seksjon).
+
+### Hva du må fylle ut i `.env`
+
+`example.env` har alle variablene med kommentarer. De som står til `changeme` må du sette
+selv, resten har fornuftige defaults for lokal kjøring og kan stå som de er.
+
+| Variabel | Må settes? | Hva det er |
+|----------|------------|------------|
+| `POSTGRES_USER` | nei | DB-bruker (default `pgstac`) |
+| `POSTGRES_PASSWORD` | **ja** | DB-passord, bytt fra `changeme` |
+| `POSTGRES_DB` | nei | DB-navn (default `postgis`) |
+| `DB_HOST_PORT` | nei | host-port for Postgres (default `5439`) |
+| `API_HOST_PORT` | nei | host-port for STAC API (default `8082`) |
+| `CORS_ORIGINS` | nei | hvilke origins som får kalle API-et fra nettleser. Må inkludere viewer-origin (default `http://localhost:8080`) |
+| `S3_ENDPOINT` | **ja** | S3-host uten scheme, f.eks. `s3.example.no` (https legges på internt) |
+| `S3_ACCESS_KEY` | **ja** | S3-nøkkel |
+| `S3_SECRET_KEY` | **ja** | S3-secret |
+| `S3_REGION` | nei | signeringsregion (default `us-east-1`) |
+| `ASSET_BASE_URL` | nei | base for asset-href som lagres i DB, `| Layer | Zoom | Fields | Description | ` + + `
|---|