pediatric-ai-scribe-v3/public/js
Daniel 2f7233f317 perf: store real image previews in MinIO, generated at creation and on demand
Gallery tiles are 56px but were downloading the full ~280kB original. Previews
are now rendered with sharp and stored beside the originals in the same MinIO
bucket under a thumbs/ prefix, so nothing about credentials, lifecycle or backup
changes. Measured on live assets: 216-294kB originals become 13-19kB at 256px,
about 16x smaller; 640px is about 4x.

Both paths, as asked:
- Rendered when a job completes, so the first viewer never waits for a resize.
  A preview failure never unmakes a finished job.
- Rendered on demand for anything that has none — the existing 26 images work
  immediately with no backfill required, and the result is stored for next time.

Boundaries that matter more than the speed:
- Only 256 and 640 are honoured. An open width parameter would let a caller
  drive arbitrary resizes.
- Permission is checked against the ORIGINAL before a preview is served, so a
  preview can never widen who can see an image.
- Previews carry their own SHA-256 and owner headers, because the client
  verifies both on every asset; sending the original's checksum would be
  rejected as tampering, which is that check working correctly.
- Still private, no-store. The client asset pattern was widened to exactly
  ?w=256 and ?w=640 and nothing else.

Client-side downscaling stays as the fallback when a preview cannot be produced.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018e1PLqrKgAM9jQhFKRnbLd
2026-09-10 06:39:30 +02:00
..
admin feat: display-only sources toggle, signed-out preview, and a composer that carries the toolbar 2026-09-10 04:12:36 +02:00
assistant perf: cache generated images for the session and decode thumbnails, not originals 2026-09-10 05:20:10 +02:00
bedside allow bedside respiratory without weight 2026-05-08 09:10:33 +02:00
calculators consolidate calculator growth helpers 2026-05-08 04:36:39 +02:00
learningHub feat: integrate durable image jobs/private assets into current core 2026-09-07 16:53:42 +02:00
notes feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
wellVisit extract well visit schedule data 2026-05-08 05:11:29 +02:00
accountBoundary.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
admin-docs.js docs refresh current workflows 2026-05-09 00:40:45 +02:00
admin.js fix: simple prompt editing (save + restore original only), live users search, straight responsive admin rows 2026-09-07 19:30:40 +02:00
app.js feat: search finds what is inside a tab, and the menu head reads toggle, mark, search 2026-09-10 05:16:05 +02:00
audioBackup.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
auth.js feat: display-only sources toggle, signed-out preview, and a composer that carries the toolbar 2026-09-10 04:12:36 +02:00
authFetch.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
calc-math.js feat: Bedside clinical reference module + age→weight estimator + dose-math unit tests 2026-04-20 02:49:42 +02:00
calculators.js remove redundant module wrappers 2026-05-08 05:30:32 +02:00
chartReview.js feat: add patient education handouts 2026-05-08 22:26:53 +02:00
clinicalAssistant.js perf: store real image previews in MinIO, generated at creation and on demand 2026-09-10 06:39:30 +02:00
diagrams.js fix diagram delete confirmation 2026-05-08 06:28:12 +02:00
documents.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
drugs-loader.js convert admin docs and drug loader to modules 2026-05-08 07:50:26 +02:00
e2e-bootstrap.js fix docs toc fallback and remove redundant iifes 2026-05-08 23:08:47 +02:00
ed-encounters.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
encounters.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
extensions.js feat: add extension import preview 2026-05-08 22:26:53 +02:00
generatedImages.js perf: store real image previews in MinIO, generated at creation and on demand 2026-09-10 06:39:30 +02:00
hospitalCourse.js feat: add patient education handouts 2026-05-08 22:26:53 +02:00
learningHub.js feat: integrate durable image jobs/private assets into current core 2026-09-07 16:53:42 +02:00
liveEncounter.js fix docs toc fallback and remove redundant iifes 2026-05-08 23:08:47 +02:00
memories.js clarify template-only AI memory context 2026-05-08 07:38:27 +02:00
milestones.js test clinical note entrypoints 2026-05-08 06:33:34 +02:00
milestonesData.js v4: Fix milestones display + add OpenID auth + 100MB PDF support 2026-04-01 17:59:51 +00:00
nextcloud.js convert settings loaders to modules 2026-05-08 07:17:29 +02:00
notes.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
peGuide.js move pe guide data to json 2026-05-08 08:56:21 +02:00
secureStorage.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
shadess.js harden clinical assistant source handling 2026-05-09 19:59:04 +02:00
sickVisit.js feat: add patient education handouts 2026-05-08 22:26:53 +02:00
soap.js feat: add patient education handouts 2026-05-08 22:26:53 +02:00
speechRecognition.js convert speech helpers to modules 2026-05-08 08:09:38 +02:00
transcriptionSettings.js convert settings helpers to modules 2026-05-08 07:54:08 +02:00
ui-state.js convert settings helpers to modules 2026-05-08 07:54:08 +02:00
voiceDictation.js fix docs toc fallback and remove redundant iifes 2026-05-08 23:08:47 +02:00
voicePreferences.js convert settings helpers to modules 2026-05-08 07:54:08 +02:00
wellVisit.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00