Files
familienarchiv/docs/architecture/c4/l3-frontend-3c-people-stories.puml
Marcel fee519b8a9
All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 5m28s
CI / OCR Service Tests (pull_request) Successful in 26s
CI / Backend Unit Tests (pull_request) Successful in 6m25s
CI / fail2ban Regex (pull_request) Successful in 48s
CI / Semgrep Security Scan (pull_request) Successful in 25s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m10s
SDD Gate / RTM Check (pull_request) Successful in 18s
SDD Gate / Contract Validate (pull_request) Successful in 28s
SDD Gate / Constitution Impact (pull_request) Successful in 17s
docs(timeline): document /zeitstrahl, lib/timeline, monthBuckets move; RTM #779
Route tables (CLAUDE.md + frontend/CLAUDE.md), the document/timeline.ts ->
$lib/shared/utils/monthBuckets move (document + shared READMEs), GLOSSARY
Lebensweg entry, the c4 l3-frontend people-stories diagram, and the RTM rows
REQ-001..027 for feature zeitstrahl-global-view (#779), all marked Done.

Refs #779
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-13 20:00:00 +02:00

4.9 KiB

Component Diagram: Web Frontend — People, Stories & DiscoveryComponent Diagram: Web Frontend — People, Stories & DiscoveryWeb Frontend (SvelteKit / SSR)[system]«component»/persons and/persons/[id][SvelteKit Routes] Person directory(server-side filtered +paginated) and detail.Directory:type/family/has-documentschips, reader default(familyMember ORdocumentCount > 0),writer-only show-all toggle.Detail: metadata, documentlist sent/received,correspondents, familyrelationships.«component»/persons/[id]/edit and/persons/new[SvelteKit Routes] Create and edit personforms. Edit: metadata,aliases, explicitrelationships. Actions:PUT/POST /api/persons.«component»/persons/review[SvelteKit Route] Transcriber triage view(WRITE-gated link). Listsprovisional persons; per-rowMerge / Umbenennen /Bestätigen / Löschen.Actions: POST /merge, PUT/{id}, PATCH /{id}/confirm,DELETE /{id}.«component»/aktivitaeten[SvelteKit Route] Unified activity feed(Chronik). Loader: GET/api/dashboard/activity andGET/api/notifications?read=false.«component»/geschichten and/geschichten/[id][SvelteKit Routes] Story/Journey list and detailpages. List:GeschichteListRow withREISE badge for JOURNEYtype. Detail: dispatches toStoryReader (rich text +persons) or JourneyReader(intro + orderedJourneyItemCard/JourneyInterludeitems + empty state) basedon GeschichteType.BLOG_WRITE users seeedit/delete actions. Loader:GET /api/geschichten, GET/api/geschichten/{id}.«component»/geschichten/[id]/editand /geschichten/new[SvelteKit Routes] Story editor and creationflow. New: TypeSelector(STORY/JOURNEY radiogroup with roving tabindex)→ StoryCreate (TipTaprich text, person linking,POST /api/geschichten) orJourneyCreate (title + firstitem). Edit: branches onGeschichteType â€” STORYopens GeschichteEditor(TipTap body +GeschichteSidebar incl.StoryDocumentPanel:document linking viaPOST/DELETE /items);JOURNEY opensJourneyEditor (title, introtextarea, orderedJourneyItemRow list withdrag-reorder +move-up/down,JourneyAddBar fordocument/interludeaddition,GeschichteSidebar).JourneyEditor mutations:POST/DELETE /items, PUT/items/reorder, PATCH/items/{id}. RequiresBLOG_WRITE permission.«component»/stammbaum[SvelteKit Route] Family tree visualisation.Loader: GET /api/network(nodes + edges). Rendersinteractive family tree fromnetwork graph data.«component»/zeitstrahl[SvelteKit Route] Global timeline (Zeitstrahl).SSR loader: GET/api/timeline ->TimelineDTO. Renderslib/timeline/TimelineView(Datum mode): year bands(YearBand) with EventPill /WorldBand / LetterCard,dense-year YearLetterStrip(shared Sparkline +monthHistogram), foldedGapSpan for empty-yearruns, and an undatedbucket. personId prop is theper-person Lebenswegseam (issue #10),undefined here.«component»/themen[SvelteKit Route] Browsable topic index.Shows all root tags as cardswith color bars and childrows. ThemenWidget alsoembedded in the homedashboard (reader + editorsidebar). Loader: GET/api/tags/tree.«component»/profile[SvelteKit Route] Current user profilesettings. Loader: GET/api/users/me/notification-preferences.Actions: updatename/password andnotification preferences.«component»/users/[id][SvelteKit Route] Public user profile view.Loader: GET /api/users/{id}.«person»User«container»API Backend[Spring Boot]Browses familymembers[HTTPS / Browser]GET /api/persons(filter + page params->PersonSearchResult),GET /api/persons/{id}[HTTP / JSON]GET/api/persons/{id},PUT/api/persons/{id},POST /api/persons[HTTP / JSON]GET/api/persons?provisional=true,PATCH/api/persons/{id}/confirm,DELETE/api/persons/{id},POST/api/persons/{id}/merge[HTTP / JSON]GET/api/dashboard/activity,GET /api/notifications[HTTP / JSON]GET /api/geschichten,GET/api/geschichten/{id},DELETE/api/geschichten/{id}[HTTP / JSON]GET /api/persons/{id}(pre-populate), POST/api/geschichten, PUT/api/geschichten/{id},POST/DELETE/api/geschichten/{id}/items,PUT/api/geschichten/{id}/items/reorder,PATCH/api/geschichten/{id}/items/{itemId}[HTTP / JSON]GET /api/network[HTTP / JSON]Reads the familytimeline[HTTPS / Browser]GET /api/timeline ->TimelineDTO[HTTP / JSON]GET /api/tags/tree[HTTP / JSON]GET/PUT/api/users/me,notification-preferences[HTTP / JSON]GET /api/users/{id}[HTTP / JSON]