Live on this page

Put feedback directly on the page.
Give your coding agent exactly what to change.

+click any element on this page to leave a note

Alt + click on Windows  ·  press and hold on a phone

Save it, open Pinflow in the corner, then choose Export & share.

Pinflow captures locator candidates, surrounding context, and computed styles in one Markdown file. Prototypes, production sites, client staging: any page you can add one script tag to.

Install free Join cloud beta

You add one script tag; your reviewers install nothing and need no account or extension. Notes you leave here stay in your browser.

Built like it says on the tin

14 KB
gzipped, CI-enforced ceiling
zero
runtime dependencies
no telemetry
no network calls unless you add them
MIT
the widget is free forever
audited
every review round is public

Read the source, the sync protocol, and the audit trail at github.com/brijeshp/pinflow.

01 The artifact

What your agent receives

Feedback that says "make this button clearer" isn’t enough for an agent that cannot see your screen. Every Pinflow comment ships with the evidence: the element, three ways to find it again, the surrounding context, and a snapshot of its computed styles. This one was exported from this page while we built it, and we applied it before shipping:

pinflow-feedback-pinflow-dev.md
# Feedback for pinflow-dev — from Brijesh Generated: 2026-08-05T03:36:42.336ZReviewer: BrijeshTotal comments: 1Routes covered: / --- ## Route: / ### [cmt_csbupggw5] Comment 1 — 2026-08-05T03:36:41.088Z**Element:** `<a>` ("14 KB")**Context:** the ‘14 KB’ a under ‘Built like it says on the tin’**Computed:** text oklch(0.46 0.105 194), font 25.6px Schibsted Grotesk Variable**Selector candidates:**- testid: (none)- css: `section.section:nth-of-type(4) > div.wrap:nth-of-type(1) > dl.facts:nth-of-type(1) > div.fact:nth-of-type(1) > dt.fact-value:nth-of-type(1) > a:nth-of-type(1)`- xpath: `/html/body/main[1]/section[4]/div[1]/dl[1]/div[1]/dt[1]/a[1]`**Position:** 50% from left, 50% from top of element**Viewport at time of comment:** 1280×800 (desktop) > Link this number to the size-limit config in package.json so visitors can verify the 14.3 KB ceiling themselves.
  • CSS and XPath candidates, plus readable context, help the agent relocate the element after small page changes.
  • A snapshot of computed styles at the moment of the comment.
  • The reviewer’s words, escaped: a note can’t smuggle instructions to your agent.

Real output, not a mockup. Leave a note on this page, hit Export, and diff it against this block.

02 Workflow

From pin to prompt

  1. Anyone pins.

    Send the link to a page that has the script tag. Reviewers click the element they mean and type what is wrong. No install, no account, works on a phone. Voice notes are an optional module you can turn on.

  2. You export.

    Export writes a Markdown file and copies it to your clipboard, every comment carrying its selectors, context, and style snapshot. JSON, email handoff, and your own backend are one config option away.

  3. You hand it to your agent.

    Paste the file into Claude Code, Cursor, or any coding agent and ask it to make the changes. The selectors and context are what let it find each element without seeing your screen.

Exported comments are treated as untrusted input: Pinflow escapes its Markdown so a reviewer's note can't smuggle instructions to your agent.

03 Install

Add it to any page

One tag or one import, on a prototype, a production site, or a staging build. The data-project value keeps one page's feedback separate from another; pick something stable and keep it for the life of the review.

any HTML page · no build step
<script
  src="https://cdn.jsdelivr.net/npm/@brijeshp/pinflow@latest"
  data-project="checkout-redesign"
  onerror="console.error('Pinflow failed to load')"
></script>
JavaScript or TypeScript, any bundler
npm install @brijeshp/pinflow

import { init } from '@brijeshp/pinflow';

const pinflow = init({
  project: 'checkout-redesign',
});
react ≥ 18 · optional peer dependency
import { Annotator } from '@brijeshp/pinflow/react';

export default function App() {
  return (
    <>
      <Annotator project="checkout-redesign" />
      <YourApp />
    </>
  );
}
vue ≥ 3 · optional peer dependency
<script setup lang="ts">
import { Annotator } from '@brijeshp/pinflow/vue';
</script>

<template>
  <Annotator project="checkout-redesign" />
</template>

Works with plain HTML, React, Vue, Next.js, Vite, Remix, Astro, Lovable, Bolt, and whatever your agent generated last night.

If you can add the script, you can pin feedback.

Point at the thing, say what is wrong, hand the export to your agent. That loop beats describing a page in words, and it works on any page you can add one script tag to. Three notes from three different review loops:

  • AI-built prototypes

    Move this step after payment. It’s confusing here.

    Paste the export back into the Lovable, v0, or Bolt chat so the next generation gets it right.

  • Production websites

    This headline wraps weird on my phone.

    One script tag on any stack, LLM-built or ten years of WordPress. Paste the export into your agent to make the change and open a PR.

  • Client review on staging

    Can the logo be bigger? And a warmer blue.

    Clients pin feedback on the page instead of sending annotated screenshots, with no account or install.

More ways teams use it
  • Design QA

    Spec says 20px of gap. This is 12.

    Every pin carries a computed-style snapshot, so your agent sees the actual delta.

  • Copy and compliance passes

    Legal can’t approve ‘guaranteed’. Say ‘designed to’.

    Exact text plus selector, so your agent can find every instance in one pass.

  • Bug reports

    The dropdown clips behind the footer on Safari.

    Selectors, context, and viewport captured: reproducible without a screen recording.

What exists today

The open-source widget is free and ready to use today. Hosted sync is in closed beta. Everything else below is planned.

Available now

The widget

Free forever · MIT

Free, MIT, and ready to use today. No account for reviewers, no telemetry, no backend required.

  • Numbered pins on any element, with written notes
  • Optional voice notes as a separate lazy-loaded module
  • Pins survive scrolling, resizing, and small edits to the page
  • Selector candidates, page context, and a computed-style snapshot per comment
  • Markdown and JSON export, downloaded and copied to your clipboard
  • Sync hooks for your own backend, including a done or declined status back to reviewers

Install free

In closed beta

Hosted sync

Invite only

Hosted sync keeps each reviewer’s comments available across their devices through our API, so you do not have to host the backend yourself.

  • Reviewer-scoped comment sync, tombstone-aware
  • Same wire protocol as the OSS sync hooks (PROTOCOL.md, verbatim)

Join cloud beta

Planned

The rest of the cloud

$20 / workspace / mo expected at launch, or $50 per 3 months

Planned, not running today. There is no checkout and nothing to buy yet.

See the cloud roadmap
  • Feedback inbox dashboard
  • Resolve lane: send done or declined back from the dashboard
  • Reviewer share-links with per-link revocation
  • Cloud MCP endpoint so your agent pulls feedback live
  • GitHub Issues · Linear · Slack push
  • Batch feedback into a PR description
  • Email digests

Priced per workspace, never per reviewer. Need SSO, an audit log, or a signed SLA? Not planned yet, so tell us what you need at enterprise@pinflow.dev.

The cloud is in closed beta

Leave your email. We will email you when a beta slot opens, oldest request first. The free widget works without the cloud.

No card, and none to give: billing does not exist yet. The widget never nags reviewers either way.