"From Data to Experience — A UI/UX Library built with the OBIX Philosophy."
The OBIX Heart UI/UX Library is a React-standard, framework-friendly UI and UX library built on the Data-Oriented Adapted (DOA) breakthrough by Nnamdi Michael Okpala. It integrates seamlessly into React projects and modern frontends, providing:
✅ Component-first design with data adaptation at the core
✅ Data-driven UI interactions through systematic transformation layers
✅ Composable, testable architecture aligned with OBIX philosophy
✅ Quality-over-quantity POC methodology with TDD-driven development
This library is part of the OBIX verified data-adapted UI/UX framework:
📦 Main Repository: https://github.com/obinexus/obix
🔬 POC Source: https://github.com/obinexus/proof-of-concept
At the core of OBIX Heart is the Data-Oriented Adapted (DOA) model — a breakthrough architectural pattern introduced by Nnamdi Michael Okpala that revolutionizes how UI components interact with data through systematic adaptation layers.
DOA treats UI as a data transformation pipeline:
Raw State → Data Mapper → Adapted Data → UI View → Feedback Loop
Rather than binding UI to business logic prematurely, the DOA approach:
- Models UI components around pure data flow with immutable state transformations
- Enables adaptive UX where interfaces reshape themselves around changing data requirements
- Promotes testability and separation of concerns through explicit adapter contracts
- Provides 1:1 correspondence between functional and object-oriented paradigms
// Data Model Layer - Immutable state representation
interface DataModel<T> {
withState(transformer: (state: T) => T): DataModel<T>;
getState(): T;
}
// Behavior Model Layer - Operations on data models
interface BehaviorModel<T, R> {
applyTransition(name: string, state: T, ...args: any[]): T;
process(data: DataModel<T>): ValidationResult<R>;
}
// DOA Adapter Layer - Translation between paradigms
interface DOAAdapter<T, R> {
adapt(dataModel: DataModel<T>): R;
getDataModel(): DataModel<T>;
getBehaviorModel(): BehaviorModel<T, R>;
}
This architecture ensures components behave identically regardless of whether they are defined using functional or object-oriented programming patterns, maintaining perfect behavioral correspondence.
A React Component is a function or class that takes props as input and returns UI (JSX) as output. Components are the fundamental building blocks of React applications, encapsulating both UI structure and behavior logic.
// Basic component contract
type ReactComponent = (props: Props) => JSX.Element | React.ComponentClass<Props>
OBIX Heart supports both component paradigms with guaranteed behavioral equivalence through the DOA adapter layer.
Functional components are pure functions that use hooks for state management and lifecycle integration:
// Functional Component Structure
function MyComponent(props: ComponentProps): JSX.Element {
// Hooks for state and effects
const [state, setState] = useState(initialState);
useEffect(() => { /* lifecycle logic */ }, [dependencies]);
// Return JSX representation
return <div>{/* UI elements */}</div>;
}
// Arrow function alternative
const MyComponent = (props: ComponentProps) => {
const [state, setState] = useState(initialState);
return <div>{/* UI elements */}</div>;
};
Key Features:
- useState Hook: Manages component-local state with immutable updates
- useEffect Hook: Handles side effects and lifecycle events
- Custom Hooks: Encapsulate reusable stateful logic
- Pure Function Semantics: Predictable output based on props input
OOP components use class MyComponent extends React.Component
with state, lifecycle methods, and render()
:
// OOP Component Structure
class MyComponent extends React.Component<Props, State> {
constructor(props: Props) {
super(props);
this.state = { /* initial state */ };
}
// Lifecycle methods
componentDidMount() { /* setup logic */ }
componentDidUpdate(prevProps: Props, prevState: State) { /* update logic */ }
componentWillUnmount() { /* cleanup logic */ }
// Event handlers
handleEvent = (event: Event) => {
this.setState({ /* state updates */ });
}
// Required render method
render(): JSX.Element {
return <div>{/* UI elements */}</div>;
}
}
Key Features:
- this.state: Component-local state with
this.setState()
updates - Lifecycle Methods: Explicit hooks for component lifecycle phases
- Method Binding: Event handlers bound to component instance
- Class Instance Semantics: Object-oriented encapsulation patterns
Core Principle: Both functional and OOP components must exhibit identical behavior when wrapped by DOA adapters, ensuring paradigm-independent correctness.
// Functional Component with DOA
const FunctionalCounter = createFunctionalComponent(
{ count: 0 }, // Initial state
{
increment: (state, amount = 1) => ({ count: state.count + amount }),
decrement: (state, amount = 1) => ({ count: state.count - amount })
},
{ behaviorId: 'counter', cachingEnabled: true }
);
// OOP Component with DOA
class CounterComponent {
increment(state: CounterState, amount = 1) {
return { count: state.count + amount };
}
decrement(state: CounterState, amount = 1) {
return { count: state.count - amount };
}
process(data: DataModel<CounterState>) {
return new ValidationResult(true, data);
}
}
const OOPCounter = createOOPComponent(
new CounterComponent(),
{ count: 0 }, // Initial state
{ behaviorId: 'counter-oop', cachingEnabled: true }
);
The DOA adapter layer mathematically guarantees equivalent behavior through systematic verification:
// Verification Test Suite
describe("1:1 Behavioral Correspondence", () => {
it("should produce identical outputs for identical inputs", () => {
const functionalResult = FunctionalCounter.adapt(
FunctionalCounter.getDataModel().withState(state => ({ ...state, count: 5 }))
);
const oopResult = OOPCounter.adapt(
OOPCounter.getDataModel().withState(state => ({ ...state, count: 5 }))
);
expect(functionalResult).toEqual(oopResult);
});
it("should maintain state immutability across paradigms", () => {
const functionalState = FunctionalCounter.getDataModel().getState();
const oopState = OOPCounter.getDataModel().getState();
// Apply same transformation
const functionalNext = FunctionalCounter.getBehaviorModel()
.applyTransition("increment", functionalState, 3);
const oopNext = OOPCounter.getBehaviorModel()
.applyTransition("increment", oopState, 3);
expect(functionalNext).toEqual(oopNext);
expect(functionalNext).not.toBe(functionalState); // Immutability preserved
});
});
The DOA layer enforces formal contracts that abstract away paradigm differences:
interface DOAContract<S, R> {
// State transformation must be pure and immutable
stateTransformation: (current: S, action: Action) => S;
// Validation must be consistent across paradigms
validation: (state: S) => ValidationResult<R>;
// Behavioral equivalence under identical inputs
behavioralEquivalence: (input: S) => R;
}
This systematic approach ensures that component choice (functional vs. OOP) becomes a developer preference rather than an architectural constraint, while maintaining mathematical rigor in state management and transformation protocols.
Mathematical Foundation: The 1:1 behavioral correspondence is formally verified through the equivalence models described in Nnamdi Okpala's Formal Mathematical Reasoning System and Automaton State Minimization and AST Optimization papers. The DOA adapter layer implements automaton state minimization principles to ensure identical state transition behavior across paradigms, with cost function governance preventing architectural drift beyond sustainable thresholds.
In the OBIX POC methodology, we emphasize high quality of core primitives over broad feature proliferation:
✅ Every component and pattern must:
- Be backed by clear data adaptation principles with formal verification
- Fit naturally into React composition patterns without coupling violations
- Be covered by comprehensive unit and integration tests with >95% coverage
- Demonstrate measurable performance characteristics under DOA transformation
✅ The POC does not aim for extensive component libraries; instead, it focuses on:
- Tight correctness through mathematical validation of state transformations
- Developer ergonomics with intuitive APIs that enforce DOA principles
- Clear data flow semantics with explicit adapter contracts and validation
- Architectural sustainability within cost function governance thresholds
Components are evaluated against the Sinphasé governance model:
Component_Cost = Σ(complexity_i × weight_i) + coupling_penalty + temporal_pressure ≤ 0.5
When components exceed cost thresholds, they undergo architectural refactoring rather than feature reduction, maintaining quality while optimizing complexity.
Test Driven Development (TDD) is a first-class architectural principle in OBIX Heart development, integrated with DOA validation:
Every component starts with failing tests that define DOA contracts:
describe("ObixButton with DOA", () => {
it("should adapt data correctly through transformation layer", () => {
const initialData = { label: "Click me", disabled: false };
const adapter = createButtonAdapter(initialData);
expect(adapter.adapt).toBeDefined();
expect(adapter.getDataModel().getState()).toEqual(initialData);
});
it("should maintain state immutability through interactions", () => {
const adapter = createButtonAdapter({ clicks: 0 });
const newState = adapter.getBehaviorModel().applyTransition("click", adapter.getDataModel().getState());
expect(newState).not.toBe(adapter.getDataModel().getState());
expect(newState.clicks).toBe(1);
});
});
Testing follows the three-layer verification approach:
- Data Adaptation Layer: Test pure data transformations independently
- UI Rendering Layer: Test component rendering as separate contracts
- User Interaction + Feedback Loop: Test complete data flow cycles
it("should maintain DOA principles under component evolution", () => {
const component = createComponent();
const costAnalysis = analyzeCost(component);
expect(costAnalysis.complexity).toBeLessThan(0.5);
expect(costAnalysis.couplingViolations).toEqual([]);
});
TDD drives continuous refactoring toward simpler, more transparent data flows while maintaining behavioral equivalence across paradigms.
OBIX Heart is architected to feel 100% natural in React ecosystems:
import { ObixButton, ObixList, useObixAdapter } from "@obix/heart";
function MyComponent() {
const buttonAdapter = useObixAdapter({
initialState: { label: "Submit", loading: false },
transitions: {
startLoading: (state) => ({ ...state, loading: true }),
finishLoading: (state) => ({ ...state, loading: false })
}
});
return (
<ObixButton
adapter={buttonAdapter}
onClick={() => buttonAdapter.getBehaviorModel().applyTransition("startLoading")}
>
{buttonAdapter.getDataModel().getState().label}
</ObixButton>
);
}
const useObixAdapt = (data, options = {}) => {
const [adapter, setAdapter] = useState(() =>
DOAAdapterImpl.createFunctional(
new DataModelImpl(data),
options.transitions || {},
options.processFunction || (data => data),
options
)
);
return adapter;
};
function DataDrivenList({ items, transformations }) {
const listAdapter = useObixAdapter({
initialState: { items, selectedItems: [] },
transitions: transformations
});
return (
<ObixList
adapter={listAdapter}
renderItem={(item, index) => (
<ObixListItem key={index} data={item} />
)}
/>
);
}
npm install @obix/heart
# or
yarn add @obix/heart
import React from 'react';
import { ObixButton, createFunctionalComponent } from '@obix/heart';
// Define component with DOA principles
const Counter = createFunctionalComponent(
{ count: 0 }, // Initial state
{
increment: (state, amount = 1) => ({ count: state.count + amount }),
decrement: (state, amount = 1) => ({ count: state.count - amount })
},
{
behaviorId: 'counter',
cachingEnabled: true,
tracingEnabled: true
}
);
function App() {
return (
<div>
<p>Count: {Counter.getDataModel().getState().count}</p>
<ObixButton onClick={() => Counter.adapt("increment")}>
Increment
</ObixButton>
</div>
);
}
Data-adapted button component with immutable state management.
interface ObixButtonProps {
adapter: DOAAdapter<ButtonState, ButtonResult>;
onClick?: (event: MouseEvent) => void;
children: React.ReactNode;
}
Optimized list component with state-aware rendering and data adaptation.
interface ObixListProps<T> {
adapter: DOAAdapter<ListState<T>, ListResult<T>>;
renderItem: (item: T, index: number) => React.ReactNode;
virtualizeThreshold?: number;
}
Creates and manages DOA adapters with React lifecycle integration.
function useObixAdapter<S, R>(options: {
initialState: S;
transitions?: Record<string, StateTransition<S>>;
processFunction?: (data: DataModel<S>) => ValidationResult<R>;
behaviorId?: string;
}): DOAAdapter<S, R>
Factory for functional components following DOA principles.
Factory for object-oriented components with DOA compatibility.
OBIX Heart implements Nnamdi Okpala's automaton state minimization for optimal performance:
- Equivalent state identification and merging for reduced memory footprint
- Transition optimization between states with preserved behavior
- Structural sharing for efficient immutable operations
The implementation follows the formal AST-automaton minimization process defined in Okpala's research, where equivalent states are identified using the equivalence relation p ∼ q ⟺ ∀w ∈ Σ*, δ*(p, w) ∈ F ⟺ δ*(q, w) ∈ F
. This mathematical foundation ensures components achieve optimal performance while maintaining behavioral correctness across both functional and object-oriented paradigms.
- Immutable data models prevent unexpected state mutations
- Efficient clone operations that only copy changed properties
- Result caching for identical inputs with LRU eviction
- Lazy evaluation of computed properties
The memory optimization strategy implements the AST optimization techniques described in Okpala's research, including node reduction to eliminate unnecessary nodes in state transition trees, path optimization to minimize state checks, and memory efficiency protocols that significantly reduce allocation overhead. These optimizations are derived from the tennis score tracking case study, which demonstrated substantial resource improvements while maintaining complete functional accuracy.
- Always start with failing tests that define DOA contracts
- Maintain cost function compliance - components exceeding thresholds trigger refactoring
- Preserve immutability - all state changes must go through adapter transformations
- Document data flow - every component should have clear adaptation semantics
We welcome contributions that align with OBIX philosophy and DOA principles:
- Fork the repository and create feature branches
- Write failing tests first following TDD methodology
- Implement DOA-compliant components with adapter patterns
- Ensure cost function compliance with architectural analysis
- Submit PRs with comprehensive test coverage and documentation
git clone https://github.com/obinexus/obix-heart
cd obix-heart
npm install
npm test
npm run dev
Note: The OBIX Heart library implements formal verification protocols that require systematic testing validation. All development workflows must maintain compliance with cost function governance thresholds defined in the Sinphasé methodology.
MIT License - see LICENSE file for details.
This library implements Nnamdi Michael Okpala's breakthrough research in:
- Data-Oriented Adapted (DOA) architectural patterns
- Automaton state minimization for UI optimization
- Single-pass compilation principles applied to component architecture
- Mathematical verification of behavioral equivalence across paradigms
The OBIX Heart library is built upon the following peer-reviewed research by Nnamdi Michael Okpala:
-
"Formal Mathematical Reasoning System" - Establishes the theoretical foundation for cost function governance, function equivalence validation, dynamic-to-static transformation protocols, and verification standard integration within safety-critical systems.
-
"Automaton State Minimization and AST Optimization" - Defines the formal AST-automaton minimization process that enables optimal component performance through equivalent state identification and transition optimization.
-
"Extended Automaton-AST Minimization and Validation" - Provides advanced equivalence class construction algorithms and AST-aware state splitting protocols for complex component hierarchies.
-
"State Machine Minimization: An Application-Based Case Study on Games of Tennis" - Demonstrates practical application of automaton minimization principles to real-world state management scenarios, directly applicable to UI component optimization.
These papers establish the mathematical rigor that distinguishes OBIX Heart from conventional React component libraries. The DOA adapter layer implements formal verification protocols derived from these theoretical frameworks, ensuring NASA-STD-8739.8 compliance for safety-critical applications.
OBIX Heart represents practical application of theoretical computer science to modern UI/UX development, ensuring both mathematical rigor and developer experience excellence.
The OBIX Heart UI/UX Library is a practical expression of Nnamdi Okpala's mathematical research in automaton state minimization and formal verification:
🎯 Mathematically Verified UI/UX Framework with formal behavioral correspondence proofs
🎯 Automaton State Minimization for optimal component performance and memory efficiency
🎯 Cost Function Governance preventing architectural complexity beyond proven thresholds
🎯 NASA-STD-8739.8 Compliance supporting safety-critical distributed system requirements
This library guides developers, contributors, and reviewers toward systematic verification protocols while ensuring alignment to OBIX principles and the DOA breakthrough. Every component implements formal mathematical validation rather than heuristic design patterns, distinguishing OBIX Heart from conventional React component libraries through rigorous theoretical foundations.
Part of the OBINexus Verified Data-Adapted Framework | Computing from the Heart