Files
metabuilder/frontends/codegen/docs/REFACTOR_SUMMARY.md
2026-03-09 22:30:41 +00:00

2.3 KiB

JSON-Driven Architecture Refactor

Overview

Created a comprehensive JSON-driven architecture that loads UI from declarative configurations, breaking down large components and creating an extensive hook library.

New Hook Library

Data Management Hooks (/src/hooks/data/)

  • useDataSource: Unified data source management (KV, static, computed)
  • useCRUD: Full CRUD operations for any data type
  • useSearchFilter: Search and filter functionality
  • useSort: Sorting with direction toggle
  • usePagination: Complete pagination logic
  • useSelection: Multi/single selection management

Form Hooks (/src/hooks/forms/)

  • useFormField: Field-level validation and state
  • useForm: Form submission with async support

New Atomic Components (/src/components/atoms/)

All components < 50 LOC:

  • DataList: Renders lists with empty states
  • StatCard: Metric display with trends and icons
  • ActionButton: Button with tooltip support
  • LoadingState: Configurable loading spinners
  • EmptyState: Empty state with optional actions

JSON Page Configuration

Created /src/config/pages/dashboard.json demonstrating:

  • Declarative card layouts
  • Data binding expressions
  • Computed data sources
  • Dynamic component rendering
  • Responsive grid configurations

JSON Page Renderer

/src/components/JSONPageRenderer.tsx interprets JSON schemas to render:

  • Multi-section layouts
  • Dynamic data bindings
  • Icon resolution from Phosphor
  • Gradient cards with sub-components
  • Stat cards from configuration

Architecture Benefits

  1. No Code Changes: Update UI through JSON edits
  2. Type-Safe: Full TypeScript support throughout
  3. Composable: Mix JSON-driven and coded components
  4. Maintainable: All components under 150 LOC
  5. Testable: Hooks isolated from UI logic

Usage Example

import { JSONPageRenderer } from '@/components/JSONPageRenderer'
import dashboardSchema from '@/config/pages/dashboard.json'

function MyPage({ projectData }) {
  return (
    <JSONPageRenderer
      schema={dashboardSchema}
      data={projectData}
      functions={{ calculateCompletionScore }}
    />
  )
}

Next Steps

  1. Expand JSON schemas for all pages
  2. Add more computed data sources
  3. Create schema validation
  4. Build visual JSON editor
  5. Add action bindings (click handlers, etc.)