A full-stack demo application for a Claude Code workshop — KYC compliance monitoring, AML alert triage, document verification, and case management for financial institutions.
- Frontend: React 19 + Vite (port 5173)
- Backend: Python FastAPI (port 8001)
- Database: PostgreSQL (Docker)
- Dashboard — KPI cards, customer risk distribution, alert volume trends, recent activity feed
- Customers — 360° customer profiles with risk tiers, linked alerts, documents, and cases
- AML Alerts — Alert management with severity levels, status tracking, and type filtering
- Documents — Document verification tracking with expiry monitoring
- Cases — Compliance case management with notes, priority levels, and status workflows
- Reports — Quarterly metrics, resolution rates, and SLA adherence analytics
- AI Features — 4 Claude-powered tools:
- Risk Assessment (per customer)
- Alert Triage (per alert)
- Case Summary (per case)
- Compliance Narrative (quarterly report generation)
Prerequisites: Docker, Python 3.11+, Node.js 18+
1. Start PostgreSQL:
docker run -d --name sentinel-pg \
-e POSTGRES_DB=sentinel \
-e POSTGRES_USER=sentinel \
-e POSTGRES_PASSWORD=sentinel \
-p 5432:5432 \
postgres:162. Start the backend:
cd backend
uv venv && uv sync
uv run uvicorn app.main:app --port 8001 --reload
# API: http://localhost:8001
# Docs: http://localhost:8001/docs3. Start the frontend:
cd frontend
npm install
npm run dev
# App: http://localhost:5173The database auto-seeds on first startup with demo data.
Dashboard
GET /api/dashboard/kpis— Key performance indicatorsGET /api/dashboard/risk-distribution— Customer risk tier breakdownGET /api/dashboard/alert-trend— Monthly alert volume by severity
Customers
GET /api/customers— List customers (filterable)GET /api/customers/jurisdictions— Available jurisdictionsGET /api/customers/{id}— Customer detailGET /api/customers/{id}/alerts— Customer's alertsGET /api/customers/{id}/documents— Customer's documentsGET /api/customers/{id}/cases— Customer's casesGET /api/customers/{id}/activity— Customer's activity log
AML Alerts
GET /api/alerts— List alerts (filterable)GET /api/alerts/types— Alert type optionsGET /api/alerts/{id}— Alert detailPUT /api/alerts/{id}/status— Update alert status
Documents
GET /api/documents— List documents (filterable)GET /api/documents/types— Document type optionsGET /api/documents/{id}— Document detailPUT /api/documents/{id}/status— Update verification status
Cases
GET /api/cases— List cases (filterable)GET /api/cases/types— Case type optionsGET /api/cases/{id}— Case detailGET /api/cases/{id}/notes— Case notesPOST /api/cases/{id}/notes— Add case notePUT /api/cases/{id}/status— Update case status
Reports
GET /api/reports/quarterly-metrics— Quarterly compliance metricsGET /api/reports/resolution-rate— Alert resolution ratesGET /api/reports/sla-adherence— SLA adherence data
AI (Claude-powered)
GET /api/ai/key-status— Check API key configurationPOST /api/ai/key— Save API keyDELETE /api/ai/key— Remove API keyPOST /api/ai/risk-assessment/{customer_id}— Generate risk assessment (SSE)POST /api/ai/alert-triage/{alert_id}— Triage an alert (SSE)POST /api/ai/case-summary/{case_id}— Generate case summary (SSE)POST /api/ai/compliance-narrative— Generate quarterly narrative (SSE)
Other
GET /api/health— Health checkGET /api/stats— Aggregate statisticsGET /api/search— Global search across entitiesGET /api/activity— Recent activity feed
Seed data includes:
- 40 customers across multiple jurisdictions and risk tiers
- 60 AML alerts (various types and severities)
- 80 KYC documents (passports, licenses, financials)
- 30 compliance cases
- 8 analysts
Data is auto-seeded on first startup. To re-seed: cd backend && uv run python -m app.seed
cd frontend
npm run build # Output: frontend/dist/macOS/Linux: Commands above work as-is.
Windows: Use the manual startup commands — run each in a separate terminal:
Backend:
cd backend
uv venv && uv sync
uv run uvicorn app.main:app --port 8001 --reloadFrontend:
cd frontend
npm install
npm run devTo stop the servers, press Ctrl+C in each terminal window.
Note: Demo application built for workshop use. Not production-ready without authentication, rate limiting, and security hardening.
