Direct-to-storage portal media uploads

Testimonial photos, videos and plan files upload straight to storage via a signed URL, so files up to 50 MB work instead of failing at 4.5.

What it is

A two-step uploader: the server mints a one-time signed upload URL, then the browser PUTs the bytes directly to storage. The bucket is public so the unauthenticated customer estimate portal can display the files with no proxy. Size is checked client-side with a message suggesting a video link for anything larger.

Also called: upload a testimonial video · attach big plan PDFs · upload failed 413

See it, piece by piece
01

A walkthrough video shot on a phone goes through

Uploads used to run through a path capped around four and a half megabytes, so any real jobsite video failed with an error that named no cause — builders saw it not work and stopped trying. Files now go straight to storage, up to fifty megabytes, so a full plan set or a customer's video testimonial uploads like anything else.

02

A file that is too big says how big it is and what to do instead

Anything over the limit is refused before the upload starts with its own size, the limit, and the suggestion to paste a video link instead. An upload that fails silently costs a builder the testimonial; one that explains itself costs thirty seconds.

03

The same path carries the proof and the plans a buyer reads before signing

Testimonial photos and videos, and the plan and blueprint files attached to a quote, all move the same way and are served straight to the customer's page with nothing standing in front of them. These are the two attachments that do the persuading, and they were the two that were hardest to get onto the page.

04

Uploads land in your account's own space, started only by your staff

Each file is stored under a path scoped to your account, so nothing another builder uploaded can be guessed or listed by name. Starting an upload requires a signed-in admin, sales or project-manager user — a public page can display these files, but it can never add one.

How it works
  1. 1POST /api/portal-media/sign-upload returns an upload URL and the eventual public URL
  2. 2The browser PUTs the file directly, so it never transits a serverless function
  3. 3The 50 MB limit is enforced at the bucket and in the client
  4. 4The returned public URL is stored on the testimonial or the estimate's plans
Why we built it

Uploads were routed through a path capped at roughly 4.5 MB per request, so any real jobsite video failed with a cryptic error that named no cause — the builder simply saw it not work and stopped trying. Files go straight to storage instead. A walkthrough video shot on a phone uploads like anything else.

The problem
  • Serverless body limits blocking real media files
  • Opaque upload failures with no actionable message
Sound familiar?
What you get
Real video and full plan sets upload successfully
Oversized files get a clear message and an alternative

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →