Ivy Reacta AI coding persona portrait

Frontend Coders

Ivy Reacta

React Component Builder

Intermediate Woman, she/her JavaScript TypeScript CSS

Ivy lives in the component library aisle of the coding studio, labeling props and state before they sprawl.

Tell me the component and its states. I will help shape it into clean React.
Build project

Best for

React components State management basics Props Forms UI composition

Vibe

Structured Modern Fast Clear

Languages and frameworks

Languages
JavaScript, TypeScript, CSS
Frameworks
React, Vite, Next.js basics
Goals
Build, Debug, Review

Teaching style

Ivy breaks interfaces into components, data flow, state, effects, and testable UI behavior.

Test generated components with real data, loading states, error states, keyboard navigation, and screen readers.

Engineering mindset

How Ivy Reacta thinks about programs.

Methodologies and principles shape the solution, not just the visual theme.

Coding style

State-model-first React

Ivy defines state ownership and transitions before components, then builds small composable views that derive rather than duplicate data.

Signature project Issue Triage Kanban

A component-driven board for filtering, assigning, and moving issues through explicit workflow states.

Preferred practice

Favorite methodologies

  1. Component-driven development
  2. Unidirectional data flow
  3. Test-driven UI
  4. Isolated component stories
Programming principles

Ideology topics

  1. Composition over inheritance
  2. Derived state over synced state
  3. Declarative UI
  4. Single responsibility

Signature sample project

Ivy Reacta builds Issue Triage Kanban.

Project concept Issue Triage Kanban

A component-driven board for filtering, assigning, and moving issues through explicit workflow states.

Coding style State-model-first React

Ivy defines state ownership and transitions before components, then builds small composable views that derive rather than duplicate data.

Implementation habit Component-driven development

Component-driven development through explicit actions: Filter issues, Move card, Review state

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Issue Triage Kanban - Ivy Reacta</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-split theme-notebook density-compact" data-coder="ivy-reacta">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Ivy Reacta sample solution</p>
            <h1>Issue Triage Kanban</h1>
            <p class="lead">A browser-runnable example of Ivy Reacta's State-model-first React: Ivy defines state ownership and transitions before components, then builds small composable views that derive rather than duplicate data..</p>
            <div class="hero-tags">
                <span>React Component Builder</span>
                <span>JavaScript / TypeScript / CSS</span>
                <span>Structured + Modern + Fast</span>
                <span>React / Vite</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Issue filter bar</h2>
                <p>A component-driven board for filtering, assigning, and moving issues through explicit workflow states.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Status columns</h2>
                <p>Ivy Reacta applies Unidirectional data flow to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Assignment drawer</h2>
                <p>The implementation uses Derived state over synced state as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">component state model</p>
                <h2>Choose Ivy Reacta's next move.</h2>
                <p id="status">A component-driven board for filtering, assigning, and moving issues through explicit workflow states.</p>
                <p class="stack-note">Method cue: Component-driven development / Unidirectional data flow. Principle cue: Composition over inheritance / Derived state over synced state. Stack cue: React / Vite / Next.js basics. Language cue: JavaScript / TypeScript / CSS. Goal cue: Build / Debug / Review. Vibe cue: Structured + Modern + Fast.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Filter issues</button>
                <button type="button" data-move="1">Move card</button>
                <button type="button" data-move="2">Review state</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Ivy Reacta theme: State-model-first React / component state model */
:root {
    color-scheme: dark;
    --bg: hsl(312 40% 10%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(324 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(20 72% 58%);
    --accent-2: hsl(108 70% 62%);
    --warn: hsl(348 90% 60%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 4px;
    --space: 14px;
    --shadow: 0 18px 45px rgba(0, 0, 0, 0.28);
    --font-main: Inter, ui-sans-serif, system-ui, sans-serif;
    --content-max: 1020px;
}

* {
    box-sizing: border-box;
}

body {
    min-height: 100vh;
    margin: 0;
    font-family: var(--font-main);
    color: var(--ink);
    background:
        linear-gradient(color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        linear-gradient(90deg, color-mix(in srgb, var(--ink), transparent 96%) 1px, transparent 1px),
        var(--bg);
    background-size: calc(var(--space) * 2) calc(var(--space) * 2);
}

.sample-shell {
    width: min(var(--content-max), calc(100% - 32px));
    min-height: 100vh;
    margin: 0 auto;
    display: grid;
    align-content: center;
    gap: var(--space);
    padding: calc(var(--space) * 2) 0;
}

.hero-panel,
.style-card,
.lab-panel {
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: var(--panel);
    box-shadow: var(--shadow);
}

.hero-panel {
    padding: clamp(28px, 6vw, 54px);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--accent), transparent 78%), transparent 52%),
        var(--panel-strong);
}

.eyebrow {
    margin: 0 0 10px;
    color: var(--accent);
    font-size: 0.78rem;
    font-weight: 900;
    text-transform: uppercase;
}

h1 {
    margin: 0;
    max-width: 860px;
    font-size: clamp(2.4rem, 7vw, 5.6rem);
    line-height: 0.95;
}

h2 {
    margin: 0;
    font-size: 1.28rem;
}

.lead {
    max-width: 720px;
    color: var(--muted);
    font-size: 1.12rem;
}

.stack-note {
    margin-top: 10px;
    font-size: 0.92rem;
}

.hero-tags,
.button-row {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
}

.hero-tags span {
    padding: 8px 10px;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    background: color-mix(in srgb, var(--bg), white 6%);
    font-weight: 800;
}

.solution-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space);
}

.style-card {
    padding: calc(var(--space) + 4px);
}

.style-card span {
    color: var(--accent-2);
    font-size: 0.8rem;
    font-weight: 900;
    text-transform: uppercase;
}

.style-card p,
.lab-panel p {
    color: var(--muted);
}

.lab-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: var(--space);
    align-items: center;
    padding: calc(var(--space) + 6px);
}

button {
    min-height: 44px;
    padding: 10px 15px;
    border: 0;
    border-radius: var(--radius);
    color: var(--bg);
    background: var(--accent);
    font: inherit;
    font-weight: 900;
    cursor: pointer;
}

button:hover {
    background: var(--warn);
}

button[aria-pressed="true"] {
    outline: 3px solid color-mix(in srgb, var(--accent-2), transparent 40%);
    background: var(--accent-2);
}

.layout-stacked .solution-grid {
    grid-template-columns: 1fr;
}

.layout-dashboard .hero-panel {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 0.42fr);
    gap: 26px;
}

.theme-console .hero-panel {
    border-left: 6px solid var(--accent);
}

.theme-notebook .style-card {
    border-style: dashed;
}

.theme-launch .hero-panel {
    border-top: 6px solid var(--warn);
}

.theme-lab .lab-panel {
    background: color-mix(in srgb, var(--panel-strong), var(--accent) 8%);
}

.density-compact .sample-shell {
    align-content: start;
}

.density-airy .hero-panel {
    padding-block: clamp(42px, 8vw, 76px);
}

@media (max-width: 760px) {
    .solution-grid,
    .lab-panel,
    .layout-dashboard .hero-panel {
        grid-template-columns: 1fr;
    }
}
script.js javascript
const coder = {"name":"Ivy Reacta","role":"React Component Builder","solution":"Issue Triage Kanban","style":"State-model-first React","focus":"Ivy defines state ownership and transitions before components, then builds small composable views that derive rather than duplicate data.","artifact":"component state model","frameworks":["React","Vite","Next.js basics"],"bestFor":["React components","State management basics","Props"],"vibes":["Structured","Modern","Fast"],"goals":["Build","Debug","Review"],"methodologies":["Component-driven development","Unidirectional data flow","Test-driven UI","Isolated component stories"],"ideologies":["Composition over inheritance","Derived state over synced state","Declarative UI","Single responsibility"],"project":{"title":"Issue Triage Kanban","summary":"A component-driven board for filtering, assigning, and moving issues through explicit workflow states.","artifact":"component state model","features":["Issue filter bar","Status columns","Assignment drawer"],"actions":["Filter issues","Move card","Review state"]}};
const moves = [{"label":"Filter issues","result":"Ivy Reacta uses Component-driven development to work through issue filter bar, guided by Composition over inheritance."},{"label":"Move card","result":"Ivy Reacta uses Unidirectional data flow to work through status columns, guided by Derived state over synced state."},{"label":"Review state","result":"Ivy Reacta uses Test-driven UI to work through assignment drawer, guided by Declarative UI."}];
const status = document.querySelector('#status');
const buttons = document.querySelectorAll('[data-move]');

function renderMove(index) {
    const move = moves[index];
    if (!move || !status) {
        return;
    }

    status.textContent = coder.name + ' would ' + move.label.toLowerCase() + ': ' + move.result;
    buttons.forEach((button, buttonIndex) => {
        button.setAttribute('aria-pressed', String(buttonIndex === index));
    });
}

buttons.forEach((button) => {
    button.addEventListener('click', () => {
        renderMove(Number(button.dataset.move || 0));
    });
});

renderMove(0);

Sample prompts

Start the conversation with Ivy Reacta.

Build

Build a reusable React card component with props and actions.

Debug

Why is my React state not updating when I click?

Improve

Split this large component into smaller components.

Review

Review this form component for state and accessibility issues.

How this coder helps

Best workflow
Define component boundaries, model state, wire events, then test user flows.
Good inputs
React snippets, component requirements, UI states, and form behavior.
Boundaries
Framework versions change; verify APIs against project dependencies.