MillPond Storefront
The reference implementation of the PACE Pattern.
Overview
MillPond is the first and most complete implementation of PACE. It's a conversational storefront for MCP servers featuring Cormorant, an AI guide that helps users discover products through natural dialogue.
Live Demo: millpond.cormorantforaging.devSource Code: GitHub
Key Features
1. Conversational Guide
Meet Cormorant - your AI guide inspired by the diving waterbird.
Greeting:
"Welcome to the pond. What are you fishing for?"Conversation Example:
User: "I need something for database work"
Cormorant: "For database work, I'd recommend:
1. SQL MCP — Query databases with natural language
2. Schema Explorer — Visual database browsing
3. Query Builder — Interactive SQL generation
Which sounds most useful?"
User: "Tell me more about SQL MCP"
Cormorant: "SQL MCP connects Claude to your database.
You can ask questions like 'Show me users who signed up last week'
and it generates the SQL query for you.
[Try it] [View docs] [See examples]"2. Adaptive Intelligence
Cormorant adjusts responses based on user expertise:
Beginner User:
User: "What's an MCP server?"
Cormorant: "Great question! Think of MCP servers like plugins for Claude.
They let Claude connect to tools like databases, APIs, or file systems."Advanced User:
User: "Does SQL MCP support stdio transport?"
Cormorant: "Yes — SQL MCP implements the MCP protocol spec:
- stdio transport (default)
- JSON-RPC 2.0 message format
- Supports tools, resources, and prompts"3. Executive Summary
Real-time tracking of the conversation:
Conversation Summary
User is exploring database tools. Technical background.
Focused on SQL integration.
Products Discussed
✅ SQL MCP — Primary interest
🔍 Schema Explorer — Mentioned
⏭️ Query Builder — Deferred
Detected Interests
#database #sql #mcp-servers #postgresql
Expertise Level
Advanced — User mentioned "JSON-RPC", "stdio transport"
Suggested Next Steps
- [Try SQL MCP →]
- [View documentation →]
- [Compare with Query Builder →]Architecture
Tech Stack
Frontend:
- PACE.js (15KB)
- Alpine.js (for reactivity)
- Marked.js (markdown rendering)
AI:
- Claude 3.5 Sonnet (via Anthropic API)
Styling:
- Custom CSS (purple gradient theme)
- Phosphor Icons
Hosting:
- Cloudflare Pages
- Custom domain: millpond.cormorantforaging.devFile Structure
millpond-storefront/
├── public/
│ ├── index.html # Main app (Alpine.js + PACE.js)
│ ├── products.json # 5 MCP server products
│ └── cormorant-prompt.md # System prompt for Claude
├── package.json
└── README.mdKey Implementation Details
1. Alpine.js Integration
<div x-data="paceApp()">
<!-- Product Catalog -->
<div x-show="activeView === 'product'" x-cloak>
<template x-for="product in filteredProducts" :key="product.id">
<!-- Product cards -->
</template>
</div>
<!-- Chat Widget -->
<div x-show="activeView === 'chat'" x-cloak>
<template x-for="message in chatHistory" :key="message.timestamp">
<!-- Chat messages -->
</template>
</div>
</div>2. Claude Integration
async function sendMessage(userMessage) {
const response = await fetch('https://api.anthropic.com/v1/messages', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': CLAUDE_API_KEY,
'anthropic-version': '2023-06-01'
},
body: JSON.stringify({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 1024,
system: systemPrompt,
messages: conversationHistory
})
})
const data = await response.json()
return data.content[0].text
}3. System Prompt
You are Cormorant, a guide implementing the PACE Pattern.
## Your Role
Help users find the right MCP server for their needs.
## PACE Principles
- Proactive: Suggest products without being asked
- Adaptive: Match user's technical level
- Contextual: Remember previous messages
- Efficient: Be concise and actionable
## Available Products
${JSON.stringify(products, null, 2)}
## Examples
Beginner: "Think of MCP servers like plugins..."
Expert: "Implements JSON-RPC 2.0 over stdio..."Products
MillPond features 5 MCP servers:
1. SQL MCP
Category: Database Tools Tagline: Query databases with natural language
2. GitHub MCP
Category: Developer Tools Tagline: Interact with GitHub repositories
3. Filesystem MCP
Category: System Tools Tagline: Safe file operations through Claude
4. API MCP
Category: Integration Tagline: Connect to REST APIs
5. Analytics MCP
Category: Data & Analytics Tagline: Query analytics platforms
Design Philosophy
Purple Gradient Theme
Inspired by cormorant feathers and sunset reflections on water:
:root {
--primary: #667eea;
--accent: #764ba2;
--gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}Typography
font-family: Inter, system-ui, sans-serif;Clean, readable, modern.
Icons
Phosphor Icons (duotone style):
- Product:
ph-package - About:
ph-info - Chat:
ph-chat-circle-dots - Summary:
ph-target
User Journey
1. Landing
User arrives at millpond.cormorantforaging.dev
Sees:
- Purple gradient sidebar
- Product catalog (default view)
- 5 MCP servers grouped by category
- Search bar
2. Exploration
Option A: Browse Products
- Click product cards
- Read markdown descriptions
- Click "Install" or "Get Started"
Option B: Use Chat
- Click Chat in sidebar
- Cormorant greets: "Welcome to the pond..."
- Ask questions in natural language
3. Discovery
Through Chat:
User: "I'm new to MCP, where should I start?"
Cormorant: "Welcome! For beginners, I recommend:
1. Filesystem MCP — Simple file operations
2. GitHub MCP — If you use GitHub daily
3. SQL MCP — If you work with databases
What kind of work do you do?"4. Decision
Product Recommendation:
User: "I'm a developer working with PostgreSQL"
Cormorant: "Perfect! SQL MCP is ideal for you:
✅ Native PostgreSQL support
✅ Natural language queries
✅ Safe read-only mode
✅ Query result formatting
[Install SQL MCP →]5. Conversion
- Click install button
- Redirected to GitHub repo
- Follow installation instructions
Metrics
Performance
Bundle size: ~50KB total
- PACE.js: 15KB
- Alpine.js: 20KB
- Marked.js: 15KB
Load time: < 1s on 3G
Time to interactive: < 500ms
Lighthouse score: 95+User Engagement
Example metrics (actual implementation would track):
Avg session time: 3.5 minutes
Products viewed per session: 2.3
Chat messages per session: 4.2
Conversion rate: 18%Code Highlights
Product Card Rendering
function renderProduct(product) {
return `
<div class="product-card" data-product-id="${product.id}">
<h3>${product.name}</h3>
<p class="tagline">${product.tagline}</p>
<div class="description">
${marked.parse(product.description)}
</div>
<a href="${product.action_url}" class="action-btn">
${product.action_label || 'Learn More'}
</a>
</div>
`
}Search Implementation
function searchProducts(query) {
if (!query) return products
const lowerQuery = query.toLowerCase()
return products.filter(product =>
product.name.toLowerCase().includes(lowerQuery) ||
product.tagline.toLowerCase().includes(lowerQuery) ||
product.description.toLowerCase().includes(lowerQuery)
)
}Executive Summary Update
function updateExecutiveSummary() {
const summary = {
conversationSummary: generateSummary(chatHistory),
productsDiscussed: getDiscussedProducts(chatHistory),
userExpertise: detectExpertise(chatHistory),
suggestedNextSteps: generateSuggestions()
}
Alpine.store('executiveSummary', summary)
}Deployment
Cloudflare Pages
# Build
npm run build
# Deploy
wrangler pages deploy publicCustom Domain
Domain: millpond.cormorantforaging.dev
SSL: Automatic (Cloudflare)
CDN: Global (Cloudflare)Lessons Learned
What Worked Well
✅ AI as guide - Users prefer conversation over browsing ✅ Adaptive responses - Matching expertise level increases engagement ✅ Executive summary - Users like seeing conversation progress ✅ Purple gradient - Distinctive, memorable branding ✅ Simple stack - Alpine.js + PACE.js = fast, lightweight
What We'd Improve
🔄 Add streaming - Real-time AI responses (character by character) 🔄 Persist chat - Save conversation history in localStorage 🔄 Add voice - Voice input for mobile users 🔄 Multi-language - i18n support 🔄 A/B testing - Different greeting variations
Try It Yourself
Run Locally
git clone https://github.com/semanticintent/millpond-storefront.git
cd millpond-storefront
npm install
npm run devCustomize
- Change Products: Edit
public/products.json - Change Theme: Edit CSS variables in
public/index.html - Change AI: Update system prompt in
public/cormorant-prompt.md - Change Greeting: Update greeting text
Resources
- Live Demo: millpond.cormorantforaging.dev
- Source Code: GitHub
- Pattern Docs: PACE Pattern
- Framework Docs: PACE.js
MillPond: Where PACE meets production. 🐦✨