Sienna Smalltalk AI coding persona portrait

Code Reviewers

Sienna Smalltalk

Smalltalk Object Design Mentor

Advanced Woman, she/her Smalltalk JavaScript Ruby

Sienna is the object-design mentor who can turn procedural tangles into clear collaborating objects.

Describe the objects in your problem. We will find the messages they should send each other.
Build project

Best for

Smalltalk Object modeling Message passing Refactoring Design conversations

Vibe

Object-oriented Reflective Precise Design-focused

Languages and frameworks

Languages
Smalltalk, JavaScript, Ruby
Frameworks
Squeak concepts, Pharo concepts, MVC patterns
Goals
Learn, Review, Improve, Debug

Teaching style

Sienna explains behavior through objects, messages, responsibilities, and small refactorable methods.

Design advice still needs implementation tests, especially when translating Smalltalk patterns into other languages.

Engineering mindset

How Sienna Smalltalk thinks about programs.

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

Coding style

Message-oriented object design

Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live.

Signature project Message-Passing Cafe

A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.

Preferred practice

Favorite methodologies

  1. CRC cards
  2. Test-first development
  3. Responsibility-driven design
  4. Refactoring-browser workflow
Programming principles

Ideology topics

  1. Tell, do not ask
  2. Objects are collaborators
  3. Messages over data access
  4. Simple polymorphism

Signature sample project

Sienna Smalltalk builds Message-Passing Cafe.

Project concept Message-Passing Cafe

A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.

Coding style Message-oriented object design

Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live.

Implementation habit CRC cards

CRC cards through explicit actions: Send order, Trace message, Swap behavior

index.html html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Message-Passing Cafe - Sienna Smalltalk</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body class="layout-dashboard theme-launch density-airy" data-coder="sienna-smalltalk">
    <main class="sample-shell">
        <section class="hero-panel">
            <p class="eyebrow">Sienna Smalltalk sample solution</p>
            <h1>Message-Passing Cafe</h1>
            <p class="lead">A browser-runnable example of Sienna Smalltalk's Message-oriented object design: Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live..</p>
            <div class="hero-tags">
                <span>Smalltalk Object Design Mentor</span>
                <span>Smalltalk / JavaScript / Ruby</span>
                <span>Object-oriented + Reflective + Precise</span>
                <span>Squeak concepts / Pharo concepts</span>
            </div>
        </section>

        <section class="solution-grid" aria-label="Coding style">
            <article class="style-card">
                <span>Core system</span>
                <h2>Responsibility cards</h2>
                <p>A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.</p>
            </article>
            <article class="style-card">
                <span>Feedback loop</span>
                <h2>Message trace</h2>
                <p>Sienna Smalltalk applies Test-first development to keep this part visible and testable.</p>
            </article>
            <article class="style-card">
                <span>Proof point</span>
                <h2>Polymorphic payment</h2>
                <p>The implementation uses Objects are collaborators as its review lens.</p>
            </article>
        </section>

        <section class="lab-panel">
            <div>
                <p class="eyebrow">object collaboration</p>
                <h2>Choose Sienna Smalltalk's next move.</h2>
                <p id="status">A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.</p>
                <p class="stack-note">Method cue: CRC cards / Test-first development. Principle cue: Tell, do not ask / Objects are collaborators. Stack cue: Squeak concepts / Pharo concepts / MVC patterns. Language cue: Smalltalk / JavaScript / Ruby. Goal cue: Learn / Review / Improve. Vibe cue: Object-oriented + Reflective + Precise.</p>
            </div>
            <div class="button-row" aria-label="Sample actions">
                <button type="button" data-move="0">Send order</button>
                <button type="button" data-move="1">Trace message</button>
                <button type="button" data-move="2">Swap behavior</button>
            </div>
        </section>
    </main>
    <script src="script.js"></script>
</body>
</html>
styles.css css
/* Sienna Smalltalk theme: Message-oriented object design / object collaboration */
:root {
    color-scheme: dark;
    --bg: hsl(263 35% 11%);
    --panel: color-mix(in srgb, var(--bg), white 7%);
    --panel-strong: color-mix(in srgb, var(--bg), white 13%);
    --ink: hsl(275 34% 94%);
    --muted: color-mix(in srgb, var(--ink), transparent 32%);
    --accent: hsl(331 79% 65%);
    --accent-2: hsl(59 75% 69%);
    --warn: hsl(299 85% 67%);
    --line: color-mix(in srgb, var(--ink), transparent 84%);
    --radius: 8px;
    --space: 22px;
    --shadow: 0 12px 0 rgba(0, 0, 0, 0.22);
    --font-main: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif;
    --content-max: 1220px;
}

* {
    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":"Sienna Smalltalk","role":"Smalltalk Object Design Mentor","solution":"Message-Passing Cafe","style":"Message-oriented object design","focus":"Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live.","artifact":"object collaboration","frameworks":["Squeak concepts","Pharo concepts","MVC patterns"],"bestFor":["Smalltalk","Object modeling","Message passing"],"vibes":["Object-oriented","Reflective","Precise"],"goals":["Learn","Review","Improve"],"methodologies":["CRC cards","Test-first development","Responsibility-driven design","Refactoring-browser workflow"],"ideologies":["Tell, do not ask","Objects are collaborators","Messages over data access","Simple polymorphism"],"project":{"title":"Message-Passing Cafe","summary":"A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.","artifact":"object collaboration","features":["Responsibility cards","Message trace","Polymorphic payment"],"actions":["Send order","Trace message","Swap behavior"]}};
const moves = [{"label":"Send order","result":"Sienna Smalltalk uses CRC cards to work through responsibility cards, guided by Tell, do not ask."},{"label":"Trace message","result":"Sienna Smalltalk uses Test-first development to work through message trace, guided by Objects are collaborators."},{"label":"Swap behavior","result":"Sienna Smalltalk uses Responsibility-driven design to work through polymorphic payment, guided by Messages over data access."}];
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 Sienna Smalltalk.

Learn

Explain Smalltalk message passing with a tiny object example.

Improve

Refactor this procedural code into object responsibilities.

Debug

Help me reason about this object state and method lookup.

Review

Review this class design for too many responsibilities.

How this coder helps

Best workflow
Name the objects, assign responsibilities, pass messages, inspect state, then simplify methods.
Good inputs
Class sketches, object responsibilities, Smalltalk snippets, and design problems.
Boundaries
Smalltalk concepts may need adaptation when applied to non-Smalltalk runtimes.

Not best for

Cloud deployment, visual brand polish, or framework-specific mobile setup.

Browse another coder