{ "schema_version": 1, "diagram_type": "architecture", "meta": { "title": "Kontra \u2014 GOTH News-Opinion Site", "output": "kontra-architecture-map.html", "quality_profile": "showcase", "views": [ { "id": "publish-path", "label": "Content publish path", "focus": [ "editors", "git", "pull", "bin", "caddy", "users" ], "note": "Editors push markdown to Gitea; production pulls and serves it automatically." }, { "id": "auth-and-media", "label": "Auth and media", "focus": [ "auth", "admin", "bin", "garage" ], "note": "Decap logs in via Gitea OAuth; site media resolves from Garage S3 shortcodes." } ] }, "components": [ { "id": "editors", "type": "external", "label": "Editors", "sublabel": "Obsidian \u00b7 Neovim \u00b7 CLI", "pos": [ 40, 300 ], "size": [ 130, 64 ] }, { "id": "admin", "type": "frontend", "label": "Decap CMS", "sublabel": "admin.kontra.lab", "pos": [ 40, 160 ], "size": [ 130, 64 ] }, { "id": "auth", "type": "security", "label": "Gitea OAuth", "sublabel": "PKCE", "pos": [ 250, 110 ], "size": [ 130, 56 ], "tag": "non-confidential" }, { "id": "git", "type": "cloud", "label": "Gitea", "sublabel": "sam/kontra-content", "pos": [ 250, 300 ], "size": [ 150, 64 ], "tag": "origin of truth" }, { "id": "pull", "type": "backend", "label": "Pull loop", "sublabel": "git pull \u00b7 30s", "pos": [ 470, 300 ], "size": [ 140, 64 ] }, { "id": "bin", "type": "backend", "label": "Go binary", "sublabel": "templ + htmx + Goldmark", "pos": [ 680, 300 ], "size": [ 160, 68 ], "tag": ":8600 Docker" }, { "id": "garage", "type": "cloud", "label": "Garage S3", "sublabel": "kontra-day bucket", "pos": [ 680, 160 ], "size": [ 150, 64 ] }, { "id": "caddy", "type": "cloud", "label": "Caddy master", "sublabel": ":80/:443 reverse proxy", "pos": [ 900, 300 ], "size": [ 150, 64 ] }, { "id": "users", "type": "external", "label": "Readers", "sublabel": "public web", "pos": [ 1120, 300 ], "size": [ 130, 64 ] } ], "boundaries": [ { "kind": "region", "label": "Editors (dev box .27)", "wraps": [ "editors", "admin" ] }, { "kind": "region", "label": "Gitea Docker (.35)", "wraps": [ "auth", "git" ] }, { "kind": "region", "label": "Kontra container (.13 :8600)", "wraps": [ "pull", "bin", "garage" ] }, { "kind": "region", "label": "Edge (Caddy .35)", "wraps": [ "caddy", "users" ] } ], "connections": [ { "id": "editors-git", "from": "editors", "to": "git", "label": "git push", "variant": "emphasis" }, { "id": "admin-git", "from": "admin", "to": "git", "label": "commit", "fromSide": "bottom", "toSide": "top", "variant": "dashed" }, { "id": "auth-login", "from": "admin", "to": "auth", "label": "Login with Gitea", "variant": "security", "fromSide": "right", "toSide": "bottom", "labelAt": [ 308, 180 ] }, { "id": "auth-git", "from": "auth", "to": "git", "label": "authorize", "variant": "security", "fromSide": "bottom", "toSide": "left" }, { "id": "git-pull", "from": "git", "to": "pull", "label": "SSH", "variant": "emphasis" }, { "id": "pull-bin", "from": "pull", "to": "bin", "label": "restart on change", "labelAt": [ 645, 378 ] }, { "id": "bin-garage", "from": "bin", "to": "garage", "label": "media shortcode", "variant": "dashed", "fromSide": "top", "toSide": "bottom", "labelDy": -58, "labelAt": [ 768, 238 ] }, { "id": "bin-caddy", "from": "bin", "to": "caddy", "label": "reverse_proxy :8600", "labelAt": [ 870, 378 ] }, { "id": "caddy-users", "from": "caddy", "to": "users", "label": "HTTPS", "variant": "emphasis" } ], "cards": [ { "dot": "emerald", "title": "Publish path", "items": [ "Editors write markdown + front-matter in Obsidian/Neovim/CLI", "All commits land on Gitea sam/kontra-content (origin)", "Production container pulls every 30s and restarts on change" ] }, { "dot": "cyan", "title": "Serving", "items": [ "Single static Go binary (templ + htmx + Tailwind tokens)", "Goldmark renders markdown per request; SEO-friendly", "Caddy master terminates HTTPS and proxies :8600" ] }, { "dot": "rose", "title": "Auth & media", "items": [ "Decap CMS logs in with Gitea OAuth (PKCE)", "Media resolves from Garage S3 via {{media:}} shortcodes" ] } ] }