Ereignis-Editor & Brief-Gruppierung · Quick-Action im Dokument
+
Wie kuratierte Zeitstrahl-Ereignisse entstehen und wie Briefe gruppiert werden — von zwei Seiten in ein Datenmodell (TimelineEvent.documents): der Ereignis-Editor unter /zeitstrahl/events/[id]/edit (Kurator baut, verlinkt viele Briefe) und die Quick-Action im Dokument-Detail (beim Lesen schnell zuordnen). Beide bauen auf bereits ausgelieferten Komponenten auf.
Familienarchiv · 2026-06-08 · Leonie Voss, UX Lead · gegründet auf Code: GeschichteEditor.svelte · DocumentMetadataDrawer.svelte · DocumentMultiSelect.svelte
+
+
+
+
+
+
1 · Zwei Einstiegspunkte, ein Datenmodell
+
Manuelle Gruppierung = ein TimelineEvent mit verknüpften Dokumenten. Kuratoren arbeiten in beide Richtungen — wir bauen beide, statt eine zu erzwingen.
+
+
+
+ A · Ereignis-zuerst — der Kurator baut den Zeitstrahl. /zeitstrahl/events/new · [id]/edit mit Dokument-Mehrfach-Picker = Bulk-Linking vieler Briefe auf einmal. Spiegelt 1:1 den GeschichteEditor (gleiche zwei-Spalten-Form, Sidebar-Picker, Sticky-Save-Bar).
+
+
+ B · Dokument-zuerst — beim Lesen eines Briefs. Quick-Action im Dokument-Detail: bestehendes Ereignis wählen oder neu anlegen, verlinkt diesen einen Brief. Spiegelt die bestehende Geschichten-Spalte im Details-Drawer (DocumentMetadataDrawer.svelte).
+
Bei „Zeitspanne" erscheint ein zweites End-Datum-Feld. Bei „ca." / „Saison" passt sich nur das Label an.
+
+
+
+
+
④ Beschreibung · optional
+
Karls Feldpost von der Westfront, 1915 — wöchentliche Briefe an Elfriede und den neugeborenen Hans. Eine zusammenhängende Korrespondenz, die hier als Cluster gebündelt wird …
+
Schlichtes Textfeld (kein Rich-Text wie Geschichten) — Ereignisse sind kurze Notizen, keine Langform.
+
+
+
+
+
+
+
+
+
+ Änderungen werden erst beim Speichern übernommen.
+
+ Löschen
+ Abbrechen
+ Speichern
+
+
+
+
+
+
+
①Titel — großes Serifen-Feld, wie der Geschichten-Titel. Pflichtfeld (Validierung bei Blur).
+
②Typ — PERSONAL / HISTORICAL Segmented-Control. Steuert Rendering (Mint-Pille vs. Welt-Band).
+
③Datum + Präzision — geteilte DatePrecisionInput (gleiche Logik wie Dokument-Datum, metaDatePrecision). „Zeitspanne" blendet End-Datum ein.
⑤Verknüpfte Briefe — hier wird gruppiert. Wiederverwendung von DocumentMultiSelect (Typeahead, Chips, Hidden-Inputs).
+
⑥Beteiligte Personen — PersonMultiSelect. Bestimmt, in welchem „Lebensweg" das Ereignis auftaucht.
+
⑦Sticky-Save-Bar — Speichern primär, Abbrechen sekundär, Löschen nur im Edit-Modus (mit Bestätigung).
+
+/new — leeres Formular. Mit ?documentId=… ist Feld ⑤ vorbefüllt (aus der Quick-Action, §4-D).
+
+
+
+
+
+
3 · Brief-Gruppierung im Editor — der Dokument-Picker
+
Feld ⑤ ist der unveränderte DocumentMultiSelect: Tippen sucht über /api/documents/search?q=… (debounced 300 ms), Treffer mit ehrlichem Datums-Label, bereits gewählte werden gefiltert. Jeder Klick fügt einen Brief zum Cluster.
Brief aus dem Verdun-Lazarett · Brief · August 1916
+
Rückkehr aus Verdun · Brief · ca. 1917
+
+
Label = title · formatDocumentDate(precision). Bereits verknüpfte Briefe erscheinen nicht in den Treffern (Dedup).
+
+
+
+
+
Inline „+ Ereignis" am Jahres-BandZeitstrahl
+
+
+
+
1915
+
✉ 24 Briefe
Monats-Dichte ▾
+
+
+
Kuratoren können auch direkt im Zeitstrahl ein Ereignis anlegen — öffnet denselben Editor, Jahr & Briefe des Bandes vorbefüllt.
+
+
+
+
+
+
+
+
+
+
4 · Quick-Action im Dokument-Detail — wo sie lebt
+
Die Dokument-Detailseite ist ein vollflächiger Viewer ohne Sidebar (fixed inset). Aktions-Flächen gibt es nur zwei: die DocumentTopBar und den aufklappbaren Details-Drawer. Die Quick-Action lebt an beiden — primär als „Zeitstrahl"-Spalte im Drawer (spiegelt die Geschichten-Spalte), plus ein Top-Bar-Button für den Ein-Klick-Weg.
+
+
+
Warum der Details-Drawer der richtige Ort ist: Er zeigt heute schon, wozu ein Brief gehört — Personen, Schlagwörter und Geschichten (mit „Zuordnen"-Aktion, gegated über canBlogWrite, DocumentMetadataDrawer.svelte:210). Zeitstrahl-Ereignisse sind strukturell identisch („dieser Brief gehört zu diesen Ereignissen") und bekommen daher eine gleichwertige vierte/fünfte Spalte. Konsistent & auffindbar dort, wo Nutzer ohnehin „Zugehörigkeit" suchen.
ATop-Bar-Button „⊕ Zeitstrahl" — Mint-Akzent im Aktions-Cluster (DocumentTopBarActions). Öffnet ein kleines Popover zum Ein-Klick-Zuordnen, ohne den Drawer zu öffnen. Im Mobile-Menü als Eintrag.
+
B„Zeitstrahl"-Spalte im Details-Drawer — neue Spalte neben Geschichten. Zeigt verknüpfte Ereignisse (Titel · Datum · Tag-Chip), Unlink über ×, plus Quick-Add-Zeile. Nur sichtbar/aktiv bei canWrite.
D„+ Neu" → /zeitstrahl/events/new?documentId={id} — öffnet den Editor (§2) mit diesem Brief in Feld ⑤ vorbefüllt. Spiegelt /geschichten/new?documentId=.
+
+
+
+
+
5 · Quick-Action — Zustände
Der Typeahead in der Zeitstrahl-Spalte (oder im Top-Bar-Popover). Gleiches Muster wie DocumentMultiSelect, nur sucht es Ereignisse statt Dokumente.
TimelineEventController, WRITE_ALL; TimelineEventRequest mit documentIds / personIds
+
Backend — Link/Unlink
PUT /api/timeline/events/{id}
Verlinken/Lösen läuft über das Event-Update (documents-Set); kein neuer ErrorCode nötig
+
Barrierefreiheit
—
Picker-Dropdowns Tastatur-navigierbar (↑↓↵), aria-live für „verknüpft/gelöst"; 44px-Ziele; sichtbarer Fokus-Ring; Löschen/Unlink mit Bestätigung
+
+
+
Offene Designentscheidung: Soll der Top-Bar-Button (A) MVP sein oder reicht zunächst die Drawer-Spalte (B)? Empfehlung: B als MVP (spiegelt Geschichten exakt, geringster Aufwand), A als schneller Nachzug.
Kanonische Spezifikation für /zeitstrahl auf Basis von Konzept A „Der Lebensfaden": eine durchgehende vertikale Achse, die Personen-Lebensereignisse, kuratierte Ereignisse und Briefe zu einer Erzählung in der Zeit verwebt. Dieselbe Komponente betreibt den globalen Zeitstrahl und den per-Person „Lebensweg". Enthält die vollständige Fall-Abdeckung (leere Jahre, wenige Briefe, hunderte Briefe, undatiert) und die drei Gruppierungs-Modi.
+
+ Milestone #14 · Zeitstrahl
+ Konzept A — final
+ Phone-first · honest DatePrecision
+
+
Familienarchiv · 2026-06-08 · Leonie Voss, UX Lead · ersetzt die A/B/C-Exploration zeitstrahl-global-concepts.html
+
+
+
+
+
+
1 · Anatomie von Konzept A
+
Eine Achse, sieben Bausteine. Die Zeit ist die Achse — Lebensereignisse & Jahre als zentrierte Pillen unterbrechen den Faden (Text wird nie von der Linie gekreuzt), Welt-Ereignisse legen sich als Bänder quer, Briefe verdichten sich adaptiv.
+
+
+
+
⚭
Lebensereignis-Pille
Geburt * · Tod † · Heirat ⚭. Abgeleitet aus Person-Daten. Zentriert, gefüllt — unterbricht die Achse. Glyphen aus personLifeDates.ts.
+
★
Kuratierte Ereignis-Pille
PERSONAL — Umzug, Auswanderung. Mint-Rand. Editierbar im Kurator-Editor.
+
◍
Welt-Band
HISTORICAL — Krieg, Inflation. Gedämpftes Band quer über die Achse als Kontext.
+
Einzel-Brief
Kleiner Punkt + Karte, alternierend links/rechts. Wurzel-Tag-Farbchip. Link zu /documents/[id].
Ruhige/leere Jahre als dünne Span-Zeile gefaltet; UNKNOWN-Briefe im „Ohne Datum"-Eimer am Ende.
+
+
+
Gruppierungs-Umschalter (oben rechts im Zeitstrahl): DatumEreignisThema steuert nur, wie lose Briefe gebündelt werden. Lebensereignisse, kuratierte Ereignisse und Welt-Bänder bleiben in allen Modi gleich auf der Achse. Standard = Datum.
+
+
+
+
+
2 · Die drei Gruppierungs-Modi
+
Gleicher Ausschnitt (1914–1915), dreimal gerendert. Nur die losen Briefe ordnen sich um — die Achse bleibt stabil. Schmale Spaltenbreite = Phone-/Lebensweg-Form derselben Komponente.
+
+
+
+
+
+
+
Datum Chronologisch
+
Standard. Briefe nach Datum; dichte Jahre verdichten zum Strip. Reine Zeit-Reihung.
+
+
+
1914
+
⚭
Heirat: Karl & Elfriede
1914 · abgeleitet
+
◍ Erster Weltkrieg
1914–1918
+
✉ Kriegsausbruch — Brief an die Familie
Karl → Elfriede · 4. Aug 1914
+
+
1915
+
*
Geburt: Hans Raddatz
Sommer 1915 · abgeleitet
+
+
✉ 24 BriefeMonate ▾
+
+
+
+
+
+
+
+
+
Ereignis Kuratiert
+
Briefe bündeln unter kuratierte Ereignisse (TimelineEvent.documents). Erzählende Cluster statt Listen.
+
+
+
1914
+
⚭
Heirat: Karl & Elfriede
1914 · abgeleitet
+
◍ Erster Weltkrieg
1914–1918
+
+
1915
+
*
Geburt: Hans Raddatz
Sommer 1915 · abgeleitet
+
✉ Briefe von der Front · 24
Karl ⇄ Elfriede & Hans · 1915 ▾
Krieg
+
✉ Weihnachten 1915 · 3
kuratiertes Ereignis ▾
Weihnachten
+
+
+
+
+
+
+
Thema Nach Wurzel-Tag
+
Optional (Post-MVP). Lose Briefe je Jahr in Wurzel-Tag-Eimer; Mehrfach-Tags dedupliziert auf den primären.
+
+
+
1914
+
⚭
Heirat: Karl & Elfriede
1914 · abgeleitet
+
◍ Erster Weltkrieg
1914–1918
+
Krieg6 ▾
+
+
1915
+
*
Geburt: Hans Raddatz
Sommer 1915 · abgeleitet
+
Krieg › Briefe von der Front24 ▾
+
Weihnachten3 ▾
+
Familie2 ▾
+
+
+
Hinweis im UI: „Brief mit mehreren Tags erscheint unter seinem primären Tag."
+
+
+
+
+
+
+
+
3 · Vollständige Vorschau — alle Dichte-Fälle
+
Ein durchgehender Zeitstrahl (Desktop, zentrale Achse) von 1899 bis „Ohne Datum". Jeder Dichte-Fall kommt genau einmal vor — von leeren Jahren bis zu hunderten Briefen.
+
+
+
+ Abgedeckte Fälle:
+ ① leere Jahre (gefaltete Lücke) ·
+ ② wenige Briefe ≤ 3 (einzelne Karten) ·
+ ③ hunderte Briefe (Jahres-Strip + Sparkline) ·
+ ④ kuratiertes Ereignis & Welt-Band ·
+ ⑤ ungenaue Präzision (Sommer, ca.) ·
+ ⑥ undatierte Briefe (Ohne-Datum-Eimer).
+
+
+
+
Zeitstrahl
+
Die Familie Raddatz · 1899–1950 · 412 Briefe · 38 Ereignisse · Gruppierung: Datum
+
+
① Leere Jahre → gefaltet
+
+
+
+
1899 – 1908 · keine Einträge
+
+
+
1909
+
② Wenige Briefe → einzeln
+
✉ Brief aus Stettin
Elfriede → Karl · Mai 1909
Familie
+
✉ Geburtstagsgruß
Karl → Hans · Sep 1909
+
✉ Brief zum Jahresende
Karl → Elfriede · Dez 1909
Weihnachten
+
+
+
1914
+
⚭Heirat: Karl & Elfriede Raddatz1914 · abgeleitet aus Beziehung
+
④ Welt-Band (RANGE 1914–1918)
+
◍ Erster Weltkrieg1914–1918 · historisch · 187 Briefe in dieser Zeit
+
+
+
1915
+
③ Hunderte Briefe → Jahres-Strip⑤ „Sommer 1915"
+
*Geburt: Hans RaddatzSommer 1915 · abgeleitet · SEASON
★Auswanderung nach ArgentinienFrühjahr 1924 · persönlich · kuratiert
+
+
+
1925 – 1950 · keine Einträge
+
+
+
+
⑥ Undatiert → eigener Eimer am Ende
+
+
Ohne Datum · 11 Briefe
+
Brief ohne JahresangabePräzision UNKNOWN
+
Fragment, Absender unklar+ 9 weitere ▾
+
+
+
Kein erfundenes Datum: undatierte Briefe wandern nie spekulativ in ein Jahr, sondern bleiben sichtbar im Eimer. RANGE-Einträge (Krieg) erscheinen einmal im Start-Jahr mit Spannen-Marker, nicht in jedem überspannten Jahr.
+
+
+
+
4 · Datums-Präzision (geteilt von Ereignissen & Briefen)
Eine Render-Logik für alle datierten Einträge — dateLabel.ts, gespeist von DatePrecision.
+
+
+
DatePrecision
Darstellung
Beispiel
Wirkung auf der Achse
+
DAY
vollständiges Datum
28. Juli 1914
exakte Sortierung im Jahres-Band
+
MONTH
Monat + Jahr
Juli 1914
Monats-Sortierung
+
SEASON
Jahreszeit + Jahr
Sommer 1914
grobe Reihung
+
YEAR
nur Jahr
1914
ans Band-Ende
+
APPROX
„ca." + Jahr
ca. 1914
mit „ca."-Marker
+
RANGE
Start–Ende
1914–1918
Start-Jahr, Spannen-Marker, nicht dupliziert
+
UNKNOWN
undatiert
Ohne Datum
eigener Eimer am Ende
+
+
+
+
+
+
5 · Responsiv — eine Komponente, drei Breiten
Identisches Markup & identische Daten. Nur die Achs-Position wechselt per Container-Query.
+
+
▏
≥ 1024px · Desktop
Zentrale Achse, Briefe alternierend links/rechts, Welt-Bänder über volle Breite. Pillen unterbrechen die Linie.
Der „Zeitstrahl" unter /zeitstrahl ist die globale Familien-Chronik. Diese Exploration beantwortet zuerst die entscheidende Frage — warum sollte jemand den Zeitstrahl benutzen statt einfach durch die sortierte Suchliste zu scrollen? — und zeigt dann drei Layout-Konzepte, die genau das tun, was die Suche nicht kann: drei Ebenen zu einer Erzählung in der Zeit verweben.
Die Gefahr: zwei Seiten, die wie dasselbe wirken. Wenn der Zeitstrahl nur „Briefe, chronologisch" zeigt, fragt jeder zu Recht — wozu? Der Unterschied ist nicht die Sortierung. Es sind die drei Ebenen und der historische Kontext, die nur hier zusammenkommen.
+
+
+
+
+
+
/documents · nach Datum sortiertEINE EBENE
+
+
Brief über die Lage an der Westfront
Karl → Elfriede Raddatz
Mär 1915
+
Feldpost aus Verdun
Hans → Karl Raddatz
Jul 1915
+
Brief an die Eltern
Karl → Elfriede Raddatz
Sep 1915
+
Päckchen-Dank
Karl → Elfriede Raddatz
Nov 1915
+
Nur Briefe. Keine Geburten, keine Hochzeiten, kein Krieg. Warum 1915 so viele Feldpostbriefe? Die Liste sagt es nicht — man muss es wissen.
+
+
+
+
vs
+
+
+
+
/zeitstrahl · die Familie in der ZeitDREI EBENEN
+
+
+
1914
+
⚭ Heirat: Karl & Elfriede Raddatz· abgeleitet
+
Erster Weltkrieg 1914–1918 · historisch
+
1915
+
4 Briefe· Feldpost von der Westfront
+
* Geburt: Hans Raddatz· abgeleitet
+
1918
+
Kriegsende Nov 1918 · historisch
+
+
+
+
+
+
Der Aha-Moment: Plötzlich ergeben die vier Feldpostbriefe von 1915 Sinn — sie liegen zwischen Hochzeit und Kriegsende, neben der Geburt des Sohnes. Die Suche findet Dokumente. Der Zeitstrahl erzählt, was mit der Familie geschah. Das ist kein sortierter Listenfilter — es ist eine Erzählung, die die Suche strukturell nicht leisten kann.
+
+
+ Fünf Dinge, die nur der Zeitstrahl kann — und die jede Konzept-Variante sichtbar machen muss:
+
+
① Personen-Lebensereignisse (Geburt *, Tod †, Heirat ⚭) — abgeleitet aus kuratierten Personendaten, gibt es in der Suche gar nicht.
+
② Kuratierte Ereignisse — persönlich (Umzug, Auswanderung) & historisch (Krieg, Inflation), redaktionell, immer korrekt.
+
③ Historischer Kontext-Hintergrund — Weltereignisse als Bänder hinter den Briefen erklären, warum Briefe sich häufen.
+
④ Ehrliche Datums-Präzision — ca. 1914, Sommer 1914, „Ohne Datum"-Eimer. Nie ein erfundenes Datum.
+
⑤ Verwobene Erzählung statt Trefferliste — eine durchgehende vertikale Geschichte über 50 Jahre, kein paginiertes Suchergebnis.
+
+
+
+
+
+
+
2 · Die drei Ebenen — visuelle Sprache
+
Jede Ebene muss auf den ersten Blick unterscheidbar sein. Diese Kodierung gilt in allen drei Konzepten gleich — nur das Layout ändert sich, nicht die Bedeutung der Farben & Glyphen.
+
+
+
+
+
⚭
+
Abgeleitetes Lebensereignis
Geburt * · Tod † · Heirat ⚭ — automatisch aus Person.birthDate / deathDate / SPOUSE_OF.fromYear. Große Navy-Knoten auf der Achse. Glyphen * / † aus personLifeDates.ts. Badge „abgeleitet", nicht im Zeitstrahl editierbar.
+
+
+
★
+
Kuratiertes persönliches Ereignis
EventType.PERSONAL — von der Familie geschrieben (Umzug, Krankheit, Auswanderung). Mint-Akzent, Serifen-Titel, optionaler Beschreibungstext. Editierbar über /zeitstrahl/events/[id]/edit.
+
+
+
◍
+
Historisches Ereignis (Welt)
EventType.HISTORICAL — Krieg, Inflation. Gedämpftes Slate-Band quer über die Achse als Kontext-Hintergrund. Bewusst zurückhaltend, damit Familie im Vordergrund bleibt.
+
+
+
✉
+
Brief
Platziert nach Document.documentDate. Kleine Mint-Punkte, kompakte Karte (Absender → Empfänger), verlinkt zu /documents/[id]. Häufungen clustern unter dem Ereignis, zu dem sie gehören.
+
+
+
+
+
+
DatePrecision
Deutsche Darstellung
Beispiel
Wirkung auf der Achse
+
DAY
vollständiges Datum
28. Juli 1914
sortiert exakt innerhalb des Jahres-Bandes
+
MONTH
Monat + Jahr
Juli 1914
sortiert nach Monat innerhalb des Bandes
+
SEASON
Jahreszeit + Jahr
Sommer 1914
grobe Reihung im Band
+
YEAR
nur Jahr
1914
ans Ende des Jahres-Bandes
+
APPROX
„ca." + Jahr
ca. 1914
mit „ca."-Marker, Jahres-Band
+
RANGE
Start–Ende
1914–1918
im Start-Jahr mit Spannen-Marker, nicht dupliziert
+
UNKNOWN
undatiert
Ohne Datum
eigener Eimer ganz am Ende
+
+
+
+
+
+
+
+
+
A
+
+
Konzept A · Erzählend
+
Der Lebensfaden — eine durchgehende Achse
+
Eine einzige vertikale Spine läuft von oben nach unten durch alle Jahre. Lebensereignisse sitzen als große Knoten auf dem Faden, historische Ereignisse legen sich als Bänder dahinter, Briefe zweigen als kleine Punkte ab. Liest sich wie eine Familien-Saga, von 1899 bis 1950 am Stück scrollbar.
+
DifferenzierungMaximaler Abstand zur Suche — gar keine Listen-Anmutung. Der Faden ist eine Geschichte, kein Suchergebnis.
+
Trade-off: bei dichten Brief-Jahren kann der Faden lang werden — braucht eine Quiet-Year-Kompression (mehrere ereignislose Jahre als ein dünner Abschnitt).
+
+
+
+
+
+
+
Familienarchiv
+
+
+
Zeitstrahl
+
Die Familie Raddatz · 1899–1950 · 412 Briefe, 38 Ereignisse
+
+
+
+
+
+
+
+
*
+
Geburt: Karl Raddatz
+
14. März 1901 · abgeleitet
+
+
+
+
+
⚭
+
Heirat: Karl & Elfriede
+
1914 · abgeleitet
+
+
+
+
+
◍ Erster Weltkrieg
+
1914–1918 · historisch
+
+
+
+
+
+
1915
+
+
✉ Brief über die Westfront
+
Karl → Elfriede · Mär 1915
+
Krieg › Briefe von der Front
+
+
+
✉ Feldpost aus Verdun
+
Hans → Karl · Jul 1915 · +2 weitere
+
Krieg › Briefe von der Front
+
+
+
+
+
+
◍ Hyperinflation
+
1923 · historisch
+
+
+
+
+
★
+
Auswanderung nach Argentinien
+
Frühjahr 1924 · persönlich
+
+
+
+
+
+
+
+
+
Warum dieses Layout
+
+
Ein Faden, keine Karten-Liste. Schon die Silhouette signalisiert „Geschichte", nicht „Suchtreffer".
+
Hierarchie über Knotengröße: Lebensereignisse 16px-Knoten, kuratierte 11px, Briefe 7px-Punkte. Das Auge liest zuerst die Meilensteine.
+
Welt-Bänder hinterlegt in gedämpftem Slate — präsent, aber nie konkurrierend mit der Familie.
+
Brief-Cluster fassen Häufungen zusammen („+2 weitere") statt 24 Zeilen zu zeigen — genau hier unterscheidet es sich von der Liste.
+
+
Offene Fragen
+
+
Quiet-Year-Kompression: ereignislose Jahre als dünner „1925–1929"-Abschnitt zusammenfalten?
+
Tap auf Cluster → expandiert inline oder springt in die gefilterte Suche?
+
+
+
+
+
+
+
+
+
+
+
B
+
+
Konzept B · Strukturiert
+
Jahres-Bänder — drei Spuren pro Jahr
+
Jedes Jahr ist ein volle-Breite-Abschnitt (wie die bestehende ChronikTimeline). Innerhalb des Bandes machen drei Spuren — Personen · Welt · Briefe — das Verweben explizit und scannbar. Auf dem Desktop nebeneinander, auf dem Phone gestapelt. Sehr lesbar, senioren-freundlich.
+
DifferenzierungDie drei Spuren zeigen die drei Ebenen als Struktur — man sieht sofort, dass hier mehr als Briefe leben.
+
Trade-off: bändriger, weniger „flüssige Saga" als A. Leere Spuren in ruhigen Jahren brauchen eine elegante Leer-Behandlung.
+
+
+
+
+
+
+
Familienarchiv
+
+
+
Zeitstrahl
+
Die Familie Raddatz · 1899–1950
+
+
+
+
+ 1914
+ 2 EREIGNISSE · 6 BRIEFE
+
+
+
+
Personen
+
⚭Heirat: Karl & Elfriede Raddatz
+
+
+
+
Welt
+
◍Erster Weltkrieg beginnt · 28. Juli 1914
+
+
+
+
Briefe · 6
+
+
+
+
+ Kriegsausbruch — Brief an die Familie →
+
+
+
+
+
+
+
+ 1915
+ 1 EREIGNIS · 24 BRIEFE
+
+
+
Personen
+
*Geburt: Hans Raddatz
+
+
+
Briefe · 24 Feldpost
+
✉ Brief über die Lage an der Westfront
Karl → Elfriede · März 1915 · 23 weitere ▾
Krieg › Briefe von der Front
+
+
+
+
+
+ 1916 – 1918ruhige Jahre · 9 Briefe ▾
+
+
+
+
+
+
+
Warum dieses Layout
+
+
Drei benannte Spuren machen das Versprechen explizit — „hier sind Personen, Welt und Briefe", nicht nur Dokumente.
+
Baut auf vorhandenem Idiom: Jahres-Band = ChronikTimeline-Sektion mit Navy-Header. Schnell umsetzbar, vertraut.
+
Senioren-stark: klare Boxen, große Jahreszahl, ruhiges Raster — kein überlagertes Spine-Lesen nötig.
+
Ruhige Jahre kollabieren zu einer dünnen Zeile — hält das Scrollen kurz.
+
+
Desktop-Enhancement
+
+
Die drei Spuren werden drei Spalten nebeneinander (Personen | Welt | Briefe) statt gestapelt — das Verweben wird horizontal lesbar.
+
+
+
+
+
+
+
+
+
+
+
C
+
+
Konzept C · Navigierbar
+
Spine + Dichte-Schiene — 50 Jahre im Griff
+
Eine dünne vertikale Dichte-Schiene am linken Rand (dieselbe Balken-Sprache wie der Such-Dichtefilter, nur hochkant) zeigt Brief-Volumen pro Jahr plus Ereignis-Markierungen — und dient zugleich als Mini-Map & Sprung-Navigation. Rechts die verwobene Erzählung. Verbindet Vertrautheit mit dem Dichtefilter und ist doch klar eine andere Oberfläche.
+
DifferenzierungÜber 50 Jahre at-a-glance navigierbar — etwas, das eine paginierte Suchliste nie bietet. Dichte wird zur Landkarte.
+
Trade-off: Die Schiene kostet horizontale Breite — auf 320px muss sie sehr schmal (oder ausklappbar) sein. Nähe zum Dichtefilter könnte verwirren, wenn nicht klar getrennt.
+
+
+
+
+
+
+
Familienarchiv
+
+
+
+
+
DICHTE
+
+
+
1900
+
+
+
+
1915
+
+
+
+
1923
+
+
+
1950
+
+
+
+
+
+
Zeitstrahl
+
Familie Raddatz · 1915 ▾
+
+
+
+
+
+
*
+
Geburt: Hans Raddatz
+
Sommer 1915 · abgeleitet
+
+
+
+
◍ Erster Weltkrieg
+
1914–1918
+
+
+
+
+
✉ Brief über die Westfront
Karl → Elfriede · Mär 1915
+
✉ Feldpost aus Verdun
Hans → Karl · Jul 1915 · +22 ▾
+
+
+
+
+
+
+
+
+
Warum dieses Layout
+
+
Dichte-Schiene als Mini-Map: 50 Jahre Brief-Volumen auf einen Blick, Tap springt zum Jahr. Das kann keine Suchliste.
+
Ereignis-Marker (weiß = Lebensereignis, slate = Welt) auf der Schiene zeigen, wo etwas passiert ist — nicht nur wo Briefe sind.
+
Vertraute Sprache, klar getrennter Kontext: dieselben Balken wie /documents, aber hochkant + als Navigation, nicht als Filter.
+
Hier in Dark Mode gezeigt — Mint wird zum Auswahl-/Akzentton, wie im Dichtefilter-Spec.
+
+
320px-Verhalten
+
+
Schiene schrumpft auf ~24px (nur Balken + Jahrzehnt-Ticks) oder klappt hinter ein „Karte"-Icon.
+
+
+
+
+
+
+
+
+
+
+
+
3 · Desktop-Ansichten — A vs. B im direkten Vergleich
+
Auf /zeitstrahl gibt es Breite, die das Phone nicht hat. Hier entscheidet sich A gegen B: A nutzt die Breite für eine dramatische, alternierende Erzähl-Achse; B nutzt sie, um die drei Ebenen als drei echte Spalten nebeneinander lesbar zu machen.
persönlich · Herbst 1915 · „Die Wohnung in der Kastanienallee …"
+
+
+
+
+
+
+
+
+
+
Was die Breite hier gewinnt
+
+
Alternierende Seiten — Briefe links, kuratierte Ereignisse rechts; das Auge zickzackt die Geschichte entlang. Maximal un-listenhaft.
+
Lebensereignisse & Jahre als zentrierte Meilenstein-Pillen, deren gefüllter Hintergrund die Achse unterbricht — der Spine läuft nie durch den Text, sondern endet sauber an der Pille.
+
Welt-Bänder über die volle Breite — der historische Kontext umschließt buchstäblich die Briefe darunter.
+
+
+
+
Risiken für Senioren / A11y
+
+
Alternierende Lese-Richtung ist anstrengender. Mitigation: nie wichtige Info nur rechtsbündig; auf <1024px kollabiert A in die einseitige Phone-Achse.
+
DOM-Reihenfolge bleibt streng chronologisch (eine <ol>) — Screenreader liest die Saga linear, egal welche Seite.
6 Briefe · „Kriegsausbruch — Brief an die Familie" →
+
+
+
+
+
+
1915
+
+
*Geburt: Hans Raddatz
+
+
+ — im Krieg —
+
+
+
✉ Brief über die Westfront
Karl → Elfriede · Mär 1915 · 23 weitere ▾
Krieg
+
+
+
+
+
+
1923
+
—
+
+
◍Hyperinflation ca. 1923
+
+
3 Briefe
+
+
+
+
+
+
+
+
Was die Breite hier gewinnt
+
+
Drei Spalten = drei Ebenen, dauerhaft sichtbar. Das Verweben wird zur lesbaren Tabelle: Auge wandert pro Jahr quer durch Familie → Welt → Briefe.
+
Gemeinsame Jahres-Achse links bindet die Spalten — man sieht sofort „1915: Geburt, Krieg läuft, 24 Feldpost".
+
Leere Zellen erzählen mit („— im Krieg —") statt zu verschwinden.
+
+
+
+
Risiken / A11y
+
+
Tabellarischer, weniger „Saga". Dafür senioren-stärker: ruhige Spalten, keine alternierende Lese-Richtung.
+
<1024px: die drei Spalten stapeln zu den drei Spuren aus dem Phone-Konzept (siehe §B oben) — ein Markup, zwei Layouts via Container-Query.
+
+
+
+
+
+
+
+
4 · Wiederverwendung: „Lebensweg" in der Personenansicht
+
Dieselbe TimelineView-Komponente mit personId-Prop, gefiltert auf eine Person. Sie zieht in die linke 35%-Spalte der Personenseite ein, direkt unter die PersonCard (persons/[id]/+page.svelte:60–67). Weil diese Spalte schmal ist, ist es exakt das Phone-Layout in Spaltenbreite — kein zweites Design nötig.
+
+
+
Platzierung im echten Layout: Die Personenseite ist lg:grid-cols-[35%_65%]. Links: PersonCard + NameHistoryCard → wird zu PersonCard + Lebensweg. Rechts (65%): Korrespondenten, Beziehungen, Dokumente bleiben unverändert. Der Lebensweg filtert auf diese Person: ihre Geburt/Heirat/Tod, Ereignisse an denen sie beteiligt ist, ihre gesendeten/empfangenen Briefe.
Der Lebensweg sitzt unter der PersonCard in der 35%-Spalte. Gefiltert auf Karl: eigene Geburt/Heirat/Tod, beteiligte Welt-Ereignisse als Kontext, eigene Brief-Cluster. <TimelineView personId={person.id} />
+
+
+
… und so verhalten sich A vs. B in der schmalen Lebensweg-Spalte
Bei Spaltenbreite (~330px) ist die Entscheidung wichtig: A bleibt eine klare Faden-Achse, B muss seine drei Spuren stapeln.
Spuren stapeln zu Mini-Sektionen pro Jahr. Mehr Struktur, aber höher & mehr Scroll im engen Rail.
+
+
+
+
Konsequenz für die Wahl
+
+
A skaliert nahtlos von Rail (330px) über Phone bis Desktop — ein Layout-Idiom, drei Breiten.
+
B braucht zwei Modi: gestapelt im Rail/Phone, Spalten auf Desktop. Mehr Code, aber explizitere Ebenen-Trennung.
+
Da der Lebensweg denselben Component nutzt, zählt die Rail-Tauglichkeit doppelt — sie ist ein echtes Argument für A.
+
+
+
+
+
+
+
+
+
5 · Brief-Gruppierung & Tag-Farben
+
Die Zeit ist die Achse — nicht das Thema. Briefe gruppieren wir nach Datum (Standard), echte Bündel entstehen über kuratierte Ereignisse, und Tags dienen als Farb-Akzent & Filter. So bleibt der Zeitstrahl eine Zeit-Oberfläche und konkurriert nicht mit der /themen-Seite.
+
+
+
+ Warum nicht primär nach Tags gruppieren? Ein Dokument hat mehrere Tags (ManyToMany). Ein Brief mit WeihnachtenundLazarett hätte keinen eindeutigen Eimer — duplizieren verfälscht Zählungen, willkürlich wählen verfälscht die Bedeutung. Daten sind exklusiv, Themen nicht. Außerdem spannt Weihnachten jeden Dezember 1899–1950 — das ist genau die Themen-Seite, nicht der Zeitstrahl.
+
+
+
+
+
+
+
① Gruppierungs-Umschalter
+
+ Datum
+ Ereignis
+ Thema
+
+
Standard = Datum. „Ereignis" bündelt unter kuratierte Ereignisse, „Thema" (optional, Post-MVP) nach Wurzel-Tag.
+
+
② Cluster-Karte (Ereignis)
+
+
+ ✉
+ Briefe von der Front
+ Krieg
+ 24 Briefe
+ ▾
+
+
+
Brief über die Lage an der WestfrontMär 1915
+
Feldpost aus VerdunJul 1915
+
+ 22 weitere · alle öffnen →
+
+
+
Ein Jahr mit 24 Feldpostbriefen wird zu einer erzählenden Zeile statt 24 Treffern — der schärfste Unterschied zur Suche. Quelle: TimelineEvent.documents.
+
+
+
+
+
③ Tag-Farb-Chips am Brief
+
Die Farbe kommt vom Wurzel-Tag (Tag.color ist nur auf Root gesetzt). Kinder erben sie: Lazarett & Briefe von der Front tragen die Farbe von Krieg. Nie Farbe allein — immer Punkt + Label.
+
+
+
+
✉ Weihnachtsgruß an Elfriede
+
Karl → Elfriede · Dez 1915
+ Weihnachten › Weihnachtsgrüße
+
+
+
✉ Brief aus dem Lazarett
+
Hans → Karl · Aug 1916
+ Krieg › Lazarett
+
+
+
✉ Brief zum neuen Jahr
+
Elfriede → Karl · Jan 1916 · 2 Tags
+ Weihnachten
+ Familie
+
+
+
Mehrere Tags → mehrere Chips. Unter „Thema"-Gruppierung erscheint der Brief nur unter seinem primären Tag (dedupliziert, mit Hinweis).
+
+
+
+
+
④ Lose Briefe ohne Cluster — adaptive Verdichtung
+
Lose Briefe (kein Ereignis, Modus „Datum") nie einzeln auflisten — 412 Briefe würden die Erzählung sprengen. Stattdessen verdichtet der Zeitstrahl nach Datum, adaptiv: wenige Briefe pro Jahr einzeln, viele als verdichteter Jahres-Strip mit 12-Monats-Sparkline. Gleiche Daten & Logik wie der Such-Dichtefilter — MonthBucket + aggregateToYears aus lib/document/timeline.ts.
+
+
+
+
+
Ruhiges Jahr · ≤ 3 lose Briefe → einzeln
+
+
1909
+
✉ Brief aus Stettin
Elfriede → Karl · Mai 1909
+
✉ Geburtstagsgruß
Karl → Hans · Sep 1909
+
+
Unter dem Schwellwert: jeder Brief als eigene Karte mit Tag-Chip.
+
+
+
+
Dichtes Jahr · > 3 → Jahres-Strip mit Sparkline
+
+
1915
+
+
+ ✉ 24 Briefe
+ Monats-Dichte ▾
+
+
+
+
+
JanDez
+
+
+
Über dem Schwellwert: ein Strip mit 12-Monats-Sparkline. Tap → Monate → einzelne Briefe, oder „im Suchergebnis öffnen →".
+
+
+
+
Disclosure-Leiter: Jahres-Strip → Monats-Gruppen → einzelne Briefe. Auf jeder Stufe gilt der Schwellwert; die unterste Stufe verlinkt in die gefilterte Dokumentsuche (/documents?from=1915-01-01&to=1915-12-31) — die Brücke zur dritten Oberfläche, dem Dichtefilter. So bleibt der Zeitstrahl Erzählung und delegiert die vollständige Liste an die Suche, die genau dafür gebaut ist.
+
+
+
⑤ Wie Cluster entstehen — Kuratierung von zwei Seiten
+
Manuelle Gruppierung = ein TimelineEvent mit verknüpften Dokumenten. Zwei Einstiegspunkte, ein Datenmodell (TimelineEvent.documents): Ereignis-zuerst (Kurator baut den Zeitstrahl, verlinkt viele Briefe auf einmal) und Dokument-zuerst (beim Lesen eines Briefs schnell zuordnen).
Form-Actions-Muster, WRITE_ALL. Dokument-Mehrfach-Picker = Bulk-Linking. Auch inline „+ Ereignis" auf jedem Jahres-Band.
+
+
+
+
+
B · Quick-Add · /documents/[id]
+
+
… Dokument-Detail · Seitenleiste …
+
+
Zeitstrahl-Ereignis
+
✉Briefe von der Front✓ verknüpft
+
Ereignis wählen ▾+ Neues Ereignis
+
+
+
Beim Lesen eines Briefs: bestehendes Ereignis wählen oder direkt neu anlegen — verlinkt diesen einen Brief. Schreibt dieselbe TimelineEvent.documents-Relation.
+
+
+
+
+ Wo Tags stark sind — als Filter: „nur Krieg" verengt den gesamten Zeitstrahl über alle 50 Jahre auf Kriegsbriefe — die Zeit-Achse bleibt erhalten. Genau das kann die Themen-Seite nicht. Tag-Filter ist additiv, nicht duplikativ.
+
+
+
+
+
+
6 · Empfehlung & nächster Schritt
+
+
Konzept A als Basis, mit der Spur-Klarheit von B und der Schiene von C als Stufe 2.
+
A (Lebensfaden) trifft die Differenzierungs-Frage am direktesten: es sieht null wie eine Suchliste aus und macht die verwobene Erzählung zur Hauptfigur. Die drei benannten Spuren aus B sind die beste Antwort, falls Nutzer-Tests zeigen, dass „welche Ebene ist das?" unklar bleibt — sie lassen sich als Desktop-Enhancement in A einziehen. Die Dichte-Schiene aus C ist die richtige Lösung für „50 Jahre navigieren", aber Stufe 2 — sie löst Navigation, nicht Differenzierung, und kann nachgerüstet werden.
+
Für alle gilt: Brief-Cluster statt Brief-Listen sind der schärfste Unterschied zur Suche — ein Jahr mit 24 Feldpostbriefen wird zu einer erzählenden Zeile („24 Feldpost, Westfront"), nicht zu 24 Treffern. Genau hier hört der Zeitstrahl auf, eine sortierte Suche zu sein. Nächster Schritt: dieses Konzept für die Person-Detail-„Lebensweg"-Ansicht (gefilterte Variante) durchdeklinieren.
+
+
+
+
+
7 · Design-Tokens (echte, ausgelieferte Werte)
Direkt aus frontend/src/routes/layout.css. Keine Hardcodes in den Komponenten — nur diese Tokens.
+
+
+
Rolle
Token / Utility
Wert
Einsatz im Zeitstrahl
+
Spine / Knoten / Header
brand-navy · --palette-navy
#012851
Achsen-Spine, Lebensereignis-Knoten, Jahres-Header, Titel