OpenRoadmap integration docs
Everything you need to embed the visitor widget, call the Worker API, open the public portal, and deploy on Cloudflare. Built for PMs shipping feedback loops — and the engineers who wire them in.
Philosophy
You asked. We built it. The widget is intentionally tiny: persist first, email async, never talk to the database from the browser embed.
Surfaces
| Surface | Role | Default local |
|---|---|---|
| Widget CDN | widget.js + lazy widget-ui.js | :8787 |
| API Worker | Ingestion + admin JSON | :8787 |
| Dashboard | Inbox / features / settings | :3000 |
| Portal | Public roadmap + votes | :3001 |
| These docs | Integration reference | :3002 |
Start integrating
QuickstartPaste one script tag and submit an idea.Install widgetFramework notes, domains, and production CDN.Public APIFeedback, votes, subscriptions, portal reads.CloudflareWorkers + Pages deploy map.
Hard rules
- The widget never receives Supabase or service-role keys — only the public Worker API.
- Loader budget ≤ 5 KB gzip; lazy UI ≤ 40 KB gzip.
- Domain allowlist is enforced on ingest. Misconfigured hosts get
403. - Original submissions are never deleted when merged into a feature.
Demo credentials
| Item | Value |
|---|---|
| Project key | pk_demo_acme_website |
| Org slug | acme |
| Dashboard login | admin@acme.test |
Note
Machine-readable overview: /llms.txt · OpenAPI sketch: /openapi.json