Files
igny8/v2/Live Docs on Server/igny8-app-docs/audits/pages-audit.md
IGNY8 VPS (Salman) 128b186865 temproary docs uplaoded
2026-03-23 09:02:49 +00:00

1140 lines
50 KiB
Markdown

# Pages Audit — Complete Inventory
> Generated from comprehensive file-by-file review of `frontend/src/pages/`
---
## Legend
| Field | Description |
|---|---|
| **Component** | Export name |
| **Purpose** | One-line description |
| **Origin** | `tailadmin-original` · `tailadmin-modified` · `custom` · `placeholder` |
| **UI Patterns** | Layout/interaction patterns used |
| **Shared Components** | Imports from `components/` |
| **Local Sub-components** | Page-specific child components (in `components/` subdirs) |
| **Pattern Duplication** | Repeated code that could be extracted |
| **Template** | Which template system is used (if any) |
---
## 1. Dashboard
### Dashboard/Home.tsx (~300 lines)
| Field | Value |
|---|---|
| **Component** | `Home` |
| **Purpose** | Main dashboard with workflow pipeline, quick actions, analytics widgets, and site overview |
| **Origin** | `custom` |
| **UI Patterns** | Widget grid layout (3-col responsive), floating action button, site filter, AI period filter |
| **Shared Components** | `PageMeta`, `WorkflowGuide`, `Button`, `usePageContext` |
| **Local Sub-components** | `NeedsAttentionBar`, `WorkflowPipelineWidget`, `QuickActionsWidget`, `AIOperationsWidget`, `RecentActivityWidget`, `ContentVelocityWidget`, `AutomationStatusWidget`, `SitesOverviewWidget`, `CreditsUsageWidget`, `AccountInfoWidget`, `KeywordLibraryStatsWidget` (all from `components/dashboard/`) |
| **Pattern Duplication** | None — all widgets properly extracted |
| **Template** | None (custom widget grid) |
---
## 2. Planner
### Planner/Keywords.tsx (~800 lines)
| Field | Value |
|---|---|
| **Component** | `Keywords` |
| **Purpose** | Keyword management table with CRUD, filters, bulk actions, import/export, auto-clustering |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, cascading filters from backend, debounced search, volume range dropdown with refs, header metrics from API totals, bulk action with progress modal |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | `useKeywordsImportExport` hook (from `components/keywords-library/`) |
| **Pattern Duplication** | Cascading filter pattern repeated in Clusters/Ideas; header metrics calculation repeated in all Planner pages; volume range dropdown is inline (not extracted) |
| **Template** | `TablePageTemplate` + `createKeywordsPageConfig()` |
### Planner/Clusters.tsx (~700 lines)
| Field | Value |
|---|---|
| **Component** | `Clusters` |
| **Purpose** | Cluster management table with CRUD, filters, bulk idea generation |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, cascading filters, header metrics from API totals, StandardThreeWidgetFooter |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Near-identical to Keywords.tsx — cascading filter loading, header metrics pattern, footer widget pattern |
| **Template** | `TablePageTemplate` + `createClustersPageConfig()` |
### Planner/ClusterDetail.tsx (~280 lines)
| Field | Value |
|---|---|
| **Component** | `ClusterDetail` |
| **Purpose** | Detail view for single cluster with tabs (articles, pages, products, taxonomy) |
| **Origin** | `custom` |
| **UI Patterns** | Param-driven detail view, inline tab implementation (Button-based with border-bottom), tabbed content types, breadcrumb back navigation |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Badge`, `useToast` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Custom inline tab implementation — does NOT use a shared Tab component; duplicates tab pattern seen in Sites/Settings |
| **Template** | None (custom detail view) |
### Planner/Ideas.tsx (~700 lines)
| Field | Value |
|---|---|
| **Component** | `Ideas` |
| **Purpose** | Content ideas management with queue-to-writer bulk action |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, cascading filters, header metrics, bulk queue action with progress modal |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Near-identical to Keywords/Clusters — same cascading filter + header metrics + footer pattern. **Bug**: `sectors` prop passed twice in pageConfig creation |
| **Template** | `TablePageTemplate` + `createIdeasPageConfig()` |
---
## 3. Writer
### Writer/Content.tsx (~550 lines)
| Field | Value |
|---|---|
| **Component** | `Content` (Writer) |
| **Purpose** | Content drafts table (status='draft') with generate image prompts, optimize, send to optimizer, view on WordPress actions |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, locked status filter, per-row AI actions, inline optimization via `optimizerApi` |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same table page pattern as Planner pages |
| **Template** | `TablePageTemplate` + `createContentPageConfig()` |
### Writer/Tasks.tsx (~500+ lines)
| Field | Value |
|---|---|
| **Component** | `Tasks` |
| **Purpose** | Writing tasks management with content generation and image generation bulk actions |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, per-row content generation, bulk image generation |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same table page pattern as Planner/Writer pages |
| **Template** | `TablePageTemplate` + `createTasksPageConfig()` |
### Writer/Review.tsx (~500 lines)
| Field | Value |
|---|---|
| **Component** | `Review` |
| **Purpose** | Content review queue (status='review') with approve single/bulk actions |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, approval workflow, event-based refresh |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same table pattern. **Note**: Uses different event name (`'site-changed'` vs `'siteChanged'` used elsewhere) |
| **Template** | `TablePageTemplate` + `createReviewPageConfig()` |
### Writer/Approved.tsx (~550+ lines)
| Field | Value |
|---|---|
| **Component** | `Approved` |
| **Purpose** | Approved content ready for publishing with extensive publishing workflow (single/bulk publish, schedule, reschedule) |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, multi-modal publishing workflow, schedule management |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `ProgressModal`, `useToast`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | `PublishingProgressModal`, `BulkPublishingModal`, `PublishLimitModal`, `ScheduleContentModal`, `BulkScheduleModal`, `BulkSchedulePreviewModal`, `ErrorDetailsModal` (from `components/publishing/`, `components/BulkWordPressPublish/`) |
| **Pattern Duplication** | Base table pattern same; extensive modal system is specific to this page |
| **Template** | `TablePageTemplate` + `createApprovedPageConfig()` |
### Writer/Images.tsx (~550+ lines)
| Field | Value |
|---|---|
| **Component** | `Images` |
| **Purpose** | Image management grouped by content (one row per content) with image generation queue |
| **Origin** | `custom` |
| **UI Patterns** | Config-driven table, **client-side** filtering/sorting/pagination (not server-side), image generation queue flow, settings pre-fetch |
| **Shared Components** | `PageHeader`, `StandardThreeWidgetFooter`, `FormModal`, `useToast`, `useSiteStore`, `useSectorStore` |
| **Local Sub-components** | `ImageQueueModal`, `SingleRecordStatusUpdateModal` (from `components/`) |
| **Pattern Duplication** | Client-side filtering is an anomaly vs. other table pages that use server-side; base table pattern same |
| **Template** | `TablePageTemplate` + `createImagesPageConfig()` |
### Writer/ContentView.tsx (~67 lines)
| Field | Value |
|---|---|
| **Component** | `ContentView` |
| **Purpose** | Individual content detail view (thin wrapper loading content by ID) |
| **Origin** | `custom` |
| **UI Patterns** | Param-driven detail view, loading state, error handling |
| **Shared Components** | None directly (delegates to template) |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | `ContentViewTemplate` |
---
## 4. Publisher
### Publisher/ContentCalendar.tsx (~550+ lines)
| Field | Value |
|---|---|
| **Component** | `ContentCalendar` |
| **Purpose** | Content scheduling with calendar and list views, drag-drop reordering and date assignment |
| **Origin** | `custom` |
| **UI Patterns** | Dual view (calendar grid + list), drag-drop (list reorder + calendar date drop), complex derived state via useMemo, ButtonGroup view toggle |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard`, `Card`, `Button`, `IconButton`, `ButtonGroup`, `CalendarItemTooltip`, `ScheduleContentModal` |
| **Local Sub-components** | None (inline calendar grid rendering) |
| **Pattern Duplication** | Calendar rendering is fully inline (~200+ lines); shares `ScheduleContentModal` with Approved.tsx |
| **Template** | None (fully custom) |
### Publisher/PublishSettings.tsx (~500 lines)
| Field | Value |
|---|---|
| **Component** | `PublishSettings` |
| **Purpose** | Publishing automation, limits, and schedule configuration (3-card form layout) |
| **Origin** | `custom` |
| **UI Patterns** | 3-card form layout (Automation, Limits, Schedule), toggle switches, inline form validation |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `IconButton`, `Label`, `InputField`, `Switch` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Settings form pattern similar to Sites/Settings and account/ContentSettingsPage |
| **Template** | None (custom form layout) |
---
## 5. Sites
### Sites/List.tsx (~550+ lines)
| Field | Value |
|---|---|
| **Component** | `SitesList` |
| **Purpose** | Sites list with table/grid toggle, site CRUD, activation, deletion |
| **Origin** | `custom` |
| **UI Patterns** | Dual view (table + grid cards), ViewToggle, client-side filtering, inline deletion/toggle, WorkflowGuide |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Badge`, `Alert`, `Switch`, `InputField`, `Select`, `ViewToggle`, `WorkflowGuide`, `ConfirmDialog`, `SiteTypeBadge` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Table view uses `TablePageTemplate`; grid view is custom inline cards |
| **Template** | `TablePageTemplate` (table view only) + custom grid view |
### Sites/Dashboard.tsx (~500 lines)
| Field | Value |
|---|---|
| **Component** | `SiteDashboard` |
| **Purpose** | Individual site dashboard with setup checklist, quick actions, analytics |
| **Origin** | `custom` |
| **UI Patterns** | Widget layout, setup checklist, quick action cards, stat widgets |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard`, `SiteInfoBar`, `Card`, `Button` |
| **Local Sub-components** | `SiteSetupChecklist`, `SiteConfigWidget`, `OperationsCostsWidget`, `CreditAvailabilityWidget` (from `components/sites/`) |
| **Pattern Duplication** | Widget grid similar to Dashboard/Home but site-specific |
| **Template** | None (custom widget layout) |
### Sites/Settings.tsx (~1000+ lines)
| Field | Value |
|---|---|
| **Component** | `SiteSettings` |
| **Purpose** | Site settings with tabs (General, Automation, Integrations) — massive form |
| **Origin** | `custom` |
| **UI Patterns** | Tabbed form, SEO settings, industry/sector selection, AI settings, WordPress integration form |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `InputField`, `Select`, `SelectDropdown`, `Checkbox`, `Radio`, `TextArea`, `Switch`, `SiteInfoBar` |
| **Local Sub-components** | `AIAutomationSettings`, `WordPressIntegrationForm` (from `components/integration/`, `components/sites/`) |
| **Pattern Duplication** | Custom inline tab implementation (duplicates pattern in ClusterDetail); very large file that could be split into tab sub-components |
| **Template** | None (custom tabbed form) |
### Sites/Content.tsx (~500 lines)
| Field | Value |
|---|---|
| **Component** | `SiteContent` |
| **Purpose** | Site-specific content manager with manual table and custom filters |
| **Origin** | `custom` |
| **UI Patterns** | Manual table (not TablePageTemplate), custom filter cards, manual pagination |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `InputField`, `Select`, `SiteInfoBar` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Manual table implementation duplicates what `TablePageTemplate` provides; manual pagination duplicates template pagination |
| **Template** | None (custom manual table) |
### Sites/ContentStructure.tsx (416 lines)
| Field | Value |
|---|---|
| **Component** | `ContentStructure` |
| **Purpose** | Content organized by clusters with keyword table and content list |
| **Origin** | `custom` |
| **UI Patterns** | Cluster selector dropdown, keyword table, content list, inline tables |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Badge`, `Select`, `SiteInfoBar` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Manual inline tables duplicate TablePageTemplate capabilities |
| **Template** | None (custom cluster-based view) |
### Sites/PostEditor.tsx (672 lines)
| Field | Value |
|---|---|
| **Component** | `PostEditor` |
| **Purpose** | Full-featured post editor with SEO metadata, taxonomy, and content validation tabs |
| **Origin** | `custom` |
| **UI Patterns** | Tabbed editor (content, taxonomy, validation), form inputs, rich content editing |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, form components, `SiteInfoBar` |
| **Local Sub-components** | Content validation feature inline |
| **Pattern Duplication** | Tab implementation likely duplicates other inline tab patterns |
| **Template** | None (custom post editor) |
### Sites/PageManager.tsx (395 lines)
| Field | Value |
|---|---|
| **Component** | `PageManager` |
| **Purpose** | Drag-drop page reordering and management |
| **Origin** | `custom` |
| **UI Patterns** | Drag-and-drop with `react-dnd` + `HTML5Backend`, sortable list |
| **Shared Components** | `PageMeta`, `PageHeader`, `DndProvider`, `useDrag`, `useDrop` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Only page using `react-dnd` directly |
| **Template** | None (custom drag-drop interface) |
### Sites/SyncDashboard.tsx (460 lines)
| Field | Value |
|---|---|
| **Component** | `SyncDashboard` |
| **Purpose** | WordPress sync health dashboard with sync status, mismatches, and logs |
| **Origin** | `custom` |
| **UI Patterns** | Status cards, sync action buttons, mismatch list, log viewer |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Badge` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None (custom dashboard) |
### Sites/PublishingQueue.tsx (441 lines)
| Field | Value |
|---|---|
| **Component** | `PublishingQueue` |
| **Purpose** | Scheduled content queue with list/calendar view (site-specific) |
| **Origin** | `custom` |
| **UI Patterns** | Dual view (list + calendar), similar to ContentCalendar but site-scoped |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Duplicates much of `Publisher/ContentCalendar.tsx` but scoped to a single site |
| **Template** | None (custom queue view) |
### Sites/AIAutomationSettings.tsx (929 lines)
| Field | Value |
|---|---|
| **Component** | `AIAutomationSettings` |
| **Purpose** | Unified AI & automation settings per site (per SETTINGS-CONSOLIDATION-PLAN) |
| **Origin** | `custom` |
| **UI Patterns** | Multi-section settings form, stage configuration, unified settings API |
| **Shared Components** | `Card`, `Button`, `Switch`, `InputField`, `Label`, `Select` |
| **Local Sub-components** | Uses `unifiedSettings.api` with `UnifiedSiteSettings`, `StageConfig` types |
| **Pattern Duplication** | Large settings form pattern similar to Sites/Settings, Publisher/PublishSettings |
| **Template** | None (custom settings form) |
### Sites/DeploymentPanel.tsx (43 lines)
| Field | Value |
|---|---|
| **Component** | `DeploymentPanel` |
| **Purpose** | **DEPRECATED** — Placeholder showing deprecation notice |
| **Origin** | `custom` (deprecated) |
| **UI Patterns** | Static notice card |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None |
---
## 6. Automation
### Automation/AutomationPage.tsx (~1156 lines)
| Field | Value |
|---|---|
| **Component** | `AutomationPage` |
| **Purpose** | Main automation dashboard — run/pause/config pipeline, live progress tracking, activity log, eligibility checks |
| **Origin** | `custom` |
| **UI Patterns** | 7-stage pipeline visualization, live polling progress, server time display, eligibility gating, stage color coding |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard`, `DebugSiteSelector`, `Button`, `useToast`, `useSiteStore` |
| **Local Sub-components** | `ActivityLog`, `CurrentProcessingCardV2`, `GlobalProgressBar` (from `components/Automation/`) |
| **Pattern Duplication** | None — highly specialized |
| **Template** | None (custom automation dashboard) |
### Automation/AutomationOverview.tsx (269 lines)
| Field | Value |
|---|---|
| **Component** | `AutomationOverview` |
| **Purpose** | Production stats dashboard showing actual output metrics and meaningful run history |
| **Origin** | `custom` |
| **UI Patterns** | Quick action buttons with badge counts, production summary, run history list |
| **Shared Components** | `PageMeta`, `PageHeader`, `useToast`, `useSiteStore` |
| **Local Sub-components** | `MeaningfulRunHistory`, `ProductionSummary` (from `components/Automation/DetailView/`) |
| **Pattern Duplication** | None |
| **Template** | None (custom stats dashboard) |
### Automation/AutomationRunDetail.tsx (218 lines)
| Field | Value |
|---|---|
| **Component** | `AutomationRunDetail` |
| **Purpose** | Detailed view of a single automation run with stage breakdown, charts, and insights |
| **Origin** | `custom` |
| **UI Patterns** | Run summary card, 2-col layout (credit chart + stage accordion), insights panel, derived insights from data |
| **Shared Components** | `PageMeta`, `PageHeader`, `useToast`, `useSiteStore` |
| **Local Sub-components** | `RunSummaryCard`, `StageAccordion`, `EfficiencyMetrics`, `InsightsPanel`, `CreditBreakdownChart` (from `components/Automation/DetailView/`) |
| **Pattern Duplication** | None |
| **Template** | None (custom detail view) |
### Automation/PipelineSettings.tsx (399 lines)
| Field | Value |
|---|---|
| **Component** | `PipelineSettings` |
| **Purpose** | Configure 7-stage automation pipeline — per-stage enable/disable, batch sizes, delays |
| **Origin** | `custom` |
| **UI Patterns** | Multi-stage form with checkboxes and inputs per stage, save/cancel flow |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Checkbox`, `Select`, `InputField`, `useToast`, `useSiteStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Settings form pattern (similar to PublishSettings, Sites/Settings) |
| **Template** | None (custom pipeline settings form) |
---
## 7. Thinker
### Thinker/Prompts.tsx (499 lines)
| Field | Value |
|---|---|
| **Component** | `Prompts` |
| **Purpose** | AI prompt library — manage/edit/reset prompt templates for all AI operations (clustering, ideas, content, images, site structure) |
| **Origin** | `custom` |
| **UI Patterns** | Grouped prompt editor cards (Planner, Writer, Image, Site Builder sections), save/reset per prompt, TextArea editors |
| **Shared Components** | `PageMeta`, `PageHeader`, `Button`, `TextArea`, `useToast` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Repeating card+TextArea+save/reset pattern for each prompt type — could extract a `PromptEditorCard` component |
| **Template** | None (custom prompt editor layout) |
### Thinker/AuthorProfiles.tsx (160 lines)
| Field | Value |
|---|---|
| **Component** | `AuthorProfiles` |
| **Purpose** | CRUD for writing style profiles (name, tone, language) |
| **Origin** | `custom` |
| **UI Patterns** | Card grid, FormModal for create/edit, confirm-delete, CRUD API calls |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Badge`, `FormModal`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | FormModal CRUD pattern is clean and reusable |
| **Template** | None (card grid + FormModal) |
### Thinker/ImageTesting.tsx (28 lines)
| Field | Value |
|---|---|
| **Component** | `ImageTesting` |
| **Purpose** | **PLACEHOLDER** — "Coming Soon" for image testing |
| **Origin** | `placeholder` |
| **UI Patterns** | Static placeholder card |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same "Coming Soon" pattern as Profile, Strategies |
| **Template** | None |
### Thinker/Profile.tsx (22 lines)
| Field | Value |
|---|---|
| **Component** | `Profile` |
| **Purpose** | **PLACEHOLDER** — "Coming Soon" for AI profile settings |
| **Origin** | `placeholder` |
| **UI Patterns** | Static placeholder card |
| **Shared Components** | `PageMeta`, `ComponentCard` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same "Coming Soon" pattern as ImageTesting, Strategies |
| **Template** | None |
### Thinker/Strategies.tsx (28 lines)
| Field | Value |
|---|---|
| **Component** | `Strategies` |
| **Purpose** | **PLACEHOLDER** — "Coming Soon" for content strategies |
| **Origin** | `placeholder` |
| **UI Patterns** | Static placeholder card |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same "Coming Soon" pattern as ImageTesting, Profile |
| **Template** | None |
---
## 8. Optimizer
### Optimizer/ContentSelector.tsx (303 lines)
| Field | Value |
|---|---|
| **Component** | `OptimizerContentSelector` |
| **Purpose** | Content list for selecting items to optimize — single/batch optimize with entry point selection |
| **Origin** | `custom` |
| **UI Patterns** | Manual table with checkboxes, client-side filtering, batch selection, entry-point dropdown, manual pagination |
| **Shared Components** | `PageMeta`, `PageHeader`, `ModuleNavigationTabs`, `Button`, `Select`, `Checkbox`, `useToast`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | `ContentFilter`, `SourceBadge`, `OptimizationScores` (from `components/content/`, `components/optimizer/`) |
| **Pattern Duplication** | Manual table with inline pagination — duplicates TablePageTemplate capability; pagination buttons duplicate pattern seen in Linker, Sites/Content |
| **Template** | None (custom manual table) |
### Optimizer/AnalysisPreview.tsx (304 lines)
| Field | Value |
|---|---|
| **Component** | `AnalysisPreview` |
| **Purpose** | Preview optimization scores for a single content item without applying changes |
| **Origin** | `custom` |
| **UI Patterns** | Param-driven detail view, score cards, metadata coverage scorecards, recommended actions list |
| **Shared Components** | `PageMeta`, `PageHeader`, `useToast` |
| **Local Sub-components** | `OptimizationScores` (from `components/optimizer/`) |
| **Pattern Duplication** | None |
| **Template** | None (custom analysis view) |
---
## 9. Linker
### Linker/ContentList.tsx (237 lines)
| Field | Value |
|---|---|
| **Component** | `LinkerContentList` |
| **Purpose** | Content list for adding internal links — single/batch link processing |
| **Origin** | `custom` |
| **UI Patterns** | Manual table, per-row process button, batch processing, link results display, manual pagination |
| **Shared Components** | `PageMeta`, `PageHeader`, `ModuleNavigationTabs`, `Button`, `useToast`, `useSectorStore`, `usePageSizeStore`, `usePageLoading` |
| **Local Sub-components** | `SourceBadge`, `LinkResults` (from `components/content/`, `components/linker/`) |
| **Pattern Duplication** | Manual table + inline pagination — same pattern as Optimizer/ContentSelector and Sites/Content |
| **Template** | None (custom manual table) |
---
## 10. Settings (Admin/Legacy)
### Settings/Integration.tsx (~1028 lines)
| Field | Value |
|---|---|
| **Component** | `Integration` |
| **Purpose** | API integration management (OpenAI, Runware, GSC) — configure keys, test connections, image generation settings |
| **Origin** | `custom` |
| **UI Patterns** | Integration cards, validation cards, image generation/result cards, site integrations, FormModal for config |
| **Shared Components** | `PageMeta`, `IntegrationCard`, `ValidationCard`, `ImageGenerationCard`, `ImageResultCard`, `ImageServiceCard`, `SiteIntegrationsSection`, `Modal`, `FormModal`, `Button`, `Checkbox`, `Label`, `SelectDropdown`, `Alert`, `useToast` |
| **Local Sub-components** | Inline SVG icon components (OpenAIIcon, RunwareIcon, GSCIcon) |
| **Pattern Duplication** | Complex integration management — unique |
| **Template** | None (custom integration management) |
### Settings/Sites.tsx (~638 lines)
| Field | Value |
|---|---|
| **Component** | `Sites` (Settings) |
| **Purpose** | Admin site management — CRUD sites, manage sectors, toggle active sites |
| **Origin** | `custom` |
| **UI Patterns** | SiteCard grid, FormModal for create/edit, sector selector modal, confirm delete |
| **Shared Components** | `PageMeta`, `SiteCard`, `FormModal`, `ConfirmDialog`, `Button`, `Alert`, `Select`, `Checkbox`, `Badge`, `useToast` |
| **Local Sub-components** | Inline SiteIcon SVG |
| **Pattern Duplication** | Overlaps with `Sites/List.tsx` — both manage sites with different UIs |
| **Template** | None (card grid + modals) |
### Settings/WordPressIntegrationDebug.tsx (~655 lines)
| Field | Value |
|---|---|
| **Component** | `WordPressIntegrationDebug` |
| **Purpose** | WordPress integration health debugging — sync events, data validation, API status checks |
| **Origin** | `custom` |
| **UI Patterns** | Health status cards, sync event log, data validation table, debug toggle |
| **Shared Components** | `useSiteStore`, `useToast`, icons |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with Sites/SyncDashboard — both show WordPress sync health |
| **Template** | None (custom debug interface) |
### Settings/CreditsAndBilling.tsx (~238 lines)
| Field | Value |
|---|---|
| **Component** | `CreditsAndBilling` |
| **Purpose** | Usage overview with credit balance and transaction history |
| **Origin** | `custom` |
| **UI Patterns** | Tab toggle (overview/transactions), metric cards, transaction table |
| **Shared Components** | `PageMeta`, `ComponentCard`, `EnhancedMetricCard`, `Button`, `Badge`, `useToast` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Duplicates functionality in `account/UsageDashboardPage` and `Billing/Usage` |
| **Template** | None (custom billing view) |
### Settings/Plans.tsx (~218 lines)
| Field | Value |
|---|---|
| **Component** | `Plans` |
| **Purpose** | Display available subscription plans using PricingTable component |
| **Origin** | `custom` |
| **UI Patterns** | Pricing table display, plan feature extraction, URL-based plan preselection |
| **Shared Components** | `PageMeta`, `PricingTable1`, `useToast`, `usePageLoading`, `useAuthStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Plan display overlaps with `account/PlansAndBillingPage` |
| **Template** | None (pricing table) |
### Settings/Publishing.tsx (~226 lines)
| Field | Value |
|---|---|
| **Component** | `Publishing` |
| **Purpose** | Publishing rules, auto-publish, sync settings (TODO: mostly placeholder) |
| **Origin** | `custom` |
| **UI Patterns** | Settings form with checkboxes, dropdowns, PublishingRules component |
| **Shared Components** | `PageMeta`, `Card`, `Button`, `Checkbox`, `Label`, `Input`, `Select`, `PublishingRules`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with `Publisher/PublishSettings` |
| **Template** | None (custom settings form) |
### Settings/General.tsx (109 lines)
| Field | Value |
|---|---|
| **Component** | `GeneralSettings` |
| **Purpose** | App preferences (table records per page, default sort) |
| **Origin** | `custom` |
| **UI Patterns** | Simple settings form, settingsStore integration |
| **Shared Components** | `PageMeta`, `ComponentCard`, `Button`, `Label`, `InputField`, `Select`, `useSettingsStore`, `useToast` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None (ComponentCard form) |
### Settings/Industries.tsx (59 lines)
| Field | Value |
|---|---|
| **Component** | `Industries` (Settings) |
| **Purpose** | Admin industry template viewer (read-only card grid) |
| **Origin** | `custom` |
| **UI Patterns** | Card grid, badge for active status |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with `Reference/Industries` |
| **Template** | None (card grid) |
### Settings/Subscriptions.tsx (94 lines)
| Field | Value |
|---|---|
| **Component** | `Subscriptions` |
| **Purpose** | Admin subscription list (table of account subscriptions) |
| **Origin** | `custom` |
| **UI Patterns** | Simple table in Card, status badges |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None (simple table) |
### Settings/Users.tsx (79 lines)
| Field | Value |
|---|---|
| **Component** | `Users` |
| **Purpose** | Admin user list (table of account users) |
| **Origin** | `custom` |
| **UI Patterns** | Simple table in Card, role/status badges |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None (simple table) |
### Settings/Account.tsx (43 lines)
| Field | Value |
|---|---|
| **Component** | `AccountSettings` (Settings) |
| **Purpose** | **PLACEHOLDER** — "coming soon" for account settings |
| **Origin** | `placeholder` |
| **UI Patterns** | Static placeholder |
| **Shared Components** | `PageMeta`, `Card`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Functionality exists in `account/AccountSettingsPage` |
| **Template** | None |
### Settings/System.tsx (43 lines)
| Field | Value |
|---|---|
| **Component** | `SystemSettings` |
| **Purpose** | **PLACEHOLDER** — "coming soon" for system settings |
| **Origin** | `placeholder` |
| **UI Patterns** | Static placeholder |
| **Shared Components** | `PageMeta`, `Card`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None |
---
## 11. Billing (Legacy)
### Billing/Usage.tsx (170 lines)
| Field | Value |
|---|---|
| **Component** | `Usage` |
| **Purpose** | Credit usage overview with cost table and transaction history |
| **Origin** | `custom` |
| **UI Patterns** | Balance card, cost reference table, transaction list |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Duplicates `Settings/CreditsAndBilling` and `account/UsageDashboardPage` |
| **Template** | None |
### Billing/Credits.tsx (122 lines)
| Field | Value |
|---|---|
| **Component** | `Credits` |
| **Purpose** | Credit balance display with upgrade CTA |
| **Origin** | `custom` |
| **UI Patterns** | Balance cards, link to plans |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `Button`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with Usage page and account/UsageDashboardPage |
| **Template** | None |
### Billing/Transactions.tsx (103 lines)
| Field | Value |
|---|---|
| **Component** | `Transactions` |
| **Purpose** | Credit transaction history table with pagination |
| **Origin** | `custom` |
| **UI Patterns** | Table with color-coded badges, pagination |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Transaction table duplicated in Settings/CreditsAndBilling and Billing/Usage |
| **Template** | None |
---
## 12. Account (Current)
### account/PlansAndBillingPage.tsx (~1822 lines)
| Field | Value |
|---|---|
| **Component** | `PlansAndBillingPage` |
| **Purpose** | Comprehensive billing dashboard — current plan, credit packages, invoices, payment methods, purchase flow |
| **Origin** | `custom` |
| **UI Patterns** | Multi-section dashboard, credit package cards, invoice downloads, payment method cards, purchase modals, portal integration |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Badge`, `Button`, `Label`, `useToast`, `usePageLoading` |
| **Local Sub-components** | Inline SVG icons, portal-based purchase modal |
| **Pattern Duplication** | Supersedes `Settings/Plans`, `Settings/CreditsAndBilling`, `Billing/*`; very large file that could be split |
| **Template** | None (custom multi-section dashboard) |
### account/AccountSettingsPage.tsx (~979 lines)
| Field | Value |
|---|---|
| **Component** | `AccountSettingsPage` |
| **Purpose** | Account, profile, and team management — single scrollable page with all settings |
| **Origin** | `custom` |
| **UI Patterns** | Vertical form sections (Account, Profile, Team), invite/remove team members, change password, modal for invites |
| **Shared Components** | `PageMeta`, `PageHeader`, `ComponentCard`, `Card`, `Badge`, `Button`, `InputField`, `Select`, `Checkbox`, `Modal`, `useToast`, `useAuthStore`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Supersedes `Settings/Account` placeholder |
| **Template** | None (custom form sections) |
### account/UsageDashboardPage.tsx (~954 lines)
| Field | Value |
|---|---|
| **Component** | `UsageDashboardPage` |
| **Purpose** | Unified analytics dashboard — credit usage charts, operation breakdowns, plan limits, usage trends |
| **Origin** | `custom` |
| **UI Patterns** | Charts (react-apexcharts), stat cards, operation breakdown table, period selector, pagination |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Badge`, `Button`, `SelectDropdown`, `Input`, `Pagination`, `useToast` |
| **Local Sub-components** | None (uses `Chart` from react-apexcharts) |
| **Pattern Duplication** | Supersedes `Billing/Usage`, `Billing/Credits`, `Settings/CreditsAndBilling`; most comprehensive usage view |
| **Template** | None (custom analytics dashboard) |
### account/ContentSettingsPage.tsx (~686 lines)
| Field | Value |
|---|---|
| **Component** | `ContentSettingsPage` |
| **Purpose** | Content generation, publishing, and image settings — 3-tab settings page |
| **Origin** | `custom` |
| **UI Patterns** | Tabbed form (Content, Publishing, Images), image generation settings with provider/model selectors |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `SelectDropdown`, `Label`, `Checkbox`, `TextArea`, `useToast` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Publishing settings overlap with `Publisher/PublishSettings`; image settings overlap with `Settings/Integration` |
| **Template** | None (tabbed settings form) |
### account/PurchaseCreditsPage.tsx (~429 lines)
| Field | Value |
|---|---|
| **Component** | `PurchaseCreditsPage` |
| **Purpose** | Credit package selection and payment flow — choose package, select payment method, purchase |
| **Origin** | `custom` |
| **UI Patterns** | Package selection cards, payment method selection, manual payment form, invoice display |
| **Shared Components** | `PageMeta`, `PageHeader`, `Button`, `InputField`, `TextArea`, `Label` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Purchase flow also exists within `PlansAndBillingPage` |
| **Template** | None (custom purchase flow) |
### account/NotificationsPage.tsx (~428 lines)
| Field | Value |
|---|---|
| **Component** | `NotificationsPage` |
| **Purpose** | Notification center — list, filter, mark read, delete notifications |
| **Origin** | `custom` |
| **UI Patterns** | Filterable notification list, severity/type/read filters, bulk mark all read, individual delete |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Button`, `Select`, `useNotificationStore`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None (custom notification list) |
### account/UsageAnalyticsPage.tsx (~278 lines)
| Field | Value |
|---|---|
| **Component** | `UsageAnalyticsPage` |
| **Purpose** | Usage analytics with URL-driven tabs (limits, activity, insights, API) |
| **Origin** | `custom` |
| **UI Patterns** | URL-driven tab selection (path-based), period selector, billing panels |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Badge`, `Button`, `useToast` |
| **Local Sub-components** | `BillingUsagePanel`, `UsageLimitsPanel`, `CreditInsightsCharts` (from `components/billing/`) |
| **Pattern Duplication** | Overlaps with `UsageDashboardPage` — both show usage analytics with different approaches |
| **Template** | None (tabbed analytics) |
---
## 13. Setup
### Setup/SetupWizard.tsx (46 lines)
| Field | Value |
|---|---|
| **Component** | `SetupWizard` |
| **Purpose** | Onboarding setup wizard — thin wrapper delegating to `OnboardingWizard` component |
| **Origin** | `custom` |
| **UI Patterns** | Wizard flow, complete/skip callbacks, page context integration |
| **Shared Components** | `PageMeta`, `OnboardingWizard`, `usePageContext` |
| **Local Sub-components** | None (all logic in `OnboardingWizard`) |
| **Pattern Duplication** | None |
| **Template** | None (delegated to OnboardingWizard) |
### Setup/IndustriesSectorsKeywords.tsx (~1583 lines)
| Field | Value |
|---|---|
| **Component** | `IndustriesSectorsKeywords` |
| **Purpose** | Keywords library — browse seed keywords by industry/sector, add to workflow, CSV import, smart suggestions |
| **Origin** | `custom` |
| **UI Patterns** | Sector metric grid, smart suggestions, sector card browsing, CSV import modal, bulk add with confirmation, `TablePageTemplate` for keyword table |
| **Shared Components** | `PageMeta`, `PageHeader`, `WorkflowGuide`, `Badge`, `Button`, `Modal`, `FileInput`, `Label`, `Input`, `Card`, `useToast`, `usePageLoading`, `useSiteStore`, `useSectorStore`, `usePageSizeStore` |
| **Local Sub-components** | `SectorMetricGrid`, `SmartSuggestions`, `SectorCardsGrid`, `BulkAddConfirmation` (from `components/keywords-library/`) |
| **Pattern Duplication** | Very large file that mixes browsing, importing, and management; could be split |
| **Template** | `TablePageTemplate` (for keyword browsing table) |
---
## 14. AuthPages
### AuthPages/SignIn.tsx (17 lines)
| Field | Value |
|---|---|
| **Component** | `SignIn` |
| **Purpose** | Sign-in page — thin wrapper composing `AuthLayout` + `SignInForm` |
| **Origin** | `tailadmin-modified` |
| **UI Patterns** | Auth layout with split-screen |
| **Shared Components** | `PageMeta`, `AuthLayout`, `SignInForm` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | `AuthLayout` (shared auth template) |
### AuthPages/SignUp.tsx (~120 lines)
| Field | Value |
|---|---|
| **Component** | `SignUp` |
| **Purpose** | Registration page with plan selection and unified signup form |
| **Origin** | `tailadmin-modified` |
| **UI Patterns** | Plan pre-selection from URL, plan cards, auth layout |
| **Shared Components** | `PageMeta`, `SignUpFormUnified`, `GridShape` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Plan fetching logic duplicated from Settings/Plans |
| **Template** | Custom layout (inline, not AuthLayout) |
### AuthPages/AuthPageLayout.tsx (87 lines)
| Field | Value |
|---|---|
| **Component** | `AuthLayout` |
| **Purpose** | Shared auth page layout — split-screen with branding panel and plan preview |
| **Origin** | `tailadmin-modified` |
| **UI Patterns** | Split-screen layout (form left, branding right), responsive collapse, plan preview card, theme toggler |
| **Shared Components** | `GridShape`, `ThemeTogglerTwo` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None — this IS the shared layout |
| **Template** | N/A (this is a layout component) |
### AuthPages/ForgotPassword.tsx (177 lines)
| Field | Value |
|---|---|
| **Component** | `ForgotPassword` |
| **Purpose** | Request password reset email |
| **Origin** | `custom` |
| **UI Patterns** | Centered card form, success state transition, anti-enumeration (always shows success) |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Standalone layout (doesn't use AuthLayout) |
| **Template** | None (standalone centered form) |
### AuthPages/ResetPassword.tsx (348 lines)
| Field | Value |
|---|---|
| **Component** | `ResetPassword` |
| **Purpose** | Password reset form with token from email link |
| **Origin** | `custom` |
| **UI Patterns** | Token-validated form, password strength checks, state machine (form/success/error/expired), auto-redirect |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Standalone layout (doesn't use AuthLayout) |
| **Template** | None (standalone centered form) |
### AuthPages/VerifyEmail.tsx (220 lines)
| Field | Value |
|---|---|
| **Component** | `VerifyEmail` |
| **Purpose** | Email verification with token from email link |
| **Origin** | `custom` |
| **UI Patterns** | Auto-verify on mount, state machine (verifying/success/error/expired), resend option |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Standalone layout (doesn't use AuthLayout) |
| **Template** | None (standalone centered form) |
### AuthPages/Unsubscribe.tsx (82 lines)
| Field | Value |
|---|---|
| **Component** | `Unsubscribe` |
| **Purpose** | Email preferences redirect — auto-redirects to account settings after 5s |
| **Origin** | `custom` |
| **UI Patterns** | Informational card with auto-redirect timer, transactional email notice |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Standalone layout |
| **Template** | None (standalone centered card) |
---
## 15. Help
### Help/Help.tsx (~1306 lines)
| Field | Value |
|---|---|
| **Component** | `Help` |
| **Purpose** | In-app help documentation — workflow pipeline visualization, Q&A accordions, getting started guide |
| **Origin** | `custom` |
| **UI Patterns** | Table of contents, anchor-link scrolling, workflow pipeline visualization, accordion FAQ sections, cards |
| **Shared Components** | `PageMeta`, `PageHeader`, `Accordion`, `AccordionItem`, `Card`, `Badge` |
| **Local Sub-components** | `WorkflowPipeline` (inline component), `TableOfContentsItem` interface |
| **Pattern Duplication** | WorkflowPipeline visualization duplicates Dashboard pipeline widget concept; very large file |
| **Template** | None (custom documentation page) |
---
## 16. Reference
### Reference/Industries.tsx (185 lines)
| Field | Value |
|---|---|
| **Component** | `Industries` (Reference) |
| **Purpose** | Reference view of industries with keyword counts and volume stats |
| **Origin** | `custom` |
| **UI Patterns** | Card grid with keyword stats, volume formatting, tooltip enrichment |
| **Shared Components** | `PageMeta`, `PageHeader`, `Card`, `Badge`, `Tooltip`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with `Settings/Industries` (both show industry cards) |
| **Template** | None (card grid) |
### Reference/SeedKeywords.tsx (119 lines)
| Field | Value |
|---|---|
| **Component** | `SeedKeywords` |
| **Purpose** | Global keyword library browser with industry filter and search |
| **Origin** | `custom` |
| **UI Patterns** | Filter bar (industry dropdown + search), keyword list |
| **Shared Components** | `PageMeta`, `Card`, `Badge`, `useToast`, `usePageLoading` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Overlaps with `Setup/IndustriesSectorsKeywords` keyword browsing |
| **Template** | None |
---
## 17. Standalone Pages
### Payment.tsx (122 lines)
| Field | Value |
|---|---|
| **Component** | `Payment` |
| **Purpose** | Manual payment contact form — generates mailto link for sales |
| **Origin** | `custom` |
| **UI Patterns** | Simple form, mailto link generation, plan display from URL params |
| **Shared Components** | `InputField`, `TextArea`, `Label`, `Button`, `useAuthStore` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None — unique manual payment flow |
| **Template** | None |
### UIElements.tsx (737 lines)
| Field | Value |
|---|---|
| **Component** | `UIElements` |
| **Purpose** | **DEV REFERENCE** — UI component showcase/documentation page (non-indexable) |
| **Origin** | `tailadmin-modified` |
| **UI Patterns** | Component showcase with live examples of all `components/ui/` elements |
| **Shared Components** | Imports effectively ALL `components/ui/` components |
| **Local Sub-components** | None |
| **Pattern Duplication** | N/A — reference page |
| **Template** | None |
### Components.tsx (680 lines)
| Field | Value |
|---|---|
| **Component** | `Components` |
| **Purpose** | **DEV REFERENCE** — Modal, dropdown, pagination, card, chart demo page |
| **Origin** | `tailadmin-modified` |
| **UI Patterns** | Component showcase with AlertModal, Modal, Dropdown, Pagination, Card variants |
| **Shared Components** | `PageMeta`, `AlertModal`, `Modal`, `Button`, `Dropdown`, `DropdownItem`, `Pagination`, `Card`, `ChartTab`, `InputField`, `TextArea` |
| **Local Sub-components** | None |
| **Pattern Duplication** | N/A — reference page |
| **Template** | None |
---
## 18. Legal
### legal/Privacy.tsx (260 lines)
| Field | Value |
|---|---|
| **Component** | `Privacy` |
| **Purpose** | Privacy policy static content page |
| **Origin** | `custom` |
| **UI Patterns** | Static content with sections, centered card layout, back-to-home link |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same layout pattern as Terms.tsx |
| **Template** | None (standalone legal) |
### legal/Terms.tsx (186 lines)
| Field | Value |
|---|---|
| **Component** | `Terms` |
| **Purpose** | Terms and conditions static content page |
| **Origin** | `custom` |
| **UI Patterns** | Static content with sections, centered card layout, back-to-home link |
| **Shared Components** | `PageMeta` |
| **Local Sub-components** | None |
| **Pattern Duplication** | Same layout pattern as Privacy.tsx — could extract a `LegalPageLayout` |
| **Template** | None (standalone legal) |
---
## 19. OtherPage
### OtherPage/NotFound.tsx (44 lines)
| Field | Value |
|---|---|
| **Component** | `NotFound` |
| **Purpose** | 404 error page |
| **Origin** | `tailadmin-original` |
| **UI Patterns** | Centered error display, SVG illustration, back-to-home link, GridShape background |
| **Shared Components** | `PageMeta`, `GridShape` |
| **Local Sub-components** | None |
| **Pattern Duplication** | None |
| **Template** | None |
---
## Summary Statistics
| Metric | Count |
|---|---|
| **Total page files** | 68 |
| **Using `TablePageTemplate`** | 10 (Keywords, Clusters, Ideas, Tasks, Content, Review, Approved, Images, Sites/List (table view), Setup/IndustriesSectorsKeywords) |
| **Using `ContentViewTemplate`** | 1 (ContentView) |
| **Custom (no template)** | 50 |
| **Placeholder / Coming Soon** | 5 (ImageTesting, Profile, Strategies, Settings/Account, Settings/System) |
| **Deprecated** | 1 (DeploymentPanel) |
| **TailAdmin-original** | 1 (NotFound) |
| **TailAdmin-modified** | 4 (SignIn, SignUp, UIElements, Components) |
| **Dev reference only** | 2 (UIElements, Components) |
---
## Key Findings — Pattern Duplication
### 1. Manual Table Duplication
**Pages**: `Sites/Content`, `Sites/ContentStructure`, `Optimizer/ContentSelector`, `Linker/ContentList`
These pages build manual `<table>` with inline pagination instead of using `TablePageTemplate`. Candidate for migration or a simpler `SimpleTableTemplate`.
### 2. Settings Form Proliferation
**Pages**: `Sites/Settings`, `Sites/AIAutomationSettings`, `Publisher/PublishSettings`, `Automation/PipelineSettings`, `account/ContentSettingsPage`, `Settings/Publishing`
At least 6 pages implement settings forms with similar card+toggle+save patterns. Consider a `SettingsFormTemplate` or shared `SettingsSection` component.
### 3. Billing/Usage Triplication
**Legacy**: `Settings/CreditsAndBilling`, `Billing/Usage`, `Billing/Credits`, `Billing/Transactions`
**Current**: `account/PlansAndBillingPage`, `account/UsageDashboardPage`, `account/UsageAnalyticsPage`
The legacy Settings/Billing pages duplicate what the account/* pages already provide. Candidates for removal.
### 4. Inline Tab Implementation
**Pages**: `ClusterDetail`, `Sites/Settings`, `Sites/PostEditor`
Custom button-based tab implementations instead of using a shared `Tabs` component.
### 5. Cascading Filter Boilerplate
**Pages**: `Keywords`, `Clusters`, `Ideas`, `Tasks`, `Content`, `Review`, `Approved`, `Images`
All Planner+Writer table pages repeat ~50-100 lines of cascading filter loading logic. Could be extracted into a `useCascadingFilters` hook.
### 6. WordPress Sync Overlap
**Pages**: `Settings/WordPressIntegrationDebug` vs `Sites/SyncDashboard`
Both show WordPress sync health with overlapping functionality.
### 7. Industry Display Overlap
**Pages**: `Settings/Industries` vs `Reference/Industries`
Both display industry cards; the Reference version adds keyword stats.
### 8. Calendar Duplication
**Pages**: `Publisher/ContentCalendar` vs `Sites/PublishingQueue`
Both implement calendar+list views for scheduled content. The site-scoped version could reuse the publisher calendar component.
### 9. Legal Page Layout
**Pages**: `legal/Privacy` vs `legal/Terms`
Identical layout wrapper — candidate for a `LegalPageLayout` component.