25 KiB
Frontend Complete Refactoring & Standardization Plan
✅ STATUS: TAILWIND DEFAULT COLORS DISABLED
As of 2026-01-01: All Tailwind default color palettes (blue-500, red-600, green-400, etc.) have been disabled via @theme in design-system.css. Only our custom design system colors work now.
What's Disabled (via @theme { --color-*-*: initial; })
red-*,orange-*,amber-*,yellow-*,lime-*green-*,emerald-*,teal-*,cyan-*,sky-*blue-*,indigo-*,violet-*,fuchsia-*,pink-*,rose-*slate-*,zinc-*,neutral-*,stone-*
What WORKS (our design system)
brand-*(25-950) - derived from--color-primarysuccess-*(25-950) - derived from--color-successwarning-*(25-950) - derived from--color-warningerror-*(25-950) - derived from--color-dangerpurple-*(25-950) - derived from--color-purplegray-*(25-950) - derived from--color-gray-baseblue-light-*- info/link colors (derived from primary)
🎯 Objective
Completely remove Tailwind default styles and refactor the entire frontend to use ONLY the custom design system defined in /src/styles/design-system.css.
Why This Refactor?
- AI agents keep defaulting to Tailwind's standard colors instead of our custom tokens
- Mixed Tailwind + custom styles cause conflicts and inconsistencies
- No single source of truth - styles scattered across files
- Inline components duplicated across multiple pages
End Goal
- Single CSS file (
design-system.css) as the ONLY source for all design tokens - All colors come from CSS variables defined in
:root - All components extracted to
/components/ui/- NO inline component definitions - Zero Tailwind default colors - only our custom palette (brand, success, error, warning, purple, gray)
📂 Single Source of Truth: /src/styles/design-system.css
This file contains:
- Section 1: Design Tokens (CSS Variables) - colors, radius, shadows, gradients
- Section 2: Dark Mode Overrides
- Section 3: Tailwind Configuration (DEFAULT COLORS DISABLED)
- Section 4: Base Styles
- Section 5: Component Utilities
- Section 6: Form Element Styles
- Section 7: Table Styles
- Section 8: Header Metrics
- Section 9: Badge Styles
- Section 10-13: Library overrides, utilities, animations
🎨 Color Architecture: 6 Primary Colors Only
Why Only 6 Primary Hex Colors?
- Dynamic Theming: Users can customize theme colors in the frontend
- Single Change = Entire System Updates: Change one primary color → all shades/variants update automatically
- Consistency: Whole app looks designed by ONE person, not scattered/mismatched
- Maintainability: No hunting for hardcoded hex values scattered everywhere
The 6 Primary Color Tokens (ONLY THESE USE HEX)
:root {
/* ===== THE ONLY 6 HEX VALUES IN THE ENTIRE SYSTEM ===== */
--color-primary: #2C7AA1; /* Brand Blue - main CTA, links, primary actions */
--color-success: #2CA18E; /* Success Green - confirmations, positive states */
--color-warning: #D9A12C; /* Warning Amber - alerts, cautions */
--color-danger: #A12C40; /* Danger Red - errors, destructive actions */
--color-purple: #2C40A1; /* Purple - premium features, special emphasis */
--color-gray-base: #667085; /* Gray Base - neutral text, borders, backgrounds */
}
ALL Other Colors MUST Derive From These 6
/* ✅ CORRECT - Derived from primary tokens */
--color-primary-dark: color-mix(in srgb, var(--color-primary) 80%, black);
--color-primary-light: color-mix(in srgb, var(--color-primary) 60%, white);
--color-primary-subtle: color-mix(in srgb, var(--color-primary) 8%, white);
--color-brand-500: var(--color-primary);
--color-brand-600: color-mix(in srgb, var(--color-primary) 85%, black);
--color-brand-400: color-mix(in srgb, var(--color-primary) 75%, white);
/* ... all shades computed from the primary */
/* ❌ WRONG - Hardcoded hex for variants */
--color-primary-dark: #005A8C; /* NO! Must derive from --color-primary */
--color-brand-600: #0369a1; /* NO! Must use color-mix() */
Color Derivation Rules
| Shade | Derivation Formula |
|---|---|
*-25 |
color-mix(in srgb, var(--color-*) 3%, white) |
*-50 |
color-mix(in srgb, var(--color-*) 8%, white) |
*-100 |
color-mix(in srgb, var(--color-*) 15%, white) |
*-200 |
color-mix(in srgb, var(--color-*) 25%, white) |
*-300 |
color-mix(in srgb, var(--color-*) 40%, white) |
*-400 |
color-mix(in srgb, var(--color-*) 60%, white) |
*-500 |
var(--color-*) (the primary itself) |
*-600 |
color-mix(in srgb, var(--color-*) 85%, black) |
*-700 |
color-mix(in srgb, var(--color-*) 70%, black) |
*-800 |
color-mix(in srgb, var(--color-*) 55%, black) |
*-900 |
color-mix(in srgb, var(--color-*) 40%, black) |
*-950 |
color-mix(in srgb, var(--color-*) 25%, black) |
Future Theming Support
When user selects a theme, we only change these 6 values:
// Theme switcher (future feature)
document.documentElement.style.setProperty('--color-primary', '#NEW_HEX');
document.documentElement.style.setProperty('--color-success', '#NEW_HEX');
// ... and the ENTIRE app updates automatically!
Phase 1: Audit Detection Scripts
1.1 Run These Detection Commands
# Create audit results folder
mkdir -p /data/app/igny8/frontend/audit-results
# =====================================================
# STYLE VIOLATIONS - Must be 0 after refactor
# =====================================================
# 1. ALL inline styles (style={{)
grep -rn "style={{" src/pages/ src/components/ --include="*.tsx" > audit-results/01-inline-styles.txt
echo "Inline styles found: $(wc -l < audit-results/01-inline-styles.txt)"
# 2. ALL hardcoded hex colors in className (text-[#xxx], bg-[#xxx])
grep -rn "\[#[0-9a-fA-F]\{3,6\}\]" src/pages/ src/components/ --include="*.tsx" > audit-results/02-hardcoded-hex-class.txt
echo "Hardcoded hex in className: $(wc -l < audit-results/02-hardcoded-hex-class.txt)"
# 3. ALL hardcoded hex colors anywhere (outside CSS)
grep -rn "#[0-9a-fA-F]\{6\}" src/pages/ src/components/ --include="*.tsx" > audit-results/03-hardcoded-hex-all.txt
echo "Hardcoded hex anywhere: $(wc -l < audit-results/03-hardcoded-hex-all.txt)"
# 4. ALL rgb/rgba inline values
grep -rn "rgba\?(" src/pages/ src/components/ --include="*.tsx" > audit-results/04-rgb-values.txt
echo "RGB/RGBA values: $(wc -l < audit-results/04-rgb-values.txt)"
# 5. TAILWIND DEFAULT COLORS (should NOT exist - we disabled them)
grep -rn "bg-blue-\|text-blue-\|border-blue-\|bg-red-\|text-red-\|border-red-\|bg-green-\|text-green-\|border-green-\|bg-yellow-\|text-yellow-\|bg-emerald-\|text-emerald-\|bg-indigo-\|text-indigo-\|bg-pink-\|text-pink-\|bg-rose-\|text-rose-\|bg-amber-\|text-amber-\|bg-cyan-\|text-cyan-\|bg-teal-\|text-teal-\|bg-violet-\|text-violet-\|bg-fuchsia-\|text-fuchsia-\|bg-lime-\|text-lime-\|bg-orange-\|text-orange-\|bg-sky-\|text-sky-\|bg-slate-\|text-slate-\|bg-zinc-\|text-zinc-\|bg-neutral-\|text-neutral-\|bg-stone-\|text-stone-" src/pages/ src/components/ --include="*.tsx" > audit-results/05-tailwind-default-colors.txt
echo "Tailwind default colors: $(wc -l < audit-results/05-tailwind-default-colors.txt)"
# =====================================================
# COMPONENT VIOLATIONS
# =====================================================
# 6. External UI library imports (MUI, Chakra, Ant, etc.)
grep -rn "from '@mui\|from '@chakra\|from 'antd\|from '@headlessui\|from '@radix" src/pages/ src/components/ --include="*.tsx" > audit-results/06-external-ui-imports.txt
echo "External UI imports: $(wc -l < audit-results/06-external-ui-imports.txt)"
# 7. lucide-react imports (should use /icons/)
grep -rn "from 'lucide-react" src/pages/ src/components/ --include="*.tsx" > audit-results/07-lucide-imports.txt
echo "Lucide imports: $(wc -l < audit-results/07-lucide-imports.txt)"
# 8. Inline component definitions (const ComponentName = () => { inside pages)
grep -rn "const [A-Z][a-zA-Z]*\s*=\s*(" src/pages/ --include="*.tsx" > audit-results/08-inline-components.txt
echo "Inline component definitions: $(wc -l < audit-results/08-inline-components.txt)"
# 9. Raw HTML buttons (should use Button component)
grep -rn "<button " src/pages/ --include="*.tsx" > audit-results/09-raw-buttons.txt
echo "Raw HTML buttons: $(wc -l < audit-results/09-raw-buttons.txt)"
# 10. Raw HTML selects (should use standard Select)
grep -rn "<select " src/pages/ --include="*.tsx" > audit-results/10-raw-selects.txt
echo "Raw HTML selects: $(wc -l < audit-results/10-raw-selects.txt)"
# 11. Raw HTML inputs without standard classes
grep -rn "<input " src/pages/ --include="*.tsx" > audit-results/11-raw-inputs.txt
echo "Raw HTML inputs: $(wc -l < audit-results/11-raw-inputs.txt)"
# =====================================================
# SUMMARY
# =====================================================
echo ""
echo "====== AUDIT SUMMARY ======"
echo "Run these counts after refactoring - ALL should be 0:"
echo " 01-inline-styles.txt"
echo " 02-hardcoded-hex-class.txt"
echo " 05-tailwind-default-colors.txt"
echo " 06-external-ui-imports.txt"
echo " 07-lucide-imports.txt"
echo " 08-inline-components.txt (review - extract to /components/)"
Phase 2: Color System Standardization
2.1 The 6 Primary Color Tokens (ONLY HEX ALLOWED)
| Token | Hex Value | Purpose |
|---|---|---|
--color-primary |
#2C7AA1 |
Brand/Primary actions, links, CTA |
--color-success |
#2CA18E |
Success states, confirmations |
--color-warning |
#D9A12C |
Warning states, alerts, cautions |
--color-danger |
#A12C40 |
Error/Danger states, destructive |
--color-purple |
#2C40A1 |
Premium/Special features |
--color-gray-base |
#667085 |
Neutral base for grays |
2.2 Allowed Color Classes (ALL derived from 6 primaries)
| Color Category | Tailwind Classes | CSS Variable Base |
|---|---|---|
| Primary/Brand | brand-25 to brand-950 |
--color-primary |
| Gray/Neutral | gray-25 to gray-950 |
--color-gray-base |
| Success | success-25 to success-950 |
--color-success |
| Error | error-25 to error-950 |
--color-danger |
| Warning | warning-25 to warning-950 |
--color-warning |
| Purple | purple-25 to purple-950 |
--color-purple |
2.3 BANNED - Hardcoded Hex Values
ZERO hardcoded hex values allowed in:
- TSX/JSX files
- Component files
- Page files
- Inline styles
ONLY place hex values exist: The 6 primary tokens in design-system.css
2.4 BANNED - Tailwind Default Colors (DISABLED)
These are explicitly disabled and should NEVER appear:
❌ blue-*, red-*, green-*, emerald-*, teal-*, cyan-*, sky-*
❌ indigo-*, violet-*, fuchsia-*, pink-*, rose-*
❌ amber-*, yellow-*, lime-*, orange-*
❌ slate-*, zinc-*, neutral-*, stone-*
2.5 Color Replacement Map
| ❌ Wrong | ✅ Correct |
|---|---|
bg-blue-500, text-blue-500 |
bg-brand-500, text-brand-500 |
bg-red-500, text-red-500 |
bg-error-500, text-error-500 |
bg-green-500, text-green-500 |
bg-success-500, text-success-500 |
bg-yellow-500, text-yellow-500 |
bg-warning-500, text-warning-500 |
bg-indigo-500, text-indigo-500 |
bg-purple-500, text-purple-500 |
#0693e3 (hardcoded) |
var(--color-primary) or text-brand-500 |
#10B981 (hardcoded) |
var(--color-success) or text-success-500 |
#EF4444 (hardcoded) |
var(--color-danger) or text-error-500 |
style={{ color: '#xxx' }} |
Use CSS class from design system |
bg-[#XXXXXX] |
Use design token class |
Phase 3: Component Extraction & Standardization
3.1 Rules for Components
- NO inline component definitions in page files
- Any component used in 2+ places → Extract to
/components/ - All components use ONLY CSS classes from
design-system.css - No component-level inline styles
3.2 Standard Component Location
| Component Type | Location | Notes |
|---|---|---|
| Buttons | /components/ui/button/ |
All button variants |
| Modals/Dialogs | /components/ui/modal/ |
All popup overlays |
| Alerts/Notifications | /components/ui/alert/ |
All status messages |
| Badges/Tags | /components/ui/badge/ |
All labels/chips |
| Dropdowns | /components/ui/dropdown/ |
All select menus |
| Forms | /components/ui/form/ |
Inputs, selects, checkboxes |
| Cards | /components/ui/card/ |
Card containers |
| Tables | /components/ui/table/ |
Data tables |
| Tabs | /components/ui/tabs/ |
Tab interfaces |
| Spinners/Loading | /components/ui/spinner/ |
Loading states |
| Tooltips | /components/ui/tooltip/ |
Hover info |
| Progress | /components/ui/progress/ |
Progress bars |
3.3 Inline Components to Extract
Search pattern: const [A-Z][a-zA-Z]* = ( in /pages/
For each found:
- Check if similar exists in
/components/ui/ - If used in multiple pages → Extract to appropriate folder
- If page-specific → Keep but move to bottom of file or separate file in same folder
Phase 4: Styling Classes Standardization
4.1 Standard CSS Classes (from design-system.css)
Menu Items:
.menu-item /* Base menu item */
.menu-item-active /* Active state */
.menu-item-inactive /* Inactive state */
.menu-item-icon-size /* Icon sizing */
Form Elements:
.igny8-select-styled /* Styled select dropdown */
.tableCheckbox /* Table checkbox */
Tables:
.igny8-table-compact /* Compact table */
.igny8-table-container /* Table wrapper with min-height */
.igny8-table-wrapper /* Scrollable table wrapper */
.igny8-table-smooth /* Smooth transitions */
.igny8-data-row /* Animated data row */
Header Metrics:
.igny8-header-metrics /* Metrics bar container */
.igny8-header-metric /* Single metric */
.igny8-header-metric-label
.igny8-header-metric-value
.igny8-header-metric-accent
4.2 Shadow Classes
Use these instead of Tailwind defaults:
shadow-theme-xs, shadow-theme-sm, shadow-theme-md, shadow-theme-lg, shadow-theme-xl
4.3 Typography Classes
text-title-2xl, text-title-xl, text-title-lg, text-title-md, text-title-sm
text-theme-xl, text-theme-sm, text-theme-xs
Phase 5: Page-by-Page Audit Checklist
5.1 Audit Order (by priority)
| # | Module | Folder | Est. Files |
|---|---|---|---|
| 1 | Account Settings | pages/account/ |
~6 |
| 2 | Site Settings | pages/Settings/ |
~10 |
| 3 | Sites Management | pages/Sites/ |
~8 |
| 4 | Writer | pages/Writer/ |
~5 |
| 5 | Planner | pages/Planner/ |
~3 |
| 6 | Automation | pages/Automation/ |
~2 |
| 7 | Optimizer | pages/Optimizer/ |
~3 |
| 8 | Billing | pages/Billing/ |
~4 |
| 9 | Dashboard | pages/Dashboard/ |
~2 |
| 10 | Other Pages | Remaining | ~10+ |
5.2 Per-File Audit Checklist
For EACH .tsx file:
A. IMPORTS ✓
- NO
@mui/*imports - NO
lucide-reactimports (use/icons/) - NO
@chakra-ui,antd,@headlessui,@radix-ui - All icons from
/icons/folder - All UI components from
/components/ui/
B. COLORS ✓
- NO Tailwind default colors (blue-, red-, green-*, etc.)
- NO hardcoded hex (
#XXXXXX) - NO hardcoded rgb/rgba
- NO inline color styles (
style={{ color: '...' }}) - ONLY uses: brand-, gray-, success-, error-, warning-, purple-
C. STYLES ✓
- NO
style={{patterns - NO
sx={{patterns - All styles via CSS classes from design-system.css
- Dark mode handled via CSS variables (automatic)
D. COMPONENTS ✓
- NO inline component definitions (extract to /components/)
- NO raw
<button>elements (use Button component) - NO custom modal implementations (use Modal)
- NO custom alert/toast (use Alert)
- NO custom dropdown (use Dropdown)
E. FORMS ✓
- Inputs use standard pattern
- Selects use
.igny8-select-styledor standard Select component - Checkboxes use standard pattern
- Form labels consistent
Phase 6: Execution Tracker
6.1 Page Audit Progress
| File | Audited | Issues | Fixed | Verified |
|---|---|---|---|---|
| Account Module | ||||
pages/account/Profile.tsx |
☐ | - | ☐ | ☐ |
pages/account/Team.tsx |
☐ | - | ☐ | ☐ |
pages/account/Security.tsx |
☐ | - | ☐ | ☐ |
pages/account/Preferences.tsx |
☐ | - | ☐ | ☐ |
pages/account/Notifications.tsx |
☐ | - | ☐ | ☐ |
pages/account/ApiKeys.tsx |
☐ | - | ☐ | ☐ |
| Settings Module | ||||
pages/Settings/General.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/Integrations.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/Publishing.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/ContentDefaults.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/AIModels.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/ImageGeneration.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/SEO.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/Categories.tsx |
☐ | - | ☐ | ☐ |
pages/Settings/Tags.tsx |
☐ | - | ☐ | ☐ |
| Sites Module | ||||
pages/Sites/SitesList.tsx |
☐ | - | ☐ | ☐ |
pages/Sites/SiteDetail.tsx |
☐ | - | ☐ | ☐ |
pages/Sites/SiteSettings.tsx |
☐ | - | ☐ | ☐ |
pages/Sites/SiteDashboard.tsx |
☐ | - | ☐ | ☐ |
pages/Sites/CreateSite.tsx |
☐ | - | ☐ | ☐ |
| Other Modules | ||||
pages/Writer/*.tsx |
☐ | - | ☐ | ☐ |
pages/Planner/*.tsx |
☐ | - | ☐ | ☐ |
pages/Automation/*.tsx |
☐ | - | ☐ | ☐ |
pages/Optimizer/*.tsx |
☐ | - | ☐ | ☐ |
pages/Billing/*.tsx |
☐ | - | ☐ | ☐ |
6.2 Component Folder Audit
| Folder | Audited | Issues | Fixed |
|---|---|---|---|
components/ui/button/ |
☐ | - | ☐ |
components/ui/modal/ |
☐ | - | ☐ |
components/ui/alert/ |
☐ | - | ☐ |
components/ui/badge/ |
☐ | - | ☐ |
components/ui/dropdown/ |
☐ | - | ☐ |
components/ui/card/ |
☐ | - | ☐ |
components/ui/table/ |
☐ | - | ☐ |
components/ui/tabs/ |
☐ | - | ☐ |
components/ui/form/ |
☐ | - | ☐ |
components/common/ |
☐ | - | ☐ |
components/layout/ |
☐ | - | ☐ |
Phase 7: Verification
7.1 Zero-Tolerance Verification
After refactoring, these commands should return 0 results:
# 1. No Tailwind default colors
grep -rn "bg-blue-\|text-blue-\|bg-red-\|text-red-\|bg-green-\|text-green-\|bg-yellow-\|text-yellow-\|bg-indigo-\|bg-emerald-\|bg-pink-\|bg-rose-" src/pages/ src/components/ --include="*.tsx" | wc -l
# 2. No inline styles
grep -rn "style={{" src/pages/ src/components/ --include="*.tsx" | wc -l
# 3. No hardcoded hex in className
grep -rn "\[#[0-9a-fA-F]\{3,6\}\]" src/pages/ src/components/ --include="*.tsx" | wc -l
# 4. No external UI libraries
grep -rn "from '@mui\|from '@chakra\|from 'antd" src/pages/ src/components/ --include="*.tsx" | wc -l
# 5. No lucide-react direct imports
grep -rn "from 'lucide-react" src/pages/ --include="*.tsx" | wc -l
7.2 Visual Verification
- All pages render correctly (no broken styles)
- Light mode works properly
- Dark mode works properly (via
.darkclass) - All buttons consistent
- All forms consistent
- All tables consistent
- All modals consistent
- Brand colors appear correctly
📋 Quick Reference: Correct Usage Patterns
Colors (ALL derived from 6 primaries)
// ✅ CORRECT - use design token classes (derived from 6 primaries)
className="text-brand-500 bg-brand-50 border-brand-200"
className="text-success-500 bg-success-50"
className="text-error-500 bg-error-50"
className="text-warning-500 bg-warning-50"
className="text-purple-500 bg-purple-50"
className="text-gray-700 bg-gray-100"
// ✅ CORRECT - use CSS variables when needed
className="bg-[var(--color-primary)]"
style={{ '--custom-color': 'var(--color-primary)' }} // Only for CSS custom properties
// ❌ WRONG - Tailwind defaults (DISABLED)
className="text-blue-500 bg-blue-50"
className="text-red-500 bg-green-500"
// ❌ WRONG - Hardcoded hex (NEVER in TSX)
style={{ color: '#0693e3' }}
className="bg-[#0077B6]"
className="text-[#DC2626]"
Components
// ✅ CORRECT
import { Button } from '@/components/ui/button/Button';
import { Modal } from '@/components/ui/modal';
import { CheckIcon } from '@/icons';
<Button variant="primary" tone="brand">Save</Button>
// ❌ WRONG
import { Button } from '@mui/material';
import { Check } from 'lucide-react';
<button className="...">Save</button>
Where Hex Values ARE Allowed
/* ✅ ONLY in design-system.css - the 6 primary tokens */
:root {
--color-primary: #2C7AA1;
--color-success: #2CA18E;
--color-warning: #D9A12C;
--color-danger: #A12C40;
--color-purple: #2C40A1;
--color-gray-base: #667085;
}
/* ✅ All other colors derived using color-mix() */
--color-primary-dark: color-mix(in srgb, var(--color-primary) 75%, black);
--color-brand-600: color-mix(in srgb, var(--color-primary) 85%, black);
--color-gray-700: color-mix(in srgb, var(--color-gray-base) 70%, black);
🚨 CRITICAL RULES
- 6 PRIMARY HEX ONLY: Only
--color-primary,--color-success,--color-warning,--color-danger,--color-purple,--color-gray-baseuse hex values (plus#fffffffor white) - ALL SHADES DERIVED: Every shade (25-950) is computed from primary using
color-mix() - NO TAILWIND DEFAULTS: blue-, red-, green-*, etc. are DISABLED
- NO INLINE STYLES: Never use
style={{}}for colors/spacing - NO HARDCODED HEX IN TSX: All hex lives in design-system.css only
- EXTRACT COMPONENTS: Any UI used 2+ times →
/components/ui/ - USE STANDARD COMPONENTS: Button, Modal, Alert, Badge from
/components/ui/
🎯 Design Consistency Goals
The "One Designer" Principle
The entire application must look like it was designed and built by ONE person:
| Aspect | Requirement |
|---|---|
| Colors | Exact same 6 color palettes everywhere |
| Spacing | Consistent padding/margins (use Tailwind spacing scale) |
| Typography | Same font sizes, weights, line heights |
| Borders | Same border radius, colors, widths |
| Shadows | Same shadow tokens everywhere |
| Buttons | All use <Button> component, same variants |
| Forms | All inputs, selects, checkboxes styled identically |
| Cards | Same card patterns, padding, borders |
| Tables | Same table styles, row heights, headers |
| Modals | Same modal structure, animations |
Visual Consistency Checklist
- All primary buttons use
bg-brand-500 - All success messages use
success-*palette - All error states use
error-*palette - All warning states use
warning-*palette - All premium/special features use
purple-*palette - All neutral backgrounds use
gray-*palette - Border radius consistent (use
--radius-*tokens) - Shadows consistent (use
--shadow-*tokens) - Typography consistent (use
text-theme-*classes)
🚨 CRITICAL ISSUES - Fix First
Issue 1: Missing Components After Changes
Problem: Many pages have missing components after lucide-react → local icons migration
Affected Files (from git diff):
ImportExport.tsx- UsesDatabase,CheckCircleetc. from lucide-reactWordPressIntegrationDebug.tsx- UsesCheckCircle,XCircle,AlertTriangle, etc.PostEditor.tsx- UsesSaveIcon,XIcon,FileTextIcon, etc.NotificationsPage.tsx- UsesBell,CheckCircle,AlertTriangle, etc.AccountSettingsPage.tsx- UsesSave,Loader2,Settings, etc.PlansAndBillingPage.tsx- UsesCreditCard,Package, etc.ContentSettingsPage.tsx- UsesSave,Loader2,Image, etc.UsageAnalyticsPage.tsx- UsesTrendingUp,Activity, etc.PurchaseCreditsPage.tsx- UsesAlertCircle,Check, etc.- Multiple components in
/components/sites/,/components/billing/,/components/auth/
Fix: Replace lucide-react imports with local /icons/ imports. Add missing aliases to /icons/index.ts
Issue 2: Table Row Height Too Big (Planner & Writer)
Problem: Planner and Writer table font sizes too big for some columns, increasing overall row height - tables not compact anymore
Root Cause: Font size changes in CSS or component updates affecting table cell sizing
Fix Locations:
/src/styles/design-system.css-.igny8-table-compact tdrules- Planner and Writer table components - check for increased text sizes
Required Changes:
/* Ensure compact table styling */
.igny8-table-compact td {
padding: 6px 10px !important; /* Reduced from 8px 12px */
font-size: 13px !important; /* Reduced from 14px */
line-height: 1.3 !important; /* Tighter line height */
}
.igny8-table-compact th {
padding: 8px 12px !important; /* Reduced from 12px 16px */
font-size: 12px !important; /* Reduced from 14px */
}
Notes
- Gray scale (
gray-25togray-950) is ALLOWED - derived from--color-gray-base - Dark mode is handled automatically via CSS variables in
.darkclass - When in doubt, check
design-system.cssfor available classes - New utility classes should be added to
design-system.css, not inline - Future theming: Changing 6 primary hex values updates entire app automatically