Skip to main content
Source snapshot: 13 October 2026. These pages describe the current implementation, including unfinished controls. See coverage and review notes.

Committee office bearers

Host: admin.<ROOT_DOMAIN> · Route: /[tenant]/committee

Purpose and access

Maintain committee posts and the member assigned to each office.You need an account session and a resolved membership context in the selected Mahallu (including the API’s current platform elevation path). The API independently checks the requested operation’s permissions and feature availability.

Screen layout

The roster lists posts and offers Add post, Edit, and Remove. The post dialog captures member, designation, display order, and term start/end dates.

Fields and displayed information

Displayed table columns: Designation, Member, Term, Actions.

Fields and filters: Committee post form dialog

Actions

Linked navigation

Interaction sequence

Add post → complete the post details → save → refresh. Edit opens the saved post; Remove opens a confirmation before the delete request.

States and rules

Committee access is permission-gated. An empty roster has its own message. Office-bearer records are distinct from platform roles and tenant administrator permissions.The rendered action controls bind loading indicators to pending state. Failed API saves keep their documented error/notification path; a loading indicator alone does not establish persistence.

Implementation references

Paths below are relative to the application repository. This is source-reviewed behavior, not a recorded browser test.
  • apps/web/src/app/sites/admin/[tenant]/committee/page.tsx
  • apps/web/src/features/tenants/committee-roster.tsx
  • apps/web/src/features/tenants/committee-post-form-dialog.tsx
Data and access helpers: apps/web/src/lib/session.ts, apps/web/src/lib/server-api.ts, apps/web/src/lib/tenants.ts, apps/web/src/lib/committee.ts, apps/web/src/lib/members.ts, apps/web/src/lib/api-client.tsRelevant controller permission keys: committee.view, committee.create, committee.update, committee.delete. Keys are operation-specific; the current guard grants OWNER/ADMIN and its platform-elevation context an operational bypass. A visible control still does not establish authorization.

API behavior references

  • apps/api/src/committee/committee.controller.ts