People need passport crops, social sizes, and lighter JPEGs/WebPs without trusting an upload-based compressor with photos and EXIF.
No server upload, smooth quality slider, useful presets, batch ZIP and PDF — and a product URL that matches GlassPad.
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.comon 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.