Stampi

Brand photos and videos in the browser. Batch logo placement, resize, and export for Rightmove, Instagram, and the rest.

3 min read#React#TypeScript#Vite#Tailwind CSS#FastAPI#FFmpeg

Overview

Stampi is a browser tool for batch-branding property photos and videos. Upload a folder, drop your logo, pick export formats, and download a ZIP. The app is the homepage: land on stampi.cc and start using it.

Problem

I kept watching estate agents and photographers do the same evening ritual. Shoot a listing, then spend an hour in Photoshop resizing for Rightmove, squaring crops for Instagram, and converting iPhone HEIC files to JPEG before the portal upload window closes. Same logo placement on forty files. Same aspect ratio mistakes. Same deadline pressure.

I wanted something closer to remove.bg than a SaaS dashboard. Open the page, brand the batch, download, done.

Solution

Images process entirely in the browser with the Canvas API. HEIC converts client-side with heic2any. You adjust logo position, opacity, size, and margin once, preview with a before/after slider, then export multiple profiles from the same upload: Rightmove and Zoopla at 1600px, Instagram square, Facebook link preview, web-optimised JPEG, and more.

Videos go to a FastAPI backend on Render because FFmpeg in the browser is not something I wanted to ship. The API watermarks, returns a ZIP, and deletes everything. No permanent storage.

I also built a Python script that generates dozens of SEO landing pages from a content matrix. Estate agent photo branding, HEIC conversion, portal size guides. The copy lives in scripts/page_content/ and rebuilds into content/pages/ when I run the generator. Same idea as treating demos like unit tests: if I have to do it twice, automate it.

Architecture

Browser (React + Vite)

      ├── Images → Canvas API → JSZip
      ├── HEIC → heic2any → JPEG
      └── Videos → FastAPI + FFmpeg (Render)


Export profiles → ZIP download → delete temp files

Lessons learned

  • The MVP had no accounts, no history, no saved presets. That was the right call for launch. Video processing and premium export packs needed a backend, so optional sign-in and credits came later. Five free exports a month still work without logging in.
  • Rightmove at 1600px longest edge, sRGB, JPEG was the profile that mattered first. Everything else was gravy once agents trusted the portal output.
  • Client-side image processing is fast enough for fifty photos. Video is where you need a server, and cold starts on Render are a real UX cost I have not fully solved.
  • Generating SEO pages from templates scales faster than hand-writing them. The hard part is making each page sound specific enough that Google does not treat them as duplicate fluff.

Related