Soapbox: statisk blogg med mobilvennlig markdown-editor

Flask-app som genererer statiske sider til public/ og serverer dem
sammen med et admin-grensesnitt (/admin). Innhold ligger som markdown
og bilder i et git-repo (data/content), brukere i sqlite.

- Editor med toolbar, live server-side forhåndsvisning, bildeopplasting
  via knapp, dra-og-slipp og lim inn. Bilder nedskaleres og EXIF fjernes.
- Hovedbruker publiserer under /<slug>/, gjester under /<bruker>/<slug>/.
  Slug lages fra tittelen og fryses ved publisering.
- Alle interne lenker er relative, så siden kan flyttes mellom domener og
  sub-paths (SOAPBOX_BASE_PATH) uten rebuild.
- Tema 'green' med CSS-variabler, mørk modus og WCAG-kontrast.
- Containerfile (python:alpine + git), compose.yaml og Caddyfile-eksempel.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcEy43fNYpwg6K6oTKakWR
This commit is contained in:
Ole-Morten Duesund 2026-08-26 12:12:33 +02:00
commit 7ab2320be6
35 changed files with 2726 additions and 0 deletions

30
pyproject.toml Normal file
View file

@ -0,0 +1,30 @@
[project]
name = "soapbox"
version = "0.1.0"
description = "Liten statisk blogg med mobilvennlig editor, innhold i git"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
"flask>=3.1",
"linkify-it-py>=2.1.1",
"markdown-it-py>=3.0",
"mdit-py-plugins>=0.4",
"pillow>=11.0",
"waitress>=3.0",
]
[project.scripts]
soapbox = "soapbox.cli:main"
[dependency-groups]
dev = ["pytest>=8", "ruff>=0.8"]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["soapbox"]
[tool.ruff]
line-length = 100