v0.1.0-alpha: interactive demo platform core

- Fastify API: demos/steps CRUD, content-addressed assets, scoped API keys
  (read/author/publish/admin, draft-only default per D4)
- Player: image + sandboxed DOM steps, hotspots, tooltips, keyboard nav,
  privacy-first beacons (no IP storage, viewer tokens only — R7)
- Editor: React SPA — demo list, drag-to-draw hotspots, annotations, publish
- MCP server: Streamable HTTP, scope-filtered tools, untrusted-data wrapping
  on viewer-supplied content (R8); platform never calls a model
- Capture extension (MV3): screenshot-flow recording, hotspots pre-placed
  from real clicks
- Docker: single app image + postgres, Traefik-ready (expose only)

E2E verified: capture->author->publish->play->beacon->lead->analytics + full
MCP tool surface with scope filtering.
This commit is contained in:
Scot Thom 2026-07-18 05:17:45 +00:00
commit 9b09f14916
33 changed files with 5555 additions and 0 deletions

33
docker-compose.yml Normal file
View file

@ -0,0 +1,33 @@
services:
app:
build: .
restart: unless-stopped
expose:
- "3000"
environment:
- DATABASE_URL=postgresql://demoplatform:${DB_PASSWORD:-demoplatform}@db:5432/demoplatform
- DATA_DIR=/data
volumes:
- app-data:/data
depends_on:
db:
condition: service_healthy
db:
image: postgres:17-alpine
restart: unless-stopped
environment:
- POSTGRES_USER=demoplatform
- POSTGRES_PASSWORD=${DB_PASSWORD:-demoplatform}
- POSTGRES_DB=demoplatform
volumes:
- db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U demoplatform"]
interval: 10s
timeout: 5s
retries: 5
volumes:
app-data:
db-data: