feature(blog): photography-info icon on blog photos sourced from the Photography gallery #746

Closed
opened 2026-07-20 19:19:08 +00:00 by spikerj · 1 comment
Owner

Request

When a blog post embeds a photo that came from the poster's Photography gallery, show a photography icon in the bottom-left of the picture (in the blog viewer). Clicking it shows the interesting information extracted during the gallery upload (camera, lens, focal length, aperture, shutter, ISO, flash, etc.) for viewers who love photography.

Current state (why this needs plumbing)

  • The gallery upload pipeline (PhotographProcessor + exiftool) extracts rich metadata into Photograph.Metadata (camera/lens/exposure/GPS/etc.), displayed today only in the gallery lightbox meta panel.
  • But PhotoGalleryPickerComponent inserts gallery photos into a blog by downloading the preview derivative and re-uploading it as a plain file — the blog media pipeline strips EXIF and no reference back to the Photograph survives (BlogMedia has only Url/FileName/paths).
  • Photography metadata endpoints (GET api/photography/photos/{id}) are strictly owner-scoped, so blog viewers (e.g. a child viewing a parent's post) can't read them.

Plan

Backend (spikersoft-backend):

  • Add PhotographId to BlogMedia + BlogMediaDto/response DTOs; thread through create/update/add-media handlers.
  • New viewer-accessible endpoint (blog-scoped) returning sanitized metadata for a media item whose parent post is visible: camera/lens/exposure/dimensions/takenAt; GPS only when the photograph has LocationShared; never serial numbers or rawExifJson.

Frontend (spikersoft-angular):

  • Picker returns photographId alongside each picked file; blog-create passes it on upload.
  • Blog viewer (blog-entry-component) overlays a bottom-left photo_camera icon on media with a photographId (mirroring the existing .delete-media-btn corner-overlay pattern) and opens a small metadata dialog (reuse the lightbox meta-line formatting style).

Repos: spikersoft-angular, spikersoft-backend

## Request When a blog post embeds a photo that came from the poster's Photography gallery, show a photography icon in the **bottom-left** of the picture (in the blog viewer). Clicking it shows the interesting information extracted during the gallery upload (camera, lens, focal length, aperture, shutter, ISO, flash, etc.) for viewers who love photography. ## Current state (why this needs plumbing) - The gallery upload pipeline (PhotographProcessor + exiftool) extracts rich metadata into `Photograph.Metadata` (camera/lens/exposure/GPS/etc.), displayed today only in the gallery lightbox meta panel. - But `PhotoGalleryPickerComponent` inserts gallery photos into a blog by downloading the preview derivative and re-uploading it as a plain file — the blog media pipeline strips EXIF and **no reference back to the Photograph survives** (`BlogMedia` has only Url/FileName/paths). - Photography metadata endpoints (`GET api/photography/photos/{id}`) are strictly owner-scoped, so blog viewers (e.g. a child viewing a parent's post) can't read them. ## Plan Backend (spikersoft-backend): - Add `PhotographId` to `BlogMedia` + `BlogMediaDto`/response DTOs; thread through create/update/add-media handlers. - New viewer-accessible endpoint (blog-scoped) returning **sanitized** metadata for a media item whose parent post is visible: camera/lens/exposure/dimensions/takenAt; GPS **only** when the photograph has `LocationShared`; never serial numbers or `rawExifJson`. Frontend (spikersoft-angular): - Picker returns `photographId` alongside each picked file; blog-create passes it on upload. - Blog viewer (`blog-entry-component`) overlays a bottom-left `photo_camera` icon on media with a `photographId` (mirroring the existing `.delete-media-btn` corner-overlay pattern) and opens a small metadata dialog (reuse the lightbox meta-line formatting style). Repos: spikersoft-angular, spikersoft-backend
Author
Owner

Implemented and merged:

  • spikersoft-backend PR #436 (merged to master, 151ac59d): BlogMedia.photographId provenance (ownership-validated on every write path) + new viewer endpoint GET api/blog/posts/{postId}/media/{mediaId}/photograph-info serving a sanitized metadata extract — gear + exposure + dimensions; GPS only when the owner enabled LocationShared; never serials/artist/raw EXIF.
  • spikersoft-angular PR #475 (merged to master, 009121f2): gallery picker returns the source photograph id with each copy; blog viewer shows a bottom-left photo_camera overlay on gallery-sourced photos (visible to all viewers) opening the new photography-info dialog.

Closing.

Implemented and merged: - **spikersoft-backend PR #436** (merged to master, `151ac59d`): `BlogMedia.photographId` provenance (ownership-validated on every write path) + new viewer endpoint `GET api/blog/posts/{postId}/media/{mediaId}/photograph-info` serving a sanitized metadata extract — gear + exposure + dimensions; GPS only when the owner enabled LocationShared; never serials/artist/raw EXIF. - **spikersoft-angular PR #475** (merged to master, `009121f2`): gallery picker returns the source photograph id with each copy; blog viewer shows a bottom-left `photo_camera` overlay on gallery-sourced photos (visible to all viewers) opening the new photography-info dialog. Closing.
Sign in to join this conversation.