Scott Keck-Warren
Michigan
PHP and Laravel developer with 13 years of experience building and maintaining production apps. US Eastern, English.
Sign up now for $10 in credit on a new Laravel Cloud account.
Confidently own your tech stack
What a user's browser did before the bug, recorded into your own Laravel Cloud account and tied to the Laravel request that failed. Reel captures sanitised DOM events rather than video, masks every input before anything leaves the page, and puts server errors on the replay timeline as markers.
Work in progress. Available to supporters.
DOM events, not pixels, sanitised in the browser and re-checked on ingest
rrweb records the DOM; a second sanitiser masks inputs, strips hydration payloads, URLs and query strings, and blocks canvas, media and frames before upload.
Nothing records until your app says so, Global Privacy Control can refuse outright, and any route can be hidden from Reel entirely.
Same-origin requests carry the session id, the middleware trusts only ids it issued, and every binding is labelled exact, approximate or ambiguous.
A 5xx on a bound request lands on the timeline as a marker with method, path and status, filterable in the list and jumpable in the player.
Replay runs in a locked-down frame with a strict content policy, and every view is audited with who watched what, and when.
Thirty-day expiry, protect a recording, a cooling period before deletion, per-user erasure with an audit that omits the erased id.
Input, select, textarea and editable text are replaced in the browser, and the server re-validates every chunk against an allowlist, rejecting anything carrying a query string, a data URL or an unknown event. Settings can add masking; they can never remove it.
With context export switched on, the session id rides in Laravel Context to whatever Nightwatch transport you already use, including Hone, so an exception arrives with a link to the person who hit it. Neither client is modified.
Reel vs. the incumbents
LogRocket, Fullstory and PostHog are good products, and Reel is not trying to replace them. It does one slice of what they do — show you what a user did before a server error, on infrastructure you own — and deliberately does not do the rest. The question is not which product is better. It is which slice you are actually using.
| Feature | Reel Self-hosted, MIT | LogRocket Hosted | Fullstory Hosted | PostHog Hosted, or self-host |
|---|---|---|---|---|
| Recordings on infrastructure you own the row we rebuilt | Does this well:Your Cloud account | Works, but on their terms:Enterprise only | Not built:Hosted only | Partly, or with a caveat:Unsupported self-host |
| The Laravel request behind a replay the row we rebuilt | Does this well:Bound and labelled | Partly, or with a caveat:Generic integrations | Partly, or with a caveat:Generic integrations | Partly, or with a caveat:Own error tracking |
| Inputs masked before upload | Does this well:Mandatory, server-checked | Partly, or with a caveat:Passwords only | Does this well:All text masked | Does this well:Inputs, can disable |
| Network bodies and console logs we did not build this | Not built:Status and path only | Does this well:Included | Does this well:Included | Does this well:Bodies opt-in |
| Heatmaps, funnels, product analytics we did not build this | Not built:Not built | Does this well:Included | Does this well:Their core strength | Does this well:Included |
| Native mobile SDKs we did not build this | Not built:Mobile web only | Does this well:Included | Works, but on their terms:Add-on | Does this well:Included |
| AI session summaries we did not build this | Not built:Not built | Works, but on their terms:Pro plan | Works, but on their terms:Add-on | Partly, or with a caveat:Beta |
| Where your recordings live | Does this well:Your private bucket | Works, but on their terms:Their cluster | Works, but on their terms:Their cluster | Works, but on their terms:Their cluster |
| Cost of recording more sessions | Does this well:Disk | Works, but on their terms:Per session | Works, but on their terms:Per session, by quote | Works, but on their terms:Per recording |
| Who is on call for the tool itself | Partly, or with a caveat:You are | Does this well:They are | Does this well:They are | Does this well:They are |
Ask what the replay tool is actually for on your team. If these are all true, you are paying per session for a suite to use one row of it.
Then you lose very little by moving. Reel is experimental today, so start with a consented pilot; the recordings stay in your bucket either way.
These are the parts we chose not to build, and we are not going to pretend otherwise.
Small, sharp tools are a deliberate scope, not an unfinished roadmap. Reel will not grow into an analytics platform.
Be honest about it
The repository is public and open source. These are the steps, and you are welcome to spend the afternoon doing them by hand.
Fork the Reel repository into your own GitHub organisation.
Deploy the fork to Laravel Cloud with its own compute, Postgres, queue, private object storage and scheduler, then create the first administrator.
Create an application in Reel, install the client in your app with its one-time enrolment code, add the recorder to your layout, and start recording after consent.
Or become a supporter, and Scalpels deploys it for you. It forks it, provisions exactly what it needs on your Laravel Cloud account, and deploys it. The app and the infrastructure are yours either way — the only question is who spends the afternoon.
Deploy Reel as a supporterThese agencies and freelancers are standing by and ready to help.
Michigan
PHP and Laravel developer with 13 years of experience building and maintaining production apps. US Eastern, English.
USA
We run Scalpels, as well as a suite of other tools for developers and development teams.