Files
kontra/.pi/memory-vault/packs/kontra-day/20-context/kontra-day-stack-decisions-storage-topology.md

3.1 KiB

type, id, title, status, source_of_truth, freshness, last_reviewed, tags
type id title status source_of_truth freshness last_reviewed tags
context context.kontra-day.kontra-day-stack-decisions-storage-topology Kontra Day — stack decisions + storage topology active false current 2026-09-08
pack/kontra-day
agent-memory/context
kontra-day
goth
golang
htmx
decap
garage-s3
gitea
topology

Kontra Day — stack decisions + storage topology

Kontra Day (news-opinion site) — Phase One decisions

Stack (decided with user)

  • Go + templ + htmx + Alpine + Tailwind ("GOTH") — single static binary, server-rendered (SEO).
  • Content = Markdown (.md) + front-matter (Goldmark/CommonMark in Go). Author in Neovim/Obsidian.
  • Admin = Decap CMS at admin.kontra.day — free browser UI that edits the SAME .md files and commits to git. No custom admin.
  • Media = Garage S3 (on .13) via {{media:...}} shortcodes resolved at render time.
  • Templates: templ components chosen per page (front-matter template:) → page → subject (_subject.yaml) → site (config/site.yaml) → theme fallback. Front page = home template driven by editable blocks list (config/frontpage.yaml). Colours = CSS design tokens (per-subject accent), not code.
  • Deploy = git push → auto-pull on .13 (no build step; Go renders on request). Obsidian git-sync plugin on .27.

Verified topology (from system-architect skill + Obsidian notes)

  • .27 sam-4screen-desktop (192.168.20.27): dev box, Obsidian vault at /home/sam/obsidian/, Neovim.
  • .13 nixos-desktop (192.168.20.13): web host, always-on. Sites in /var/www/ (NixOS users group). Docker: Garage S3 (.13:3900 s3 / :3902 admin, /home/sam/deployment/garage/, s3 root s3.lab.audasmedia.com.au), Outline (:3000, uses Garage S3), PocketBase, family-home-lab stack.
  • .35 sam-ubuntu1 (192.168.20.35): Gitea Docker (web :3001, SSH :2222, gitea.lab.audasmedia.com.au = origin) + Caddy master reverse proxy (/Docker/Containers/caddy/).
  • .23 file-server (192.168.20.23): NFS backup target.
  • Go binary + site content run at /var/www/kontra_day on .13. Content origin = Gitea repo (proposed sam/kontra-day-content), production clone on .13, authoring clone on .27 (Obsidian vault subfolder).

Notes / gotchas

  • Vikunja API at vikunja.lab.audasmedia.com.au/api/v1; Outline at outline.lab.audasmedia.com.au/api (endpoints POST; public endpoint 502s intermittently — retry, or hit container directly at .13:3000). Tokens in ~/.config/environment.d/10-secrets.conf. Vikunja task-list response is a plain JSON array (not {"tasks":[]}).
  • Vikunja project id 10 = "Kontra Day" (tasks 118-126). Outline collection 7e85478e-8445-4b3b-b0d5-2032309981c4 = "Kontra Day", doc b74f3299... = "Phase One — PLAN".
  • PLAN.md lives at /home/sam/home_network/web_sites/kontra_day/PLAN.md.
  • AGENT.md phases: 1 planning → 2 design → 3 build/test → 4 live (system-architect skill) → 5 email+DNS (Website Host Migration plan) → 6 console+backups → 7 marketing.

Evidence

  • Confidence: 100%
  • Reason: Manual memctx_save