SURJEET® — PORTFOLIO 2025NEW DELHI, IN — 28.6139° N
SURJEET
000
COMPILING PORTFOLIO — FULL-STACK / AI / E-COMMERCEPATIENCE IS A VIRTUE. SPEED IS A HABIT.

CASE STUDY — 01 / BATCH TOOL — Jul 2024

Batch watermarks 500+ images a minute, in the browser, without crashing it.

RoleDesign + Development, solo
StackReact · TypeScript · Canvas API
ShippedJul 2024
StatusLive in production ↗
Watermarking Engine

THE PROBLEM

Creators and small stores need hundreds of branded images at once — product shots, thumbnails, social posts. Every tool I tried either charged per export, uploaded private images to somebody’s server, or simply froze the tab when the batch got big. So I built the tool I wanted: a fully client-side watermarking engine that treats the browser like a render farm.

The naive approach — loop over files, draw each to a canvas, export — dies fast. Fifty images in, the tab is a slideshow; two hundred in, it’s dead. The real problems were scheduling, memory, and keeping the UI alive while a heavy render queue runs underneath it.

01.BTHE BUILDFOUR DECISIONS THAT MATTERED
↳

THE APPROACH

I rebuilt the engine around an asynchronous render queue. Images are processed in controlled batches with yields back to the main thread, exports are chunked, and every object URL is revoked the moment it’s consumed. A memory guardrail watches heap pressure and throttles the queue before the browser gives up.

01

Async render queue

Images flow through a batching pipeline with explicit yields to the main thread — the UI stays at full framerate while hundreds of renders run underneath.

02

500+ images per minute

Canvas rendering tuned for throughput: pre-composited watermark layers, minimal state churn, and zero redundant draws per frame.

03

Memory guardrails

Object URLs revoked on consumption, chunked export passes, and queue throttling under heap pressure — large batches no longer crash the tab.

04

Preset system

Position, scale, opacity and tile mode configured once and applied to the whole batch — built for people processing a full store catalog in one sitting.

0+
Images / minute
0
Crashes on large exports
0%
Client-side — no uploads
0
Developer, end to end
GALEVIDENCEFIG. 01 — 02
“The browser is a render farm if you stop treating it like a form.”

— Build note — July 2024

Open live
Source on GitHub
NEXT CASE — 02 / DEVELOPER TOOLSnippet Manager ↗