Third-Party Services & Debugging
Quick reference for the external services Eventuall depends on and where to look when something breaks.
Services Reference
| Service | Role in Eventuall | Dashboard | Docs |
|---|---|---|---|
| Mux | Video streaming, recording, asset management | dashboard.mux.com | docs.mux.com |
| LiveKit | Real-time video/audio rooms, WebRTC | cloud.livekit.io | docs.livekit.io |
| Twilio | SMS/OTP authentication, messaging/conversations | console.twilio.com | twilio.com/docs |
| Shopify | E-commerce, order management, product sync | admin.shopify.com | shopify.dev/docs |
| SendGrid | Transactional email delivery | app.sendgrid.com | docs.sendgrid.com |
| Cloudflare | Workers, D1, R2, KV, Queues, Pages, Tunnels | dash.cloudflare.com | developers.cloudflare.com |
| Doppler | Secrets and environment variable management | dashboard.doppler.com | docs.doppler.com |
| Google Cloud | OAuth authentication (Google sign-in) | console.cloud.google.com | cloud.google.com/docs |
Common Debugging Quick Reference
Viewing Logs
Dev server logs are written to /tmp/eventuall-dev-logs/ with timestamped filenames:
# Full status of all services
./scripts/dev-server.sh status
# View recent logs
./scripts/dev-server.sh logs
# Tail logs in real-time
./scripts/dev-server.sh tail
Workers logs in production/preview use wrangler tail:
wrangler tail --env production
Client telemetry is stored in the client_logs table in D1. Query it with:
SELECT * FROM client_logs
WHERE level = 'error'
ORDER BY clientTimestamp DESC
LIMIT 50;
Database (D1)
# Query local D1 (development)
wrangler d1 execute eventuall-workers-db --local --command "SELECT * FROM users LIMIT 5"
# Query remote D1 (production)
wrangler d1 execute eventuall-workers-db --remote --command "SELECT * FROM users LIMIT 5"
# Apply pending migrations locally
pnpm migrate:local
# Generate a new migration
pnpm migrate:generate
Use Drizzle Kit for schema exploration:
npx drizzle-kit studio
Note: Local D1 is a SQLite file — changes don't sync to remote. If debugging a production issue, always use
--remote.
Workers & Durable Objects
# Deploy workers
wrangler deploy
# Tail worker logs (real-time)
wrangler tail
# Inspect Durable Object storage (local dev)
# DO state persists across requests — restart wrangler to clear it
Durable Object state is scoped per ID. If state seems stale after a code change, the old serialized state may be incompatible with new code. Restart the local Workers dev server to reset.
Webhooks
Several services send webhooks into the application:
| Service | Webhook Endpoint | What it handles |
|---|---|---|
| Mux | Worker routes (/routes/webhooks.ts) |
Video asset ready, upload complete, stream events |
| LiveKit | Worker routes (/routes/webhooks.ts) |
Room started/ended, participant joined/left |
| Shopify | Next.js API route (/api/webhook/shopify/) |
Order created/updated, product sync |
When debugging webhook issues:
- Check the service's dashboard for delivery status and recent payloads
- Check worker/server logs for parsing or validation errors
- Verify the webhook signing secret matches what's configured in Doppler
Environment Variables
Environment variables flow through a specific chain:
Doppler → Terraform → start-dev.sh / .dev.vars → Runtime
To check current values:
# See what Doppler has for the current environment
doppler secrets
# Check what Terraform outputs (from terraform/ directory)
terraform output
# Verify what the dev server loaded
# Check start-dev.sh or .dev.vars files in each app directory
If a variable is missing at runtime, trace it backwards through this chain.
When X Breaks, Check Y
| Symptom | Where to look |
|---|---|
| Video not working | LiveKit dashboard for room/participant state, Mux dashboard for asset/stream status |
| Chat not working | Twilio console for conversation service status and message logs |
| Orders not syncing | Shopify admin for order status, webhook delivery logs in Shopify and worker logs |
| Emails not sending | SendGrid activity for delivery status, bounces, and blocks |
| Auth failing | Google Cloud console for OAuth consent screen and credential status, then clear cookies for *.eventuall.live |
| DNS/routing issues | Cloudflare dashboard for DNS records, tunnel status, and Pages deployment status |
| Missing env vars | Doppler dashboard to verify secrets exist for the correct project and environment |
| Workers errors | wrangler tail for real-time logs, Cloudflare dashboard for analytics and error rates |
| Database issues | wrangler d1 execute --local or --remote to query directly, check migration status with pnpm migrate:local |