# OpenRoadmap > AI-native product feedback: fastest visitor idea → structured backlog → transparent public status. > Philosophy: You asked. We built it. This file is for AI agents and integration assistants. ## Product - Embeddable Shadow DOM widget (vanilla TS) - Cloudflare Worker API (Hono) - Static dashboard + public portal (Next.js export → Cloudflare Pages) - Optional KV config cache + Queues for email ## Hard rules - Widget NEVER talks to Supabase / DB — only public Worker API - Loader ≤ 5KB gzip; widget-ui ≤ 40KB gzip - Persist feedback first; email async (Queue or waitUntil) - Domain allowlist on ingest ## Domain - Production zone: openroadmap.app (Cloudflare, active) - API: https://api.openroadmap.app - CDN: https://cdn.openroadmap.app - App: https://app.openroadmap.app - Docs: https://docs.openroadmap.app - Portal: https://{slug}.openroadmap.app ## Demo - Project key: pk_demo_acme_website - Org slug: acme - Dashboard login: admin@acme.test - Local API: http://localhost:8787 ## Embed (minimal) ```html ``` ## JS API - Feedback.init({ project, apiBase?, uiUrl?, theme? }) - Feedback.open() / Feedback.close() - Feedback.identify({ id, email?, name?, plan?, account? }) - Feedback.setMascot({ character, theme, effect, mood, accessory, size, ... }) - Feedback.submit({ type?, message, email? }) ## Public HTTP - GET /health - GET /v1/widget/:pk/config - POST /v1/feedback - POST /v1/votes - POST /v1/subscriptions - GET /v1/public/:orgSlug/roadmap - GET /v1/public/:orgSlug/features - GET /v1/public/:orgSlug/features/:slug ## Admin HTTP (X-OpenRoadmap-Session) - POST /v1/auth/login - GET /v1/me | /v1/stats | /v1/inbox | /v1/features | /v1/features/:id - POST /v1/features | /v1/features/:id/merge - PATCH /v1/features/:id/status | /v1/submissions/:id/archive - GET|PATCH /v1/widget-settings - GET /v1/emails/outbox ## Docs site Human docs: / (this Pages project) — Quickstart, Widget, API, Cloudflare, Troubleshooting. OpenAPI sketch: /openapi.json ## Repo https://github.com/ansi2u/feedback-widget