Port site to Responder (#8)

* Initial Responder port — core content serving working

Homepage, markdown pages, directory listings, image galleries
all rendering. Flask template compatibility via RequestWrapper
and FakeConfig shims.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Complete Responder port — all routes working

Ported all routes from Flask blueprints: archive, search, OG images,
RSS, sitemap, robots.txt, API endpoints, directory browser.
All 25+ routes returning 200.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Update Dockerfile for Responder, warm caches on import

CMD now runs engine_responder:api via uvicorn.
Cache warming happens on module import for production.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Rename engine_responder.py to engine.py

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Update colophon for Responder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix essay pages, OG images, and PDF export

- Fix find_related_posts and find_adjacent_posts call signatures
- Fix OG image route to use path:path for nested paths
- Add PDF export route with WeasyPrint
- All test plan items passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-22 14:03:05 -04:00
committed by GitHub
parent ddd1dd7334
commit 5cd48abb90
5 changed files with 2108 additions and 18 deletions
+1 -1
View File
@@ -27,4 +27,4 @@ RUN uv pip install . --system
COPY . .
# Run uvicorn directly (no need for uv run since we installed system-wide)
CMD ["uvicorn", "engine:app", "--host", "0.0.0.0", "--port", "8000"]
CMD ["uvicorn", "engine:api", "--host", "0.0.0.0", "--port", "8000"]
+3 -2
View File
@@ -4,7 +4,7 @@ This site is mine. My words, my domain, my infrastructure. After eighteen years
## The Stack
- **Framework:** A custom Flask CMS called TufteCMS, purpose-built for this site.
- **Framework:** [Responder](https://github.com/kennethreitz/responder), my own Python web framework, with a custom CMS layer called TufteCMS.
- **Typography:** Tufte CSS. Edward Tufte understood that margins are for thinking.
- **Content:** Markdown files in a directory. No database. Just files.
- **Hosting:** Fly.io.
@@ -40,7 +40,8 @@ This site has been:
- Ghost (2013-2015)
- Medium (briefly, regrettably)
- Squarespace (2016-2023)
- Custom TufteCMS on Flask (2024-present)
- Custom TufteCMS on Flask (2024-2026)
- Custom TufteCMS on [Responder](/software/responder) (2026-present)
Every migration taught me the same lesson: platforms come and go, but your own domain is forever.
+1249 -15
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -13,6 +13,7 @@ dependencies = [
"weasyprint>=66.0",
"pillow>=11.3.0",
"gunicorn[gevent]>=21.0.0",
"responder>=3.2.0",
]
authors = [
{name = "Kenneth Reitz", email = "me@kennethreitz.org"}
Generated
+854
View File
File diff suppressed because it is too large Load Diff