Appearance
Seed Demo Data
The seed script pre-loads a realistic enterprise scenario (NovaTrust Bank) for demos and development.
Quick Start
bash
# Local (docker compose running)
bash scripts/seed-demo-data.sh
# Remote (demo VM)
bash scripts/seed-demo-data.sh --remoteWhat Gets Created
| Category | Count | Details |
|---|---|---|
| Tenants | 4 | Retail Banking (pro), Wealth Management (pro), Insurance Division (pro), PayFlow (free) |
| API Routes | 5 | Account API, Chat Completions, Payment API, Reports API, Health Records API |
| Rate Limits | 4 | Per-tenant: retail 10k/min, wealth 2k/min, insurance 2k/min, payflow 500/min |
| Token Budgets | 4 | retail 2M/month, wealth 1M, insurance 500K, payflow 50K |
| MCP Servers | 3 | ehr-read-only, scheduling, product-catalog |
| Agent Sessions | 3 | Insurance tenant triage sessions |
| ClickHouse Data | 300 rows | 150 request logs + 90 AI logs + 60 agent audit logs (7-day spread) |
| Semantic Cache | 50 entries | Pre-warmed Qdrant cache for common banking/healthcare queries |
| Notifications | 5 | Budget warnings, key approvals, HITL pending, session errors, health alerts |
| Webhooks | 2 | Slack integrations for retail + insurance |
| Demo Users | 2 | operator/demo123 (platform admin), developer/demo123 (retail tenant) |
Route Plugin Configuration
Every seeded route includes the full plugin set:
| Plugin | Purpose | On All Routes |
|---|---|---|
tenant-rate-limit | Per-tenant rate limiting | Yes |
clickhouse-logger | Analytics data collection | Yes |
request-id | Trace correlation | Yes |
opentelemetry | Distributed tracing | Yes |
cors | Cross-origin headers | Yes |
key-auth | API key authentication | Yes |
response-pii-scrub | PII redaction (HIPAA) | Chat + Health Records only |
NovaTrust Bank Scenario
The demo data models a real enterprise deployment:
NovaTrust Bank
|
+-- Platform Engineering (operator portal)
| Sarah Chen — platform-admin
|
+-- Retail Banking (developer portal, tenant: retail)
| Raj Patel — tenant-user
| Routes: Account API v2, Chat Completions
| Budget: 2M tokens/month, 10k req/min
|
+-- Wealth Management (tenant: wealth)
| Routes: Reports API v3
| Budget: 1M tokens/month
|
+-- Insurance Division (tenant: insurance)
| Routes: Health Records API (draft, HIPAA PII scrubbing)
| MCP: ehr-read-only, scheduling servers
| Agent sessions with HITL gates
|
+-- PayFlow (external partner, tenant: payflow)
Routes: Payment API
Budget: 50K tokens/month, 500 req/min (strict)Customizing Demo Data
Edit scripts/seed-demo-data.sh to customize:
- Tenants: Modify the tenant JSON array in section 1
- Routes: Change URIs, upstreams, and plugin configs in section 2
- ClickHouse data: Adjust row counts, tenant distribution, and time spread in section 7
- Keycloak users: Users are created in section 9 (requires Keycloak admin token)
Re-seeding
The script is idempotent — running it again updates existing data without duplicating:
- Tenants: creates if not exists, skips if already present
- Routes: PUT (upsert) — overwrites existing route config
- ClickHouse: INSERT adds new rows (old data remains, TTL handles cleanup)
- Redis: SET overwrites existing keys