From 94b5d1a5a850fc97ce9e0c888c1fd145001e05b9 Mon Sep 17 00:00:00 2001 From: Marcel Date: Thu, 16 Apr 2026 10:15:21 +0200 Subject: [PATCH] fix(#240): align Mission Control Strip UI with final spec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Strip heading: "Mitarbeiten" → "Was braucht Aufmerksamkeit?" - Column 1 heading: "Segmentierung" → "Rahmen einzeichnen"; add green skill pill "✓ Ohne Vorkenntnisse"; heading color gray → ink (navy) - Column 2 heading: "Transkription" → "Text eintippen"; add navy skill pill "Kurrent hilfreich"; heading color gray → ink; weekly pulse color green → ink (task, not achievement); progress bar track bg-gray-200/h-1.5 → bg-ink/20/h-1; add transition-all to fill - Column 3 heading: "Lesefertig" → "Lesefertig ✓"; heading color gray → green-800; add "N Dokumente bereit" subtitle in green; add "Alle N lesen →" link at bottom; reviewed % color gray → green-800 - All columns: add CTA buttons at bottom (Jetzt einzeichnen / Jetzt tippen); empty state removed from cols 1 & 2 (columns hide when empty); empty-state ghost CTA in col 3 restyled as bordered button with hover:bg-ink - Strip: add visibility guard — hides when all three lists are empty - i18n: add mission_control_seg_skill_pill, mission_control_trans_skill_pill, mission_control_ready_subtitle, mission_control_ready_all_cta in de/en/es; update heading and CTA copy in all three locales Co-Authored-By: Claude Sonnet 4.6 --- frontend/messages/de.json | 16 +++--- frontend/messages/en.json | 16 +++--- frontend/messages/es.json | 16 +++--- .../lib/components/MissionControlStrip.svelte | 31 ++++++----- .../src/lib/components/ReadyColumn.svelte | 37 +++++++------ .../lib/components/SegmentationColumn.svelte | 43 ++++++++------- .../lib/components/TranscriptionColumn.svelte | 53 ++++++++++--------- 7 files changed, 122 insertions(+), 90 deletions(-) diff --git a/frontend/messages/de.json b/frontend/messages/de.json index 766f13f9..bd431f04 100644 --- a/frontend/messages/de.json +++ b/frontend/messages/de.json @@ -558,17 +558,21 @@ "transcription_block_segmentation_only": "Nur Segmentierung", "training_chip_kurrent": "Kurrent-Erkennung", "training_chip_segmentation": "Segmentierung", - "mission_control_heading": "Mitarbeiten", - "mission_control_segmentation_heading": "Segmentierung", + "mission_control_heading": "Was braucht Aufmerksamkeit?", + "mission_control_segmentation_heading": "Rahmen einzeichnen", "mission_control_segmentation_description": "Textbereiche markieren — keine Vorkenntnisse nötig", - "mission_control_segmentation_cta": "Segmentieren", + "mission_control_seg_skill_pill": "✓ Ohne Vorkenntnisse", + "mission_control_segmentation_cta": "Jetzt einzeichnen →", "mission_control_segmentation_empty": "Alle Dokumente haben bereits Segmentierungsblöcke.", - "mission_control_transcription_heading": "Transkription", + "mission_control_transcription_heading": "Text eintippen", "mission_control_transcription_description": "Text abschreiben — Kurrent-Kenntnisse hilfreich", - "mission_control_transcription_cta": "Transkribieren", + "mission_control_trans_skill_pill": "Kurrent hilfreich", + "mission_control_transcription_cta": "Jetzt tippen →", "mission_control_transcription_empty": "Keine Dokumente warten auf Transkription.", - "mission_control_ready_heading": "Lesefertig", + "mission_control_ready_heading": "Lesefertig ✓", "mission_control_ready_description": "Vollständig transkribiert und geprüft", + "mission_control_ready_subtitle": "{count} Dokumente bereit", + "mission_control_ready_all_cta": "Alle {count} lesen →", "mission_control_ready_empty": "Noch keine Dokumente vollständig transkribiert.", "mission_control_ready_empty_cta": "Jetzt mitmachen", "mission_control_weekly_pulse": "↑ +{count} diese Woche", diff --git a/frontend/messages/en.json b/frontend/messages/en.json index 54494d0d..c62a7569 100644 --- a/frontend/messages/en.json +++ b/frontend/messages/en.json @@ -558,17 +558,21 @@ "transcription_block_segmentation_only": "Segmentation only", "training_chip_kurrent": "Kurrent recognition", "training_chip_segmentation": "Segmentation", - "mission_control_heading": "Contribute", - "mission_control_segmentation_heading": "Segmentation", + "mission_control_heading": "What needs attention?", + "mission_control_segmentation_heading": "Draw regions", "mission_control_segmentation_description": "Mark text areas — no prior knowledge needed", - "mission_control_segmentation_cta": "Segment", + "mission_control_seg_skill_pill": "✓ No prior knowledge", + "mission_control_segmentation_cta": "Start marking →", "mission_control_segmentation_empty": "All documents already have segmentation blocks.", - "mission_control_transcription_heading": "Transcription", + "mission_control_transcription_heading": "Type the text", "mission_control_transcription_description": "Type out text — Kurrent knowledge helpful", - "mission_control_transcription_cta": "Transcribe", + "mission_control_trans_skill_pill": "Kurrent helpful", + "mission_control_transcription_cta": "Start typing →", "mission_control_transcription_empty": "No documents waiting for transcription.", - "mission_control_ready_heading": "Ready to Read", + "mission_control_ready_heading": "Ready to read ✓", "mission_control_ready_description": "Fully transcribed and reviewed", + "mission_control_ready_subtitle": "{count} documents ready", + "mission_control_ready_all_cta": "Read all {count} →", "mission_control_ready_empty": "No documents fully transcribed yet.", "mission_control_ready_empty_cta": "Start contributing", "mission_control_weekly_pulse": "↑ +{count} this week", diff --git a/frontend/messages/es.json b/frontend/messages/es.json index d6335b15..2e610535 100644 --- a/frontend/messages/es.json +++ b/frontend/messages/es.json @@ -558,17 +558,21 @@ "transcription_block_segmentation_only": "Solo segmentación", "training_chip_kurrent": "Reconocimiento Kurrent", "training_chip_segmentation": "Segmentación", - "mission_control_heading": "Colaborar", - "mission_control_segmentation_heading": "Segmentación", + "mission_control_heading": "¿Qué necesita atención?", + "mission_control_segmentation_heading": "Marcar regiones", "mission_control_segmentation_description": "Marcar áreas de texto — sin conocimientos previos", - "mission_control_segmentation_cta": "Segmentar", + "mission_control_seg_skill_pill": "✓ Sin conocimientos previos", + "mission_control_segmentation_cta": "Empezar a marcar →", "mission_control_segmentation_empty": "Todos los documentos ya tienen bloques de segmentación.", - "mission_control_transcription_heading": "Transcripción", + "mission_control_transcription_heading": "Escribir el texto", "mission_control_transcription_description": "Escribir el texto — conocimiento de Kurrent útil", - "mission_control_transcription_cta": "Transcribir", + "mission_control_trans_skill_pill": "Kurrent útil", + "mission_control_transcription_cta": "Empezar a escribir →", "mission_control_transcription_empty": "No hay documentos esperando transcripción.", - "mission_control_ready_heading": "Listo para leer", + "mission_control_ready_heading": "Listo para leer ✓", "mission_control_ready_description": "Completamente transcrito y revisado", + "mission_control_ready_subtitle": "{count} documentos listos", + "mission_control_ready_all_cta": "Leer todos ({count}) →", "mission_control_ready_empty": "Aún no hay documentos completamente transcritos.", "mission_control_ready_empty_cta": "Empezar a colaborar", "mission_control_weekly_pulse": "↑ +{count} esta semana", diff --git a/frontend/src/lib/components/MissionControlStrip.svelte b/frontend/src/lib/components/MissionControlStrip.svelte index 7bd28697..c1baeca0 100644 --- a/frontend/src/lib/components/MissionControlStrip.svelte +++ b/frontend/src/lib/components/MissionControlStrip.svelte @@ -30,16 +30,21 @@ interface Props { let { segmentationDocs, transcriptionDocs, readyDocs, weeklyStats }: Props = $props(); -
-

- {m.mission_control_heading()} -

-
- - - -
-
+{#if segmentationDocs.length > 0 || transcriptionDocs.length > 0 || readyDocs.length > 0} +
+

+ {m.mission_control_heading()} +

+
+ + + +
+
+{/if} diff --git a/frontend/src/lib/components/ReadyColumn.svelte b/frontend/src/lib/components/ReadyColumn.svelte index b570ecf2..7508b15c 100644 --- a/frontend/src/lib/components/ReadyColumn.svelte +++ b/frontend/src/lib/components/ReadyColumn.svelte @@ -34,20 +34,22 @@ function reviewedPct(doc: TranscriptionQueueItemDTO): number { {#if docs.length > 0} -
-
-

- {m.mission_control_ready_heading()} -

- {#if weeklyCount > 0} - - {m.mission_control_weekly_pulse({ count: weeklyCount })} - - {/if} +
+
+
+

+ {m.mission_control_ready_heading()} +

+ {#if weeklyCount > 0} + + {m.mission_control_weekly_pulse({ count: weeklyCount })} + + {/if} +
+

+ {m.mission_control_ready_subtitle({ count: docs.length })} +

-

- {m.mission_control_ready_description()} -

    {#each docs as doc (doc.id)}
  • @@ -61,7 +63,7 @@ function reviewedPct(doc: TranscriptionQueueItemDTO): number { {formatDate(doc.documentDate)} {/if} {#if doc.textedBlockCount > 0} - + {m.mission_control_reviewed_pct({ pct: reviewedPct(doc) })} {/if} @@ -70,6 +72,9 @@ function reviewedPct(doc: TranscriptionQueueItemDTO): number {
  • {/each}
+ + {m.mission_control_ready_all_cta({ count: docs.length })} +
{:else}

{m.mission_control_ready_empty()}

{m.mission_control_ready_empty_cta()} diff --git a/frontend/src/lib/components/SegmentationColumn.svelte b/frontend/src/lib/components/SegmentationColumn.svelte index b48ea67c..76f9de80 100644 --- a/frontend/src/lib/components/SegmentationColumn.svelte +++ b/frontend/src/lib/components/SegmentationColumn.svelte @@ -29,24 +29,23 @@ function formatDate(dateStr: string): string { } -
-
-

- {m.mission_control_segmentation_heading()} -

- {#if weeklyCount > 0} - - {m.mission_control_weekly_pulse({ count: weeklyCount })} +{#if docs.length > 0} +
+
+

+ {m.mission_control_segmentation_heading()} +

+ + {m.mission_control_seg_skill_pill()} - {/if} -
-

- {m.mission_control_segmentation_description()} -

- - {#if docs.length === 0} -

{m.mission_control_segmentation_empty()}

- {:else} + {#if weeklyCount > 0} +

+ {m.mission_control_weekly_pulse({ count: weeklyCount })} +

+ {/if} +
    {#each docs as doc (doc.id)}
  • @@ -67,5 +66,11 @@ function formatDate(dateStr: string): string {
  • {/each}
- {/if} -
+ + {m.mission_control_segmentation_cta()} + +
+{/if} diff --git a/frontend/src/lib/components/TranscriptionColumn.svelte b/frontend/src/lib/components/TranscriptionColumn.svelte index d9d6fbfb..05aea68a 100644 --- a/frontend/src/lib/components/TranscriptionColumn.svelte +++ b/frontend/src/lib/components/TranscriptionColumn.svelte @@ -34,24 +34,23 @@ function blockProgress(doc: TranscriptionQueueItemDTO): number { } -
-
-

- {m.mission_control_transcription_heading()} -

- {#if weeklyCount > 0} - - {m.mission_control_weekly_pulse({ count: weeklyCount })} +{#if docs.length > 0} +
+
+

+ {m.mission_control_transcription_heading()} +

+ + {m.mission_control_trans_skill_pill()} - {/if} -
-

- {m.mission_control_transcription_description()} -

- - {#if docs.length === 0} -

{m.mission_control_transcription_empty()}

- {:else} + {#if weeklyCount > 0} +

+ {m.mission_control_weekly_pulse({ count: weeklyCount })} +

+ {/if} +
    {#each docs as doc (doc.id)}
  • @@ -72,13 +71,13 @@ function blockProgress(doc: TranscriptionQueueItemDTO): number {
    {m.mission_control_blocks_progress({ - texted: doc.textedBlockCount, - total: doc.annotationCount - })} + texted: doc.textedBlockCount, + total: doc.annotationCount + })} -
    +
    @@ -90,5 +89,11 @@ function blockProgress(doc: TranscriptionQueueItemDTO): number {
  • {/each}
- {/if} -
+ + {m.mission_control_transcription_cta()} + +
+{/if}