No description
  • PHP 62.9%
  • Twig 18.4%
  • CSS 12.4%
  • JavaScript 4.8%
  • Dockerfile 0.8%
  • Other 0.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-06 20:49:31 -07:00
bin Move templates to Twig 2026-09-10 12:28:59 -07:00
cache Add Docker/PHP scaffold and site skeleton 2026-07-17 23:20:56 -07:00
content Feature it 2026-10-06 20:49:31 -07:00
deploy Restructure categories: add Principles, Development, Releases; remove Writing 2026-10-06 15:41:35 -07:00
migrations Apply contest schema changes as migrations at container start 2026-09-10 11:43:33 -07:00
public Restructure categories: add Principles, Development, Releases; remove Writing 2026-10-06 15:41:35 -07:00
src Hide future-dated posts until their date; add principles post skeleton 2026-10-06 18:51:25 -07:00
templates Restructure categories: add Principles, Development, Releases; remove Writing 2026-10-06 15:41:35 -07:00
tests Hide future-dated posts until their date; add principles post skeleton 2026-10-06 18:51:25 -07:00
.dockerignore Move templates to Twig 2026-09-10 12:28:59 -07:00
.gitattributes Port Writer's Desk design system to match hammer.ink 2026-07-17 23:55:41 -07:00
.gitignore Move templates to Twig 2026-09-10 12:28:59 -07:00
AGENTS.md Add contest voting results page 2026-09-20 21:39:21 -07:00
ARCHITECTURE.md Restructure categories: add Principles, Development, Releases; remove Writing 2026-10-06 15:41:35 -07:00
CLAUDE.md Add AGENTS.md contributor guide 2026-07-22 01:15:17 -07:00
composer.json Move templates to Twig 2026-09-10 12:28:59 -07:00
composer.lock Move templates to Twig 2026-09-10 12:28:59 -07:00
docker-compose.prod.yml Add Gmail SMTP mailer 2026-09-10 12:15:58 -07:00
docker-compose.yml Add Gmail SMTP mailer 2026-09-10 12:15:58 -07:00
Dockerfile Apply contest schema changes as migrations at container start 2026-09-10 11:43:33 -07:00
phpunit.xml.dist Move templates to Twig 2026-09-10 12:28:59 -07:00
README.md Move templates to Twig 2026-09-10 12:28:59 -07:00

Hammer Blog

The hammer.ink blog. PHP + HTMX, markdown page bundles, served at hammer.ink/blog. See ARCHITECTURE.md for the full design.

Run it locally

The only thing you need on your machine is Docker. No PHP, no Composer.

docker compose up --build

Then open http://localhost:8090.

Edits to content/, templates/, src/, and public/ are live-mounted — refresh the browser, no rebuild. Changing composer.json or the Dockerfile needs a rebuild (docker compose up --build).

Publishing

Publishing is a git push, never an SSH file-paste onto a live box. Write a post as content/<category>/<slug>/index.md, preview locally, commit, push.

Layout

public/       front controller + static assets
src/          PHP classes (PSR-4: HammerBlog\)
templates/    Twig templates + partials
content/      markdown page bundles (category = top-level dir)
cache/        rendered-HTML cache (gitignored)

Status

  • Phase 1 — skeleton (done): boots under docker compose up, serves a landing page.
  • Phase 2 — content pipeline (done): frontmatter + markdown render + content-hash cache.
  • Phase 3 — category / tag pages (done): hub pages, tag archives, post cards, category icons.
  • Phase 4 — SEO layer (done): canonical + OG/Twitter + JSON-LD, sitemap.xml, RSS feed.xml, env-aware robots.txt.
  • Phase 5 — styling pass (Writer's Desk).
  • Phase 6 — HTMX niceties (done): URL-backed load-more pagination (no-JS falls back to real ?page=N pages).
  • Phase 7 — prod (kit ready): docker-compose.prod.yml, nginx front-door config, and a two-speed deploy script live under deploy/ — see deploy/DEPLOY.md.