Globale Zeitleiste #3

Closed
opened 2026-08-17 22:29:45 +00:00 by florian.wilde · 3 comments
Owner

Derselbe Verlauf, aber projektübergreifend als eigene Seite

Angelegt aus Nebula in Nebula.

Derselbe Verlauf, aber projektübergreifend als eigene Seite _Angelegt aus [Nebula](https://nebula.wilde-ste.de/projects/cms2wvhe9000opb01h8c8ajxn) in Nebula._
florian.wilde added the in-arbeit label 2026-08-17 23:36:28 +00:00
florian.wilde started working 2026-08-17 23:36:40 +00:00
Author
Owner

🤖 Claude Code hat mit der Umsetzung begonnen.

  • Branch: feat/3-globale-zeitleiste
  • Verstanden als: Eine eigene Seite /verlauf, die den Aktivitätsverlauf fortlaufend über alle Projekte zeigt — ohne Wochengrenze, nach Kalendertagen gegliedert, mit Nachladen älterer Einträge.
  • Geplantes Vorgehen:
    • Erste Seite serverseitig gerendert, weitere über /api/activity nachgeladen
    • Cursor-Blättern über (createdAt, id) statt skip/offset: der Verlauf schreibt mehrere Einträge im selben Moment (etwa beim Übernehmen von Issues), und mit Offset überspringt oder verdoppelt man dann Zeilen
    • Datentrennung über project: { ownerId }, wie im Wochenrückblick
    • Wiederverwendet aus #2: Tagesbündelung, Zeilendarstellung und die Symbolzuordnung aus components/activityKinds

Abgrenzung zu #2: Der Wochenrückblick fasst eine Woche mit Kennzahlen zusammen. Die Zeitleiste hat keine Grenze und kein Fazit — sie läuft einfach weiter zurück.

Zeiterfassung läuft.

🤖 **Claude Code hat mit der Umsetzung begonnen.** - Branch: `feat/3-globale-zeitleiste` - Verstanden als: Eine eigene Seite `/verlauf`, die den Aktivitätsverlauf **fortlaufend** über alle Projekte zeigt — ohne Wochengrenze, nach Kalendertagen gegliedert, mit Nachladen älterer Einträge. - Geplantes Vorgehen: - Erste Seite serverseitig gerendert, weitere über `/api/activity` nachgeladen - **Cursor-Blättern** über `(createdAt, id)` statt `skip`/`offset`: der Verlauf schreibt mehrere Einträge im selben Moment (etwa beim Übernehmen von Issues), und mit Offset überspringt oder verdoppelt man dann Zeilen - Datentrennung über `project: { ownerId }`, wie im Wochenrückblick - Wiederverwendet aus #2: Tagesbündelung, Zeilendarstellung und die Symbolzuordnung aus `components/activityKinds` **Abgrenzung zu #2:** Der Wochenrückblick fasst eine Woche mit Kennzahlen zusammen. Die Zeitleiste hat keine Grenze und kein Fazit — sie läuft einfach weiter zurück. Zeiterfassung läuft.
florian.wilde worked for 18 minutes 2026-08-17 23:54:57 +00:00
florian.wilde added zu-testen and removed in-arbeit labels 2026-08-17 23:55:33 +00:00
Author
Owner

✅ Umsetzung abgeschlossen — bereit zum Testen.

Was geändert wurde

  • Neue Seite /verlauf: fortlaufender Verlauf über alle Projekte, nach Kalendertagen gegliedert, mit „Ältere laden“
  • Neuer Endpunkt /api/activity mit Cursor-Blättern über (createdAt, id) — nicht skip. Bei Blöcken gleicher Zeitstempel (Issue-Übernahme) verliert oder verdoppelt Offset sonst lautlos Zeilen
  • Cursor-Logik als prüfbare Funktion in lib/timeline, samt Deckelung der Seitengröße und Abweisen unbrauchbarer Cursor
  • Zeile und Tagesgruppen nach components/ActivityRow gezogen — Wochenrückblick und Zeitleiste nutzen jetzt dieselbe Darstellung statt zweier Kopien
  • Erreichbar über Schnellsuche und einen Verweis vom Wochenrückblick

Geänderte Dateien

  • src/app/verlauf/page.tsx · src/app/api/activity/route.ts (neu)
  • src/components/Timeline.tsx · src/components/ActivityRow.tsx (neu)
  • src/lib/timeline.ts · src/lib/timeline.test.ts (neu)
  • src/components/WeeklyReview.tsx · src/components/CommandPalette.tsx · src/app/rueckblick/page.tsx
  • e2e/api.spec.ts · e2e/ui.spec.ts

So testest du es

  1. git switch feat/3-globale-zeitleiste
  2. npm run docker:db und npm run dev
  3. Strg+K → „Verlauf“ (oder vom Wochenrückblick aus „Ganzer Verlauf“)
  4. Erwartet: Vorgänge vom Neuesten rückwärts, nach Tagen gruppiert, jede Zeile mit Projektbezug
  5. „Ältere laden“ mehrfach drücken → es kommt weiter zurück, ohne dass eine Zeile doppelt erscheint; unten steht, wie viele geladen sind
  6. Ist alles geladen, steht dort „Das war alles.“

Nachgerechnet: gegen 144 Einträge mit absichtlichen Blöcken identischer Zeitstempel — 15 Seiten, 144 Zeilen, 0 Dubletten, streng absteigend.

Aufgefallen (kein Teil dieses PRs): Der Anwendungsname in der Kopfleiste bricht bei 320–375 px zu „Neb…“ ab. Das betrifft alle Seiten gleichermaßen und besteht schon länger — gemessen, nicht geschätzt. Gehört als eigene Aufgabe ins Dashboard.

Aufgewendete Zeit: 00:18
Pull Request: #6

Nach Freigabe: /issue-freigabe 3

✅ **Umsetzung abgeschlossen — bereit zum Testen.** <!-- claude-status branch: feat/3-globale-zeitleiste pr: 6 zeit_sekunden: 1097 --> **Was geändert wurde** - Neue Seite `/verlauf`: fortlaufender Verlauf über alle Projekte, nach Kalendertagen gegliedert, mit „Ältere laden“ - Neuer Endpunkt `/api/activity` mit **Cursor-Blättern** über `(createdAt, id)` — nicht `skip`. Bei Blöcken gleicher Zeitstempel (Issue-Übernahme) verliert oder verdoppelt Offset sonst lautlos Zeilen - Cursor-Logik als prüfbare Funktion in `lib/timeline`, samt Deckelung der Seitengröße und Abweisen unbrauchbarer Cursor - Zeile und Tagesgruppen nach `components/ActivityRow` gezogen — Wochenrückblick und Zeitleiste nutzen jetzt dieselbe Darstellung statt zweier Kopien - Erreichbar über Schnellsuche und einen Verweis vom Wochenrückblick **Geänderte Dateien** - `src/app/verlauf/page.tsx` · `src/app/api/activity/route.ts` *(neu)* - `src/components/Timeline.tsx` · `src/components/ActivityRow.tsx` *(neu)* - `src/lib/timeline.ts` · `src/lib/timeline.test.ts` *(neu)* - `src/components/WeeklyReview.tsx` · `src/components/CommandPalette.tsx` · `src/app/rueckblick/page.tsx` - `e2e/api.spec.ts` · `e2e/ui.spec.ts` **So testest du es** 1. `git switch feat/3-globale-zeitleiste` 2. `npm run docker:db` und `npm run dev` 3. `Strg+K` → „Verlauf“ (oder vom Wochenrückblick aus „Ganzer Verlauf“) 4. Erwartet: Vorgänge vom Neuesten rückwärts, nach Tagen gruppiert, jede Zeile mit Projektbezug 5. „Ältere laden“ mehrfach drücken → es kommt weiter zurück, ohne dass eine Zeile doppelt erscheint; unten steht, wie viele geladen sind 6. Ist alles geladen, steht dort „Das war alles.“ **Nachgerechnet:** gegen 144 Einträge mit absichtlichen Blöcken identischer Zeitstempel — 15 Seiten, 144 Zeilen, 0 Dubletten, streng absteigend. **Aufgefallen (kein Teil dieses PRs):** Der Anwendungsname in der Kopfleiste bricht bei 320–375 px zu „Neb…“ ab. Das betrifft **alle** Seiten gleichermaßen und besteht schon länger — gemessen, nicht geschätzt. Gehört als eigene Aufgabe ins Dashboard. **Aufgewendete Zeit:** 00:18 **Pull Request:** #6 Nach Freigabe: `/issue-freigabe 3`
Author
Owner

🚀 Freigegeben und nach main übernommen.

  • Merge-Commit: 0ef0b3d
  • Pull Request: #6 (gemergt)
  • Gesamtaufwand: 00:18

Vor dem Merge geprüft: tsc sauber, 261 Unit-Tests grün, PR ohne Konflikte.

Issue wird geschlossen.

🚀 **Freigegeben und nach `main` übernommen.** <!-- claude-status merge: 0ef0b3d pr: 6 zeit_sekunden: 1097 --> - Merge-Commit: `0ef0b3d` - Pull Request: #6 (gemergt) - Gesamtaufwand: 00:18 Vor dem Merge geprüft: `tsc` sauber, 261 Unit-Tests grün, PR ohne Konflikte. Issue wird geschlossen.
florian.wilde removed the zu-testen label 2026-08-18 01:13:21 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 18 minutes
florian.wilde
18 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/nebula#3