Skip to content

feat: image upload normalization, App Store readiness work, and accumulated dev fixes#9

Merged
Adron merged 4 commits into
mainfrom
dev
Jul 11, 2026
Merged

feat: image upload normalization, App Store readiness work, and accumulated dev fixes#9
Adron merged 4 commits into
mainfrom
dev

Conversation

@Adron

@Adron Adron commented Jul 11, 2026

Copy link
Copy Markdown
Member

Summary

Syncs dev into main. Headline change is automatic client-side image normalization for uploads (HEIC→JPEG/PNG, capped under 1.4MB), plus two new Claude subagents for release/QA workflows. The rest of the branch carries several weeks of accumulated App Store readiness and bug-fix work (UGC moderation, push notifications, cross-post fixes, UI polish) that hadn't yet been merged to main.

What's included

This session:

  • feat(uploads): new ImageUploadProcessor (ImageIO-based) normalizes any picked image to JPEG/PNG under 1.4MB before upload — HEIC always converts, large originals are downsampled via efficient thumbnail generation (no full-resolution decode), alpha/transparency is preserved as PNG where possible, with full unit test coverage (b772290)
  • chore(agents): added release-manager (App Store submission checklist tracking) and qa-screenshotter (Simulator screenshot capture + smoke-test) subagents (373c34d)

Prior accumulated work on dev:

Testing

  • xcodebuild build — clean, no errors
  • xcodebuild testImageUploadProcessorTests 10/10 passed; APIClientImageUploadTests 20/21 passed (the one failure is a pre-existing, unrelated multipart field-name mismatch, not touched by this branch)

Caveats

  • The pre-existing DocumentsView upload test expecting multipart field "image" (actual: "file") is a known, separate bug — flagged but intentionally left out of scope for this work.
  • This PR bundles a large amount of prior dev history not authored in this session; commit-by-commit detail for older work is limited to what the original commit messages describe.

🤖 Generated with Claude Code

Adron and others added 4 commits July 9, 2026 14:57
- release-manager: tracks/verifies App Store submission readiness
  (App-Store-Deployment.md, App-Store-Deployment-Checklist.md,
  blocker-prompts.md), handles build/version bumps and signing checks
- qa-screenshotter: drives the Simulator to capture required App Store
  screenshot sets and walk the pre-submission smoke-test checklist

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… upload

HEIC photos from modern iPhones (often 12-48MP, several MB+) were only
being blanket-converted to JPEG at a fixed 0.85 quality with no size
budget or dimension cap, so a large/detailed photo could still exceed
backend upload limits.

- Add ImageUploadProcessor: a stateless ImageIO-based utility that
  passes already-safe JPEG/PNG through unchanged, always converts HEIC,
  downsamples large originals via efficient thumbnail generation
  (avoids fully decoding huge originals into memory), and walks a JPEG
  quality ladder (opaque images) or PNG dimension ladder (images with
  alpha) until the result fits under 1.4MB, falling back to the
  smallest attempt if nothing hits budget
- Wire it into the three image upload call sites (ComposeView.uploadPhoto,
  EditProfileView.uploadAvatar, DocumentsView.uploadPhoto), replacing
  the old inline UIImage(data:).jpegData(0.85) conversion; runs via
  Task.detached so the CPU-bound work doesn't block the main actor
- Add ImageUploadProcessorTests covering the passthrough fast path,
  HEIC-always-converts, large-image downsampling, alpha/PNG
  preservation, corrupt input, and ladder-constant regression guards
- Register both new files in project.pbxproj

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Adron Adron merged commit 82fac5f into main Jul 11, 2026
1 check passed
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