IGNY8 Frontend Component Audit & TailAdmin Migration Plan
Generated: 2026-03-15
Scope: frontend/src/ — 483 TypeScript/TSX files
Base Template: TailAdmin Free React v1.8.4 (Tailwind CSS 4, React 19)
1. Executive Summary
Total Component Count
| Category |
Count |
| Total .ts/.tsx files |
483 |
UI primitive components (components/ui/) |
52 files → ~40 unique components |
Common/shared components (components/common/) |
51 files |
Page files (pages/) |
68 files |
| Feature components (dashboard, billing, automation, etc.) |
80 files |
Form components (components/form/) |
25 files |
| Header components |
6 files |
| Stores (Zustand) |
11 files |
| Services/API |
8 files (5,626 LOC) |
| Templates |
5 files |
| Config files |
24 files |
| Hooks |
9 files |
| Utils |
14 files |
| Context providers |
5 files |
| Layout/shell |
5 files |
| Marketing site |
22 files |
Origin Breakdown
| Origin |
Count |
Percentage |
| Custom (IGNY8-specific) |
~340 |
~70% |
| TailAdmin-original (unchanged) |
~25 |
~5% |
| TailAdmin-modified (customized) |
~20 |
~4% |
| TailAdmin-derived (structural inheritance) |
~15 |
~3% |
| TailAdmin demo (static examples) |
~10 |
~2% |
| Third-party |
~5 |
~1% |
| Infrastructure (config, types, barrel exports) |
~68 |
~14% |
Key Findings
- Package name confirms TailAdmin base:
package.json → "name": "tailadmin-react", version 1.8.4
- Core shell is TailAdmin: Layout, sidebar, header, dark mode, backdrop all follow TailAdmin Free patterns
- Design system is heavily customized: Tailwind v4 CSS-first config with
color-mix() computed palettes, 6 base hex tokens only
- Config-driven table system: 10 pages use
TablePageTemplate with declarative column/filter/action configs — the most mature pattern
- Massive API monolith:
api.ts is 3,056 lines containing 90+ functions
- Three-way route divergence: Routes defined independently in
App.tsx, AppSidebar.tsx, and routes.config.ts
- Significant duplication: Settings forms (6 pages), billing pages (3 directories), filter boilerplate (8 pages), manual tables (4+ pages)
- MUI contamination: One component (
BulkWordPressPublish in BulkWordPressPublish/) uses @mui/material — inconsistent with rest of codebase
- No
cn() utility: TailAdmin's cn() pattern not used; clsx + twMerge called separately
- Style-locked components: 7 files have
🔒 STYLE LOCKED headers (Button, IconButton, Badge, Table, WordPressPublish components)
2. App Shell & Layout
Layout Structure
Origin: AppLayout, AppSidebar, AppHeader, Backdrop — TailAdmin-modified. Core structure from TailAdmin Free but heavily extended with Zustand stores, credit metrics, module system, and page context.
| Aspect |
Implementation |
| Nav structure |
Hardcoded in AppSidebar.tsx via useMemo arrays |
| Sections |
Dashboard (standalone), SETUP (Setup Wizard, Sites, Keywords Library, Thinker), WORKFLOW (Planner, Writer, Publisher, Automation) |
| Collapsible groups |
Yes — TailAdmin pattern with ChevronDownIcon rotation, animated height |
| Module gating |
useModuleStore().isModuleEnabled() (API-driven) |
| Admin filtering |
User role check for admin-only items |
| Config-driven? |
No — routes.config.ts exists but is not used by sidebar |
| TailAdmin patterns |
menu-item / menu-item-active / menu-item-inactive CSS utility classes, 90px→290px hover expansion, no-scrollbar |
- Sticky header with
z-99999
- Mobile: hamburger toggle + logo
- Desktop: page title with colored badge (from
PageContext), sidebar toggle
- Right side:
HeaderMetrics (credit badges), route-conditional site/sector selectors (3 variants based on URL), search (⌘K), ThemeToggleButton, NotificationDropdown, UserDropdown
- Origin: TailAdmin-modified — dropdown patterns and responsive layout from TailAdmin, but metric badges, page context, and site selectors are custom
Routing
Three independent route definitions exist (maintenance risk):
| Source |
Purpose |
Route Count |
Synchronized? |
App.tsx |
Actual React Router routes |
~100+ |
Source of truth |
AppSidebar.tsx |
Sidebar navigation items |
~25 |
Subset of App.tsx |
routes.config.ts |
Breadcrumb metadata |
~15 |
Partial, stale |
- All page components (except auth) are lazy-loaded via
React.lazy()
ProtectedRoute wraps all authenticated routes
AdminRoute wraps Thinker/Integration routes
<Navigate> handles legacy route redirects
3. Design System Status
Color System
Architecture: 6 base hex tokens → color-mix() generates full palettes → Tailwind @theme consumes them
| Token |
Value |
Palette Generated |
--color-primary |
#1c86d1 |
brand-25 → brand-950 |
--color-success |
#3fcd9f |
success-25 → success-950 |
--color-warning |
#f87f4c |
warning-25 → warning-950 |
--color-danger |
#ff656f |
error-25 → error-950 |
--color-info |
#18b2c4 |
info-25 → info-950 |
--color-gray-base |
#243249 |
gray-25 → gray-950 + gray-dark |
All default Tailwind color palettes are disabled (--color-red-*: initial, etc.). Only the above semantic palettes exist.
Additional derived tokens: --navy, --surface, --panel, --text, --text-dim, --stroke, gradients.
Module color mapping in colors.config.ts: Every module stage (keywords, clusters, ideas, tasks, content, images, review, approved, published) maps to bg, bgLight, text, border, gradient, and cssVar tokens.
Typography
| Property |
Value |
| Font family |
Outfit (Google Fonts), ui-monospace for code |
| Title sizes |
title-2xl (72px) → title-sm (30px) |
| Body sizes |
theme-xl (20px), theme-sm (14px), theme-xs (12px) |
| CMS fonts |
Separate system — Inter for published content |
Spacing
Standard Tailwind spacing scale with custom additions:
- Border radius:
xs (2px) → 4xl (20px)
- Shadows:
theme-xs → theme-xl, plus datepicker, focus-ring, tooltip
- Z-index: 6 tiers from
z-index-1 to z-index-999999
Dark Mode
| Aspect |
Implementation |
| Strategy |
Tailwind class strategy — .dark on <html> |
| Storage |
localStorage key "theme" |
| Toggle |
ThemeContext → toggleTheme() |
| Default |
Light |
| CSS |
@custom-variant dark (&:is(.dark *)) in design-system.css |
| Override vars |
Surface, panel, text, stroke, shadow overrides in .dark block |
Responsive Approach
| Breakpoint |
Value |
Usage |
2xsm |
375px |
Mobile-small |
xsm |
425px |
Mobile |
sm |
640px |
Small tablet |
md |
768px |
Mobile detection (SidebarContext) |
lg |
1024px |
Primary: sidebar show/hide, header layout |
xl |
1280px |
Flex layout trigger |
2xl |
1536px |
Wide desktop |
3xl |
2000px |
Ultra-wide |
4. Component Inventory
4.1 UI Primitives (components/ui/)
| Path |
Component |
Purpose |
Origin |
Key UI Info |
ui/button/Button.tsx |
Button |
Multi-variant button (primary/secondary/outline/ghost/gradient) × 5 tones × 6 sizes |
custom |
🔒 STYLE LOCKED. twMerge + clsx |
ui/button/IconButton.tsx |
IconButton |
Icon-only button with tone/variant/shape system |
custom |
🔒 STYLE LOCKED |
ui/button/ButtonWithTooltip.tsx |
ButtonWithTooltip |
Wraps Button + Tooltip for disabled state hint |
custom |
|
ui/card/Card.tsx |
Card + 7 sub-components |
Card container system (surface/panel/frosted/borderless/gradient variants) |
custom |
Uses --color-panel CSS var |
ui/modal/index.tsx |
Modal |
Portal-based modal with backdrop blur, ESC, scroll lock |
tailadmin-derived |
z-99999 convention |
ui/table/index.tsx |
Table + 4 sub-components |
Unstyled table primitives |
custom |
🔒 STYLE LOCKED |
ui/tabs/Tabs.tsx |
Tabs, TabList, Tab, TabPanel |
Segmented control/tabs with render-prop state |
tailadmin-derived |
shadow-theme-xs token |
ui/badge/Badge.tsx |
Badge |
4 variants × 12 tones × 3 sizes with backward-compat |
custom |
🔒 STYLE LOCKED |
ui/alert/Alert.tsx |
Alert |
Inline notification banner with variant icons |
tailadmin-derived |
SVG icons match TailAdmin |
ui/alert/AlertModal.tsx |
AlertModal |
Centered modal alert with decorative icons |
custom |
|
ui/accordion/Accordion.tsx |
Accordion, AccordionItem |
Collapsible with animated height |
custom |
|
ui/breadcrumb/Breadcrumb.tsx |
Breadcrumb |
Navigation breadcrumb from items array |
tailadmin-derived |
Chevron SVG matches TailAdmin |
ui/dropdown/Dropdown.tsx |
Dropdown |
Portal-based positioned dropdown with edge detection |
custom |
Major rewrite from TailAdmin |
ui/dropdown/DropdownItem.tsx |
DropdownItem |
Menu item (button or link) |
tailadmin-derived |
|
ui/spinner/Spinner.tsx |
Spinner |
CSS border-based loading spinner |
custom |
|
ui/pagination/Pagination.tsx |
Pagination |
Full pagination with ellipsis |
tailadmin-derived |
Arrow SVGs match TailAdmin |
ui/pagination/CompactPagination.tsx |
CompactPagination |
Compact pagination + page size selector |
custom |
|
ui/progress/ProgressBar.tsx |
ProgressBar |
Horizontal progress bar |
custom |
|
ui/tooltip/Tooltip.tsx |
Tooltip |
Portal-based tooltip with directional arrow |
custom |
|
ui/tooltip/EnhancedTooltip.tsx |
EnhancedTooltip |
Rich-content tooltip with delay |
custom |
|
ui/tooltip/CalendarItemTooltip.tsx |
CalendarItemTooltip |
Calendar event tooltip |
custom |
Business-specific |
ui/toast/Toast.tsx |
ToastItem |
Individual toast notification (5s auto-dismiss) |
custom |
animate-slide-in-right |
ui/toast/ToastContainer.tsx |
ToastProvider, useToast |
Context-based toast system |
custom |
Portal, fixed top-right |
ui/ribbon/Ribbon.tsx |
Ribbon |
Decorative ribbon overlay |
tailadmin-derived |
Corner variant matches TailAdmin |
ui/list/List.tsx |
List + 5 sub-components |
Multi-variant list with checkbox/radio items |
tailadmin-derived |
Extended with checkbox/radio |
ui/button-group/ButtonGroup.tsx |
ButtonGroup, ButtonGroupItem |
Grouped button strip |
tailadmin-derived |
shadow-theme-xs |
ui/dataview/DataView.tsx |
DataView + 3 sub-components |
Data display container with header/toolbar/empty |
custom |
SaaS-specific |
ui/pricing-table/PricingTable.tsx |
PricingTable (3 variants) |
Full pricing table with toggle, discount calc |
tailadmin-derived |
Extended with dynamic pricing |
ui/pricing-table/index.tsx |
PricingTable (named export) |
Alternate SaaS-specific pricing table |
custom |
Duplicate of above |
ui/avatar/Avatar.tsx |
Avatar |
User avatar with status dot |
tailadmin-derived |
|
ui/videos/*.tsx |
Video aspect ratio components |
Hardcoded YouTube embeds |
tailadmin-demo |
Bug: SixteenIsToNine uses 4:3 |
ui/images/*.tsx |
Image grid components |
Hardcoded demo image grids |
tailadmin-demo |
Static — cleanup candidates |
4.2 Common Components (components/common/)
| Path |
Component |
Purpose |
Origin |
common/PageBreadCrumb.tsx |
PageBreadcrumb |
Simple Home > Page breadcrumb |
tailadmin-original |
common/ComponentCard.tsx |
ComponentCard |
Generic card wrapper with title/description |
tailadmin-modified |
common/GridShape.tsx |
GridShape |
Decorative SVG background shapes |
tailadmin-original |
common/ThemeTogglerTwo.tsx |
ThemeTogglerTwo |
Floating round theme toggle button |
tailadmin-original |
common/PageMeta.tsx |
PageMeta |
<title> and <meta> via react-helmet |
tailadmin-original |
common/ScrollToTop.tsx |
ScrollToTop |
Auto-scroll to top on route change |
tailadmin-original |
common/ChartTab.tsx |
ChartTab |
Chart time period segmented control |
tailadmin-original |
common/ThemeToggleButton.tsx |
ThemeToggleButton |
Theme toggle using IconButton |
tailadmin-modified |
common/SiteSelector.tsx |
SiteAndSectorSelector |
Combined site + sector dropdown |
custom |
common/SingleSiteSelector.tsx |
SingleSiteSelector |
Site-only dropdown |
custom |
common/SiteWithAllSitesSelector.tsx |
SiteWithAllSitesSelector |
Site dropdown with "All Sites" |
custom |
common/SiteAndSectorSelector.tsx |
SiteAndSectorSelector |
Combined site + sector (dual-mode) |
custom |
common/SectorSelector.tsx |
SectorSelector |
Standalone sector dropdown |
custom |
common/SiteInfoBar.tsx |
SiteInfoBar |
Horizontal site info bar with badges |
custom |
common/SiteCard.tsx |
SiteCard |
Site card with status toggle and actions |
custom |
common/FormModal.tsx |
FormModal |
Generic modal with auto-generated form |
custom |
common/ProgressModal.tsx |
ProgressModal |
Multi-step AI progress modal |
custom |
common/ConfirmDialog.tsx |
ConfirmDialog |
Generic confirmation modal |
custom |
common/ContentViewerModal.tsx |
ContentViewerModal |
Article preview modal |
custom |
common/ErrorDetailsModal.tsx |
ErrorDetailsModal |
Publishing error detail modal |
custom |
common/BulkStatusUpdateModal.tsx |
BulkStatusUpdateModal |
Bulk status change modal |
custom |
common/BulkScheduleModal.tsx |
BulkScheduleModal |
Bulk scheduling modal |
custom |
common/BulkSchedulePreviewModal.tsx |
BulkSchedulePreviewModal |
Schedule preview before confirm |
custom |
common/BulkExportModal.tsx |
BulkExportModal |
Bulk export modal |
custom |
common/BulkPublishingModal.tsx |
BulkPublishingModal |
Bulk publishing queue modal |
custom |
common/PublishingProgressModal.tsx |
PublishingProgressModal |
Single-content publishing progress |
custom |
common/PublishLimitModal.tsx |
PublishLimitModal |
Publish limit warning |
custom |
common/ImageQueueModal.tsx |
ImageQueueModal |
Image generation queue |
custom |
common/ScheduleContentModal.tsx |
ScheduleContentModal |
Schedule single content |
custom |
common/SearchModal.tsx |
SearchModal |
Global search (⌘K) |
custom |
common/SingleRecordStatusUpdateModal.tsx |
SingleRecordStatusUpdateModal |
Single record status change |
custom |
common/ColumnSelector.tsx |
ColumnSelector |
Table column visibility toggle |
custom |
common/ViewToggle.tsx |
ViewToggle |
List/grid view toggle |
custom |
common/ToggleTableRow.tsx |
ToggleTableRow |
Expandable table row |
custom |
common/HTMLContentRenderer.tsx |
HTMLContentRenderer |
Safe HTML/JSON content renderer |
custom |
common/ContentImageCell.tsx |
ContentImageCell |
Table cell with image status |
custom |
common/ImageResultCard.tsx |
ImageResultCard |
AI image result display |
custom |
common/ImageGenerationCard.tsx |
ImageGenerationCard |
Image generation test form |
custom |
common/ImageServiceCard.tsx |
ImageServiceCard |
Image service provider card |
custom |
common/IntegrationCard.tsx |
IntegrationCard |
API integration toggle card |
custom |
common/ValidationCard.tsx |
ValidationCard |
Validation status card |
custom |
common/WorkflowInsights.tsx |
WorkflowInsights |
Collapsible insights notifications |
custom |
common/PageHeader.tsx |
PageHeader |
Page header (sets PageContext) |
custom |
common/PageTransition.tsx |
PageTransition |
Route transition animation |
custom |
common/PageLoader.tsx |
PageLoader |
Global loading indicator |
custom |
common/SuspenseLoader.tsx |
SuspenseLoader |
Suspense fallback spinner |
custom |
common/ErrorBoundary.tsx |
ErrorBoundary |
Top-level error boundary |
custom |
common/PageErrorBoundary.tsx |
PageErrorBoundary |
Per-page error boundary |
custom |
common/GlobalErrorDisplay.tsx |
GlobalErrorDisplay |
Global error overlay |
custom |
common/LoadingStateMonitor.tsx |
LoadingStateMonitor |
Stuck-loading detector (10s timeout) |
custom |
common/ModuleGuard.tsx |
ModuleGuard |
DEPRECATED — pass-through |
custom |
common/DebugSiteSelector.tsx |
DebugSiteSelector |
Debug site selector |
custom |
4.3 Form Components (components/form/)
| Path |
Component |
Purpose |
Origin |
form/input/InputField.tsx |
InputField |
Text input with states |
tailadmin-modified |
form/input/TextArea.tsx |
TextArea |
Textarea with states |
tailadmin-modified |
form/input/Checkbox.tsx |
Checkbox |
Custom checkbox with SVG |
tailadmin-modified |
form/input/Radio.tsx |
Radio |
Custom radio button |
tailadmin-original |
form/input/RadioSm.tsx |
RadioSm |
Small radio variant |
tailadmin-original |
form/input/FileInput.tsx |
FileInput |
File input with pseudo-styling |
tailadmin-original |
form/switch/Switch.tsx |
Switch |
Toggle switch |
tailadmin-modified |
form/group-input/PhoneInput.tsx |
PhoneInput |
Phone with country code |
tailadmin-original |
form/Form.tsx |
Form |
Simple form wrapper |
tailadmin-original |
form/Label.tsx |
Label |
Label primitive |
tailadmin-original |
form/Select.tsx |
Select |
Native <select> styled |
tailadmin-original |
form/SelectDropdown.tsx |
SelectDropdown |
Custom dropdown select |
custom |
form/MultiSelect.tsx |
MultiSelect |
Multi-select with chips |
tailadmin-modified |
form/FormFieldRenderer.tsx |
FormFieldRenderer |
Dynamic field renderer from config |
custom |
form/date-picker.tsx |
DatePicker |
flatpickr-based date picker |
third-party |
form/form-elements/*.tsx |
9 demo components |
Form element showcase pages |
tailadmin-original |
| Path |
Component |
Purpose |
Origin |
header/Header.tsx |
Header |
Main header with search, theme, dropdowns |
tailadmin-modified |
header/SiteSwitcher.tsx |
SiteSwitcher |
Site switch dropdown |
custom |
header/HeaderMetrics.tsx |
HeaderMetrics |
Credit/page metric badges |
custom |
header/NotificationDropdown.tsx |
NotificationDropdown |
Notification dropdown with API sync |
custom |
header/NotificationDropdownNew.tsx |
NotificationDropdownNew |
Alternate notification dropdown (older?) |
custom |
header/UserDropdown.tsx |
UserDropdown |
User profile menu |
tailadmin-modified |
4.5 Feature Components
Dashboard (components/dashboard/) — 22 components, ALL custom
| Component |
Purpose |
EnhancedMetricCard |
KPI card with accent border, trend, tooltip |
WorkflowPipeline / WorkflowPipelineWidget |
Visual 7-stage pipeline |
NeedsAttentionBar |
Collapsible alert bar |
StandardizedModuleWidget |
Module pipeline stats |
WorkflowCompletionWidget |
Time-filtered workflow stats |
AIOperationsWidget |
AI operation statistics |
RecentActivityWidget |
Last 5 activities |
CreditsUsageWidget / CreditBalanceWidget / CreditAvailabilityWidget |
Credit displays |
AutomationStatusWidget |
Automation run status |
SitesOverviewWidget |
Site list with status |
UsageChartWidget |
Usage chart with date range |
KeywordLibraryStatsWidget |
Keyword library stats |
AccountInfoWidget |
Account billing info |
SiteConfigWidget |
Site setup checklist |
QuickActionsWidget |
8-step workflow guide |
ContentVelocityWidget |
Content production rates |
OperationsCostsWidget |
AI operation costs |
ThreeWidgetFooter / StandardThreeWidgetFooter |
3-column footer layouts |
Billing (components/billing/) — 17 components, ALL custom
Key components: BillingBalancePanel, BillingUsagePanel, CreditInsightsCharts, PayInvoiceModal, InsufficientCreditsModal, PendingPaymentBanner, PendingPaymentView, PaymentHistory, UsageLimitsPanel, CreditCostBreakdownPanel, CreditCostsPanel
Automation (components/Automation/) — 20 components, ALL custom
Top-level: ConfigModal, CurrentProcessingCard/V2, GlobalProgressBar, RunHistory, StageCard, ActivityLog
DetailView: RunSummaryCard, StageAccordion, InsightsPanel, EfficiencyMetrics, CreditBreakdownChart, PredictiveCostAnalysis, ProductionSummary, EnhancedRunHistory, MeaningfulRunHistory, PipelineOverviewCard, AttentionItemsAlert, RunStatisticsSummary
Sites (components/sites/) — 11 components, ALL custom
Key: SiteSetupChecklist, SiteProgressWidget, WordPressIntegrationCard/Form/Modal, TemplateLibrary, TemplateCustomizer, StyleEditor, LayoutSelector/Preview, SiteTypeBadge
WordPress Publish (components/WordPressPublish/) — 4 components, ALL custom STYLE LOCKED
WordPressPublish, BulkWordPressPublish, ContentActionsMenu
Other Feature Components — ALL custom
| Directory |
Components |
onboarding/ |
OnboardingWizard, WorkflowGuide, Steps 1-5 (7 files) |
keywords-library/ |
SectorCardsGrid, SectorMetricCard, SmartSuggestions, BulkAddConfirmation |
tasks/ |
KanbanBoard (tailadmin-modified), TaskList (tailadmin-modified), RelationshipMap |
content/ |
ContentFilter, SourceBadge, SyncStatusBadge |
linker/ |
LinkResults |
optimizer/ |
OptimizationScores, ScoreComparison |
integration/ |
IntegrationStatus, PlatformSelector, SiteIntegrationsSection |
publishing/ |
PublishingRules |
auth/ |
AdminRoute, ProtectedRoute, SignInForm, SignUpFormUnified |
navigation/ |
ModuleNavigationTabs |
UserProfile/ |
UserAddressCard, UserInfoCard, UserMetaCard (tailadmin-original) |
5. Shared Components — Usage Patterns
Most-Used Shared Components
| Component |
Estimated Usage Count |
Notes |
Button |
50+ pages |
Universal — primary UI action element |
Modal |
30+ components |
All modals in codebase |
Badge |
25+ pages |
Status/label badges |
Card |
20+ widgets |
Dashboard widgets, cards |
InputField |
15+ forms |
All text inputs |
SelectDropdown |
12+ forms |
Custom dropdown selects |
Dropdown/DropdownItem |
10+ menus |
Header, site selectors, actions |
Tooltip / EnhancedTooltip |
10+ |
Pipeline, metrics, help text |
CompactPagination |
10 pages |
All TablePageTemplate pages |
Alert |
8+ pages |
Inline notifications |
Switch |
6+ |
Settings toggles |
Spinner |
5+ |
Loading states |
Accordion |
4+ |
Automation details, settings |
Duplicate Patterns Found
| Pattern |
Instances |
Details |
| Site selector variants |
4 |
SiteSelector, SingleSiteSelector, SiteWithAllSitesSelector, SiteAndSectorSelector — could be 1 component with props |
| Notification dropdown |
2 |
NotificationDropdown + NotificationDropdownNew — one is likely stale |
| Pricing table |
2 |
PricingTable.tsx (default) + index.tsx (named) — overlapping implementations |
| Theme toggle |
2 |
ThemeTogglerTwo (floating) + ThemeToggleButton (header icon) |
| BulkWordPressPublish |
2 |
WordPressPublish/BulkWordPressPublish.tsx (custom UI) + BulkWordPressPublish/BulkWordPressPublish.tsx (MUI-based — different library!) |
| Error boundary |
2 |
ErrorBoundary (top-level) + PageErrorBoundary (per-page) — similar patterns |
| Three-widget footer |
2 |
ThreeWidgetFooter + StandardThreeWidgetFooter |
| Date formatting |
2 |
dateUtils.ts + date.ts — overlapping functions (formatDateTime exists in both) |
Inconsistencies
| Issue |
Details |
| Icon library mixing |
PaymentGatewaySelector.tsx uses lucide-react instead of ../../icons; BulkWordPressPublish/ uses @mui/icons-material |
| Import path inconsistency |
PaymentGatewaySelector.tsx uses @/ alias; rest of codebase uses relative paths |
| Inline buttons |
PageErrorBoundary, ErrorBoundary use raw <button> instead of shared Button component |
| Inline table styling |
Sites Dashboard, Automation pages have inline table implementations instead of using Table primitives |
| Settings form patterns |
No shared settings form template — each settings page builds its own form layout |
6. Page-by-Page Breakdown
Template Distribution
| Template |
Pages Using It |
TablePageTemplate (config-driven) |
Keywords, Clusters, Ideas, Tasks, Content, Review, Approved, Images, Sites/List, Setup/IndustriesSectorsKeywords |
ContentViewTemplate |
ContentView (single article detail) |
DashboardTemplate (structure, not widely used) |
Available but most dashboard pages are custom |
FormPageTemplate (settings layout) |
Available but not widely adopted |
| Custom layouts |
~50 pages |
| TailAdmin demo/reference |
UIElements, Components |
| Placeholder/stub |
5 pages |
Planner Module (4 pages)
| Page |
Template |
Notes |
| Keywords |
TablePageTemplate |
Config-driven via keywords.config.tsx. Auto-cluster, import/export. |
| Clusters |
TablePageTemplate |
Config-driven via clusters.config.tsx. Auto-generate ideas. |
| ClusterDetail |
Custom |
Tabbed detail view (keywords, ideas, stats). Manual table. |
| Ideas |
TablePageTemplate |
Config-driven via ideas.config.tsx. Bulk queue to writer. |
Writer Module (6 pages)
| Page |
Template |
Notes |
| Tasks |
TablePageTemplate |
Config-driven. Auto-generate content/images. Has Kanban/List toggles. |
| Content |
TablePageTemplate |
Config-driven. Inline editing disabled. |
| Review |
TablePageTemplate |
Config-driven. Content review workflow. |
| Approved |
TablePageTemplate |
Config-driven. Scheduling, publishing. |
| Images |
TablePageTemplate |
Config-driven. Dynamic in-article image columns. |
| ContentView |
ContentViewTemplate |
Single article detail with scheduling, image management. |
Publisher Module (2 pages)
| Page |
Template |
Notes |
| ContentCalendar |
Custom |
FullCalendar integration with month/week/list views. Custom scheduling modals. |
| PublishSettings |
Custom |
Multi-tab settings (general, frequency, scheduling). Inline form. |
Sites Module (11 pages)
| Page |
Template |
Notes |
| List |
TablePageTemplate |
Sites management list. |
| Dashboard |
Custom |
Multi-section dashboard with widget grid. Manual tables. |
| Settings |
Custom |
Tab-based site settings. Inline forms. |
| Content |
Custom |
Site content management with source filtering. |
| ContentStructure |
Custom |
Content structure config. |
| PostEditor |
Custom |
Post editing interface. |
| PageManager |
Custom |
Site page management. |
| SyncDashboard |
Custom |
WordPress sync status. |
| PublishingQueue |
Custom |
Publishing queue with status tracking. |
| AIAutomationSettings |
Custom |
Per-site automation config. |
| DeploymentPanel |
Custom |
Deprecated placeholder. |
Automation Module (4 pages)
| Page |
Template |
Notes |
| AutomationPage |
Custom |
Main automation view with config, processing, history. |
| AutomationOverview |
Custom |
Multi-site overview with eligibility status. |
| AutomationRunDetail |
Custom |
Detailed run breakdown with stage accordion. |
| PipelineSettings |
Custom |
Pipeline stage configuration form. |
Thinker Module (5 pages)
| Page |
Template |
Notes |
| Prompts |
Custom |
Prompt library with CRUD and categories. |
| AuthorProfiles |
Custom |
Author voice profiles with CRUD. |
| Strategies |
Custom |
Content strategy management. |
| Profile |
Custom |
User profile view (TailAdmin-original layout). |
| ImageTesting |
Custom |
Image generation testing interface. |
Other Modules
| Module |
Page |
Template |
Notes |
| Optimizer |
ContentSelector |
Custom |
Content selection for optimization. |
| Optimizer |
AnalysisPreview |
Custom |
Optimization results preview. |
| Linker |
ContentList |
Custom |
Internal linking content list. |
| Setup |
SetupWizard |
Custom |
Multi-step onboarding wizard. |
| Help |
Help |
Custom |
Help center page. |
| Reference |
Industries, SeedKeywords |
Custom |
Read-only reference data. |
Settings (12 pages) — High duplication risk
| Page |
Notes |
| General |
Inline form layout |
| Publishing |
Tab-based publishing config |
| Integration |
Integration CRUD |
| Plans |
Plan display (duplicated in account/) |
| Subscriptions |
Subscription management (duplicated) |
| CreditsAndBilling |
Billing info (duplicated) |
| Industries |
Industry selection |
| Account |
Account settings (duplicated in account/) |
| Sites |
Sites management |
| Users |
User management (admin) |
| System |
System admin dashboard |
| WordPressIntegrationDebug |
Debug tool |
Account (7 pages) — Supersedes Settings billing
| Page |
Notes |
| AccountSettingsPage |
Account settings + profile |
| ContentSettingsPage |
Content generation settings |
| NotificationsPage |
Notification preferences |
| PlansAndBillingPage |
Plan + billing unified view |
| PurchaseCreditsPage |
Credit purchase flow |
| UsageDashboardPage |
Usage overview |
| UsageAnalyticsPage |
Detailed usage analytics |
Auth Pages (7 pages)
| Page |
Origin |
Notes |
| AuthPageLayout |
tailadmin-modified |
Split-screen auth layout |
| SignIn |
tailadmin-modified |
Custom logic, TailAdmin layout |
| SignUp |
tailadmin-modified |
Custom with inline pricing |
| ForgotPassword |
tailadmin-modified |
TailAdmin layout |
| ResetPassword |
tailadmin-modified |
TailAdmin layout |
| VerifyEmail |
custom |
Email verification flow |
| Unsubscribe |
custom |
Email unsubscribe |
Demo/Reference Pages
| Page |
Origin |
Notes |
| UIElements |
tailadmin-original |
737 lines — TailAdmin component showcase |
| Components |
tailadmin-original |
680 lines — TailAdmin demo page |
| NotFound |
tailadmin-original |
404 page with grid shapes |
7. Stores & API Layer
Zustand Stores (11 stores, 1,802 LOC)
| Store |
State Managed |
LOC |
Persistence |
API Calls |
authStore |
User, tokens, auth state |
540 |
localStorage (auth-storage) |
5 endpoints (raw fetch) |
siteStore |
Active site |
140 |
localStorage (site-storage) |
GET /v1/auth/sites/ |
sectorStore |
Active sector, sector list |
168 |
localStorage (sector-storage) |
GET /v1/auth/sites/{id}/sectors/ |
plannerStore |
Keywords, clusters |
110 |
None |
2 endpoints (stubs for CUD) |
billingStore |
Balance, usage, limits |
82 |
None |
3 billing endpoints |
notificationStore |
Notifications, unread count |
336 |
None (in-memory) |
5 notification endpoints |
onboardingStore |
Guide state |
102 |
localStorage (onboarding-storage) |
3 user-setting endpoints |
settingsStore |
Account/module settings |
195 |
localStorage (settings-storage v4) |
6 settings endpoints |
moduleStore |
Module enablement |
56 |
None |
1 endpoint |
columnVisibilityStore |
Column visibility per page |
53 |
Direct localStorage |
None |
pageSizeStore |
Global page size |
20 |
localStorage (igny8-page-size) |
None |
API Service Layer (8 files, 5,626 LOC)
| File |
LOC |
Organization |
Endpoints |
api.ts |
3,056 |
Monolithic — 90+ functions |
75+ endpoints across planner, writer, sites, sectors, settings, billing, keywords-library |
billing.api.ts |
1,507 |
Well-organized (sectioned) |
50+ billing/payment/subscription endpoints |
automationService.ts |
438 |
Well-organized |
19 automation endpoints |
unifiedSettings.api.ts |
207 |
Well-organized |
2 unified settings endpoints |
integration.api.ts |
158 |
Well-organized |
7 integration endpoints |
notifications.api.ts |
142 |
Well-organized |
5 notification endpoints |
optimizer.api.ts |
86 |
Well-organized |
3 optimizer endpoints |
linker.api.ts |
32 |
Well-organized |
2 linker endpoints |
Auth pattern: All APIs use JWT Bearer tokens via fetchAPI(). Token sourced from Zustand → localStorage fallback. Auto-refresh on 401. Force-logout on refresh failure.
api.ts should be split — it contains planner, writer, sites, sectors, settings, billing, and keywords-library endpoints in a single file. The other service files demonstrate the correct pattern.
API Directory (api/)
| File |
Exports |
Purpose |
optimizer.api.ts |
optimizerApi |
Optimize, batch optimize, analyze |
linker.api.ts |
linkerApi |
Process, batch process internal links |
8. Styling Audit
Tailwind Configuration
| Aspect |
Details |
| Version |
Tailwind CSS 4 (CSS-first config via @theme blocks) |
| Config file |
No tailwind.config.js — all in design-system.css @theme |
| PostCSS |
@tailwindcss/postcss plugin only |
| Dark mode |
@custom-variant dark (&:is(.dark *)) |
| Default palettes |
All disabled (--color-red-*: initial, etc.) |
| Custom palettes |
6 semantic scales via color-mix() |
| Font |
Outfit (Google Fonts) |
| Breakpoints |
Standard + 2xsm(375), xsm(425), 3xl(2000) |
CSS Files
| File |
Lines |
Purpose |
styles/design-system.css |
1,006 |
Master design system — tokens, @theme, base, utilities, components |
marketing/styles/marketing.css |
210 |
Marketing site — re-imports design-system + own @theme |
components/shared/blocks/blocks.css |
125 |
CMS block component styles |
components/shared/layouts/layouts.css |
80 |
CMS layout scaffolding |
Custom CSS Utilities
| Category |
Classes |
Purpose |
| Sidebar nav |
menu-item, menu-item-active, menu-item-inactive, menu-item-icon-*, menu-dropdown-* |
TailAdmin sidebar styling via @utility |
| Tables |
igny8-table-*, igny8-data-row, igny8-skeleton-row |
Compact table styling, loading transitions |
| Header |
igny8-header-metric* |
Header metric badges |
| Filters |
igny8-filter-bar |
Filter bar layout |
| Selects |
igny8-select-styled |
Native select custom chevron |
| Keywords |
keywords-library-sector-* |
Keyword sector cards |
| Misc |
no-scrollbar, chat-height, inbox-height |
Utility classes |
| Animations |
animate-slide-in-right |
Toast slide-in |
CMS Theme System (styles/cms/)
Separate TypeScript-based theme system for CMS-published content (not admin UI):
colors.ts — Color scheme definitions (blue, purple, green)
typography.ts — Typography presets (modern, classic, editorial, minimal, tech)
components.ts — Component style defaults (buttons, cards, inputs)
presets.ts — Complete theme presets (modern, classic, minimal, bold, elegant, tech)
Style Issues Found
| Issue |
Severity |
Details |
| Marketing CSS hex conflict |
Medium |
marketing.css has hardcoded hex color scales that conflict with design-system.css color-mix() values |
| Hardcoded hex in blocks.css/layouts.css |
Low |
CMS CSS uses raw hex instead of CSS variables |
Dual @custom-variant dark |
Low |
Declared in both design-system.css and marketing.css (redundant) |
30 !important usages |
Low |
For ApexCharts/jVectorMap overrides — acceptable |
| 4 commented-out palettes |
Low |
Development artifacts in design-system.css :root |
9. Duplication & Inconsistency Report
Critical Duplications
| # |
Pattern |
Locations |
Impact |
| 1 |
Settings form layout |
6+ Settings pages + 7 Account pages (13 total, partially overlapping) |
No shared FormPageTemplate adoption. Each page builds its own form layout. |
| 2 |
Billing/Credits pages |
Settings/CreditsAndBilling + Billing/ (3 pages) + account/PlansAndBillingPage + account/PurchaseCreditsPage + account/UsageDashboardPage |
7+ pages covering similar billing/credit ground |
| 3 |
API monolith |
api.ts (3,056 LOC) |
90+ functions in one file. Other service files demonstrate the pattern to follow. |
| 4 |
Site selector components |
4 components (SiteSelector, SingleSiteSelector, SiteWithAllSitesSelector, SiteAndSectorSelector) |
Could be unified into 1 component with mode prop |
| 5 |
Manual tables |
Sites/Dashboard, Automation pages, Billing pages, Thinker pages |
Should use Table primitives or TablePageTemplate |
| 6 |
Filter boilerplate |
8 table pages each have ~50-100 lines of cascading filter state |
Now handled by TablePageTemplate — older pages not migrated |
| 7 |
Three-way route config |
App.tsx + AppSidebar.tsx + routes.config.ts |
Navigation/routing defined in 3 places independently |
| 8 |
Date formatting |
dateUtils.ts + date.ts |
Overlapping formatDateTime functions |
| 9 |
BulkWordPressPublish |
WordPressPublish/ (custom UI) + BulkWordPressPublish/ (MUI) |
Two implementations using different UI libraries |
| 10 |
Notification dropdown |
NotificationDropdown + NotificationDropdownNew |
One appears stale |
Inconsistent UI Patterns
| Pattern |
Expected |
Actual |
| Icon library |
../../icons (custom SVG) |
lucide-react in PaymentGatewaySelector, @mui/icons-material in BulkWordPressPublish/ |
| Component library |
Custom ui/ |
MUI (@mui/material) in BulkWordPressPublish/ |
| Import paths |
Relative (../../) |
@/ alias in PaymentGatewaySelector |
| Button usage |
<Button> component |
Raw <button> in error boundaries |
| Table implementation |
Table primitives or TablePageTemplate |
Inline <table> in 4+ pages |
| Form layout |
Should use FormPageTemplate |
Each settings page custom |
| Tab component |
<Tabs> from ui/tabs/ |
Inline tab implementations in 3+ pages |
Components That Should Be Shared But Aren't
| Pattern |
Pages Implementing It |
Proposed Shared Component |
| Settings form page with sections + save bar |
13 settings/account pages |
Adopt FormPageTemplate universally |
| Status badge (content status) |
10+ pages |
Already exists as Badge but inline styling still found |
| Metric summary cards (4-up grid) |
Dashboard, Billing, Automation |
MetricCardGrid component |
| Confirm + Execute pattern (modal → API → toast) |
20+ actions across pages |
useConfirmAction hook |
| Pagination + page size |
Manual in 4+ pages |
Already handled by TablePageTemplate — migrate remaining |
10. TailAdmin Pro Migration Plan
TailAdmin Pro Components That Would Replace Existing
| TailAdmin Pro Component |
Replaces Current |
Priority |
| Layout shell (Sidebar, Header, Footer) |
layout/AppSidebar.tsx, layout/AppHeader.tsx, layout/Backdrop.tsx, layout/AppLayout.tsx |
Phase 1 |
| Button (all variants) |
ui/button/Button.tsx (🔒 STYLE LOCKED — needs careful migration) |
Phase 1 |
| Modal/Dialog |
ui/modal/index.tsx |
Phase 1 |
| Form inputs (Input, TextArea, Select, Checkbox, Radio, Switch, FileInput) |
All form/input/ + form/switch/ + form/Select.tsx |
Phase 2 |
| Table |
ui/table/index.tsx (🔒 STYLE LOCKED) |
Phase 2 |
| Badge |
ui/badge/Badge.tsx (🔒 STYLE LOCKED) |
Phase 2 |
| Tabs |
ui/tabs/Tabs.tsx |
Phase 2 |
| Alert |
ui/alert/Alert.tsx |
Phase 2 |
| Breadcrumb |
ui/breadcrumb/Breadcrumb.tsx |
Phase 3 |
| Dropdown |
ui/dropdown/Dropdown.tsx (custom portal — evaluate if Pro is better) |
Phase 3 |
| Pagination |
ui/pagination/Pagination.tsx |
Phase 3 |
| Avatar |
ui/avatar/Avatar.tsx |
Phase 3 |
| Tooltip |
ui/tooltip/Tooltip.tsx (custom portal — may keep) |
Phase 3 |
| Toast/Notification |
ui/toast/ToastContainer.tsx (custom system — evaluate) |
Phase 3 |
| Progress Bar |
ui/progress/ProgressBar.tsx |
Phase 3 |
| Accordion |
ui/accordion/Accordion.tsx |
Phase 3 |
| Ribbon |
ui/ribbon/Ribbon.tsx |
Phase 3 |
| List |
ui/list/List.tsx |
Phase 3 |
| ButtonGroup |
ui/button-group/ButtonGroup.tsx |
Phase 3 |
| Pricing Table |
ui/pricing-table/PricingTable.tsx + index.tsx |
Phase 3 |
| Card |
ui/card/Card.tsx (custom system — evaluate) |
Phase 3 |
| Spinner |
ui/spinner/Spinner.tsx |
Phase 3 |
| Date Picker |
form/date-picker.tsx (flatpickr — Pro may include) |
Phase 3 |
| Auth pages |
AuthPages/SignIn.tsx, SignUp.tsx, etc. |
Phase 4 |
| Profile pages |
UserProfile/*.tsx |
Phase 4 |
| DataView |
ui/dataview/DataView.tsx (custom SaaS — may not exist in Pro) |
Evaluate |
| Video/Image demos |
ui/videos/, ui/images/ |
Delete — use Pro examples |
Custom Components That MUST Be Kept
These contain IGNY8-specific business logic and have no TailAdmin Pro equivalent:
| Category |
Components |
Reason |
| All 5 templates |
TablePageTemplate, ContentViewTemplate, DashboardTemplate, FormPageTemplate, SystemPageTemplate |
Core IGNY8 page architecture — config-driven |
| All page configs |
12 config files in config/pages/ |
Business-specific table/filter/action definitions |
| All config snippets |
columns.snippets.ts, filters.snippets.ts, actions.snippets.ts |
Reusable table config pieces |
| All stores |
11 Zustand stores |
Application state management |
| All services/API |
8 service files |
Backend API integration |
| All hooks |
9 custom hooks (except useModal) |
Business logic hooks |
| All utils |
14 utility files |
Business helpers |
| Dashboard widgets |
22 components |
IGNY8 dashboard-specific |
| Billing components |
17 components |
Billing/payment business logic |
| Automation components |
20 components |
Automation pipeline UI |
| WordPress integration |
15+ components across sites/, WordPressPublish/ |
CMS integration |
| Onboarding wizard |
7 components |
IGNY8 setup flow |
| Content management |
ContentFilter, SourceBadge, SyncStatusBadge |
Content workflow-specific |
| Keywords library |
4 components |
Keyword management UI |
| Module navigation |
ModuleNavigationTabs |
IGNY8 module system |
| Header metrics |
HeaderMetrics, HeaderMetricsContext |
Credit display system |
| Page context system |
PageContext, PageHeader, PageLoader |
IGNY8 page metadata |
| Search modal |
SearchModal (⌘K) |
App-wide search |
| Site selectors |
4 site/sector selector variants |
Multi-site architecture |
| All bulk action modals |
8+ modal components |
Workflow-specific bulk operations |
| Colors config |
colors.config.ts |
Module color mapping system |
| CMS theme system |
styles/cms/*.ts |
Published content theming |
| Icons |
icons/index.ts, icons/lazy.ts |
Custom icon registry (may need to merge with Pro icons) |
Migration Order (Least Risk First)
Phase 1: Layout Shell (Highest Impact, Moderate Risk)
- Install TailAdmin Pro alongside existing code
- Map design tokens: Extract IGNY8's 6 base colors +
color-mix() system → TailAdmin Pro Tailwind config
- Migrate layout components: Replace
AppLayout, AppSidebar, AppHeader, Backdrop with Pro equivalents. Preserve:
- Module-gated sidebar items
- Credit metric badges in header
- Site/sector selectors
- Page context system
- Migrate auth pages: SignIn, SignUp, ForgotPassword, ResetPassword — closest to TailAdmin originals
- Delete demo files:
UIElements.tsx, Components.tsx, ui/videos/, ui/images/
Phase 2: Core UI Primitives (High Impact, Higher Risk)
- Button → Pro Button. Must preserve: tone/variant/size matrix, gradient variant,
🔒 STYLE LOCKED contract. Create adapter if Pro API differs.
- Table → Pro Table. Must work with
TablePageTemplate config system.
- Form inputs → Pro inputs. Must preserve: error/success/disabled states,
twMerge+clsx composition.
- Badge → Pro Badge. Must preserve: 12 tones, 4 variants, backward-compat
color prop.
- Modal → Pro Modal. Must preserve: portal rendering, ESC/backdrop close, scroll lock.
- Tabs → Pro Tabs.
Phase 3: Secondary UI Components (Lower Impact, Low Risk)
Breadcrumb, Dropdown, Pagination, Avatar, Tooltip, Toast, ProgressBar, Accordion, Ribbon, List, ButtonGroup, PricingTable, Card, Spinner, DatePicker.
Each is a drop-in replacement with prop mapping. Can be done component-by-component.
Phase 4: Page Templates & Cleanup
- Unify route definitions: Consolidate
App.tsx, AppSidebar.tsx, routes.config.ts into a single config
- Migrate manual tables: Convert 4+ pages with inline tables to
TablePageTemplate
- Consolidate settings pages: Adopt
FormPageTemplate across all settings/account pages
- Clean up billing duplication: Merge Settings billing + Billing pages + Account pages
- Split
api.ts: Break into planner.api.ts, writer.api.ts, sites.api.ts, settings.api.ts, keywords-library.api.ts
- Consolidate site selectors: Unify 4 variants into 1 configurable component
- Remove stale components:
ModuleGuard (deprecated), NotificationDropdownNew (likely stale), BulkWordPressPublish/ (MUI version)
- Merge date utils: Consolidate
dateUtils.ts + date.ts
- Fix MUI contamination: Replace
@mui/material usage in BulkWordPressPublish/ with custom UI components
These 6 hex values + the color-mix() derivation system are the only color configuration needed in TailAdmin Pro's theme config. All other colors are computed.
Estimated Scope Per Section
| Phase |
Components Affected |
Files to Modify |
Risk Level |
| Phase 1: Layout Shell |
10 |
~20 |
⚠️ Moderate — touches every page via layout |
| Phase 2: Core Primitives |
15 |
~80 (imports update) |
⚠️ High — Button/Table/Badge used everywhere |
| Phase 3: Secondary UI |
15 |
~30 |
✅ Low — isolated replacements |
| Phase 4: Cleanup |
30+ |
~50 |
⚠️ Moderate — structural changes |
| Total |
~70 UI components |
~180 files |
|
Pre-Migration Checklist
Appendix A: Third-Party Dependencies (UI-Related)
| Package |
Version |
Used By |
Notes |
react |
^19.0.0 |
All |
Core framework |
react-dom |
^19.0.0 |
All |
DOM rendering |
react-router-dom |
^7.9.5 |
Routing, Link |
v7 — latest |
zustand |
^5.0.8 |
11 stores |
State management |
tailwind-merge |
^3.0.1 |
Button, IconButton |
Class dedup |
clsx |
^2.1.1 |
10+ components |
Conditional classes |
apexcharts / react-apexcharts |
^4.1.0 / ^1.7.0 |
Charts |
Dashboard widgets |
@fullcalendar/* |
^6.1.15 |
ContentCalendar |
Calendar view |
flatpickr |
^4.6.13 |
DatePicker |
Date picker |
react-dropzone |
^14.3.5 |
DropZone |
File upload |
react-dnd / react-dnd-html5-backend |
^16.0.1 |
KanbanBoard |
Drag-and-drop |
swiper |
^11.2.3 |
Marketing site |
Carousel |
@react-jvectormap/* |
^1.0.4 / ^1.1.2 |
Map widgets |
Vector maps |
react-helmet-async |
^2.0.5 |
PageMeta/SEO |
Head management |
lucide-react |
^0.554.0 |
PaymentGatewaySelector only |
Should not be used — use icons/ |
@heroicons/react |
^2.2.0 |
Icons (via icons/) |
SVG icon source |
Appendix B: File Count by Directory
| Directory |
.tsx/.ts Files |
components/ui/ |
52 |
components/common/ |
51 |
components/dashboard/ |
22 |
components/Automation/ |
20 |
components/billing/ |
17 |
components/form/ |
25 |
components/sites/ |
11 |
components/onboarding/ |
7 |
components/header/ |
6 |
components/WordPressPublish/ |
4 |
components/auth/ |
4 |
components/tasks/ |
4 |
components/keywords-library/ |
5 |
components/content/ |
4 |
components/integration/ |
3 |
components/optimizer/ |
2 |
components/shared/ |
22 |
components/UserProfile/ |
3 |
components/navigation/ |
1 |
components/publishing/ |
1 |
components/linker/ |
1 |
components/BulkWordPressPublish/ |
1 |
pages/ |
68 |
store/ |
11 |
services/ |
6 |
api/ |
2 |
config/ |
24 |
templates/ |
5 |
hooks/ |
9 |
utils/ |
14 |
context/ |
5 |
layout/ |
5 |
icons/ |
2 |
styles/ |
5 |
marketing/ |
22 |
constants/ |
1 |
types/ |
1 |
| Other (main.tsx, App.tsx, etc.) |
4 |
| Total |
483 |