Scrvio architecture
A website that records the screen in the browser. A signed-in user's video goes straight from the browser to an S3 bucket; the server only signs the upload and keeps the records. A Team can point this at its own bucket, so it pays AWS for storage and transfer itself.
last verified 2026-10-30
Known cost a month
Not read
No bill is in the repo. The wiki gives Vercel a list range of $0 to $20; the API host, Postgres, S3, CloudFront and SES are not priced anywhere.
What makes cost grow
Minutes recorded
Every signed-in upload lands in our S3 bucket on every plan, free included. Storage and viewer transfer grow with it.
How it fits together
Pick something a user does to see its path and what it costs.
Not read
storage per GB, plus viewer transfer later; no rate in the repo
- The browser records. Free is capped at 5 minutes.
- The browser asks the API to register the recording.
- The API returns a signed upload link, good for 15 minutes.
- The browser sends the video straight to S3. It does not pass through the API.
- The browser asks the API to complete. The API checks the plan, then asks S3 whether the file exists.
- If any step fails, the user sees a toast and the video downloads to their machine.
Cost
Every number says where it came from.
| Service | Pays for | Today | Grows with | Basis |
|---|---|---|---|---|
| Website and recorder | Next.js on Vercel. Records with the browser, and works signed out | $0–20 a month, a list price and not a bill | Not stated | Statedwiki/concepts/architecture.md (before this page); ops/release.yml names Vercel |
| Postgres 16 | Users, workspaces, recording records, links, plan, storage settings | Not read | Rows | Not known |
| Scrvio S3 bucket | Holds video for Free, Pro and Team on Scrvio Cloud. Played back through CloudFront | Not read | Stored GB and viewer transfer. Plans include 500 MB, 25 GB, 100 GB | Not known |
| Team's own S3 | Paid by the team to AWS. $2 a month BYOB fee is copy only, nothing charges it | The team's recorded minutes | Statedwiki/entities/plans.md PLAN.TEAM.BYOB; wiki/entities/storage-providers.md | |
| Polar | Pro $14 a month; Team $29 a seat a month. Webhook is the only writer of the plan | Not read | Subscription revenue | Not known |
| AWS SES | Not read | Emails sent | Not known | |
| Google sign-in and PostHog | OAuth login; product events | Not read | Not stated | Not known |
What breaks when something fails
| If this fails | The user sees | Their data | Basis |
|---|---|---|---|
| Website and recorder | Nobody can record or open a link. The API keeps running. | Nothing is held on Vercel. | AssumedReasoned from apps/website/vercel.json; not tested |
| API | Sign-in, library, uploads and links stop. A signed-out recording still downloads, because it never touches the server. | Recordings already in S3 are safe. A video already uploaded but not completed has no record. | In codeapps/website/src/app/app/page.tsx; apps/server/src/api/03-recording/recording-upload.service.ts |
| Postgres 16 | The API cannot answer. The health check fails. | Not written down. Backups are not named anywhere in the repo. | Not known |
| Scrvio S3 bucket | The upload fails. The user sees a toast and the file downloads to their machine instead. | The video is kept on their machine only. | In codeapps/website/src/app/app/page.tsx onError; s3.provider.ts |
| Team's own S3 | That team's uploads fail and fall back to a local download. Other workspaces are not touched. | Stays in the team's account. | In codeprivate-cloud.provider.ts verifyUploadComplete; app/page.tsx |
| Polar | Checkout fails. Current plans keep working. | If a webhook fails the server answers 500 and Polar retries. | In codeapps/server/src/lib/polar/webhook.controller.ts |
| AWS SES | The email never arrives and nothing tells the user. The server still reports success. | None held. | In codeapps/server/src/lib/email/email.service.ts send() catches and logs |
| Google sign-in and PostHog | Not written down. | Not written down. | Not known |
Where the data goes
| Recording video | Scrvio's S3 bucket, or a Team's own bucket; signed-out recordings stay on the user's machine |
| Account, workspace, recording records, link settings | Postgres |
| Payments and invoices | Polar; plan and invoice records in Postgres |
| Usage events | PostHog |
What we do not know yet
- Hosting is being migrated (owner, 2026-10-30): off Vercel, onto one small server running the API and website in containers (wiki/decisions/hosting.md). Which server is not named there. Costs here are before the move.
- The real monthly bill: no host, database, S3, CloudFront, SES or Polar cost is recorded. Only Vercel has a list range.
- Where the API and Postgres run, and whether production exists at all. ops/release.yml says the API host is not named and nothing but the web page was checked.
- What happens when the BYOB $2 a month fee is due: nothing charges it.