Enterprise AI Observability Platform landing page built with Flutter Web.
Production: https://integritystudio.ai Status: ✅ Sender-Worker UI complete (auth, provision, health pages), API provisioning + ingest + Stripe billing workers live, 2740+ Flutter (unit+contract+integration) + 310 worker tests
flutter pub get # Install dependencies
flutter run -d chrome # Development server (localhost:8080)
flutter test # Run tests (2740+ passing, ~94% coverage)
flutter build web # Production buildShared Library (workers/lib/)
- Time constants: MS_PER_DAY
- HTTP utilities: CORS, request parsing, response factories, error handling
- Zod schemas: usage events, OTEL spans, audit logs, provisioning, Supabase queries
- Validation: typed result unions, formatted error responses
cd workers/lib && npm install && npm testContact Form Worker (workers/contact-form/)
- Email submissions via Resend
- KV-based rate limiting
- CSRF protection, idempotency keys
- Tests: 71 passing, ~94% coverage
cd workers/contact-form
npm install && npx wrangler dev # Local dev
npx vitest run # TestsAPI Gateway Worker (workers/api-gateway/)
- Usage event ingest, aggregation, and rollup (daily → monthly)
- OpenTelemetry span ingestion with quota enforcement
- Org quota tracking via Durable Objects
- Tests: 122 passing, ~94% coverage
cd workers/api-gateway
npm install && npx wrangler dev # Local dev
npx vitest run # TestsAPI Provisioning Workers (workers/sender-worker/, workers/receiver-worker/)
- Sender: Signs requests with HMAC-SHA256, forwards to receiver
- Receiver: Verifies signatures, stores provisioning data, replay protection
cd workers/sender-worker
npm install && npx wrangler dev # Local dev
npx vitest run # Tests
cd workers/receiver-worker
npm install && npx wrangler dev # Local dev
npx vitest run # Tests
# Manual E2E testing
npm run test:provisioning # Interactive test guide
# Or read: PROVISIONING_MANUAL_TEST.md for detailed stepsStripe Webhook Worker (workers/stripe-webhook/)
- Stripe event verification and routing
- Subscription lifecycle (create, update, cancel) and checkout session handling
- Dead-letter queue for failed events with reconciliation
- Supabase sync: subscriptions, plan mapping via
STRIPE_PRICE_TO_PLAN_JSON - Tests: 61 passing
cd workers/stripe-webhook
npm install && npx wrangler dev # Local dev
npx vitest run # Tests- Architecture — tech stack, patterns, directory structure
- Authentication — auth flows, DRY patterns, AuthMode extension, M2M + ROPC grant types
- Routes — GoRouter configuration, 33 routes
- API Provisioning — inter-worker HMAC-SHA256 auth, Flutter service layer, security model
- Provisioning Manual Test Guide — 7 test cases, step-by-step instructions
- Provisioning E2E Results — verified working components, test summary
- Changelog — version history
- BACKLOG — open, deferred, blocked items
- Token Tree — file tree with token counts
# Flutter: Unit + Contract + Widget tests (~2740, ~94% coverage)
flutter test # All tests
flutter test --coverage # With coverage report
flutter test test/pages/ # Page tests only
flutter test test/services/provisioning_service_test.dart # Unit tests (48)
flutter test test/services/provisioning_service_contract_test.dart # Contract tests (25, Dart ↔ TS schema)
# Flutter: Live integration tests (optional, staging only)
flutter test test/services/provisioning_service_live_test.dart \
--dart-define=LIVE_TESTS=true \
--dart-define=SENDER_WORKER_URL=https://sender-worker.alyshia-b38.workers.dev
# Workers
cd workers/contact-form && npm test # Contact form worker tests (71 passing)
cd workers/api-gateway && npm test # API Gateway worker tests (122 passing)
cd workers/receiver-worker && npm test # Receiver worker tests (16)
cd workers/sender-worker && npm test # Sender worker tests (40 passing)
cd workers/stripe-webhook && npm test # Stripe webhook tests (61)
# Manual provisioning E2E test (interactive, do NOT use in CI)
SHARED_SECRET=your-test-secret npm run test:provisioning| Item | File | Reason |
|---|---|---|
_launchUrl error handling |
lib/widgets/sections/footer_section.dart |
url_launcher failures untestable in widget tests |
_initializeTracking error handling |
lib/app.dart |
kIsWeb compile-time constant; requires web platform |
See test/app_test.dart:692-702 for native test ceiling details.
Flutter Canvas Limitation (CanvasKit) — Flutter Web renders all content to <canvas>, making DOM-based selectors (Playwright page.locator(), page.click()) unable to reach widget content. Workaround: Semantics widget wrappers expose ARIA labels accessible via page.getByLabel(). SemanticsBinding.instance.ensureSemantics() enables the semantics tree at startup. Some browsers may fail to materialise the tree (Flutter #151929); e2e tests gracefully skip in that case. Interactions that require pixel-level canvas hit-testing (touch fling, swipe gestures, overlay opacity) remain infeasible.