v9.3.0 — OCR (#118) + import adapters (#121) + offline read cache (#122) #142

Merged
claude-bot merged 6 commits from feat/v10-utilities into main 2026-07-18 17:11:29 +00:00
Contributor

Three self-contained v10-backlog utilities.

#118 — OCR into searchable content

The vision model now transcribes visible image text on upload (alongside description/tags). Offered on the media card ("Show extracted text (OCR)" → "Add transcribed text to entry"); appended to the entry content only on explicit accept (sanitized on write → full-text searchable). No-ops without AI. Migration 055 (media.ocr_text), extractImageText() reuses the provider-agnostic vision path, POST /api/media/:id/accept-ocr.

#121 — Mastodon + Instagram import adapters

parseMastodonOutbox (ActivityPub outbox.json — original posts only, HTML stripped) and parseInstagramJson (caption + creation_timestamp), following the existing parser/dedup separation. New /api/import/{mastodon,instagram} routes + Import-page cards.

#122 — Offline read cache

App-managed, user-scoped IndexedDB cache of recently-viewed entries/motifs; detail pages fall back to the cached copy offline with a banner; cleared on logout. Does not touch the service-worker /api/* no-cache invariant.

Validation (dev server)

  • API suite: 51 files / 368 tests green (new: OCR accept, Mastodon/Instagram parsers).
  • App suite: 14 files / 76 tests green (new: offlineCache).
  • api tsc + app tsc/vite build green.

Closes #118, closes #121, closes #122.

🤖 Generated with Claude Code

Three self-contained v10-backlog utilities. ## #118 — OCR into searchable content The vision model now transcribes visible image text on upload (alongside description/tags). Offered on the media card ("Show extracted text (OCR)" → "Add transcribed text to entry"); appended to the entry content only on explicit accept (sanitized on write → full-text searchable). No-ops without AI. Migration 055 (`media.ocr_text`), `extractImageText()` reuses the provider-agnostic vision path, `POST /api/media/:id/accept-ocr`. ## #121 — Mastodon + Instagram import adapters `parseMastodonOutbox` (ActivityPub `outbox.json` — original posts only, HTML stripped) and `parseInstagramJson` (caption + `creation_timestamp`), following the existing parser/dedup separation. New `/api/import/{mastodon,instagram}` routes + Import-page cards. ## #122 — Offline read cache App-managed, user-scoped IndexedDB cache of recently-viewed entries/motifs; detail pages fall back to the cached copy offline with a banner; cleared on logout. **Does not** touch the service-worker `/api/*` no-cache invariant. ## Validation (dev server) - API suite: **51 files / 368 tests** green (new: OCR accept, Mastodon/Instagram parsers). - App suite: **14 files / 76 tests** green (new: offlineCache). - `api` tsc + `app` tsc/vite build green. Closes #118, closes #121, closes #122. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
extractImageText() reuses the vision provider (OCR prompt); runAIAnalysis
stores media.ocr_text (migration 055); POST /api/media/:id/accept-ocr appends
it to the entry content (sanitized on write, FTS-searchable). Approve-before-
apply UI on the media card.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
parseMastodonOutbox (ActivityPub outbox.json) + parseInstagramJson, following
the existing parser/dedup pattern; new /api/import/{mastodon,instagram} routes
and ImportPage cards.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(p122): offline read cache for recent entries/motifs
Some checks failed
CI / Images — production build (push) Has been cancelled
CI / API — typecheck & tests (push) Has been cancelled
CI / App — typecheck, test & build (push) Has been cancelled
67b2535e52
App-managed IndexedDB cache (tealeaves-read-cache), user-scoped, cleared on
logout. Detail pages cache on view and fall back to the cached copy offline
with a banner. Does NOT touch the service-worker /api no-cache invariant.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix(p118): api.post accept-ocr requires a body arg
All checks were successful
CI / Images — production build (push) Successful in 1m23s
CI / App — typecheck, test & build (push) Successful in 1m37s
CI / API — typecheck & tests (push) Successful in 3m40s
3a879e1d03
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(release): v9.3.0 — OCR, import adapters, offline read cache
Some checks failed
CI / App — typecheck, test & build (push) Has been cancelled
CI / Images — production build (push) Has been cancelled
CI / API — typecheck & tests (push) Has been cancelled
bc12dfdef9
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chore(release): sync lockfile versions to 9.3.0
All checks were successful
CI / App — typecheck, test & build (push) Successful in 2m29s
CI / App — typecheck, test & build (pull_request) Successful in 3m37s
CI / Images — production build (push) Successful in 4m9s
CI / API — typecheck & tests (push) Successful in 5m4s
CI / API — typecheck & tests (pull_request) Successful in 5m7s
CI / Images — production build (pull_request) Successful in 13m47s
eebddd0a5b
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
claude-bot deleted branch feat/v10-utilities 2026-07-18 17:11:29 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rbrooks/TeaLeaves!142
No description provided.