Case study · SaaS platforms
Open-source screen recorder and async video platform with bring-your-own storage
A Chrome extension records screen, tab or webcam and uploads to an API that uses storage the owner chooses; a web app handles library and sharing.
At a glance
- Who it's for
- Individuals and teams who want an open-source alternative to hosted screen-recording tools, with the option to keep recordings in their own storage.
- Core stack
- Chrome Manifest V3, Next.js, FastAPI, PostgreSQL
- What sets it apart
- A screen recorder and async video platform where the owner can bring their own storage, where listing and managing recordings need sign-in, viewing needs a short-lived signed playback session, and share links follow each recording's settings.
What it looks like in use
The small panel in the browser toolbar before and after a recording, and the web library where recordings are kept.
Record current tab
Record entire screen
Coming soon
Record webcam only
From one click to a recording link
Sam picks what to record
He clicks the extension in his browser and chooses this tab, the whole screen or just the webcam.
He talks while it records
The microphone is on, and a small camera bubble can sit on screen while he shows his work. Drawing tools are available on the page.
Stopping uploads it to his account
The video is sent to his account and stored in his own bucket if he has connected one, otherwise in managed storage.
A link to the recording is ready
When the upload finishes, he gets a share link and can open the recording in the web app, where he can trim it or set who may watch.
Every recording lives in one library
All his videos sit in one library in the web app, which he can share with teammates.
The challenge
Hosted screen-recording tools put every video on someone else's infrastructure. Teams that record walkthroughs, demos and bug reports often want to choose where the files live, including a bucket in a specific region for data-residency reasons.
Browser extensions also face real platform limits. The browser's extension rules do not let a background script keep a recorder alive, capture APIs differ between screen and tab, and region capture has no native API.
The solution
A Chrome extension handles capture and recording and uploads as the signed-in user. The backend stores video through a pluggable storage provider (local disk by default for development, or common cloud storage and video services, including Google Drive; managed or bring-your-own) and keeps metadata in PostgreSQL.
A Next.js web app provides the library, player, editor and sharing. Access is controlled: listing and managing recordings requires a signed-in account, streaming requires a short-lived signed playback session, and recording share links follow each recording's share settings, either anyone with the link or restricted to signed-in people it is shared with. The project is explicit about trade-offs: region recording is documented as deferred with a researched approach.
For your technical teamhow it works under the hood
Recording lifecycle in the extension
Key features
What the system does, as built in the codebase.
- 01
Screen, tab and webcam recording
Capture with microphone audio and mute control.
- 02
Webcam overlay
A floating camera bubble is shown during recording.
- 03
On-page annotation
A content script with a canvas library for drawing.
- 04
Authenticated API
Upload, list and manage recordings require a signed-in account; streaming uses short-lived signed playback sessions and video tokens.
- 05
Web library and player
A web app to browse, play and organise recordings.
- 06
Web editor
Trim, crop and blur a recording in the browser.
- 07
Bring your own storage
Keep recordings in your own bucket in the region you choose, or use managed storage.
- 08
Share controls
Per-recording settings decide whether anyone with the link can watch or only signed-in people it is shared with.
- 09
Transcription, comments and reactions
Transcripts on plans that include AI features, via an external speech-to-text service, plus comments and reactions from viewers.
- 10
Developer Mode
Built into the extension code and backend: console and network capture attached to tab recordings. Not yet exposed in the extension UI.
- 11
Teams and tiers
Multi-user accounts, teams and plan tiers with usage limits.
- 12
Permission onboarding
A page that guides the user through the required capture permissions.
- 13
Environment-aware build
Injects the backend URL, web app URL and version, and can output a store-ready zip.
- 14
Documented roadmap
A feasibility write-up for region recording.
How it fits together
From a browser capture to a shareable, streamable library on storage the owner chooses.
- Chrome extensionpopup, content, background
- Offscreen recorderMediaRecorder session
- FastAPI backendauth, upload, playback, sharing
- Storage providerlocal, S3-compatible and others
- PostgreSQLrecording metadata
- Next.js web applibrary, player, editing, sharing
- The offscreen recorder hands a blob to the uploader, which posts it to the API with the user's bearer token.
- The web app lists recordings as a signed-in user and plays them through short-lived signed playback sessions.
Implementation notes
Engineering decisions worth knowing about.
Offscreen recording
An offscreen document holds the recorder for the whole session because MV3 service workers are short-lived.
Typed messaging
A message-typed protocol connects the popup, background, offscreen and content scripts.
Pluggable storage
A storage factory picks a provider per account: local disk, S3-compatible storage, Google Drive, Firebase, Cloudinary, Mux or Bunny. Metadata lives in PostgreSQL with Alembic migrations.
Access control
Listing and managing recordings needs a signed-in account (JWT). Streaming needs a short-lived signed playback session and signed video tokens. Recording share links follow each recording's share settings: anyone with the link, or restricted to signed-in people it is shared with.
Teams and tiers
Roles, teams and tier limits (recording length, video count, managed storage) are defined in the backend configuration, with Stripe for billing.
Tests
The backend has a tests folder covering areas such as playback sessions, storage, tiers and the video editor, and the web app has a Vitest setup. Tests exist; they have not been run for this write-up.
Store readiness
Privacy and store listing documents are prepared for extension submission.
Technology stack
Taken from the project's dependency and config files.
- Client
- Chrome Extension Manifest V3
- Vanilla JavaScript
- Fabric.js
- Web app
- Next.js 16
- React 19
- TypeScript
- Tailwind 4
- Editing and playback
- TipTap
- Excalidraw
- hls.js
- Backend
- Python
- FastAPI
- SQLAlchemy 2
- Alembic
- Data and services
- PostgreSQL
- Stripe
- JWT
- boto3 / S3-compatible storage
For your technical teamtechnology layers
Technology layers, client to tooling
Business value
What the system enables. No numbers are claimed.
- Lets the owner keep recordings in their own bucket, in a region they choose, or use managed storage.
- Brings recording, basic editing and sharing into one flow from capture to share link.
- Supports teams and plan tiers with usage limits, on an MIT-licensed open-core codebase.
Need a system like this built?
Tell us what it needs to do and we will scope it with you on a call.