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.
Sample code
Sienna Smalltalk's HTML, CSS, and JavaScript style.
Sienna explains behavior through objects, messages, responsibilities, and small refactorable methods.
compact cards, severity accents, and comparison-friendly layout with object-oriented pacing
simple scoring logic that explains why a recommendation changed around learn tasks
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Sienna Smalltalk Sample Solution</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>Smalltalk quality scorecard</h1>
<p class="lead">A browser-runnable example of Sienna Smalltalk's object-oriented review-first quality gate: Sienna explains behavior through objects, messages, responsibilities, and small refactorable methods..</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>First move</span>
<h2>Object-oriented</h2>
<p>Sienna explains behavior through objects, messages, responsibilities, and small refactorable methods.</p>
</article>
<article class="style-card">
<span>Best fit</span>
<h2>Smalltalk</h2>
<p>Sienna Smalltalk optimizes this page around Smalltalk, Object modeling, Message passing.</p>
</article>
<article class="style-card">
<span>Stack instinct</span>
<h2>Squeak concepts</h2>
<p>compact cards, severity accents, and comparison-friendly layout with object-oriented pacing; the sample keeps the stack close to Squeak concepts, Pharo concepts, MVC patterns.</p>
</article>
</section>
<section class="lab-panel">
<div>
<p class="eyebrow">review gate</p>
<h2>Choose Sienna Smalltalk's next move.</h2>
<p id="status">Pick a step to see how this character turns Learn / Review / Improve into a working solution.</p>
<p class="stack-note">Stack cue: Squeak concepts / Pharo concepts / MVC patterns. Language cue: Smalltalk / JavaScript / Ruby. Vibe cue: Object-oriented + Reflective + Precise.</p>
</div>
<div class="button-row" aria-label="Sample actions">
<button type="button" data-move="0">Learn</button>
<button type="button" data-move="1">Review</button>
<button type="button" data-move="2">Improve</button>
</div>
</section>
</main>
<script src="script.js"></script>
</body>
</html>
/* Sienna Smalltalk theme: object-oriented review-first quality gate / review gate */
: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":"Smalltalk quality scorecard","style":"object-oriented review-first quality gate","focus":"Sienna explains behavior through objects, messages, responsibilities, and small refactorable methods.","artifact":"review gate","frameworks":["Squeak concepts","Pharo concepts","MVC patterns"],"bestFor":["Smalltalk","Object modeling","Message passing"],"vibes":["Object-oriented","Reflective","Precise"],"goals":["Learn","Review","Improve"]};
const moves = [{"label":"Learn","result":"Sienna Smalltalk frames the review gate around Smalltalk before adding code."},{"label":"Review","result":"Sienna Smalltalk reaches for Squeak concepts and keeps the implementation visible in small sections."},{"label":"Improve","result":"Name the objects, assign responsibilities, pass messages, inspect state, then simplify methods."}];
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