A scrolly-telling newspaper-style site built to pitch Anthropic on a Liatrio partnership, with a live AI chat agent powered by Claude.
Just open index.html in a browser — no build tools, no dependencies. The chat widget talks to the already-deployed API, so it works out of the box for anyone on this branch. All requests share the same Anthropic API quota.
index.html — the entire frontend (self-contained)
content.md — editable text content mirrored from index.html
cloudflare-api/ — Cloudflare Worker: content API + AI chat endpoint
mcp-server/ — Python FastMCP server exposing the API as MCP tools
Base URL: https://ai-enablement-api.gregk.workers.dev
All responses are JSON. CORS is open.
GET / → endpoint listing
GET /api/content → full content dump (sections + stats + stories)
GET /api/sections → all sections (id, chapter, headline)
GET /api/sections/:id → single section — hero | context | boeing | natera | method | cta
GET /api/stats → key metrics
GET /api/stories → dynamically added stories (KV storage)
POST /api/chat
Content-Type: application/json
{ "messages": [{ "role": "user", "content": "What did Liatrio do at Boeing?" }] }
Returns { "reply": "..." }. The agent knows the full Liatrio content and converses about enterprise AI transformation. Pass the full messages array each request to maintain conversation history.
Stories are the dynamic layer — add new client engagements without touching code or redeploying. They live in Cloudflare KV.
curl -X POST https://ai-enablement-api.gregk.workers.dev/api/stories \
-H "Content-Type: application/json" \
-d '{
"client": "Acme Corp",
"industry": "Financial Services",
"headline": "Acme cut compliance reporting from 3 weeks to 4 hours with Claude.",
"body": "Liatrio embedded Claude into Acme'\''s audit workflow...",
"impact": [
{ "value": "50×", "label": "Faster reporting", "detail": "3 weeks → 4 hours" }
],
"quote": "We thought this would take a year. It took a sprint."
}'Required: client, industry, headline, body — Optional: impact (array), quote (string)
The story id is auto-generated ("Acme Corp" → "acme-corp").
curl -X PUT https://ai-enablement-api.gregk.workers.dev/api/stories/acme-corp \
-H "Content-Type: application/json" \
-d '{ "headline": "Acme eliminated compliance overhead entirely." }'curl -X DELETE https://ai-enablement-api.gregk.workers.dev/api/stories/acme-corpcd cloudflare-api
npm install
npx wrangler login # first time only
npx wrangler deployThe ANTHROPIC_API_KEY is stored as a Cloudflare secret — never in code:
npx wrangler secret put ANTHROPIC_API_KEYExposes the API as tools for AI agents:
cd mcp-server
pip install -r requirements.txt
python server.pyAdd to Claude Code:
claude mcp add liatrio-enablement -- python3 /path/to/mcp-server/server.pyTools: get_overview, get_full_content, list_sections, get_section, get_stats, list_stories, add_story, update_story, delete_story
All text is mirrored in content.md — edit there, then update the corresponding sections in index.html. Core narrative data (Boeing stats, Natera timeline, etc.) also lives in cloudflare-api/src/index.js as the CONTENT object — edit and redeploy the Worker to update it. Dynamic stories added via the API persist in KV across deploys.