6.8 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.access | access | active | false | current | 2026-09-08 |
|
access
Rich discovery update (2026-09-08 02:23:28)
Great questions — let me answer each properly, because they cut right to the architecture.
1. GOTTH + .md files — yes, this is a strong fit
Go + templ + htmx + Alpine + Tailwind, with Goldmark (Go's CommonMark renderer) turning your .md into HTML at request time, is one of the best "text-first news site" stacks you can pick right now:
- One static binary — build once, copy to
.13, done. No Node, no PHP runtime, no container even needed. - Server-rendered HTML — SEO-friendly by default (great Lighthouse), fast.
- templ gives type-safe components; htmx gives interactivity (paging, filters, comment forms later) without a JS framework; Alpine for small client bits.
- Content = files — your Obsidian/editor workflow stays; go can even re-render on file change in dev.
- Cost: the admin is DIY — auth, CRUD, media browser are all code you write. And per-request markdown parsing is fine at this scale (cache rendered HTML if you care).
2. Laravel as the "orchestrator" — honest answer: it's the wrong tool for that role
Laravel is excellent at being a web app (Blade+htmx admin, auth, queues, and — importantly — a genuinely great mail system for that email phase later). But you're proposing it as a publish-state manager perched over Go:
- You'd run two servers (Go on :80, Laravel admin on :8080) both touching the same
.mdfiles and a shared DB. Every publish toggle, front-page order, archive move = a DB write Laravel makes and Go reads. - That works, but it's redundant — Go can own a small SQLite
publishtable itself, with an htmx admin page inside the same binary. One language, one process, zero sync.
So the real fork is:
| Path | Architecture | When to pick |
|---|---|---|
| A. All Go | Go serves site + a minimal htmx admin page managing publish/front-page/archive in SQLite. .md = content truth. |
You want the leanest thing. Email later = Go mail libs, or hand off to n8n/Postfix on your network. |
| B. Laravel owns it all | Blade + htmx admin, Laravel serves pages, S3 media via its filesystem driver, Mailables for email later. Drop Go. | You want Laravel's admin/mail/ecosystem and don't mind PHP runtime. |
| C. Go site + headless admin | Go serves; PocketBase (already on .13) is the admin/publish/media store. | You want a browser admin without writing one. |
| D. Go + Laravel, loosely coupled | Go serves; Laravel admin only writes publish-state to a shared SQLite file + edits .md on disk. |
You specifically want Laravel's admin UX and Go's front. Viable, but it's path A with extra running parts. |
"Is Laravel good for this?" — good at admin, great at email, overkill as a proxy. "Other PHP?" — Symfony (bulkier), Slim (micro), WordPress (off-the-shelf but you'd be fighting it). If PHP is the choice, Laravel+Filament is the right one.
3. Garage S3 media + .md coordination under Laravel
- Showing media in admin: Laravel has a first-class S3 filesystem driver — configure a
garagedisk (endpoint, keys, bucket) and the admin lists objects and renders thumbnails. Public reads via a Caddy/nginx route (/media/*→ bucket) rather than exposing Garage's own port; private buckets can use presigned URLs. - Coordination with
.md: the cleanest pattern is shortcodes, not raw URLs. In your file you write{{media:cover}}or{{vimeo:12345}}; the renderer (Go or Laravel) resolves the slug to the actual S3 URL at render time. That way you can rename/migrate media later without touching every article — plain URLs pasted into.mdfreeze the path forever. Upload flow: admin uploads to bucket → returns URL → editor pastes it in the.md. Simple and inspectable.
4. Is markdown good? And what's the "scientific" one?
- Yes — Markdown (GFM/CommonMark) + front-matter is ideal for text news/opinion with links, images, embeds.
- Variants, in case the name escapes you: MDX (JSX components inside markdown), AsciiDoc (more structure — tables, includes; great for docs, overkill here), Org-mode, reStructuredText.
- The new scientific one is almost certainly Typst (2023) — a modern typesetting language with gorgeous math, designed for documents/PDF. You can render it to SVG for web, but for a news site it's the wrong tool.
- If you meant LSP (Language Server Protocol) — that's an editor autocomplete standard, not a format; ignore it here.
- For the odd formula: keep markdown and add KaTeX/MathML via
$...$in Goldmark's math extension. You get scientific notation with zero new language.
5. My recommendation
Path A — all Go (templ + htmx + Alpine + Tailwind), .md files as content, SQLite publish-state with a small htmx admin for live/front-page/archive, {{media:...}} shortcodes resolved to Garage S3. Deploy = one binary behind Caddy on .13. Email phase later = Go mail lib or n8n handoff — revisit then, when requirements are real.
Want me to draft PLAN.md on Path A — or would you rather spec out Path B (Laravel-everything) or Path C (Go + PocketBase) instead?
Source paths observed
home/sam/home_network/web_sites/kontra_day/.pihome/sam/home_network/web_sites/kontra_day/.pi/memory-vaulthome/sam/home_network/web_sites/kontra_day/.pi/memory-vault/packshome/sam/home_network/web_sites/kontra_day/.pi/memory-vault/packs/kontra-dayhome/sam/home_network/web_sites/kontra_day/.pi/memory-vault/packs/kontra-day/00-systemhome/sam/home_network/web_sites/kontra_day/.pi/memory-vault/packs/kontra-day/00-system/pi-agenthome/sam/home_network/web_sites/kontra_day/.pi/taskshome/sam/.agentsextensions/pi-config/index.tsextensions/ask-user-question/index.tssys/firmware/efi/efivarspublish/front-page/archiveadmin/mail/ecosystemadmin/publish/medialive/front-page/archive
Evidence
- Confidence: 84%
- Reason: Update component/repository context with detailed discovered structure and configuration