Case study

Building GlassCompress

A privacy-first image tool in the Glass family — compress, crop, batch ZIP, and convert to PDF without uploading a single file.

100% private In-browser Glass toolkit
Problem

People need passport crops, social sizes, and lighter JPEGs/WebPs without trusting an upload-based compressor with photos and EXIF.

Constraints

No server upload, smooth quality slider, useful presets, batch ZIP and PDF — and a product URL that matches GlassPad.

Role

Solo product and engineering: canvas pipeline, crop UI, Worker hostname routing, and Glass branding.

Implementation

  • Vanilla JS + Canvas decode/transform/encode; Web Worker encode when OffscreenCanvas is available
  • HEIC/HEIF decode for phone photos; flip/mirror alongside interactive crop
  • Interactive crop frame (drag + resize); aspect lock for passport and social presets
  • Batch ZIP via JSZip; multi-page PDF via pdf-lib — both CDN libs, all client-side
  • GlassPad handoff, Help modal, and installable PWA
  • Product host glasscompress.madushka.com on the same Cloudflare Worker as madushka.com; /tools/compress/ 301s to the subdomain

Privacy / data flow

Images stay in memory in the browser. Re-encoding strips EXIF/GPS by default. Nothing is uploaded to madushka.com or a third-party compress API. Batch cap: 20 images per session.

Outcome & lessons

GlassCompress extends the Glass toolkit beside GlassPad: same privacy story, product subdomain, and liquid-glass UI. The lesson: live size feedback and an always-visible Download control matter as much as the encode pipeline.