Colophon
How this site is built.
Colophon (from Greek kolophon, “summit”): in publishing, the page that credits how a book was made — type, paper, printer, edition. Here it covers how this site is built, what lives on it, and how public and gated content relate.
On this page
Jump to a section.
Information architecture
One site, tiered access.
One WordPress site, tiered by access. Public surfaces are indexable teasers and writing; depth lives behind a shared portfolio password on /full/ routes (and the WP postpass cookie after unlock).
- Public — no password
- Hub gate — cluster CTA to request or unlock full cases
- Password —
/full/case depth - Open — full case public (Greenridge)
/Public
Optional homepage gate unlocks portfolio password across bridges.
-
Work
/work/- Domain clusters Hub gate
-
Healthcare AI
/work/healthcare-ai/
Hub gate -
Security & Defense AI
/work/security-defense-ai/
Hub gate -
Government & Civic AI
/work/government-civic-ai/
Hub gate
-
Healthcare AI
- Engagement bridges Public
/work/{slug}/full/Password
- Prior-employer bridges Public
- Practice lenses Public
- Domain clusters Hub gate
-
Projects
/projects/ -
Essays, podcast, PAI chat
/essays/*Public/podcast/Public/chat/(PAI) Public- Visit takeaway
/takeaway-{hash}/Password — unlock required; not indexed
-
About, approach, contact, colophon, privacy
The site
The repo is the product surface. WordPress is where it renders.
I write projects, essays, and pages in Markdown with YAML front matter, then publish them through a Python script using the WordPress REST API. The theme lives in git and is deployed from source. Claude Code is part of the workflow for drafting, theme iteration, front-end refinement, and server operations.
That is the same compression I describe in client work: faster iteration, tighter feedback loops, and human-owned decisions.
The site is not just a place where finished work is posted. It is part of the practice: a live system for publishing, testing, explaining, and extending the work as it evolves. The design kit renders live against production CSS.
Environments
Staging before production. Every time.
The site runs a two-environment release workflow: a staging instance on a separate AWS Lightsail server, cloned from production, plus the live site. Theme changes, content updates, and PHP go to staging first. QA happens there. Then the same change promotes to production through the same scripts.
The theme deploys via rsync from git. Content deploys via a Python script against the WordPress REST API, with explicit dry-run review before anything goes live. Staging publish never writes post IDs back to the repo — production is always the source of truth for content identifiers.
This is not a portfolio with a staging environment bolted on. It is the same discipline the work describes: no direct-to-production edits, no skipped review steps, no “it’s just a portfolio” shortcuts. The site is a working product and is maintained like one.
PAI
The corpus is the product. Conversation is how you query it.
PAI (Portfolio AI, pronounced pie) is a conversational layer on this site — not a chatbot pasted onto pages. Visitors arrive with different questions; a static portfolio makes everyone browse the same way. PAI lets them ask in plain language and get answers grounded in what is actually here.
Understanding starts with a structured corpus: roughly 4,000 JSON chunks — bio, case studies, job-search context, design philosophy, and system facts — scored and retrieved by keyword similarity at query time. Intent and source weighting still differentiate a hiring-manager question from a collaborator’s. Core facts (role, positioning, availability) stay pinned; curator annotations can correct drift without rebuilding the index.
Interaction is built around evidence, not monologue. When an answer needs proof, PAI opens the relevant page in a sidebar panel — WordPress content proxied without site chrome, same origin, so the reply and the source stay aligned. Voice is optional; spoken answers are normalized so they read as conversation, not raw text-to-speech.
The visit gets an artifact. Not a transcript dump.
After portfolio unlock, Get a takeaway (and in-chat “give me a shareable link”) builds a private recap of that session: what was opened, what was asked, a short synthesis, and deliberate opens for range the visit may have missed. Interactive prototypes open in the same on-site overlay used in case studies — not a bare external tab.
Recaps live at unlisted /takeaway-{hash}/ URLs. They are not indexed (noindex, robots disallow, excluded from sitemaps and public listings). Creating and viewing a takeaway both require the same portfolio password as /full/ case depth. Without unlock, the chips stay hidden and the URL shows an access wall only. Optional email uses the address you enter on the form — see Privacy.
The point is not AI on a portfolio. It is AI with a job: match the visitor’s question to the right depth of evidence on this site — and leave them with something they can reopen without replaying the whole thread.
Federal capability MCP
A narrow public corpus for agents — not portfolio-wide RAG.
Federal capability is a public teaming surface. For agents, we publish a read-only Model Context Protocol corpus—entity registration, NAICS/PSC, capabilities, and lane fit only (not portfolio /work/ pages or named past engagements).
ChatGPT and remote clients use public HTTPS Streamable HTTP: https://feedback-loupe.com/federal-mcp/mcp (discovery GET /federal-mcp/, docs /federal/#agent-access). Create a connector in ChatGPT Settings → Apps and enable the app in each chat before prompting—otherwise ChatGPT may browse the HTML page instead of calling tools.
Local dev only (Cursor, Claude Desktop): stdio federal-mcp/server.py in the site repo—not the ChatGPT URL above. This is not a “Loupe developer tool” MCP; it is federal teaming metadata only.
The index is built from pages/federal/index.md with policy entity-capability-teaming-only. Password-gated case studies and the PAI knowledge base are out of scope. Every tool response carries an access note: deeper proof is on request, not in the connector.
PAI is for visitors asking about the practice. This MCP is for capture and teaming workflows where an agent needs structured federal metadata—a deliberate boundary, not a second chatbot. HTTP MCP runs on the same Lightsail host (Apache proxy, rate-limited).
The podcast
AI all the way down, except the thinking.
Listen at Feedback Loupe Podcast — episodes on AI, product design, and the studio practice.
Episodes are scripted from my notes, case work, and research, then produced with AI-generated hosts. The curation, argument, and editorial judgment are mine. The voices and production are synthetic.
It is a deliberate experiment in how far AI tooling can stretch a solo product practice: turning research, reflection, and project notes into something more durable than a notebook and more conversational than an essay.
The podcast is not meant to replace writing. It is another format for thinking in public.
Illustration & design
All illustrations on this site are created by hand. I sketch on paper first — usually pen on whatever’s closest — then refine digitally on iPad in Procreate. The same hand that draws the wireframes draws the storyboards — thinking through problems before pixels.
The artwork, mockups, high-fidelity prototypes, videos, and marketing collateral across the case studies are also my work — designed and produced as part of each engagement.
Every illustration on this site started here.
The name
A feedback loop is a self-regulating cycle: output circles back as input, and each pass adjusts what happens next. In UX, it is the continuous exchange between a person and a system. Every action generates a response. Every response shapes the next action.
That is how products learn.
A loupe is a small lens for examining what is easy to miss. Jewelers use them. Watchmakers use them. Anyone whose work depends on seeing the detail that changes the decision.
Feedback Loupe is a conceptual portmanteau: the loop that keeps running and the lens held up to what it surfaces.
Build, ship, watch what happens, look closer, adjust. The process is continuous. The inspection is deliberate.
Stack
WordPress 6.9 · AWS Lightsail · Apache · Debian 12 · Twenty Twenty-Five child theme · Fraunces + Source Sans 3
Workflow
Markdown + YAML → Python publish script → WordPress REST API · Theme in git, deployed via rsync · Staging → production release pipeline · Claude Code throughout
Analytics, gated access, and contact data: Privacy.