Control Panel Specifications
List
Admin listing. Filters (status, category, sponsor, language readiness, date range). Per-row + bulk actions. Permission-aware row controls.
Complete
The Admin listing is the entry point for every Founder File regardless of status. It is a server-driven table with full-text search, multi-filter panel, sort, pagination, per-row action menu, and multi-select bulk actions. The Form preview at the bottom shows the filter panel as the Admin sees it.
Search box
- Purpose — Free-text search across the file's display fields. The fastest way to find a specific file when the Admin already knows its name or topic.
- DB type — Full-text index on `FounderFileLang.Title`, `FounderFileLang.Subtitle`, `FounderFileLang.FullDescription`, `FounderFile.Slug`. Query: `CONTAINS((Title, Subtitle, FullDescription, Slug), @term)` across all 3 language rows joined to the file. Min 2 chars before fire; debounce 250 ms client-side.
- Validation — QC tests: search "fund" → matches files with `funding` in title across EN/AR/FR; search Arabic `تمويل` → matches AR titles; search the exact slug `founders-business-economics-glossary` → matches one row; search 1 char → no request fires.
Filters (server-side, combinable AND)
Status
- Purpose — Slice the list by lifecycle stage. The most-used filter — reviewers live on `under-review`, editors live on `draft + needs-updates`.
- DB type — Multi-select. Query: `WHERE Status IN (@statuses)`. Default value = ALL minus `archived` (archived hidden by default to keep the list focused on live work).
- Validation — QC tests: open listing fresh → archived files do NOT appear; tick only `under-review` → only those files show; tick `archived` explicitly → archived files appear with the soft-grey style.
Category
- Purpose — Single-select category filter. Reuses the SHARED Category taxonomy with Articles — picking Funding here matches any file whose CategoryId resolves to the `funding` slug.
- DB type — `WHERE CategoryId = @categoryId` (joined to Category for label display).
- Validation — QC tests: pick a category → row count matches a direct SQL query against the same `WHERE` clause; verify the dropdown options match the Articles Category options exactly (shared taxonomy).
Sponsor
- Purpose — Find all files linked to a specific sponsor — used by the editorial-business team during contract renewals.
- DB type — Single-select with type-ahead. Options: `None` (SponsorId IS NULL) + every active row in `FounderFileSponsor`. Query: `WHERE SponsorId = @sponsorId` or `WHERE SponsorId IS NULL`.
- Validation — QC tests: type "Bank" → dropdown filters live; pick "None" → only files with NULL SponsorId appear.
Language readiness
- Purpose — Find files that are missing one or more language rows. Editorial Lead uses this to flag files that should not have been allowed to leave draft.
- DB type — Derived predicate over `FounderFileLang` count per FileId. Options: `All-3-ready` (3 rows), `2-of-3`, `EN-only`, `AR-only`, `FR-only`, `Incomplete` (any row missing required fields).
- Validation — QC tests: pick `EN-only` → files with FounderFileLang rows ONLY for `en` lang appear; pick `All-3-ready` → all returned files have exactly 3 rows + each row passes the trilingual gate.
Date range
- Purpose — Time-bound the listing for "what changed this week / month / quarter" reports.
- DB type — Admin chooses the timestamp column (CreatedAt / PublishedAt / LastUpdatedAt) + start + end dates. Query: `WHERE {chosenColumn} BETWEEN @start AND @end`.
- Validation — Preset ranges: Last 7 / 30 / 90 days. QC tests: pick "Last 7 days on PublishedAt" → only files with PublishedAt within the last 7 calendar days appear.
Visible columns + per-row actions
- Cover thumbnail (3:4 mini) · Title (with `(N langs)` suffix) · Category badge · Status badge · Sponsor name · Last updated (relative) · Leads count · Kebab menu.
- Kebab actions: Edit · View public page (disabled if not published) · Preview as founder · View leads · Submit for review (only draft / needs-updates with 3-lang ready) · Archive (disabled if pending leads) · Restore (only archived within 90 days).
Bulk actions (selection ≥ 2)
- Submit for review · Archive · Reassign sponsor (same-tier only) · Export metadata CSV.
- QC test: select 5 files where only 3 have 3-lang ready, click bulk Submit → 3 succeed, 2 fail with per-file error toasts naming the missing language(s).
Form preview — Filter panel
The filter panel renders as a left rail on the listing. Search sits at the top of the table, sort is a header dropdown.
