feat: Mission Control Strip — contributor avatars per queue item #246

Closed
opened 2026-04-16 10:04:37 +02:00 by marcel · 0 comments
Owner

Goal

Show 1–3 small contributor avatars (or initials) next to each document title in the Mission Control Strip columns (Segmentierung, Transkription, Lesefertig). This lets family members see at a glance who last worked on a document, creating social proof and encouraging participation.

Problem

The current TranscriptionQueueItemDTO only carries id, title, documentDate, needsExpert, and block counts. There is no information about which users contributed annotations or transcription blocks to each document, so no avatars can be rendered.

What is missing

Backend

  1. Query changes — Each of the three queue queries in DocumentRepository needs to return the last N contributors (e.g. lastContributorIds or a joined list of app_user_id values). This requires joining document_annotations and/or transcription_blocks against a user/author column.
    • Problem to solve first: document_annotations and transcription_blocks currently have no created_by / author_id column. That column needs to be added via a Flyway migration before contributors can be tracked.
  2. DTO changeTranscriptionQueueItemDTO needs a new field, e.g. List<ContributorSummary> lastContributors where ContributorSummary carries id, displayName, and optionally an avatar URL or initials hint.
  3. Service changeTranscriptionQueueService.mapRow() needs to deserialize the new column(s).

Frontend

  1. Avatar component — A small reusable ContributorAvatars.svelte component that renders 1–3 circular initials badges (or <img> tags if a real avatar URL is available) with a +N overflow label.
  2. Column componentsSegmentationColumn, TranscriptionColumn, and ReadyColumn all need to render <ContributorAvatars contributors={doc.lastContributors} /> below or beside each document title.
  3. API types — After the backend DTO changes, regenerate src/lib/generated/api.ts.

Dependencies / open questions

  • Does the app currently record who performed an annotation or wrote a transcription block? If not, the authorship migration must land first (separate issue).
  • Should "contributor" mean the last editor of any block, or specifically reviewers?
  • Max avatars to show: 3 suggested; confirm with UX.
## Goal Show 1–3 small contributor avatars (or initials) next to each document title in the Mission Control Strip columns (Segmentierung, Transkription, Lesefertig). This lets family members see at a glance who last worked on a document, creating social proof and encouraging participation. ## Problem The current `TranscriptionQueueItemDTO` only carries `id`, `title`, `documentDate`, `needsExpert`, and block counts. There is no information about which users contributed annotations or transcription blocks to each document, so no avatars can be rendered. ## What is missing ### Backend 1. **Query changes** — Each of the three queue queries in `DocumentRepository` needs to return the last N contributors (e.g. `lastContributorIds` or a joined list of `app_user_id` values). This requires joining `document_annotations` and/or `transcription_blocks` against a user/author column. - Problem to solve first: `document_annotations` and `transcription_blocks` currently have no `created_by` / `author_id` column. That column needs to be added via a Flyway migration before contributors can be tracked. 2. **DTO change** — `TranscriptionQueueItemDTO` needs a new field, e.g. `List<ContributorSummary> lastContributors` where `ContributorSummary` carries `id`, `displayName`, and optionally an avatar URL or initials hint. 3. **Service change** — `TranscriptionQueueService.mapRow()` needs to deserialize the new column(s). ### Frontend 4. **Avatar component** — A small reusable `ContributorAvatars.svelte` component that renders 1–3 circular initials badges (or `<img>` tags if a real avatar URL is available) with a `+N` overflow label. 5. **Column components** — `SegmentationColumn`, `TranscriptionColumn`, and `ReadyColumn` all need to render `<ContributorAvatars contributors={doc.lastContributors} />` below or beside each document title. 6. **API types** — After the backend DTO changes, regenerate `src/lib/generated/api.ts`. ## Dependencies / open questions - Does the app currently record who performed an annotation or wrote a transcription block? If not, the authorship migration must land first (separate issue). - Should "contributor" mean the last editor of any block, or specifically reviewers? - Max avatars to show: 3 suggested; confirm with UX.
marcel added the collaborationfeatureui labels 2026-04-16 10:04:55 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: marcel/familienarchiv#246