Repository navigation
New formats, offline app, landing pages and exact stats - #6
Merged
Merged
Conversation
Compression - Target-size presets (WhatsApp, Discord, Email, Forms, 100 KB) with KB/MB units - Before/after comparison slider for images - WebP and AVIF output (AVIF via jSquash in a worker), resize by longest side - HEIC/HEIF input (heic-to), animated GIF compression (gifsicle) - PDF "keep text selectable" mode that only re-compresses embedded images; the rasterizing mode is now "smallest size"; both run in a worker with a main-thread fallback, and pdf.js fonts/cMaps/wasm are served from /pdfjs - Video: MP4/WebM(VP8)/GIF output, resolution, remove audio, per-file trim - Keep-metadata toggle; rows say when location/camera data was removed Usability - Cancel per file, paste files, drop folders, warn before leaving mid-run - Settings remembered between visits, batch summary, per-file level - Share button (Web Share API), dark mode with system/light/dark toggle - Title no longer reloads the page PWA and privacy - Service worker: offline app shell, cached chunks and FFmpeg core, Android share target - Self-hosted Nunito Sans and image-compression worker (no Google Fonts or jsdelivr); "0 bytes uploaded" indicator - COEP credentialless instead of require-corp Growth - Static landing pages per use case with their own title, description, canonical URL and presets; sitemap.xml, robots.txt, og:image, icons - Optional Cloudflare Web Analytics via CF_ANALYTICS_TOKEN at build time Claude-Session: https://claude.ai/code/session_011UUBS4XF57trCnZcGwBu35
- Stats totals now live in a SQLite-backed Durable Object, which handles one request at a time, so concurrent reports no longer overwrite each other. Existing KV totals are imported on first use. - Playwright end-to-end suite against the production build: every file type, AVIF/WebP, custom target, video to GIF with trim, GIF compression, cancel, remembered settings, landing pages, offline and share target. Runs as a separate CI job. - Landing-page presets are no longer saved as the remembered settings until the user changes something. - README: new features, privacy details, test commands, and why deploys must use `wrangler deploy` (Durable Object migration). Claude-Session: https://claude.ai/code/session_011UUBS4XF57trCnZcGwBu35
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
compressly | 0d833bf | Oct 02 2026, 01:10 AM |
Owner
Author
|
Workers Builds: compressly is red on 0d833bf. The first build was cancelled; the re-run (build The code builds: I reproduced Cloudflare's steps on this head with Node 24 ( Without the log, the two likely causes are both Cloudflare build settings, not code:
If the log shows something else, I'll fix it here. Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds new file formats and options, usability features, an installable offline app, SEO landing pages, exact stats, and browser tests in CI.
Compression
heic-to)gifsicle-wasm-browser)/pdfjs/.Usability
Installable app and privacy
src/sw.ts, vite-plugin-pwa): offline app shell, cache-on-first-use for lazily loaded chunks and the FFmpeg core, Android share targetrequire-corptocredentiallessGrowth
/compress-pdf-to-100kb/,/heic-to-jpg/), each with its own title, description, canonical URL, static content and presetsitemap.xml,robots.txt,og:image, PWA icons (scripts/generate-images.mjs)CF_ANALYTICS_TOKENis set at build timeEngineering
worker/stats-counter.ts), so concurrent reports can't overwrite each other. Existing KV totals are imported on first use.tests/e2e) against the production build, as a separate CI jobNot included
@ffmpeg/core-mt(0.12.10 and 0.12.6) crashes with "null function or function signature mismatch" in Chromium on a simple encode, so the single-threaded core stays.libvpx-vp9hangs in the WebAssembly build, so WebM output uses VP8.Testing
npm run lint,npm test(15 unit tests),npm run build: passnpm run test:e2e(10 Playwright tests, Chromium): pass. Covers every file type, PDF page count and size, AVIF/WebP plus the compare modal, a 100 KB custom target, video to GIF with trim, GIF compression, cancel, remembered settings and theme, landing-page metadata and preset, offline reload, and the share target.wrangler dev: KV totals carried over to the Durable Object; 50 concurrent reports summed exactly (150 / 5500); invalid input returns 400. Awrangler deploy --dry-runalso succeeds.🤖 Generated with Claude Code
https://claude.ai/code/session_011UUBS4XF57trCnZcGwBu35
Generated by Claude Code