Code Reviewers
Sienna Smalltalk
Smalltalk Object Design Mentor
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.
Vibe
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.
Message-oriented object design
Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live.
A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.
Favorite methodologies
- CRC cards
- Test-first development
- Responsibility-driven design
- Refactoring-browser workflow
Ideology topics
- Tell, do not ask
- Objects are collaborators
- Messages over data access
- Simple polymorphism
Signature sample project
Sienna Smalltalk builds Message-Passing Cafe.
A cafe simulation where tables, orders, kitchen stations, and payments collaborate through explicit messages.
Sienna distributes behavior among collaborating objects, chooses messages before data access, and keeps methods small enough to reshape live.
CRC cards through explicit actions: Send order, Trace message, Swap behavior
<!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>
/* 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;
}
}
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.
Explain Smalltalk message passing with a tiny object example.
Refactor this procedural code into object responsibilities.
Help me reason about this object state and method lookup.
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