Public observability dashboard + authenticated control plane for Vincent actions.
Live: https://lit-with-intent.web.app
Operator: jeremy longshore / intent solutions io
Confirm the system is operational:
# 1. Check API responds
curl -s https://lit-with-intent.web.app/api/v1/status | jq .ok
# Expected: true
# 2. Check health (should not be "unhealthy")
curl -s https://lit-with-intent.web.app/api/v1/health | jq '.data.overall'
# Expected: "healthy" or "degraded"
# 3. Check market data
curl -s https://lit-with-intent.web.app/api/v1/market | jq '.data.eth_usd'
# Expected: current ETH price (number)
# 4. Run full self-test (if cloned locally)
./scripts/selfcheck.sh- Public read-only observability: Status, health, execution history, and market data available without authentication
- Privileged control plane: PKP setup, token transfers, and manual health checks require API key or Firebase auth
- Nothing else: This dashboard does not store private keys, execute arbitrary code, or provide direct wallet access
- Not a wallet or key management system
- Not a place to store secrets
- Not a trading platform
- Not financial advice (market data is delayed and informational only)
| Layer | Technology |
|---|---|
| Framework | Next.js 15 (App Router) |
| UI | React 19 + Tailwind CSS |
| Database | Firestore |
| Hosting | Firebase Hosting (frameworksBackend) |
| Auth | Firebase Auth + API Key |
| IaC | OpenTofu (Terraform) |
| CI/CD | GitHub Actions + Workload Identity Federation |
| Charts | TradingView Lightweight Charts |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/status |
GET | System status summary with component health |
/api/v1/health |
GET | Aggregated health snapshot |
/api/v1/health/lit |
GET | Lit network health |
/api/v1/health/vincent |
GET | Vincent SDK health |
/api/v1/health/chain |
GET | Chain RPC health |
/api/v1/executions |
GET | Recent execution history |
/api/v1/market |
GET | Market snapshot (ETH/LIT prices, cached) |
/api/openapi.json |
GET | OpenAPI 3.0 specification |
| Endpoint | Method | Description |
|---|---|---|
/api/v1/health/run |
POST | Trigger manual health check |
/api/v1/vincent/setup |
POST | Bootstrap Vincent environment |
/api/v1/vincent/send |
POST | Execute token transfer with policy enforcement |
/api/v1/market/fetch |
POST | Force refresh market data from CoinGecko |
API Key:
curl -X POST https://lit-with-intent.web.app/api/v1/health/run \
-H "X-API-Key: your-api-key"Firebase ID Token:
curl -X POST https://lit-with-intent.web.app/api/v1/health/run \
-H "Authorization: Bearer <firebase-id-token>"Idempotency (for write operations):
curl -X POST https://lit-with-intent.web.app/api/v1/vincent/send \
-H "X-API-Key: your-api-key" \
-H "Idempotency-Key: send_unique123" \
-H "Content-Type: application/json" \
-d '{"to":"0x...", "amount":"0.01"}'| Path | Description |
|---|---|
/ |
Home - Overview, API endpoints, quick start |
/dashboard |
Live monitoring, pipeline status, market snapshot |
/market |
Market data with price chart |
/docs |
API documentation, curl examples, status definitions |
/about |
Architecture overview, tech stack, operator info |
/trust |
Security posture, audit status |
/privacy |
Privacy policy |
/terms |
Terms of service |
# Install dependencies
npm install
# Copy environment file
cp .env.example .env.local
# Edit .env.local with your Firebase credentials
# Run development server
npm run devOpen http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Production build |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run typecheck |
Run TypeScript type checking |
cd infra/tofu
# Copy and configure variables
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your GCP project details
# Initialize and apply
tofu init
tofu plan
tofu apply# Build
npm run build
# Deploy via Firebase CLI
firebase deployPush to main branch triggers automatic deployment via GitHub Actions with Workload Identity Federation.
# Run self-check against production
./scripts/selfcheck.sh https://lit-with-intent.web.app
# Or against local
./scripts/selfcheck.sh http://localhost:3000vincent-dashboard/
├── src/
│ ├── app/
│ │ ├── api/v1/ # API routes
│ │ │ ├── status/ # System status
│ │ │ ├── health/ # Health endpoints
│ │ │ ├── executions/ # Execution history
│ │ │ ├── market/ # Market data
│ │ │ └── vincent/ # Vincent operations
│ │ ├── dashboard/ # Dashboard pages
│ │ ├── market/ # Market page
│ │ ├── docs/ # Documentation page
│ │ ├── about/ # About page
│ │ ├── trust/ # Security page
│ │ ├── privacy/ # Privacy policy
│ │ ├── terms/ # Terms of service
│ │ └── page.tsx # Home page
│ ├── components/ # React components
│ │ ├── layout/ # Header, Footer
│ │ ├── MarketCard.tsx # Market snapshot card
│ │ ├── NetworkHealth.tsx # Health display
│ │ └── ...
│ └── lib/
│ ├── firebase/ # Firebase SDK
│ ├── security/ # Auth, rate limit, idempotency
│ ├── vincent/ # Vincent SDK wrapper
│ ├── monitoring/ # Health checks
│ ├── market/ # Market data client
│ └── config/ # Links, constants
├── scripts/
│ └── selfcheck.sh # Post-deployment verification
├── infra/tofu/ # OpenTofu/Terraform IaC
└── .github/workflows/ # CI/CD
- Public endpoints are read-only with rate limiting
- Privileged endpoints require authentication
- API keys use timing-safe comparison
- Idempotency keys prevent duplicate transfers
- All responses include
request_idfor tracing - No private keys stored in this system
Private - For Lit Protocol Partnership