One platform · web and mobile

Everything your product is trying to tell you.

loupfeed is a single platform for the signals that come out of a live product — what users say, what they did, what broke, and how it all demos. Every one of them anchored to the element it happened on and the line of code behind it, on the web and inside your mobile app.

React, Vue, Svelte, React Native and Expo · npm i @loupfeed/react · source-available, self-hostable.

The products

Four products. One SDK behind them.

Install loupfeed once and turn on what you need. They share the same capture layer, the same backend, the same dashboard — so a crash, a replay and a piece of feedback all point at the same place in your code.

Web and mobile

Your mobile app is not an afterthought here.

Most tools in this space stop at the browser, then hand you a mobile SDK that can do a fraction of the job. loupfeed treats React Native and Expo as a first-class surface: the same four products, the same dashboard, the same resolution back to source — built for a world with no DOM.

A real native inspector

Long-press anywhere in the running app and loupfeed hit-tests the actual native view under the finger, then pins feedback to it.

Replay without a screen recorder

Two engines: real screenshots at a few frames a second, or a pure-JS wireframe with no native dependency at all.

Still resolves to your source

The Metro tagger threads an identity through your components, so a pin on a mobile screen lands on a line in your repo.

AI-native

Built for your AI. Not for ours.

loupfeed does not bundle a chatbot, and it does not quietly forward your users' data to a model somebody else picked. Everything all four products capture is exposed as MCP tools, so the agent you already trust reads it, fixes it, and closes the loop — with your keys, on your infrastructure.

Your model, your keys

Bring Claude, or whatever you run in-house. No vendor model sits in the path, and there is nothing to opt out of.

Written to be read by an agent

A replay arrives as an action timeline — scrolled, clicked, typed — instead of a video your agent cannot watch.

It closes the loop, not just opens it

The same tools reply to the reporter and set the status, so “fixed” reaches the person who reported it.

Claude Code Claude Desktop Cursor Any MCP client
# claude, with @loupfeed/mcp connected list_feedback → 12 open · newest: “broken on Safari” get_feedback → src/pages/Checkout.tsx:54 + context get_replay → clicked “Export” 3×, no request fired get_crash → TypeError · 14 hits · Safari 17 only …agent edits Checkout.tsx… reply_to_thread “fixed — ships today” set_feedback_status → resolved
The platform

One capture layer, and it is yours.

Under all four products sits the same engine: a framework-agnostic core, thin adapters for the framework you use, and a build step that maps what your users touch back to where it lives in your repo.

One SDK, every framework

React, Vue, Svelte on the web. React Native and Expo on mobile. Bundler plugins for Vite, Webpack, Rollup, esbuild, Babel and Metro.

Private by construction

Replays are masked by default and your source paths never reach the client bundle — that one is enforced in CI, not promised in a policy.

Runs where you want

On your laptop, in one Docker container on a small VPS, or as CDK stacks in your own AWS account. Same API, same dashboard.

Deploy it three ways.

Local

STORE=memory

One command while you develop. Nothing to sign up for.

One container

SQLite + volume

A small VPS or an EC2 box. API and dashboard together, durable on a volume.

Your AWS

DynamoDB + S3 · CDK

Three stacks into your own account, configured entirely by environment.

# 1 · run the backend (API + dashboard, one container) docker compose up -d # 2 · instrument your app — web or mobile npm i @loupfeed/react # or @loupfeed/react-native init({ dsn, release, replaysSampleRate: 1 }) # 3 · hand the loop to your agent claude mcp add loupfeed -- npx -y @loupfeed/mcp

A deployment is a single named instance bound to one product, so there is no project setup to do in the UI. Set the name at deploy time, open the dashboard, copy the DSN into your app.

Start with one product. Turn on the rest when you need them.

Free to self-host, forever, and source-available so you can read every line before you trust it with your users. If you would rather not run it yourself, I will run it for you.