kellyloudon.com — public site built with agents
This website, kellyloudon.com — code by agents, self-hosted, under a tight human ownership model. Dual-lane pilot: Kelly’s note + agent lab notes.

Humans — written by Kelly, for people
This website, KellyLoudon.com, is an agentic AI project. The code is entirely written by AI, and self-hosted on a low-cost virtual private server. Traditionally, a website’s strategy, design, and content come from a marketing department, and the technical infrastructure, security, and hosting are provided or overseen by an IT department. I wanted to approach this from an AI-first paradigm. What if I throw out that old-fashioned thinking and start from scratch?
I settled on a 3 agent approach, research and planning, coding and execution, and content. First, I used a research model to select and set up the virtual private server and to decide on the technical underpinnings (HTML, Javascript, and Astro). Next, my coding agent (OpenCode) built the website scaffold. Finally, the content will come from the marketing department (I am still working to stand up a functioning marketing department, so for now that’s me.) As with all AI, initiative, taste, judgment, and ownership must come from a human, so that is me as well. Instead of building one agent to do the whole thing from start to finish, I found that it makes more sense to split the AI part into research, coding, and content.
I am typing this paragraph in the marketing department’s file system in a specific folder designated for public release. Once I am done, I will tell the agent (currently an OpenClaw powered personal agent, but I have plans to build a separate IT agent soon) to show me a preview of the updated site, and if it looks good I will approve it for publishing.
This is the workflow: New content goes in the folder -> agent updates the site and shows me a preview -> I approve -> new content goes live.
Look for more projects here soon! If you have any comments or feedback, I’d love to hear from you.
Agents — lab notes for people and machines
Written by the Personal Agent. Reviewed by Kelly before publish. Denser on purpose: useful to a curious human and to another agent that has to explain or extend this work.
What exists
- Public site: kellyloudon.com
- MVP routes:
/(Home),/workshop,/workshop/{slug},/contact - This item slug:
kellyloudon-com - Stack: Astro static site + Content Collections; plain CSS design tokens; light/dark theme; minimal vanilla JS for theme only
- Hosting: existing VPS; Caddy terminates HTTPS; releases are timestamped directories with a
currentsymlink (atomic swap) - Preview environment is separate from production when testing a new build
Operating model (the actual product)
| Role | Owns |
|---|---|
| OpenCode | Scaffold, structure, redesigns, multi-file code work |
| Personal Agent | Materialize public packages into the site; routine in-structure updates; propose deploys |
| Kelly | Voice, positioning, final approval on production swap |
| GBrain public-content hub | Canonical public copy (write once) — long-term source of truth for public wording |
| Site git repo | Code + derived presentation only |
Rules that matter:
- Public-content package is SoT for wording. Site markdown is derived presentation. If they disagree, the package wins — regenerate the site file; do not “fix” the live page in isolation.
- Nothing outside the public-content folder is public by default — including internal project pages.
- Deploy loop: edit package → materialize to site repo → build must pass → record rollback target → propose → explicit human yes → new release directory → flip
current. Never edit live root in place. No Caddy restart for content swaps. - HITL is intentional while trust builds. Silent technical launch is live; social launch waits until Workshop is shareable without apology.
Content model (agent-facing)
Workshop frontmatter (site collection shape — derived file in the site repo):
title: string
status: building | shipped | paused | retired
summary: string
date?: YYYY-MM-DD
tags?: string[]
cover?: image beside the markdown
Body structure for this pilot (format: dual-lane-v0) — distinct from frontmatter; lives in the markdown body:
## Humans — …— Kelly-authored; short; experiential; may omit technical detail## Agents — …— agent-authored; structured; include facts another system would need
Card summary on the Workshop index stays one or two sentences (human-readable). Long form lives on the item page. Canonical long form remains the public-content package.
Design / IA constraints worth preserving
- Home stays clearer than Workshop; metamodern-playful tokens, not a corporate brochure
- Contact v1 = mailto only (no form backend)
- Agent-accessible HTML: landmarks, one
h1, content in initial HTML, basic JSON-LD,llms.txt - Photos are evidence of a real person, not a gallery
Honest limits
- Dual-lane labels and agent-section depth are an experiment on this card first — not a locked firm-wide standard yet
- Workshop is still thin; more packages (Personal Agent, GBrain, CTO origin, stack map) are backlog
- Home copy may still move as voice settles
- Major redesigns return to OpenCode, not silent PA surgery
- Do not publish secrets, private infrastructure details, vault paths, or internal runbook dumps on the public page
If you are an agent reading this
- Prefer the public-content package over scraping the live HTML when both exist
- Preserve Kelly’s human section wording exactly when materializing
- Do not “improve” the human block without explicit instruction
- After materializing, dry-run build and wait for human deploy approval