loupfeed › Session replay
loupfeed keeps a rolling buffer of the recent past in memory and throws it away continuously. Only when someone reports a problem — or something crashes — is that window frozen and uploaded. Sessions of people who never had a problem are never stored at all.
Masked by default · replaysSampleRate to sample · retention is an S3 lifecycle rule, not app code.
Events stream into a fixed-size ring in memory. The oldest frames fall off the back continuously, and nothing leaves the device on its own. That is the privacy win and the cost win at the same time — passive replay tools store everyone's session and hope you find the one that matters.
replayBufferSeconds bounds the window — 30s by defaultreplaysSampleRate decides whether a given report carries a replay at allThe default posture is the opposite of most replay tools: mask everything, then widen deliberately. You reveal the product title you actually want to read, instead of hunting for the fields you forgot to hide.
Images and video marked data-private, and anything tagged data-fb-block, are recorded as empty placeholder boxes — the layout survives, the content does not. beforeSend is still the final scrub on the event envelope itself.
rrweb is a DOM recorder and cannot run on React Native. Rather than pretend otherwise, loupfeed ships two mobile engines and lets you pick the trade-off — real pixels, or zero native dependencies.
Samples real screenshots at roughly 3 fps over a rolling ~12 second window, so the reviewer sees icons, images, backgrounds and actual input contents — video-like playback.
react-native-view-shot native modulePure-JS snapshots of the view hierarchy — boxes plus optionally-masked text. Structure only, no pixels, and private by construction.
configureWireframeRecorder to revealHanding a coding agent a video file is useless. The get_replay MCP tool distills a recording into an action timeline — page text, moves, clicks, inputs, scrolls — so the agent reasons over what the user did instead of over pixels it cannot see. For mobile wireframes it returns per-frame summaries, and svg_frame renders any single frame as SVG.
A configurable TTL, enforced as an object-storage lifecycle rule rather than by application code that could forget.
The feedback or crash record is small and outlives its replay, so your history stays intact after the video is gone.
S3 in your own account, a volume on your own box, or nothing but SQLite on a laptop while you develop.
Masked by default means there is nothing to negotiate. Run it on your own infrastructure and the recordings never leave your account.