kennethreitz 83f5a0ee95 Add new essay: PyTheory Is Awesome
On chord detection from fingerings, world music systems (Arabic maqam,
Indian raga, Japanese pentatonic, gamelan), 25 instrument presets, and
why the quietest library is the one that means the most.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 04:08:36 -04:00
2026-03-25 04:08:36 -04:00
2024-08-15 18:24:40 -04:00
2024-08-15 18:24:40 -04:00
2025-10-15 10:57:21 -04:00
2025-09-13 07:21:33 -04:00
2025-09-15 06:40:32 -04:00

kennethreitz.org

Kenneth Reitz's personal website and digital garden. A living exploration of how technology can serve human consciousness rather than exploit it.

Built with Responder, powered by markdown content, deployed on Fly.io.

Quick Start

# Install dependencies
uv sync

# Run development server
uv run python engine.py

The site will be available at http://localhost:8000.

Docker

docker compose up

Architecture

This is a single-file Responder application (engine.py) serving markdown content from data/.

kennethreitz.org/
├── engine.py              # The whole application
├── data/                  # All content (markdown)
│   ├── essays/            # 250+ essays (2008-2026)
│   ├── software/          # Project pages
│   ├── themes/            # Thematic collections
│   ├── artificial-intelligence/
│   ├── poetry/
│   ├── photography/
│   ├── music/
│   └── *.md               # Standalone pages
├── tuftecms/
│   ├── templates/         # Jinja2 templates
│   ├── static/            # CSS, fonts, images
│   ├── core/              # Cache, markdown rendering
│   └── utils/             # Content helpers, SVG icons
├── Dockerfile
├── fly.toml               # Fly.io deployment config
└── pyproject.toml

URL paths mirror the filesystem: data/essays/2025-08-26-example.md/essays/2025-08-26-example

Features

  • Tufte-style sidenotes — margin commentary without disrupting flow.
  • Full-site search — cached index built at startup, server-side autocomplete.
  • Content indexes — automatic extraction of sidenotes, quotes, outlines, connections, terms, themes.
  • Legacy URL redirects — intelligent matching for old URL patterns (301 permanent).
  • Bot detection — logs scraper activity with User-Agent identification.
  • Structured logging — request-scoped context (ID, method, path, client IP) on every log line.
  • PDF generation — server-side via WeasyPrint.
  • Generated SVG icons — unique algorithmic icons for every piece of content.
  • RSS feed — at /feed.xml.
  • Knowledge graph — interactive D3 visualization of content connections.
  • Dark mode — system-preference and manual toggle.

API Endpoints

GET /api/search?q=query           # Full-site search with scoring
GET /api/search/autocomplete?q=q  # Title-based autocomplete (8 results)
GET /api/blog                     # Essay listing
GET /api/themes                   # Theme listing with icons
GET /api/directory-tree            # Site directory structure
GET /api/icon/<path>              # Generated SVG icon
GET /api/cache-stats              # Cache performance metrics

Deployment

Deployed on Fly.io with 2 shared CPUs, 2GB RAM, 2 uvicorn workers.

fly deploy

Content

The data/ directory contains 15+ years of writing — essays, software documentation, poetry, photography, AI explorations, and personal pages. Content is plain markdown with optional YAML frontmatter and Tufte-style HTML sidenotes.

License

MIT

S
Description
No description provided
Readme MIT 455 MiB
Languages
Python 46.4%
HTML 43.6%
CSS 9.7%
Dockerfile 0.2%