[Spike-1086] Prototype YAML-driven KB help center

Story 1086Epic None100 files · +12374/−4653

PR #257 · pramaan-io/pramaan-app · merged 2026-06-08

Why this matters

Help text shouldn't need a deploy to stay correct

When the product moves and the help doesn't, the user is stuck.

Help went stale the day the product moved.

The fix — Content on disk, validated by schema, rendered by route — help stays in lockstep with the product.

How it flows

sequenceDiagram
  autonumber
  participant author as Content Author
  participant manifest as Manifest
  participant parser as Zod Parser
  participant app as App Route
  participant user as User
  author->>manifest: writes article.en.mdx
  manifest->>parser: reads & validates
  parser->>app: typed content
  app->>user: renders /help route

What changed, file by file

First KB article in the prototype; its zod-validated frontmatter (title, audience, updated) lets the help center render it without code changes, and the same source feeds the Forums settings help drawer.

New fields: title : Add a forumaudience : Firm Adminsupdated : Jun 2026

Second KB article aimed at Everyone, establishing that one MDX source powers both the full guide route and the inline drawer — no more duplicated, drifting strings.

New fields: audience : Everyoneupdated : Jun 2026

Section manifest for the Forums topic; its title field feeds the HelpHome section list and proves the YAML/manifest contract holds for the prototype.

New fields: title : Forums

Files changed (100)

File±
content/kb/forums/_section.yml+4
content/kb/forums/add-a-forum/1-add-forum.svg+9
content/kb/forums/add-a-forum/article.en.mdx+26
content/kb/forums/add-a-forum/hero.svg+10
content/kb/forums/what-is-a-forum/1-forums-list.svg+11
content/kb/forums/what-is-a-forum/article.en.mdx+26
content/kb/forums/what-is-a-forum/hero.svg+8
content/kb/manifest.yml+11
docs/design/kb-content-authority.md+55
messages/en.json+37 −1
messages/hi.json+37 −1
openapi/app-api.json ★+4115 −2770
package.json+1
pnpm-lock.yaml+47 −36
src/app/[locale]/(workspace)/help/[section]/[article]/page.tsx+91
src/app/[locale]/(workspace)/help/[section]/page.tsx+38
src/app/[locale]/(workspace)/help/page.tsx+33 −27
src/app/[locale]/(workspace)/settings/matter-configuration/filing-types/actions.ts+1 −54
src/app/[locale]/(workspace)/settings/matter-configuration/filing-types/page.tsx+6 −19
src/app/[locale]/(workspace)/settings/matter-configuration/forums/page.tsx+7 −1
src/components/kb/HelpArticle.stories.tsx+38
src/components/kb/HelpArticle.tsx+86
src/components/kb/HelpDrawer.tsx+88
src/components/kb/HelpHome.stories.tsx+49
src/components/kb/HelpHome.tsx+92
src/components/kb/PopularRow.tsx+34
src/components/kb/SectionList.tsx+38
src/components/kb/TopicCard.stories.tsx+33
src/components/kb/TopicCard.tsx+36
src/components/kb/kb-fixtures.ts+60
src/components/settings/filing-types/filing-type-applies-to-field.tsx+0 −57
src/components/settings/filing-types/filing-type-sheet.stories.tsx+2 −18
src/components/settings/filing-types/filing-type-sheet.tsx+6 −25
src/components/settings/filing-types/filing-types-fixtures.ts+0 −4
src/components/settings/filing-types/filing-types-list-page.tsx+0 −4
src/components/settings/filing-types/filing-types-types.ts+0 −10
src/components/settings/filing-types/use-filing-type-sheet.tsx+5 −26
src/components/settings/forums/forums-list-page.stories.tsx+2 −1
src/components/settings/forums/forums-list-page.tsx+13 −15
src/components/settings/forums/forums-page-actions.stories.tsx+39
src/components/settings/forums/forums-page-actions.tsx+45
src/gen/client/appArchiveParticipantLabel.ts+65
src/gen/client/appArchiveProceedingType.ts+65
src/gen/client/appAttachFilingTypeMatterType.ts+0 −81
src/gen/client/appCreateParticipantLabel.ts+69
src/gen/client/appCreateProceedingType.ts+68
src/gen/client/appDeleteParticipantLabel.ts+65
src/gen/client/appDeleteProceedingType.ts+65
src/gen/client/appDetachFilingTypeMatterType.ts+0 −70
src/gen/client/appListParticipantLabels.ts+57
src/gen/client/appListProceedingTypes.ts+57
src/gen/client/appUnarchiveParticipantLabel.ts+67
src/gen/client/appUnarchiveProceedingType.ts+65
src/gen/client/appUpdateParticipantLabel.ts+76
src/gen/client/appUpdateProceedingType.ts+75
src/gen/client/index.ts+12 −2
src/gen/hooks/index.ts+56 −8
src/gen/hooks/useAppArchiveParticipantLabel.ts+152
src/gen/hooks/useAppArchiveProceedingType.ts+152
src/gen/hooks/useAppAttachFilingTypeMatterType.ts+0 −177
src/gen/hooks/useAppCreateParticipantLabel.ts+156
src/gen/hooks/useAppCreateProceedingType.ts+156
src/gen/hooks/useAppDeleteParticipantLabel.ts+152
src/gen/hooks/useAppDeleteProceedingType.ts+152
src/gen/hooks/useAppDetachFilingTypeMatterType.ts+0 −164
src/gen/hooks/useAppListParticipantLabels.ts+119
src/gen/hooks/useAppListParticipantLabelsSuspense.ts+118
src/gen/hooks/useAppListProceedingTypes.ts+119
src/gen/hooks/useAppListProceedingTypesSuspense.ts+117
src/gen/hooks/useAppUnarchiveParticipantLabel.ts+156
src/gen/hooks/useAppUnarchiveProceedingType.ts+152
src/gen/hooks/useAppUpdateParticipantLabel.ts ★+167
src/gen/hooks/useAppUpdateProceedingType.ts+162
src/gen/index.ts ★+386 −69
src/gen/schemas/attachedMatterTypeView.json+0 −45
src/gen/schemas/filingTypeAttachRequest.json+0 −14
src/gen/schemas/filingTypeDetailView.json+1 −59
src/gen/schemas/filingTypeListItem.json+0 −7
src/gen/schemas/filingTypeListResponse.json+0 −7
src/gen/schemas/filingTypeSource.json+0 −7
src/gen/schemas/matterTypeDetailView.json+1 −55
src/gen/schemas/matterTypeFilingTypeView.json+0 −38
src/gen/schemas/matterTypeListItem.json+1 −8
src/gen/schemas/matterTypeListResponse.json+1 −8
src/gen/schemas/participantLabelAvailability.json+7
src/gen/schemas/participantLabelCreateRequest.json+21
src/gen/schemas/participantLabelListResponse.json+126
src/gen/schemas/participantLabelUpdateRequest.json+34
src/gen/schemas/participantLabelView.json+107
src/gen/schemas/proceedingTypeAvailability.json+7
src/gen/schemas/proceedingTypeCreateRequest.json+21
src/gen/schemas/proceedingTypeListResponse.json+126
src/gen/schemas/proceedingTypeUpdateRequest.json+34
src/gen/schemas/proceedingTypeView.json+107
src/gen/types/AppArchiveParticipantLabel.ts+77
src/gen/types/AppArchiveProceedingType.ts+77
src/gen/types/AppAttachFilingTypeMatterType.ts+0 −89
src/gen/types/AppCreateParticipantLabel.ts+77
src/gen/types/AppCreateProceedingType.ts+77
src/gen/types/AppDeleteParticipantLabel.ts+75