One tunnelfor your whole dev team.

Circle what looks wrong, say one sentence, move to the next case. The repro steps write themselves.

The frozen frame, the DOM replay, the failing request and the branch — waiting for you before you open the editor.

The board is the status report, and it writes itself while the work happens.

Start freenpm i -g @lovinka/vitrinka

Open any compartment

The whole loop, in one take

A tester circles what looks wrong. An agent picks it up, fixes it, and hangs the after-shot beside the original. No repro steps in between.

0:31

Who is on the other end

Three roles, one tunnel.

The same board is read differently by each of them — nobody has to learn the others' tools.

Which one are you?

QA and testers

Writing the same repro steps for the third time this week.

Circle what is wrong on the screen and say one sentence. The recording, the network log and the console go with it.

Run the loop yourself

Developers

“Cannot reproduce — works on my machine.”

You get the frozen frame, the DOM replay, the failing request and the branch it happened on, before you open the editor.

What lands on a board

Product managers

A status meeting to find out what actually shipped.

Boards, reports and diagrams update themselves as the work happens. A browser link is the whole onboarding — no install, no seat to buy, nothing to learn.

See what a board holds

Look inside the vitrína

Everything the team made, behind one pane of glass.

01

Boards

An infinite canvas where the screen itself is the ticket.

Annotate on the thing itself
  • Draw a regionCircle what is wrong directly on the screenshot. No coordinates, no repro steps.
  • One sentenceYour sentence becomes a work item, with the surrounding context already attached.
  • The agent answersA listening agent picks it up, fixes it, and hangs the after-shot beside the original.
  • Anyone can joinA browser link is enough — designers, PMs and clients never install anything.

02

Sessions

A recording of what actually happened, not a description of it.

DOM replay, network, console
  • DOM replayScrub the session back and annotate any frozen frame of it.
  • Network waterfallEvery request with timing and status, lined up against the recording.
  • ConsoleErrors and logs captured in the same timeline as the clicks.
  • One digestThe agent reads a compact digest of the session — about 1% of the raw stream.

03

Journeys

Whole flows, screen by screen, wired together.

Screens wired into flows
  • Wires between screensEach wire leaves from the element that was actually clicked.
  • BranchesA flow that forks renders as a signpost, not a straight line.
  • PassesRound two lands beside round one, so you can see what changed.

04

Diagrams

Architecture drawn from your real configuration, not from memory.

Drawn from your real config
  • From your repoRead from docker-compose, OpenAPI, SQL schema or a live database.
  • Server lays it outYou describe the semantics; the layout is not your problem.
  • RefreshableRe-run it after a change and the diagram catches up.

05

Documents

Reports and pages an agent wrote, live on the canvas and still true next month.

Reports and pages that stay live
  • Real HTMLNot a screenshot of a report — the actual page, interactive on the board.
  • Bound to your filesA page can be tied to a repo file and refreshed after every edit.
  • Linked to the diagramDeep-link a paragraph to the exact node it explains.
  • Stays liveRe-publish and the card updates in place, keeping its URL.

06

Connect

Your agent publishes to it in one command.

Claude Code, Codex, any MCP
  • Claude Code and CodexInstall the plugin and the skills come with it.
  • Any MCP clientConnect over MCP and the board becomes a tool your agent can use.
  • Or just curlA tar pipe is enough to publish a set from any CI job.

Try it as a tester

Reporting a bug should cost one sentence.

Turn it on and do it yourself. This is the whole loop — nothing is hidden behind a sign-up.

Try it as a developer

See what arrives on your side.

Report something on this mock the way your tester would, then read what the work item actually carries. That is what you would have been handed.

Try it as a PM

Watch one sentence become a shipped fix.

This is the whole trail you would read later: who found it, what they saw, what changed. No one wrote a status update to produce it.

Checkout — pass 3
1
Pick what looks wrong
Drag a box around whatever looks off to you.
2
Describe it
One sentence is enough — no repro steps.
3
Send
It becomes a work item with the whole context attached.
Your basket3
Ceramic mugSand · 350 ml320
Pour-over kettleMatte steel808
Filter papersSize 02 · 100 pcs120
SPRING10Promo applied
Subtotal1 248
Discount SPRING10−124
Discount SPRING10−124
DeliveryFree
Total1 000
Pay now

And the people who use what you ship

One sentence, from your own customers.

A small “report a problem” widget that lives inside your product. Your customer circles what looks wrong and says one sentence — your team gets the session that produced it, on the same board as everything else.

Nothing to install

It is already part of your product. No account, no download, nothing to learn — the person reporting never sees vitrinka at all.

The context comes free

The screen, the console and the failing request are attached by the widget, not typed out by an annoyed customer who has stopped caring.

It lands where you already work

The report arrives as a work item beside the ones your own testers file, with the same thread and the same evidence attached.

Where it sits

It does not replace your tracker.

Vitrinka carries the evidence and the conversation about it. Everything else stays where your team already keeps it.

Your tracker
Plane and Jira keep the ticket. A set can be pinned to an issue, and the issue gets one comment that stays up to date.
Your repo
Every set knows its project, branch, commit and pull request, so a screenshot is never orphaned from the code that made it.
Your agent
Claude Code, Codex, or any MCP client. The board becomes a tool the agent can read and write.
Your CI
One tar | curl publishes a set from any job — no SDK, no plugin to maintain.
Everyone else
A browser link. Designers, PMs and clients install nothing and see the same canvas.

What goes on a board

Anything your agent produced, in the form it produced it.

Short clips, one per surface. Swipe through them.

Screenshots and journeys

0:26
  • Wires between screenseach one leaves from the element that was actually clicked.
  • Branchesa flow that forks renders as a signpost, not a straight line.
  • Passesround two lands beside round one, so you can see what changed.

Where your work lives

One binary, your storage, your network.

Nothing about this needs to leave your infrastructure.

your network
Self-hostedA single Go binary with SQLite inside it. One compose file, one volume, and the schema migrates itself at boot.
  • Your bucketBlobs on local disk or any S3-compatible store — Hetzner, MinIO, AWS. You hold the keys.
  • Air-gappedAn offline licence and no outbound calls at all, for teams whose network never talks to the internet.
  • Your identity providerOIDC against Entra, Keycloak or Okta, with group-to-role mapping reapplied at every login.
  • AuditedSign-ins, role changes and break-glass use are all recorded.

no outbound calls

What it costs

Per storage and seat. Nothing else is metered.

No charge per board, per screenshot, per annotation, or per bug your tester finds.

Free

$0

1.5 GB or 100 boards, 5 seats. No card.

Pro

$12

Per month. More storage, more seats, AI credits.

Team

$39

Per month. The shared workspace for a whole squad.

Enterprise

Custom

SSO, RBAC, self-hosting and air-gapped installs.

Ask about a plan

Measured, not estimated

60+small bugs fixed from one user-testing session, in a single prompt
iOS session
~76,000tokens to read a 55-minute, 6,010-event session — about 1% of the raw stream
o200k_base
1session, from the tester's walk to a written Appium E2E suite
same session

Before you ask

The questions we get first.

Do my testers need an account?

No. A board is a link — open it in a browser, draw on the screenshot, type the sentence. Installing anything is only for the people whose agent does the fixing.

Does this replace Jira or Plane?

No, and it is not trying to. The ticket stays in your tracker; vitrinka holds the evidence and links back to it. Teams usually keep both and stop pasting screenshots into comments.

What if we don't use AI agents yet?

It still works as a screenshot library, a session recorder and an annotation canvas. The agent loop is one more listener on the same queue — you can turn it on later, or never.

What does the agent actually read?

A compact digest of the session — around 1% of the raw event stream. A 55-minute, 6,010-event recording comes out at about 76,000 tokens, so a whole test session fits in one prompt.

Where does our data go?

Wherever you put the binary. SQLite for metadata, your own disk or S3-compatible bucket for the files, and an air-gapped mode for networks that never reach the internet.

How long does setup take?

One npm install and one command. vitrinka install prints what is missing, fixes the harmless parts itself, and asks before touching anything in your config.

Start

Three lines, then draw on something.

The whole install is one package with two binaries — the CLI and an MCP server. Re-runnable, reversible, and it asks before it edits a config file.

  1. npm i -g @lovinka/vitrinkaThe CLI and the MCP server, one package.
  2. vitrinka installStatus-first: it shows the ✓/✗ table, then asks only about the config-touchers.
  3. /vitrinka:listenIn your app's repo — the session starts answering the board's work queue.

Health check any time with vitrinka doctor. Remove everything with vitrinka uninstall.