tidy: content/ is its own repo (untrack from top); README media model = git files; no S3
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -12,3 +12,6 @@ kontra-bin
|
|||||||
|
|
||||||
# archify visual-check sidecars (evidence, not source)
|
# archify visual-check sidecars (evidence, not source)
|
||||||
docs/*.visual-check.*
|
docs/*.visual-check.*
|
||||||
|
|
||||||
|
# content is its own git repo (sam/kontra-content) — not tracked here
|
||||||
|
content/
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ Editors (Obsidian / Neovim / Decap) ──git push──▶ Gitea (origin)
|
|||||||
▼
|
▼
|
||||||
Kontra container (.13) ◀──git pull every 30s──┘
|
Kontra container (.13) ◀──git pull every 30s──┘
|
||||||
│ ├─ Go binary (:8600)
|
│ ├─ Go binary (:8600)
|
||||||
│ ├─ Goldmark → HTML, {{media:}} → Garage S3
|
│ ├─ Goldmark → HTML, {{media:}} → repo media file
|
||||||
│ └─ restart on content change
|
│ └─ restart on content change
|
||||||
▼
|
▼
|
||||||
Caddy master (.35 :443) ──▶ readers (HTTPS)
|
Caddy master (.35 :443) ──▶ readers (HTTPS)
|
||||||
@@ -167,4 +167,4 @@ no shadow-depth.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Built with the GOTH stack — Go, templ, htmx, Tailwind-tokens — self-hosted on Gitea + Garage S3 + Caddy + Docker.*
|
*Built with the GOTH stack — Go, templ, htmx, Tailwind-tokens — content + media in git, self-hosted on Gitea + Caddy + Docker.*
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
name: Kontra
|
|
||||||
tagline: A daily broadsheet for the wide world. Independent • Printed in your browser.
|
|
||||||
defaulttemplate: article
|
|
||||||
subjects:
|
|
||||||
- label: World
|
|
||||||
slug: world
|
|
||||||
- label: Politics
|
|
||||||
slug: politics
|
|
||||||
- label: Culture
|
|
||||||
slug: culture
|
|
||||||
- label: Tech
|
|
||||||
slug: tech
|
|
||||||
- label: Business
|
|
||||||
slug: business
|
|
||||||
nav:
|
|
||||||
- label: World
|
|
||||||
slug: world
|
|
||||||
- label: Politics
|
|
||||||
slug: politics
|
|
||||||
- label: Culture
|
|
||||||
slug: culture
|
|
||||||
- label: Tech
|
|
||||||
slug: tech
|
|
||||||
- label: Business
|
|
||||||
slug: business
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
title: About
|
|
||||||
author: Kontra
|
|
||||||
date: 2026-09-01
|
|
||||||
template: article
|
|
||||||
---
|
|
||||||
|
|
||||||
Kontra is an independent news-opinion publication. We believe in measured, deliberate journalism served in a typeface you can read.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
name: Culture
|
|
||||||
template: article
|
|
||||||
color: "#ad3222"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
title: A Micro-Press Keeps the Long Essay Alive at 16 Pages
|
|
||||||
author: S. Grey
|
|
||||||
date: 2026-09-05
|
|
||||||
kicker: Books
|
|
||||||
subject: culture
|
|
||||||
template: article
|
|
||||||
excerpt: Paper, price of ink, and why short-run still sells.
|
|
||||||
---
|
|
||||||
|
|
||||||
Paper, price of ink, and why short-run still sells. The micro-press prints a single essay a month, in an edition of four hundred, and has never once gone into a second printing.
|
|
||||||
|
|
||||||
Its publisher's theory is simple: scarcity is a feature, not a bug, when the writing is good.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
name: Politics
|
|
||||||
template: article
|
|
||||||
color: "#ad3222"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
title: The Two-Party Primary That Never Had a Crowd
|
|
||||||
author: P. Vela
|
|
||||||
date: 2026-09-07
|
|
||||||
kicker: Politics
|
|
||||||
subject: politics
|
|
||||||
template: article
|
|
||||||
excerpt: Voter lists up, enthusiasm down — how the ground shifted anyway.
|
|
||||||
---
|
|
||||||
|
|
||||||
Voter lists up, enthusiasm down — how the ground shifted anyway. The primaries drew record registrations but the smallest crowds in memory, and both outcomes are true at once.
|
|
||||||
|
|
||||||
Organizers blame the calendar; political scientists blame the weather; the poll workers blame their feet. Nobody is entirely wrong.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
name: Tech
|
|
||||||
template: article
|
|
||||||
color: "#ad3222"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
title: The Local AI Box That Runs Entirely on a Tennis Ball
|
|
||||||
author: J. Quin
|
|
||||||
date: 2026-09-04
|
|
||||||
kicker: Tech
|
|
||||||
subject: tech
|
|
||||||
template: article
|
|
||||||
excerpt: A one-RPi coop build, and what it does better than cloud.
|
|
||||||
---
|
|
||||||
|
|
||||||
A one-RPi coop build, and what it does better than cloud. In a converted radio shack, a cooperative runs a small language model on hardware the size of a paperback — deliberately, and on purpose.
|
|
||||||
|
|
||||||
It does less, but it does it privately, and the members own the whole stack. That, its operators argue, is the point.
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
name: World
|
|
||||||
template: article
|
|
||||||
color: "#ad3222"
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
title: The River Border Nobody Can Agree Where It Is
|
|
||||||
author: N. Harlow
|
|
||||||
date: 2026-09-06
|
|
||||||
kicker: World
|
|
||||||
subject: world
|
|
||||||
template: article
|
|
||||||
excerpt: Two towns, one floodplain, and a surveyor's error from 1893.
|
|
||||||
---
|
|
||||||
|
|
||||||
Two towns, one floodplain, and a surveyor's error from 1893 have kept a border in dispute for more than a century. Neither side will yield the mudflats, and both claim the weir as their own.
|
|
||||||
|
|
||||||
The original boundary stone was placed on a bank that has since migrated sixty yards downstream. Every spring, the river moves it again — and every summer, the argument resumes.
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
---
|
|
||||||
title: The Quiet Reshaping of the Southern Harbor
|
|
||||||
author: M. Kestrel
|
|
||||||
date: 2026-09-08
|
|
||||||
kicker: World Dispatch
|
|
||||||
subject: world
|
|
||||||
template: article
|
|
||||||
featured: true
|
|
||||||
image: https://picsum.photos/seed/harbor1/1400/800
|
|
||||||
excerpt: After decades of decline, the docklands cooperative is being rebuilt from the waterline up — and the tide of labour is turning with it.
|
|
||||||
---
|
|
||||||
|
|
||||||
Before the lighthouse beam cuts clean through the channel mist, the smell of damp pine and brine settles into the stones. For three centuries, the tidal basin has kept the same tempo: boats lurching over black water with diesel thrums, their gunwales caked in white rime, unloading timber and cold silver mackerel while the town above still sleeps behind shuttered granite facades.
|
|
||||||
|
|
||||||
> The ocean takes everything you give it and asks for another hour. If the tide leaves you high, you scrape hulls; if it surges, you pray the knots hold.
|
|
||||||
>
|
|
||||||
> — Marcel Gouëlou, 42 years shipwright & seine netting foreman
|
|
||||||
|
|
||||||
Yet the men and women working these slips are acutely aware of the narrowing wake behind them. Modern mechanized refrigeration terminals forty leagues south have hollowed out the regional cooperative. Here, where hand-mended nets dry on weathered oak bollards and weights are tallied in battered tin notebooks, maritime trade remains tactile, punishing, and inextricably tied to the low spring tides.
|
|
||||||
|
|
||||||
By noon, the diesel fumes thin out, replaced by steam whistling from the fishermen's canteen on Rue des Cordiers. Copper pots boil potatoes alongside salted hake. Here, the talk shifts from tonnage to fuel subsidies, offshore regulations, and the young people who prefer train commutes to the city over seventy-hour sea weeks.
|
|
||||||
|
|
||||||
Still, as evening pulls the waters outward into the English Channel, the moorings creak in unison. The old fleet may be diminishing in number, but those remaining harbour stones bear the polish of generations who knew how to listen to the tide long before the radar could tell them what was coming.
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
{{embed:vimeo:76979871}}
|
|
||||||
Reference in New Issue
Block a user