Single-photo OCR
User snaps or picks a photo → on-device Vision pre-check → presigned PUT → S3 upload → moderation + Gemini OCR → persistence + credit deduction.
Click any node for URL, handler file, IAM notes, and iOS call site. Every AWS service touched at every step is rendered — Lambda URLs, S3 buckets, Rekognition, DynamoDB, SNS → APNS — plus the external Gemini API.
photo_ocr
gemini-2.5-flashCan you please OCR this image? Please OCR and do not modify the content and try and generate the OCR result with the same exact formatting as the input image. Please focus in ensuring the OCR process flawlessly retains the source's formatting. I aim to go line-by-line, capturing every detail, including special characters, comments, and those crucial line breaks, indentations, and case differences, thus guaranteeing the output mirrors the original. However, please remove any items from an editor or parts of the IDE/word processor that are shown in any potential screenshot to as just show only the content instead. (For instance removing the list of windows open/ line numbers, file name etc.)
Model attribution comes from the Lambda's self-reported modelId (post-F1). Older runs fall back to runSettings.geminiModel from app_defaults.yaml.
notes Gemini's would-have-corrected list suppressed by strict mode. Tag color = concern tier: pink = fidelity (silent source edits), yellow = determinism (variant picks between runs), green = neutral (stylistic cleanup). Tag rules live in scripts/polish_notes_categorize.py.
▸ 2026-04-25T16-06-50Z__iter_03 2026-04-25 16:06 91 chars uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
▸ 2026-04-25T16-06-19Z__iter_02 2026-04-25 16:06 91 chars uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
▸ 2026-04-25T16-05-47Z__iter_01 2026-04-25 16:05 91 chars uncategorized
Would have added 'import math' at the top of the file for the 'math.sqrt' function to work.
▸ 2026-04-25T16-03-15Z__iter_03 2026-04-25 16:03 173 chars uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
▸ 2026-04-25T16-02-55Z__iter_02 2026-04-25 16:02 173 chars uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
▸ 2026-04-25T16-02-38Z__iter_01 2026-04-25 16:02 173 chars uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
▸ 2026-04-25T13-35-04Z__iter_03 2026-04-25 13:35 59 chars uncategorized
Text on the warning label is small and partially illegible.
▸ 2026-04-25T13-34-39Z__iter_02 2026-04-25 13:34 59 chars uncategorized
Text on the warning label is small and partially illegible.
▸ 2026-04-25T13-34-13Z__iter_01 2026-04-25 13:34 102 chars uncategorized
The text on the treadmill warning label is very blurry and the transcription is a best-effort attempt.
▸ 2026-04-25T13-33-34Z__iter_02 2026-04-25 13:33 141 chars uncategorized
Some text on the warning sticker (specifically 'feet', 'moving belt', 'pets', and 'machine') is blurry, but readable with careful inspection.
▸ 2026-04-24T22-47-09Z__iter_01 2026-04-24 22:47 173 chars uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.
▸ 2026-04-24T22-45-36Z__iter_01 2026-04-24 22:45 173 chars uncategorized
Would have corrected '盘放' to '摆放' in the first line of the Chinese text, as '摆放' (bǎifàng) is more commonly used for 'to place' or 'to arrange' items for collection/display.