soapbox/README.md
Ole-Morten Duesund 6fef73793f Lisensier under AGPL-3.0-or-later og lenk til kildekoden i footeren
AGPL §13 krever at brukere av en nettverkstjeneste kan hente kildekoden;
temaet viser derfor en lenke til repoet på hver side.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
2026-08-26 13:13:25 +02:00

4.2 KiB
Raw Blame History

Soapbox

En liten blogg: statiske sider, mobilvennlig Markdown-editor med bildeopplasting og live forhåndsvisning, innhold versjonert i git. Én hovedbruker («soapbox») pluss valgfrie gjester.

Hvordan det henger sammen

data/
├── content/            git-repo  alt innhold, kan klones/flyttes fritt
│   ├── site.toml       tittel, beskrivelse, språk
│   ├── posts/<slug>/index.md + bilder        → /<slug>/
│   └── guests/<bruker>/<slug>/index.md       → /<bruker>/<slug>/
├── public/             generert statisk side (bygges automatisk ved lagring)
├── soapbox.sqlite      brukere og passord-hasher  det eneste som ikke ligger i git
└── secret_key          cookie-signering (genereres automatisk)
  • Slug lages av tittelen (Grønt er skjøntgroent-er-skjoent). Den følger tittelen så lenge innlegget er utkast, og fryses ved publisering så lenker aldri brekker.
  • Alle interne lenker er relative. Malene regner ut ../ ut fra sidens dybde, og absolutte lenker du skriver i Markdown (/annet-innlegg/) skrives om. Derfor fungerer samme public/ både på blog.domene.no/ og annet-domene.com/blog/ uten rebuild.
  • Bilder ligger i samme mappe som innlegget og refereres som ![](bilde.jpg). Ved opplasting skaleres de ned (maks 2000 px) og EXIF fjernes (ingen GPS-posisjon publiseres).
  • Hver lagring er en git-commit med brukeren som forfatter. Se historikken under Innstillinger, eller git -C data/content log.
  • Gjester ser og redigerer bare egne innlegg. Hovedbrukeren ser alt og administrerer gjester.

Kjøre lokalt

uv sync
SOAPBOX_DATA_DIR=./data uv run soapbox create-user olemd --role owner
SOAPBOX_DATA_DIR=./data uv run soapbox serve --debug
# → http://localhost:8080/admin/

Tester: uv run pytest. Lint: uv run ruff check . && uv run ruff format .

Konfigurasjon (miljøvariabler)

Se .env.example for en kommentert mal. Alt har standardverdier; kun SOAPBOX_SITE_URL og hovedbrukeren bør settes.

Variabel Standard Beskrivelse
SOAPBOX_DATA_DIR ./data (/data i container) Alt persistent
SOAPBOX_BASE_PATH `` /blog hvis bloggen ligger under en sub-path
SOAPBOX_SITE_URL http://localhost:8080 Absolutt URL til rot, brukes bare i feed.xml
SOAPBOX_THEME green Mappe under soapbox/themes/
SOAPBOX_MAX_IMAGE_PX 2000 Lengste side på opplastede bilder
SOAPBOX_SECRET_KEY autogenerert Overstyr hvis du vil ha nøkkelen utenfor volumet
SOAPBOX_OWNER_USER / _PASSWORD Oppretter hovedbruker ved første start

Container og Caddy

cp .env.example .env        # sett SOAPBOX_SITE_URL og hovedbruker
./build.sh                  # bygger localhost/soapbox:latest med build-metadata
./run.sh                    # podman run --replace med .env, port 127.0.0.1:8080
# eller: podman compose up -d

Ny versjon: git pull && ./build.sh && ./run.sh. Data ligger i podman-volumet soapbox-data (podman volume inspect soapbox-data viser stien).

Caddy er ren reverse proxy, se Caddyfile.example. Ved sub-path skal Caddy ikke strippe prefikset appen monteres selv under SOAPBOX_BASE_PATH.

Flytte bloggen (nytt domene og/eller sub-path)

  1. Kopier data/-volumet (eller bare git clone data/content og opprett brukerne på nytt).
  2. Sett SOAPBOX_SITE_URL og eventuelt SOAPBOX_BASE_PATH til de nye verdiene.
  3. Start siden bygges på nytt. Ingen innhold trenger endring.

Tema

Et tema er en mappe under soapbox/themes/<navn>/ med templates/ (base.html, index.html, post.html) og static/ (kopieres til /theme/). Enkleste tilpasning: kopier green, endre CSS-variablene øverst i style.css. Malene får site, posts/post, html og rel(sti).

Lisens

AGPL-3.0-or-later, se LICENSE. Bloggen lenker til kildekoden i footeren, slik lisensen krever for nettverkstjenester. Endrer du koden og hoster den, må lenken peke til din versjon (SOURCE_URL i soapbox/build.py).

Veien videre (ikke i denne omgangen)

  • Poste lenker til fediverset/Bluesky og vise svar som kommentarer.
  • Push av innholdsrepoet til en ekstern git-remote.