iOS pilot readiness: cleanup, annotated bilingual PDF export, and reliable offline sync - #1
Open
peterdsp wants to merge 1 commit into
Conversation
Prompt 1 (PDF): render saved damage markers onto the correct photos with a per-photo legend, preserving marker positions across orientation, resize and crop. Add report-language options (English, Greek, bilingual Greek/English) for headings, labels, dates and controlled vocabulary; user-entered text is never translated. Honor the existing export settings (photos, annotations, condition gauge, paper size). Show all pages in the in-app preview via PDFKit. Wire the existing positional annotation view into the report flow so markers can be placed and saved. Prompt 3 (sync): add a durable outbox (SyncOutbox) and SyncEngine that push pending changes with idempotent upserts (create falls back to update on a duplicate id, update falls back to create on 404), classified error handling (auth, offline, server), bounded retries and visible sync status. Route all four stores through the outbox; merge on pull without discarding local or pending edits. Send report annotations to the server and keep them locally as the source of truth. No PowerSync or KMP migration needed. Prompt 2 (claims): correct docs and landing page to match what ships. Fix open-source vs proprietary licensing language, scope multilingual to iOS PDF, mark treatment proposals as planned, correct Android and offline/SQLDelight claims, relabel placeholder screenshots as design mockups, temper unverified competitor comparisons, and add docs/STATUS.md capability matrix. Tests: 31 passing (marker geometry, orientation, language output, user-text preservation, content toggles; sync offline persistence, restart, interrupted retry, auth failure, duplicate/conflict, coalescing). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
peterdsp
changed the base branch from
main
to
cleanup-and-ios-pilot-readiness
September 8, 2026 21:46
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.
Why
Three coordinated fixes to make the iOS app match what it advertises: exported PDFs were missing damage annotations and were English-only; offline edits and sync were unreliable and silently lossy; and the marketing/docs claimed features that do not ship.
What (commit
5eedbaf)Accurate, bilingual PDF (Prompt 1)
Reliable offline sync (Prompt 3)
SyncOutbox) andSyncEngine: pending changes persist across restarts, push with idempotent upserts (create falls back to update on a duplicate id, update falls back to create on 404), classified error handling (auth, offline, server), bounded retries, and visible sync status.Claims match what ships (Prompt 2)
docs/STATUS.md.LICENSEunchanged.Testing
31 tests pass on iPhone 17 simulator: marker geometry, orientation, language output, user-text preservation, content toggles; sync offline persistence, restart, interrupted retry, auth failure, duplicate/conflict, and coalescing. Representative English/Greek/bilingual PDFs were generated and the rendered pages inspected.
Known limitations
Retries fire on triggers (enqueue, launch, foreground, manual), not a background timer. Conflict policy is local-pending-wins / last-write-wins; pulls keep local-only records (a remote delete will not remove the local copy). Project to client links do not sync (local stores a name, server expects an id). Image binaries are not in the outbox. Screenshots were relabeled rather than recaptured.
🤖 Generated with Claude Code