Skip to content

chore(zapstore): publish the store images as JPEG - #902

Merged
grunch merged 1 commit into
mainfrom
chore/zapstore-jpeg-images
Oct 27, 2026
Merged

grunch merged 1 commit into
mainfrom
chore/zapstore-jpeg-images

Conversation

@grunch

@grunch grunch commented Oct 26, 2026 •

Copy link
Copy Markdown
Member

Linked issue

None: maintainer pull request. The Zapstore listing's images were heavier than they need to be.

Type

chore

What changes and why

The nine Zapstore images added in #860 were PNG, 7.8 MB in all, and every visitor to the listing downloads them. This re-encodes them as JPEG: quality 85, no chroma subsampling (4:4:4), progressive. That brings them to 2.3 MB (−70 %) with the same 1242 × 2688 dimensions. The PNGs were opaque RGB with no colour profile, so the conversion drops no transparency and no colour management. 4:4:4 keeps the coloured text (the yellow invoice countdown, the green chips) free of chroma fringes. 4:2:0 would have saved another 0.4 MB, but showed a slight halo on that text.

Image PNG JPEG
01_hero 891 KB 212 KB
02_hero 796 KB 249 KB
03_hero 1182 KB 375 KB
04_book 730 KB 202 KB
05_create 724 KB 204 KB
06_escrow 1016 KB 344 KB
07_chat 749 KB 229 KB
08_trades 741 KB 206 KB
09_nodes 765 KB 216 KB

Affected flow

No app flow. Only the Zapstore listing (zapstore.yaml, docs/zapstore/*.jpg) and the README, which shows the same images.

Blast radius

  • App bundle: none. The images stay in docs/zapstore/, outside assets/. Nothing in lib/ or rust/ changes.
  • Other references to the PNGs: only zapstore.yaml and README.md named them. Both now point to the .jpg files. A grep for zapstore/*.png outside .git and build output finds nothing.
  • Other readers of zapstore.yaml: test/licensing/license_consistency_test.dart reads only the license: line, which is unchanged.
  • Panorama: the first three images keep their order and dimensions, so the seams still line up.

Platforms tested

None: no app code changes. Checked on Linux with Python 3 (PyYAML, Pillow) and Flutter as pinned.

Manual testing

Setup

Linux, branch chore/zapstore-jpeg-images, Python 3 with PyYAML and Pillow, Flutter as pinned in pubspec.yaml.

Steps

  1. Maintainer runs python3 -c "import yaml,os;from PIL import Image;d=yaml.safe_load(open('zapstore.yaml'))['images'];print(len(d),all(os.path.exists(p) for p in d),{(Image.open(p).format,Image.open(p).size) for p in d},sum(map(os.path.getsize,d)))".
    Expected: 9 True {('JPEG', (1242, 2688))} 2295073. Every listed image exists and is a 1242 × 2688 JPEG, about 2.3 MB in all.
  2. Maintainer opens 01_hero.jpg, 02_hero.jpg and 03_hero.jpg side by side.
    Expected: the three phones continue across the seams as one panorama, and the gradient shows no banding.
  3. Maintainer views the README on this branch on GitHub.
    Expected: the hero strip and the six screenshots render.
  4. Regression: maintainer runs flutter test test/licensing/license_consistency_test.dart.
    Expected: All tests passed!, same as on main.

Not covered

How Zapstore renders the listing. That only shows once the next release is published.

Screenshots

No visible change in the app. The images are the change: GitHub previews them in the Files tab, and they match the PNGs on main at normal viewing size.

Automated tests

None added: listing metadata and images only. flutter test test/licensing/license_consistency_test.dart: 00:00 +10: All tests passed!

Checklist

  • cd rust && cargo fmt --check && cargo clippy -- -D warnings && cargo test pass locally (not run: no Rust change)
  • dart format --set-exit-if-changed ., flutter analyze and flutter test pass locally (only the license test was run: no Dart change)
  • Changed rust/src/api/ or an .arb: regenerated code committed in the same commit (not applicable)
  • New or changed user-facing text: every locale updated, no hardcoded strings (not applicable)
  • Changed an automation identifier: coordinated in the linked issue (not applicable)
  • Protocol or transport change: impact on the daemon and other clients stated (not applicable)
  • Behaviour or contract change: matching spec under specs/ or .specify/ updated (not applicable)
  • Commits are signed
  • I ran the Manual testing steps myself and can explain every line of this diff (Claude Code ran steps 1, 2 and 4 in the session that made this change; step 3 needs the pushed branch)

AI assistance

Claude Code picked the encoder settings, comparing quality 80/85/90 at 4:2:0 and 4:4:4 against the PNGs on zoomed crops of coloured text. It converted the images with Pillow, updated the two references and wrote the commit. The maintainer asked for the conversion.

🤖 Generated with Claude Code

https://claude.ai/code/session_01WofuzaohHhZRbBXhx9UD6S

The nine 1242 × 2688 store images were PNG, 7.8 MB in all. As JPEG
(quality 85, no chroma subsampling, progressive) they are 2.3 MB, with
the same dimensions and no visible loss: the PNGs were opaque and
carried no colour profile, so nothing is dropped. 4:4:4 keeps coloured
text free of chroma fringes; 4:2:0 would save another 0.4 MB.

zapstore.yaml and the README point at the new files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WofuzaohHhZRbBXhx9UD6S
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-26T20:43:42.750081Z f388f96 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@coderabbitai

coderabbitai Bot commented Oct 26, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 48 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

Run configuration
Commits

Reviewing files that changed from the base of the PR and between 45c5606 and f388f96.

Files ignored due to path filters: 18
  • docs/zapstore/01_hero.jpg is excluded by !**/*.jpg
  • docs/zapstore/01_hero.png is excluded by !**/*.png
  • docs/zapstore/02_hero.jpg is excluded by !**/*.jpg
  • docs/zapstore/02_hero.png is excluded by !**/*.png
  • docs/zapstore/03_hero.jpg is excluded by !**/*.jpg
  • docs/zapstore/03_hero.png is excluded by !**/*.png
  • docs/zapstore/04_book.jpg is excluded by !**/*.jpg
  • docs/zapstore/04_book.png is excluded by !**/*.png
  • docs/zapstore/05_create.jpg is excluded by !**/*.jpg
  • docs/zapstore/05_create.png is excluded by !**/*.png
  • docs/zapstore/06_escrow.jpg is excluded by !**/*.jpg
  • docs/zapstore/06_escrow.png is excluded by !**/*.png
  • docs/zapstore/07_chat.jpg is excluded by !**/*.jpg
  • docs/zapstore/07_chat.png is excluded by !**/*.png
  • docs/zapstore/08_trades.jpg is excluded by !**/*.jpg
  • docs/zapstore/08_trades.png is excluded by !**/*.png
  • docs/zapstore/09_nodes.jpg is excluded by !**/*.jpg
  • docs/zapstore/09_nodes.png is excluded by !**/*.png
Files selected for processing: 2
  • README.md
  • zapstore.yaml
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@grunch
grunch merged commit 47565d1 into main Oct 27, 2026
6 checks passed
@grunch
grunch deleted the chore/zapstore-jpeg-images branch October 27, 2026 12:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant