Personal blog for Esteban Sancho at estebansancho.com. Static Jekyll site hosted on GitHub Pages. Essays on software leadership, engineering organizations, and organizational behavior.
jekyll-remote-theme: mmistakes/minimal-mistakes@4.26.2 (dirt skin)gem "erb" in Gemfile (not in stdlib since 3.4)assets/| File | Purpose |
|---|---|
_config.yml |
Site config, theme, plugins, defaults |
_config_dev.yml |
Local dev overrides (worker_url) |
_data/navigation.yml |
Top nav links |
_includes/head/custom.html |
Injected into every page <head> — favicons + AMA widget assets |
_pages/ |
Static pages (about, posts, tags, ama) |
_posts/ |
Published essays (layout: single) |
_layouts/ama.html |
Local layout override for /ama page |
assets/js/ama-widget.js |
AMA chat widget (self-contained IIFE) |
assets/css/ama-widget.css |
AMA widget styles (dirt skin palette) |
ama-worker/ |
Cloudflare Worker — Anthropic API proxy for the AMA widget |
Requirements: Ruby 3.4, Bundler, Node.js 20+
# Install Ruby deps (first time only)
bundle install
# Start Jekyll (slow first run — downloads remote theme)
bundle exec jekyll serve --config _config.yml,_config_dev.yml
# Site at http://localhost:4000
# Start AMA API server (separate terminal)
cd ama-worker
cp .dev.vars.example .dev.vars # add ANTHROPIC_API_KEY
node dev-server.js
# API at http://localhost:8787
_config_dev.yml overrides worker_url to point at localhost:8787 instead of the production Cloudflare Worker.
The AMA chat widget (assets/js/ama-widget.js) is a self-contained IIFE with no dependencies. It has two modes:
/ama#ama-full-chat element is present (the /ama page)The widget reads the worker URL from the data-worker-url attribute on its own <script> tag, which is set by Jekyll via https://ama-worker.esteban-sancho.workers.dev/chat in _includes/head/custom.html.
ama-worker/)Cloudflare Worker that proxies requests to the Anthropic API. Keeps the API key server-side.
ama-worker/src/index.jsama-worker/src/rate-limiter.js (10 req/60s per IP, KV-backed)ama-worker/src/system-prompt.js — update this when new posts are publishedama-worker/dev-server.jsama-worker/.dev.vars (gitignored) — needs ANTHROPIC_API_KEYDeploy: cd ama-worker && npx wrangler deploy (requires Cloudflare account + KV namespace configured in wrangler.toml)
Draft articles live in _pipeline/articles/. Published posts go in _posts/ as YYYY-MM-DD-slug.md with layout: single.
After publishing a new post, update ama-worker/src/system-prompt.js with a summary of the new essay, then redeploy the worker.
layout, title, date, categories, tags, excerpt, toc: true