Kview Beta · for people who build with AI coding agents

A screenshot is pixels. Your agent needs facts.

Kview shows your site on every phone, tablet and desktop at once. When you capture what’s wrong, it records the device, the page, its state at that moment, and the exact element and CSS rule you pointed at, so your coding agent can fix the right thing the first time.

Free betaApple SiliconmacOS 13 or later

On your phone? Email yourself the link for your Mac.

Kview showing findpsych.com.au on four phones, a tablet, a laptop, a desktop and an ultrawide at once
findpsych.com.au in Kview · real capture
The way it works today

Your agent writes the code in seconds. Explaining what’s wrong with it still takes you minutes.

Checking a change on mobile is still manual, and each step loses something your agent needs.

  1. Narrow the browser, or open the device toolbar

    One device at a time, and a narrowed window is still desktop Chrome: desktop user agent, a mouse, no on-screen keyboard.

  2. ⌘⇧4 and drag

    Screenshot 2026-10-22 at 08.41.12.png

    The file doesn’t say which device, which width, which URL or how far down the page you were.

  3. Draw an arrow in Preview

    The arrow points at pixels. Nothing says which element they belong to.

  4. Drag it into the chat and describe it

    “The button under the search box wraps on mobile.” Which button, which phone, which breakpoint?

  5. The agent guesses

    It searches for “button”, picks a media query and changes a rule. Often the wrong one.

  6. Check every device again, by hand

    Fixed on the iPhone you checked. Still broken on the Galaxy you didn’t.

The Kview loop

Same five moves. Nothing lost on the way.

  1. 01 · See

    Every device, one URL.

    Type localhost:3000 or a live address once. Ten devices load it side by side, each properly emulated: the phone’s user agent and Client Hints, its pixel ratio, touch and no hover, and an on-screen keyboard that rises when a field takes focus. Click a link in one and every pane follows.

    Instead of one narrowed browser window at a time.

    Kview showing findpsych.com.au on four phones, a tablet, a laptop, a desktop and an ultrawide at once
  2. 02 · Capture

    One click, and it knows what it’s looking at.

    The camera on a pane captures what that device shows at its real resolution, and writes down the page and its state at that instant.

    • device, viewport, pixel ratio, orientation
    • URL, route, framework and router
    • scroll position, colour scheme
    • media queries matching at this width
    • console errors, keyboard up or down

    Instead of a file called “Screenshot 08.41.12”.

    Three Kview panes, iPhone SE 375×667, iPhone 16 Pro Max 440×956 and Pixel 9 412×915, each with its capture button
  3. 03 · Mark

    Point at the element, not the pixels.

    Draw a box or an arrow. Kview resolves each numbered mark to the element underneath, from what it recorded at capture time.

    • tag, selector, text and size
    • its markup and computed styles
    • the CSS rules applying, and the @media they sit in
    • on React sites, the component that rendered it

    Instead of an arrow on a picture.

    Kview’s mark-up view: a numbered box around a list of crisis phone numbers and an arrow pointing at “000”
  4. 04 · Note

    Write what’s wrong. Kview already wrote where.

    Your note only needs the judgement: “too tight”, “covered by the keyboard”, “should stack”. It saves as you type, into a review folder on your Mac you can reopen any time.

    Instead of a paragraph about which page, which phone and which button.

    Kview with four phones on the left and the review drawer on the right: captures with their device, size and a note under each
  5. 05 · Hand over

    One paste. Every fact.

    Copy for Claude Code puts a short prompt on your clipboard that points at review.md. Your agent reads each capture with its context and edits the rule that’s actually applying. Press ⟳ All and check every device again at once.

    Instead of a guess, and another round-trip.

Screenshot vs Kview capture

What your agent gets from each.

FactA screenshotA Kview capture
The device
The imagePixelsAt the device’s true resolution
Device, CSS width, pixel ratio—e.g. Galaxy S24, 360×800 @3x, mobile UA
The page
URL and route—As the page reported it
Framework and styling—Next.js, React, Vue, Svelte… Tailwind, CSS Modules…
Its state at that moment
Scroll position—Which slice of the page is in view
Breakpoints in play—The media queries matching at that width
Console—Errors and warnings at capture
On-screen keyboard—Up or down, the focused field, what it covers
What you pointed at
The elementAn arrow on pixelsTag, selector, size and markup
Why it looks like that—The CSS rules applying, with their @media
Where it lives in your code—The React component that rendered it (by name on a dev build)
What your agent reads

review.md, written for you as you go.

Every capture becomes a section with its image path and three labelled levels: the Page, the Screenshot (its state at that moment) and the Annotations (what you marked). Your agent can open it again in later turns.

Excerpt from a real Kview review of findpsych.com.au

review.md
## 1. iPhone SE

- **Image:** `/Users/you/Kview Reviews/2026-10-22_1219_findpsych/02_iphone-se_375x667_12-19-24.png`

### Page
- **URL:** https://findpsych.com.au/
- **Route (as the page reported it):** `/`
- **Stack:** Next.js (app router), React
- **Styling system:** Tailwind CSS (utility classes)

### Screenshot
- **Device:** iPhone SE — 375×667 CSS px @2x, mobile UA, portrait
- **Visible region:** 5762px → 6429px of 6930px (scrolled 5762px down)
- **Colour scheme in effect:** dark
- **On-screen keyboard:** emulation on, keyboard down (no text field focused at capture)
- **Media queries active at this width:** `(max-width: 640px)`, `(max-width: 1023px)`, `screen`, `(hover: none), (pointer: coarse)`
- **Console at capture:** no errors or warnings

### Annotations
- **1.** (box) `<a>` in `<x>`
    - text: "000"
    - selector: `div.flex.items-start > div > ul.mt-2.5.flex > li:nth-of-type(5) > a.inline-block.py-1`
    - box: 27×28px at (164, 292) in the viewport
    - computed: display: inline-block; fontSize: 14px; fontFamily: Inter
    - markup: `<a class="inline-block py-1 -my-1 underline decoration-crisis/40 underline-offset-2 hover:text-crisis" href="tel:000">000</a>`
    - CSS rules applying (8):
        - `.-my-1` { margin-top: -0.25rem; margin-bottom: -0.25rem }
        - `.inline-block` { display: inline-block }
        - `.py-1` { padding-top: 0.25rem; padding-bottom: 0.25rem }
        - …
- **2.** (arrow →) `<ul>` in `<x>`
    - text: "Lifeline: 13 11 14 Beyond Blue: 1300 22 4636 13YARN: 13 92 76 …"
    - box: 257×144px at (81, 172) in the viewport
    - CSS rules applying (8):
        - `.flex-wrap` { flex-wrap: wrap }
        - `.gap-y-1\.5` { row-gap: 0.375rem }
        - …

### Note
> Crisis numbers are 14px inline links, 28px tall but stacked 26px apart, so their tap areas overlap by 2px; 000 is 27×28 (1, 2). These are the most important taps on the site: give each service a full-width row at least 44px tall.

localhost to production

Every pane is a real browser view, not an iframe, so dev servers and sites that refuse to be framed both work.

Stays on your Mac

Reviews are files in a folder you choose. Kview sends no screenshots, URLs or page content anywhere: Privacy Policy.

Secrets left out

Captures never record what’s typed into fields, or credentials in URLs.

Any agent

Copy for Claude Code, or copy the full markdown for Codex, Cursor or anything that reads files.

Get the beta

Free, for Macs with Apple Silicon.

Download for MacmacOS 13 or later · updates itself
  1. Open the .dmg and drag Kview into Applications.
  2. Sign in through your browser: an emailed link or code, Google or GitHub.
  3. Type your URL. Every device loads it.