One tunnel
vitrinka.

One tunnel for your whole dev team.

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

Everything the team made, behind one pane of glass.

A vitrína is a glass cabinet where every compartment holds something worth keeping. This one holds your work, and the one way in — open any pane.

Boards
Annotate on the thing itself
Sessions
DOM replay, network, console
Journeys
Screens wired into flows
Diagrams
Drawn from your real config
Documents
Reports and pages that stay live
Connect
Claude Code, Codex, any MCP
PM
The memory behind the work

Watch it work

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.

Play video

Three roles, one tunnel.

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

QA and testers
Circle what is wrong on the screen and say one sentence. The recording, the network log and the console go with it.
Developers
Your day is the record. Picking a task up and handing it back writes its timeline; the commit trailer, the runs, the pull requests and — once you opt in — the time you and your agents spend attach themselves. When something breaks, the frozen frame, the DOM replay and the failing request are waiting before you open the editor.
Product managers
Every task keeps its history, its evidence and its decisions, and Eve distils them into the morning brief. Keep Jira if you want it; the project mirrors, and nothing depends on it.

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.

Pick what looks wrong
Drag a box around whatever looks off to you.
Describe it
One sentence is enough — no repro steps.
Send
It becomes a work item with the whole context attached.

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

Short clips, one per surface. Swipe through them.

Screenshots and journeys
Wires between screens · Branches · Passes
Recorded sessions
DOM replay · Network and console · A compact digest
Diagrams and documents
Drawn from your config · Laid out for you · Still true next month
Connect your agent
One command · Any MCP client · Or just curl

Beside your tracker when you want it. On its own when you don't.

Tasks, sprints, intake and the evidence around them live here natively. A project that lives in Jira turns on the mirror and keeps working in both.

Your tracker
A per-project mirror: pick Jira, pick which side is the truth, and the other side stays a faithful copy — one ticket, no double entry. Plane connects today for issue comments, and the mirror interface is built to take it next.
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, Cursor, or any MCP client that connects to a remote server. The board becomes a tool the agent can read and write.
Your CI
Wrap your test command in vitrinka qa run -- and the results it leaves behind — JUnit, Playwright, allure, wdio — land on the feature's QA record, with screenshots and a bug draft per failing case. Your tests do not change. Anything else is one tar | curl.
Everyone else
A browser link. Designers, PMs and clients install nothing and see the same canvas.

One binary, your storage, your network.

Nothing about this needs to leave your infrastructure.

Self-hosted
A single Go binary with SQLite inside it. One compose file, one volume, and the schema migrates itself at boot.
Your bucket
Blobs on local disk or any S3-compatible store — Hetzner, MinIO, AWS. You hold the keys.
Air-gapped
An offline licence and no outbound calls at all, for teams whose network never talks to the internet.
Your identity provider
OIDC against Entra, Keycloak or Okta — including one only your own network can reach, behind your own certificate authority, once the operator allows it — with group-to-role mapping reapplied at every login.
Audited
Sign-ins, role changes and break-glass use are all recorded.

148
findings from 37 recorded user-testing sessions, every one answered across three PRs
3.9 h
of active tester time inside 56 hours of recording — the sessions did the reporting
$872
in API tokens for the whole campaign — 327 files changed, +16,787 lines

One membership for your organization.

Start free during beta. Paid memberships and managed AI credits are not available yet; the monthly prices below are planned and exclude VAT. You can bring your own AI connection.

Free
1.5 GiB or 100 boards per workspace, 5 seats. No card.
Starter
Per organization / month. Prepaid AI credits, your own AI, or none.
Pro
Per organization / month. More shared storage and seats.
Team
Per organization / month. Room for several products.
Enterprise
SSO, self-hosting and air-gapped installs.

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.
How does a session get recorded?
Four ways, same board. The browser extension records manual testing in any web app — screenshots, clicks, requests, console, a DOM stream. The React recorder mounts inside your own web app, so testers on phones record too. The Expo recorder does the same inside a React Native app. A tester can sign any of them in by approving a device link, and the key it receives can only send recordings, into the sessions it started itself. And the report widget lets your own customers send one from inside your product.
Does this replace Jira or Plane?
Only where you want it to. Vitrinka is a full tracker on its own — tasks, sprints, intake, rules. A project that lives in Jira turns on the mirror, picks which side is the truth, and keeps working in both; nothing migrates. Confluence has no connector: pages here match it feature for feature, so a team keeps either.
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.

Three lines, then draw on something.

The whole install is one package with one binary, the CLI. There is no local MCP server: your deployment serves MCP over HTTP at /mcp, and setup registers it with each agent. You can re-run it, you can undo it, and it asks before it edits a config file.

npm i -g @vitrinka/cli
The CLI, one package — macOS, Linux and Windows.
vitrinka setup
Status-first: it shows the ✓/✗ table, then asks only about the config-touchers. It registers the plugin from the vitrinka-kit marketplace.
/vitrinka:listen
In your app's repo — the session starts answering the board's work queue.