Skip to content

Instantly share code, notes, and snippets.

@elliotwoods
Created January 26, 2026 01:36
Show Gist options
  • Select an option

  • Save elliotwoods/2393e14bdb944d257a34dfad81d52c3e to your computer and use it in GitHub Desktop.

Select an option

Save elliotwoods/2393e14bdb944d257a34dfad81d52c3e to your computer and use it in GitHub Desktop.
Chilli Con Carne recipe using sirloin beef steak
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Sirloin-Forward Chili Con Carne</title>
<style>
:root {
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
color-scheme: light dark;
}
body {
margin: 0;
padding: 0;
background: #faf7f2;
color: #222;
}
.page {
max-width: 900px;
margin: 0 auto;
padding: 24px 16px 48px;
}
header {
text-align: center;
margin-bottom: 24px;
padding-bottom: 16px;
border-bottom: 2px solid rgba(0, 0, 0, 0.08);
}
h1 {
font-size: 1.9rem;
margin: 0 0 4px;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.subtitle {
font-size: 0.95rem;
color: #555;
margin-bottom: 4px;
}
.meta {
font-size: 0.85rem;
color: #777;
}
h2 {
font-size: 1.25rem;
margin-top: 24px;
margin-bottom: 8px;
border-bottom: 1px solid rgba(0, 0, 0, 0.08);
padding-bottom: 4px;
}
h3 {
font-size: 1rem;
margin-top: 16px;
margin-bottom: 4px;
}
p {
line-height: 1.5;
font-size: 0.95rem;
margin: 4px 0 8px;
}
ul, ol {
padding-left: 1.3rem;
margin: 4px 0 10px;
font-size: 0.95rem;
}
li + li {
margin-top: 2px;
}
.section {
margin-bottom: 18px;
padding: 12px 14px;
border-radius: 10px;
background: rgba(255, 255, 255, 0.85);
box-shadow: 0 1px 3px rgba(0,0,0,0.03);
}
.ingredients-section {
background: #fffdf8;
}
.note {
font-size: 0.85rem;
color: #666;
font-style: italic;
margin-top: 4px;
}
.timeline {
font-family: "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", monospace;
font-size: 0.85rem;
margin: 2px 0 6px;
color: #444;
}
.timeline-label {
font-size: 0.8rem;
color: #777;
margin-bottom: 2px;
}
.badge {
display: inline-block;
font-size: 0.75rem;
text-transform: uppercase;
letter-spacing: 0.08em;
padding: 2px 8px;
border-radius: 999px;
background: #f1ece2;
color: #555;
margin-bottom: 4px;
}
.stage-title {
display: flex;
align-items: baseline;
justify-content: space-between;
gap: 8px;
flex-wrap: wrap;
margin-bottom: 4px;
}
.stage-title h2 {
border-bottom: none;
padding-bottom: 0;
margin-bottom: 0;
font-size: 1.1rem;
}
.stage-time {
font-size: 0.85rem;
color: #555;
}
.subheading {
font-weight: 600;
font-size: 0.9rem;
margin-top: 6px;
}
.result-box {
border-left: 3px solid #d08c3f;
padding-left: 10px;
margin-top: 8px;
}
@media print {
body {
background: #ffffff;
}
.page {
padding: 12mm 10mm;
}
header {
border-bottom-color: #000;
}
.section {
box-shadow: none;
background: #fff;
}
}
</style>
</head>
<body>
<div class="page">
<header>
<h1>Sirloin-Forward Chili Con Carne</h1>
<div class="subtitle">Dutch oven · stovetop · rich, deep, gently smoky, bright finish</div>
<div class="meta">Total time: ~3 hours active + 20–30 minutes rest · Serves 3–4 generously</div>
</header>
<section class="section ingredients-section">
<div class="badge">Overview</div>
<p>
This is a beef-forward, slow-cooked chili built around seared sirloin steak, a fine vegetable base,
and layered spices. A small amount of dark chocolate adds depth, while a restrained use of chipotle
in adobo brings gentle smokiness and warmth. Garlic is present as a background note, not the main event.
</p>
</section>
<section class="section ingredients-section">
<div class="badge">Core Ingredients (For reference)</div>
<h3>Meat</h3>
<ul>
<li>Sirloin steak &mdash; <strong>2 steaks (≈450–500 g total)</strong>, cut into 3.5–4 cm cubes</li>
<li>Beef mince (optional) &mdash; <strong>150–200 g max</strong></li>
</ul>
<h3>Vegetables & Base</h3>
<ul>
<li>Onion &mdash; <strong>1 large</strong>, very finely diced</li>
<li>Celery &mdash; <strong>2 stalks</strong>, very finely diced</li>
<li>Carrot &mdash; <strong>1 large</strong>, very finely diced</li>
<li>Garlic &mdash; <strong>1 clove</strong>, crushed or very finely minced</li>
</ul>
<h3>Tomatoes & Beans</h3>
<ul>
<li>Peeled plum tomatoes &mdash; <strong>2 × 400 g tins</strong></li>
<li>Red kidney beans &mdash; <strong>1 × 400 g tin</strong>, drained & rinsed</li>
</ul>
<h3>Flavor & Seasoning</h3>
<ul>
<li>Ground cumin &mdash; <strong>1½ tsp</strong></li>
<li>Paprika (smoked if possible) &mdash; <strong>1½ tsp</strong></li>
<li>Chili powder or flakes &mdash; <strong>½–1 tsp</strong>, to taste</li>
<li>85% dark chocolate &mdash; <strong>8–10 g</strong>, finely chopped</li>
<li>Chipotle peppers in adobo sauce (same can):
<ul>
<li>Chipotle pepper &mdash; <strong>½ pepper</strong>, very finely minced (start here)</li>
<li>Adobo sauce &mdash; <strong>1–2 tsp</strong></li>
</ul>
</li>
<li>Salt & fresh black pepper &mdash; to taste</li>
<li>Olive oil &mdash; as needed</li>
<li>Lemon zest &mdash; <strong>optional, max ¼ tsp</strong> for brightness at the end</li>
</ul>
<p class="note">
Quantities are also listed again at the stage where each ingredient is actually added, so you can
cook step-by-step without scrolling back up.
</p>
</section>
<!-- STAGE 0 -->
<section class="section">
<div class="stage-title">
<h2>Stage 0 — Vegetable Prep (Foundation)</h2>
<div class="stage-time">⏱ ~15 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">🟩🟩🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Prep (before any heat)</p>
<ul>
<li>Onion &mdash; <strong>1 large</strong>, very finely diced</li>
<li>Celery &mdash; <strong>2 stalks</strong>, very finely diced</li>
<li>Carrot &mdash; <strong>1 large</strong>, very finely diced</li>
</ul>
<p>
Aim for very small, even pieces &mdash; almost mince-sized. This allows the soffritto to melt into the sauce
and give sweetness and body without needing added sugar.
</p>
<p class="note">Set aside in a bowl so it's ready to go when the pot is hot.</p>
</section>
<!-- STAGE 1 -->
<section class="section">
<div class="stage-title">
<h2>Stage 1 — Steak Prep & Seasoning</h2>
<div class="stage-time">⏱ ~10 minutes active (+ rest)</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜🟩🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Sirloin steak &mdash; <strong>2 steaks (≈450–500 g total)</strong></li>
<li>Salt &mdash; generous</li>
<li>Black pepper &mdash; generous</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Pat the steaks very dry with kitchen paper.</li>
<li>Cut into large cubes, about <strong>3.5–4 cm</strong>.</li>
<li>Season generously with salt and black pepper.</li>
<li>Let rest at room temperature while you heat the pot and prepare other steps.</li>
</ol>
<p class="note">
Dry surface + salt + time = better browning and less steaming when the meat hits the hot pan.
</p>
</section>
<!-- STAGE 2 -->
<section class="section">
<div class="stage-title">
<h2>Stage 2 — Hard Browning the Steak (Flavor Insurance)</h2>
<div class="stage-time">⏱ ~15–20 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜🟩🟩🟩🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Olive oil &mdash; <strong>1–2 tbsp</strong>, as needed</li>
<li>Seasoned sirloin cubes (from Stage 1)</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Heat the Dutch oven over high heat until very hot.</li>
<li>Add olive oil and swirl to coat the base.</li>
<li>Add steak in batches, leaving plenty of space so pieces do not steam.</li>
<li>Let each side develop a deep brown crust before turning.</li>
<li>Transfer browned steak to a plate, keeping any juices that collect.</li>
</ol>
<p class="note">
The dark residue on the bottom of the pot (fond) is concentrated flavor and will dissolve into the sauce later.
Don’t scrape it off yet &mdash; just don’t burn it.
</p>
</section>
<!-- STAGE 3 -->
<section class="section">
<div class="stage-title">
<h2>Stage 3 — Optional Mince Browning (Body, Not Identity)</h2>
<div class="stage-time">⏱ ~5–7 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Beef mince (optional) &mdash; <strong>150–200 g</strong></li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>If using mince, add it directly to the hot pot with remaining fat.</li>
<li>Break it up and cook until fully browned with some crisp edges.</li>
<li>Do not leave it grey or steamy; some caramelisation is good.</li>
</ol>
<p class="note">
This adds body and richness to the sauce, but the star of the dish is still the steak.
</p>
</section>
<!-- STAGE 4 -->
<section class="section">
<div class="stage-title">
<h2>Stage 4 — Sofrito + Garlic (Sweetness, Structure, Warmth)</h2>
<div class="stage-time">⏱ ~15 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩🟩🟩🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Onion &mdash; <strong>1 large</strong>, finely diced</li>
<li>Celery &mdash; <strong>2 stalks</strong>, finely diced</li>
<li>Carrot &mdash; <strong>1 large</strong>, finely diced</li>
<li>Salt &mdash; <strong>1 good pinch</strong></li>
<li>Olive oil &mdash; <strong>1 tbsp</strong> (if the pot looks dry)</li>
<li>Garlic &mdash; <strong>1 clove</strong>, crushed or very finely minced</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Reduce heat to medium.</li>
<li>Add onion, celery, carrot, salt, and 1 tbsp oil if needed.</li>
<li>Cook gently, stirring occasionally, until vegetables are soft and slightly sweet, with no browning.</li>
<li>Add the crushed or finely minced garlic.</li>
<li>Cook the garlic for <strong>30–45 seconds</strong>, stirring constantly.</li>
</ol>
<p class="note">
The soffritto provides natural sweetness and body; the garlic adds a warm background note. Avoid browning the garlic or it may become bitter.
</p>
</section>
<!-- STAGE 5 -->
<section class="section">
<div class="stage-title">
<h2>Stage 5 — Bloom the Spices</h2>
<div class="stage-time">⏱ ~1 minute</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩⬜⬜⬜⬜⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Ground cumin &mdash; <strong>1½ tsp</strong></li>
<li>Paprika (smoked if possible) &mdash; <strong>1½ tsp</strong></li>
<li>Chili powder or flakes &mdash; <strong>½–1 tsp</strong>, to taste</li>
<li>Black pepper &mdash; to taste</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Sprinkle cumin, paprika, chili, and black pepper over the soffritto.</li>
<li>Stir constantly for 30–60 seconds until the spices become fragrant.</li>
</ol>
<p class="note">
You want the spices to “wake up” without burning. If they smell scorched or acrid, the heat is too high.
</p>
</section>
<!-- STAGE 6 -->
<section class="section">
<div class="stage-title">
<h2>Stage 6 — Tomatoes & Controlled Reduction</h2>
<div class="stage-time">⏱ ~20 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩🟩🟩🟩⬜⬜⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Peeled plum tomatoes &mdash; <strong>2 × 400 g tins</strong></li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Pour the tomatoes into the pot.</li>
<li>Crush them gently with a spoon or spatula.</li>
<li>Scrape the bottom of the pot to release all the fond into the tomatoes.</li>
<li>Simmer uncovered over medium-low heat for about 20 minutes, stirring occasionally.</li>
</ol>
<p class="note">
Cooking uncovered lets excess water evaporate, removes raw tomato acidity, and concentrates flavor without added sugar.
</p>
</section>
<!-- STAGE 7 -->
<section class="section">
<div class="stage-title">
<h2>Stage 7 — Steak Returns & Long Simmer</h2>
<div class="stage-time">⏱ ~90–120 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩🟩🟩🟩🟩</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Browned steak + all resting juices (from Stage 2)</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Return the browned steak and any accumulated juices to the pot.</li>
<li>Bring to a gentle simmer, then reduce heat to very low.</li>
<li>Partially cover with the lid (slightly ajar).</li>
<li>Simmer gently for 90–120 minutes, stirring occasionally.</li>
</ol>
<p class="note">
Aim for a very gentle simmer, not a rolling boil. The goal is tender steak that still cuts cleanly, not shredded meat.
</p>
</section>
<!-- STAGE 8 -->
<section class="section">
<div class="stage-title">
<h2>Stage 8 — Chipotle & Adobo (Controlled Smokiness)</h2>
<div class="stage-time">⏱ ~10 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩⬜⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Chipotle pepper in adobo &mdash; <strong>½ pepper</strong>, very finely minced</li>
<li>Adobo sauce (from the same can as the chipotle) &mdash; <strong>1–2 tsp</strong></li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Finely mince half a chipotle pepper from the can.</li>
<li>Add the minced pepper and 1–2 teaspoons of adobo sauce to the simmering chili.</li>
<li>Stir well and simmer on low for about 10 minutes to integrate.</li>
</ol>
<p class="note">
Chipotle and adobo come from the same can; the pepper brings heat and smoke, while the sauce adds acidity and seasoning.
Start small &mdash; you can always add more, but you cannot remove it once it’s in.
</p>
</section>
<!-- STAGE 9 -->
<section class="section">
<div class="stage-title">
<h2>Stage 9 — Chocolate (Depth, Not Sweetness)</h2>
<div class="stage-time">⏱ ~10 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩⬜⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>85% dark chocolate &mdash; <strong>8–10 g</strong>, finely chopped</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Add the finely chopped dark chocolate to the pot.</li>
<li>Stir until fully melted and incorporated over low heat.</li>
</ol>
<p class="note">
The chili should not taste like chocolate. It should simply gain extra roundness, depth, and a slightly glossier texture.
</p>
</section>
<!-- STAGE 10 -->
<section class="section">
<div class="stage-title">
<h2>Stage 10 — Beans</h2>
<div class="stage-time">⏱ ~20–30 minutes</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩⬜</div>
<p class="subheading">Ingredients added in this stage</p>
<ul>
<li>Red kidney beans &mdash; <strong>1 × 400 g tin</strong>, drained & rinsed</li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Add the drained, rinsed beans to the pot.</li>
<li>Simmer gently for 20–30 minutes, stirring occasionally.</li>
</ol>
<p class="note">
Adding beans late helps keep them creamy inside rather than breaking apart and turning grainy.
</p>
</section>
<!-- STAGE 11 -->
<section class="section">
<div class="stage-title">
<h2>Stage 11 — Final Balance & Rest</h2>
<div class="stage-time">⏱ ~20–30 minutes (heat off)</div>
</div>
<div class="timeline-label">Timeline position</div>
<div class="timeline">⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜🟩</div>
<p class="subheading">Ingredients adjusted in this stage</p>
<ul>
<li>Salt &mdash; to taste</li>
<li>Additional chili (optional) &mdash; to taste</li>
<li>Lemon zest &mdash; <strong>optional, max ¼ tsp</strong></li>
</ul>
<p class="subheading">Actions</p>
<ol>
<li>Turn off the heat and let the chili settle for a few minutes.</li>
<li>Taste and adjust salt and chili heat as needed.</li>
<li>If desired, add a very small amount of finely grated lemon zest (up to ¼ tsp) for subtle lift.</li>
<li>Let the chili rest off heat for 20–30 minutes before serving.</li>
</ol>
<div class="result-box">
<p class="subheading">Final Result</p>
<p>
You should end up with a glossy, thick chili that clings to rice; deep beef flavor from the seared sirloin and fond;
gentle smokiness from chipotle and adobo; subtle bitter depth from dark chocolate; and a finish that is rich but still
clean and bright.
</p>
</div>
</section>
</div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment