I ship a lot of Bubble apps, and images are usually the sneaky reason pages feel heavy. Over time I settled on a simple 2-step routine that keeps things sharp and fast: compress/resize on squoosh.oneimage.co, then frame the composition on crop.oneimage.co. Sharing my notes so you can copy the workflow, tweak the numbers, and move on with your life. ![]()
Why bother before upload?
-
Faster first paint on list views and hero sections.
-
No surprise stretching (Bubble won’t have to coerce dimensions).
-
Lower storage & bandwidth (mobile users will thank you).
-
Privacy-friendly: both tools run in your browser (WASM). Nothing leaves your machine.
When to use what (quick cheat sheet)
| Content | Format | Quality | Notes |
|---|---|---|---|
| Photos | WebP or AVIF | WebP Q 70–80; AVIF CQ 45–55 |
AVIF is smaller, WebP is faster/safer |
| Logos / Transparent | WebP Lossless or PNG | Lossless | If possible, go SVG and skip raster |
| Illustrations/Gradients | WebP | Q 70–80 |
If banding appears, nudge quality up |
| Thumbnails (lists) | WebP | Q 70–75 |
Resize to the card’s max display width first |
Rule of thumb: resize first, then tune quality. If you need transparency, prefer WebP lossless over PNG unless PNG is required.
The tiny-image routine (copy/paste steps)
1) Compress + resize on Squoosh
-
Drop your image on squoosh.oneimage.co.
-
Resize → set
Width = max display width × DPR.- Example: card shows at 360px on desktop → export 720px to cover 2× screens.
-
Pick format
-
Photos: WebP (or AVIF if you’re chasing min size).
-
Transparent: WebP Lossless (or PNG).
-
-
Quality
- WebP
70–80is my default; AVIF45–55.
- WebP
-
Strip EXIF/metadata (one toggle = free bytes).
-
Download → name like
card-720w.webp.
2) Crop for composition on Crop
-
Open crop.oneimage.co and load your Squoosh output.
-
Pick a preset ratio/size:
-
Avatar
1:1→512×512 -
Card
4:3→ pick your target (e.g.,1200×900) -
Hero
16:9→1920×1080 -
Social/OG →
1200Ă—630
-
-
Set the focus (keep faces/subjects safe inside).
-
Export →
avatar-512.webp,hero-1920x1080.avif, etc.
Order matters?
Big source photo: resize first (faster everything), then crop.
Precision headshot: crop for framing, then export a resized version for each breakpoint.
Bubble setup that pairs well with this
-
Give images explicit sizes. Don’t rely on “auto”; define the container width so your export sizes are meaningful.
-
Multiple sources by breakpoint.
- Desktop hero: 1920w; Tablet: 1280w; Mobile: 960w (swap via conditionals).
-
Use 2Ă— assets where it counts. If a card is 360px wide, serve 720w for crispness, but keep quality modest.
-
Lazy load long lists and use aspect-ratio placeholders to avoid layout shift.
-
Alt text matters for accessibility and SEO—use real words, not “image-1”.
Real-world quick recipes
-
List card cover
-
Squoosh: resize to 720w, WebP
Q 72, strip EXIF. -
Crop:
4:3if your card frames that way. -
Result: ~80–140 KB typical (from multi-MB sources).
-
-
Avatar
-
Crop:
1:1at 512Ă—512. -
Squoosh: WebP
Q 80or WebP lossless if it’s flat graphics. -
Result: 20–60 KB.
-
-
Hero photo
-
Squoosh: 1920Ă—1080, AVIF
CQ ~50(fallback WebP if needed). -
Also export 1280Ă—720 for smaller screens.
-
Result: 180–350 KB for desktop hero is very doable.
-
-
Logo with transparency
- Prefer SVG. If bitmap: WebP lossless or PNG, trimmed to tight bounds.
Sanity checks before you ship
-
Zoom to 100% and scan: faces, edges, gradients. If you notice halos/banding, bump quality up a notch.
-
Compare side-by-side with the original for 10 seconds. If you don’t flinch, you’re good.
-
Name files predictably:
<use>-<width>w[×height]-<format>.<ext>→hero-1920w.avif,thumb-720w.webp.
One example, numbers and all
Started with a 3.2 MB DSLR photo.
-
Resize to 1920×1080 → ~900 KB.
-
Switch to AVIF CQ 50 → ~280 KB (looks great).
-
Add a 1280×720 version → ~150 KB.
-
In Bubble: show 1920w on wide screens, 1280w under 1280px width. Done.

Links
-
Compress & resize (local, private): https://squoosh.oneimage.co
-
Crop with focus & presets: https://crop.oneimage.co
That’s it—that’s the whole playbook. If you’ve got better dials for certain image types, drop them; this is meant to be a living, copy-able recipe for the rest of us.