Preview feedback
A feedback overlay injected into preview URLs at the proxy level. Stakeholders click any element and leave a note; notes are stored as agent-readable .md files per route.
Preview deployments carry a feedback overlay injected at the proxy level — no app changes required. Stakeholders visit a preview URL, click any element, and leave a note. Notes are stored per route as Markdown files, so a developer or an agent can read exactly what to fix.
How it works
- A stakeholder opens a preview URL.
- A small floating button appears (the overlay is injected before
</body>). - They click any element and add a note.
- The note is stored against that page/route as a Markdown file.
Overlay behavior
- Injected by the relay proxy on all preview / test URLs.
- Never injected on production.
- Works on any framework — the proxy rewrites the HTML response, no app cooperation needed.
- A per-request nonce is generated for CSP compatibility.
Agent-readable notes
Notes are grouped per route into .md files, for example notes/checkout.md. A developer or an AI agent reads the file and knows exactly what to fix — no ticket system required.
# /checkout — Feedback Notes
## [OPEN] Button label is confusing
- **Author:** Sarah (Tester)
- **Element:** `button#submit-order`
- **Note:** "Place Order" should say "Complete Purchase".Working with notes
primdb notes # list all open notes across routes
primdb notes --route /checkout # notes for a specific route
primdb notes resolve <id> # mark a note resolved
primdb notes export # download all notes as a .md zip archiveOver MCP, an agent reads and resolves the same notes with get_notes, list_note_routes, create_note, and resolve_note, so a comment becomes the next iteration. See MCP.
Local preview with the overlay
You do not need a full deploy to collect feedback. primdb dev opens a public tunnel to a local port with the overlay injected, so stakeholders can review work-in-progress running on your machine.
primdb dev --port 3000 # public tunnel + feedback overlay
primdb dev --port 3000 --no-overlay # tunnel only, no overlay