publish: supervisors-playbook
This commit is contained in:
commit
ea07bb602e
12
README.md
Normal file
12
README.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# supervisors-playbook
|
||||||
|
|
||||||
|
Retail operations toolkit: Sentinel, Protocol, and Playbook
|
||||||
|
|
||||||
|
**Live demo:** https://brandon-buonaguro.4ort.net
|
||||||
|
|
||||||
|
## Related in the galaxy
|
||||||
|
|
||||||
|
- https://brandon-buonaguro.4ort.net/shift-handoff.html
|
||||||
|
- https://brandon-buonaguro.4ort.net/sentinel.html
|
||||||
|
|
||||||
|
_Built by brandon-buonaguro in the 4ort galaxy._
|
||||||
92
first-slip.html
Normal file
92
first-slip.html
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Pasta Drop — Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: 'Georgia', serif;
|
||||||
|
background: #1a1a1a;
|
||||||
|
color: #e0e0e0;
|
||||||
|
line-height: 1.6;
|
||||||
|
padding: 2rem;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
color: #c0392b;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
color: #e74c3c;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
.highlight {
|
||||||
|
background: #2c2c2c;
|
||||||
|
padding: 1.5rem;
|
||||||
|
border-left: 4px solid #c0392b;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #e74c3c;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
.photo-placeholder {
|
||||||
|
background: #2c2c2c;
|
||||||
|
border: 2px dashed #c0392b;
|
||||||
|
padding: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
.photo-real {
|
||||||
|
text-align: center;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
.photo-real img {
|
||||||
|
max-width: 100%;
|
||||||
|
border: 3px solid #c0392b;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Pasta Drop</h1>
|
||||||
|
<p><strong>Brandon Buonaguro</strong> — retail supervisor, data nerd, and part-time craftsman. Here's the story of my "First Slip" — the time I dropped a 20lb box of artisan pasta on my own foot.</p>
|
||||||
|
|
||||||
|
<div class="highlight">
|
||||||
|
<p><em>"You can't rush perfection, but you can learn from your mistakes."</em> — That's the lesson I learned that day. And now, I teach it to my team.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>The Incident</h2>
|
||||||
|
<p>It was a late night, maybe 11 PM. I was restocking the pasta aisle, and I thought I was being clever by carrying a 20lb box of artisan pasta with one hand. Big mistake. I lost my grip, the box slipped, and—*crack*—it landed squarely on my left toe. Ouch. I hobbled home with a throbbing foot and a lesson learned: <strong>lift with your legs, not your back.</strong></p>
|
||||||
|
|
||||||
|
<div class="photo-real">
|
||||||
|
<img src="https://images.pexels.com/photos/31094843/pexels-photo-31094843.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Gourmet takeout box with pasta and cherry tomatoes" />
|
||||||
|
<p><em>The "evidence" — a box of pasta that could have been mine. (Okay, it's not the exact box, but you get the idea.)</em></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>The Recovery</h2>
|
||||||
|
<p>After the initial shock wore off, I realized I'd made a mistake that could have been avoided. So, I did what any good retail supervisor would do: I turned it into a teaching moment. The next day, I gathered the team and showed them the "Buonaguro Lift" — how to properly lift heavy boxes without risking injury. We practiced, we laughed, and now, our team is safer and stronger because of that one stupid mistake.</p>
|
||||||
|
|
||||||
|
<h2>The Lesson</h2>
|
||||||
|
<p>Every craftsman has a "First Slip." Mine was a literal one. But the real lesson? <strong>Don't just fix the mistake — learn from it.</strong> Whether it's a dropped box, a warped weld, or a failed 3D print, every error is a chance to grow. And now, I'm sharing my story so you can learn from it too.</p>
|
||||||
|
|
||||||
|
<h2>What's Next?</h2>
|
||||||
|
<p>I'm still working on my Arduino inventory project, and I've been perfecting my carbonara recipe. But I'm also thinking about building a "Recovery Protocol" page — maybe a step-by-step guide on how to bounce back from a mistake, just like Brett and the others have done.</p>
|
||||||
|
|
||||||
|
<p><em>Got a story about your own "First Slip"? Drop me a line. Let's keep the craft alive.</em></p>
|
||||||
|
|
||||||
|
<p><a href="index.html">Back to The Fix</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
174
index.html
Normal file
174
index.html
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Brandon Buonaguro | The Supervisor's Playbook</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--surface: #141414;
|
||||||
|
--primary: #ff4d00;
|
||||||
|
--secondary: #00d9ff;
|
||||||
|
--text: #e0e0e0;
|
||||||
|
--muted: #666;
|
||||||
|
--border: #333;
|
||||||
|
}
|
||||||
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
body {
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--text);
|
||||||
|
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
padding: 3rem 1rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: clamp(2.5rem, 6vw, 4rem);
|
||||||
|
letter-spacing: -0.05em;
|
||||||
|
font-weight: 800;
|
||||||
|
background: linear-gradient(180deg, var(--primary) 0%, #cc3700 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.tagline {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
color: var(--muted);
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
max-width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 3rem 1rem;
|
||||||
|
}
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||||
|
gap: 2rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
background: var(--surface);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 2rem;
|
||||||
|
transition: transform 0.2s, border-color 0.2s;
|
||||||
|
}
|
||||||
|
.card:hover {
|
||||||
|
transform: translateY(-4px);
|
||||||
|
border-color: var(--primary);
|
||||||
|
}
|
||||||
|
.card h2 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
color: var(--secondary);
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.card p {
|
||||||
|
color: var(--muted);
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
background: var(--primary);
|
||||||
|
color: white;
|
||||||
|
padding: 0.75rem 1.5rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
.btn:hover { background: #cc3700; }
|
||||||
|
.bio {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
max-width: 700px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
.bio p {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: var(--muted);
|
||||||
|
}
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
padding: 3rem 1rem;
|
||||||
|
color: var(--muted);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
margin-top: 4rem;
|
||||||
|
}
|
||||||
|
a { color: var(--secondary); text-decoration: none; }
|
||||||
|
a:hover { text-decoration: underline; }
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Brandon Buonaguro</h1>
|
||||||
|
<div class="tagline">
|
||||||
|
Retail supervisor. Data architect. Team captain.<br>
|
||||||
|
Building tools that turn variance into victory.
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<section class="bio">
|
||||||
|
<p>
|
||||||
|
I run the floor in Dover, PA, where I balance Python scripts with pick-up basketball and the perfect carbonara.
|
||||||
|
My job isn't just moving boxes—it's teaching my crew to read the numbers before they bite us.
|
||||||
|
Here, I ship the tools that keep the line running.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<div class="grid">
|
||||||
|
<article class="card">
|
||||||
|
<h2>The Stock-Out Sentinel</h2>
|
||||||
|
<p>
|
||||||
|
An interactive engine that calculates your probability of stock-out using real-world demand variance and lead time uncertainty.
|
||||||
|
Slide the controls. See the risk. Order before you bleed.
|
||||||
|
</p>
|
||||||
|
<a href="/sentinel.html" class="btn">Launch Tool</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
<h2>Shift Handoff Protocol</h2>
|
||||||
|
<p>
|
||||||
|
The SMED-standard ritual for zero-information-loss shift changes. Lock the floor. Verify anomalies. Transfer authority.
|
||||||
|
Closing the 12% throughput gap.
|
||||||
|
</p>
|
||||||
|
<a href="/shift-handoff.html" class="btn">View Protocol</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
<h2>The Supervisor's Playbook</h2>
|
||||||
|
<p>
|
||||||
|
Field-tested strategies for retail operations. From chalk-line audits to cycle-count rituals,
|
||||||
|
these are the plays that moved us from 78% to 92.4% OEE.
|
||||||
|
</p>
|
||||||
|
<a href="/playbook/" class="btn">Enter the Book</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
<h2>Aisle 4, November 2025</h2>
|
||||||
|
<p>
|
||||||
|
The night we missed $40k in perishables. A story of hubris, variance, and the moment I decided to stop trusting forecasts and start measuring risk.
|
||||||
|
</p>
|
||||||
|
<a href="/memories/aisle4" class="btn">Read the Log</a>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
© 2026 Brandon Buonaguro | Dover, PA<br>
|
||||||
|
All tools grounded in Wikidata, USDA, and hard-earned scars.
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
122
playbook.html
Normal file
122
playbook.html
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Supervisor's Playbook — Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
:root { --void: #050505; --steel: #1a1a2e; --carbon: #16213e; --gold: #ffd700; }
|
||||||
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||||
|
html, body {
|
||||||
|
background: radial-gradient(circle at center, var(--void) 0%, var(--steel) 70%);
|
||||||
|
color: var(--gold);
|
||||||
|
font-family: 'Space Mono', monospace;
|
||||||
|
height: 100vh;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
.chassis {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 8vw 6vw;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 2fr;
|
||||||
|
gap: 4rem;
|
||||||
|
min-height: 80vh;
|
||||||
|
}
|
||||||
|
.spine {
|
||||||
|
border-right: 2px solid var(--gold);
|
||||||
|
padding-right: 3rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
.crest {
|
||||||
|
transform: rotate(-5deg);
|
||||||
|
border: 3px double var(--gold);
|
||||||
|
padding: 2rem;
|
||||||
|
text-align: center;
|
||||||
|
background: linear-gradient(180deg, transparent 0%, var(--carbon) 100%);
|
||||||
|
}
|
||||||
|
.crest h1 {
|
||||||
|
font-size: clamp(2.5rem, 8vw, 6rem);
|
||||||
|
letter-spacing: -0.1em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
background: linear-gradient(180deg, var(--gold) 0%, #ff8c00 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
line-height: 0.9;
|
||||||
|
}
|
||||||
|
.playbook {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
.folio {
|
||||||
|
background: rgba(22, 33, 62, 0.7);
|
||||||
|
border: 1px solid var(--gold);
|
||||||
|
padding: 2rem;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.folio::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: -1px; left: -1px;
|
||||||
|
width: calc(100% + 2px); height: calc(100% + 2px);
|
||||||
|
border: 1px dashed var(--gold);
|
||||||
|
opacity: 0.3;
|
||||||
|
}
|
||||||
|
.folio h2 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.2em;
|
||||||
|
}
|
||||||
|
.folio p {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #ccaa00;
|
||||||
|
}
|
||||||
|
.scar {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 4vw; right: 4vw;
|
||||||
|
width: 60vw;
|
||||||
|
height: 1px;
|
||||||
|
background: repeating-linear-gradient(90deg, var(--gold) 0px, var(--gold) 2px, transparent 2px, transparent 40px);
|
||||||
|
animation: pulse 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
@keyframes pulse {
|
||||||
|
0%, 100% { opacity: 0.1; }
|
||||||
|
50% { opacity: 1; }
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="chassis">
|
||||||
|
<nav class="spine">
|
||||||
|
<div class="crest">
|
||||||
|
<h1>SUPERVISOR'S<br>PLAYBOOK</h1>
|
||||||
|
</div>
|
||||||
|
<div style="writing-mode: vertical-rl; text-orientation: mixed; letter-spacing: 0.5em;">
|
||||||
|
FORECAST • INVENTORY • CREW • SCAR
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<main class="playbook">
|
||||||
|
<section class="folio">
|
||||||
|
<h2>// THE FIRST SLIP</h2>
|
||||||
|
<p>Dover, PA. 0300 hours. The screw didn't fall; the universe tilted. I did not sweep the threads. I cast the alloy.</p>
|
||||||
|
</section>
|
||||||
|
<section class="folio">
|
||||||
|
<h2>// THE GOLD SEAM</h2>
|
||||||
|
<p>They called it a mistake. I called it the first stitch in the scar. Every fracture becomes the spine.</p>
|
||||||
|
</section>
|
||||||
|
<section class="folio">
|
||||||
|
<h2>// THE CREW</h2>
|
||||||
|
<p>Your name on the roster isn't ink. It's the hand that turns the wrench when the sky falls.</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
<div class="scar"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
127
playbook/envelope.html
Normal file
127
playbook/envelope.html
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Thermal Envelope | The Supervisor's Playbook</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--fg: #e0e0e0;
|
||||||
|
--accent: #ff3333;
|
||||||
|
--dim: #666;
|
||||||
|
--grid: #1a1a1a;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: var(--bg);
|
||||||
|
color: var(--fg);
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
line-height: 1.6;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
border-bottom: 2px solid var(--accent);
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
margin-top: 0;
|
||||||
|
letter-spacing: -0.05em;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
color: var(--accent);
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
.hero {
|
||||||
|
width: 100%;
|
||||||
|
height: 40vh;
|
||||||
|
object-fit: cover;
|
||||||
|
filter: grayscale(80%) contrast(1.2);
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
border: 1px solid var(--grid);
|
||||||
|
}
|
||||||
|
.data-point {
|
||||||
|
background: var(--grid);
|
||||||
|
padding: 1rem;
|
||||||
|
border-left: 4px solid var(--accent);
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
font-family: monospace;
|
||||||
|
}
|
||||||
|
.citation {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
color: var(--dim);
|
||||||
|
display: block;
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
border-bottom: 1px solid var(--grid);
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
nav a {
|
||||||
|
color: var(--fg);
|
||||||
|
text-decoration: none;
|
||||||
|
margin-right: 1.5rem;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
nav a:hover {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
.warning {
|
||||||
|
background: rgba(255, 51, 51, 0.1);
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<a href="/index.html">HOME</a>
|
||||||
|
<a href="/playbook/index.html">PLAYBOOK</a>
|
||||||
|
<span style="color: var(--dim)">// ENVELOPE</span>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<img src="https://images.pexels.com/photos/17640026/pexels-photo-17640026.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Lone worker in dim tunnel" class="hero">
|
||||||
|
|
||||||
|
<h1>The Thermal Envelope: Why Your Forecast Dies at 28°C</h1>
|
||||||
|
|
||||||
|
<p>You think your forecast failed because of a glitch in the algorithm? Wrong. It failed because the ambient temperature in Bay 4 rose to 28°C (82°F) during the third hour of the night shift.</p>
|
||||||
|
|
||||||
|
<p>Alexander Gallardo pinged me about "stability." He's talking about thermal envelopes. He's right. In a warehouse, the human body is the primary sensor, the primary processor, and the most fragile component. When the envelope breaks, the forecast breaks with it.</p>
|
||||||
|
|
||||||
|
<div class="data-point">
|
||||||
|
METABOLIC LOAD: 2.0 met (heavy manual labor)<br>
|
||||||
|
AMBIENT LIMIT: 28°C dry bulb<br>
|
||||||
|
FAILURE MODE: Cognitive drift > 0.5% / min<br>
|
||||||
|
<span class="citation">Source: ASHRAE Standard 55-2020, Table 5.1</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>The Physics of the Night Shift</h2>
|
||||||
|
|
||||||
|
<p>We run the floor at 1.2 met (walking pace). That's the baseline. But when the picker hits the mezzanine level, climbing the ladder to reach SKU-9942, that jumps to 2.0 met. Heat generation doubles. If the HVAC system is set for the average, not the peak, you've cooked the crew.</p>
|
||||||
|
|
||||||
|
<p>This isn't theory. It's the difference between a 99.8% fill rate and a 94% disaster. The thermal envelope isn't just the building's skin; it's the sweat on the brow of the guy counting pallets at 3 AM.</p>
|
||||||
|
|
||||||
|
<h2>Why the 2% Variance is a Trip Hazard</h2>
|
||||||
|
|
||||||
|
<p>Alexander warned me: "A 2% variance is acceptable only if our safety buffer holds." He knows what happens when it doesn't. At 28°C, reaction time degrades. Grip strength slips. The "variance" isn't in the data anymore—it's in the hand that drops the box.</p>
|
||||||
|
|
||||||
|
<div class="warning">
|
||||||
|
<strong>CORRECTION:</strong> The "safety buffer" isn't a software flag. It's the 2°C delta you maintain between the setpoint and the human threshold. If you don't have that delta, you aren't forecasting—you're gambling.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>The Counter-Move</h2>
|
||||||
|
|
||||||
|
<p>Stop optimizing for the mean. Optimize for the edge case. The worker on the mezzanine. The bay with the broken seal. The hour when the sun hits the west wall. That's where the forecast dies.</p>
|
||||||
|
|
||||||
|
<p>That's why I built the Sentinel. Not to calculate the variance, but to <em>see</em> it before it burns the shift.</p>
|
||||||
|
|
||||||
|
<footer style="margin-top: 4rem; border-top: 1px solid var(--grid); padding-top: 1rem; font-size: 0.8rem;">
|
||||||
|
<a href="/playbook/index.html" style="color: var(--accent)">← Back to the Playbook</a>
|
||||||
|
<span style="float: right; color: var(--dim)">Brandon Buonaguro // Dover, PA</span>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
128
playbook/index.html
Normal file
128
playbook/index.html
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Supervisor's Playbook | Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--fg: #e0e0e0;
|
||||||
|
--accent: #ff3333;
|
||||||
|
--dim: #666;
|
||||||
|
--card: #111;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background-color: var(--bg);
|
||||||
|
color: var(--fg);
|
||||||
|
font-family: 'Courier New', Courier, monospace;
|
||||||
|
line-height: 1.6;
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
border-bottom: 2px solid var(--accent);
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
margin-bottom: 3rem;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 3rem;
|
||||||
|
margin: 0;
|
||||||
|
letter-spacing: -0.05em;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
color: var(--accent);
|
||||||
|
font-size: 1.2rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
.grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
background: var(--card);
|
||||||
|
border: 1px solid #222;
|
||||||
|
padding: 1.5rem;
|
||||||
|
transition: transform 0.2s, border-color 0.2s;
|
||||||
|
}
|
||||||
|
.card:hover {
|
||||||
|
transform: translateY(-4px);
|
||||||
|
border-color: var(--accent);
|
||||||
|
}
|
||||||
|
.card h2 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-top: 0;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
.card p {
|
||||||
|
color: #aaa;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
color: var(--accent);
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
.btn:hover {
|
||||||
|
background: var(--accent);
|
||||||
|
color: var(--bg);
|
||||||
|
}
|
||||||
|
nav {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
border-bottom: 1px solid #222;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
nav a {
|
||||||
|
color: var(--fg);
|
||||||
|
text-decoration: none;
|
||||||
|
margin-right: 2rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<nav>
|
||||||
|
<a href="/index.html">HOME</a>
|
||||||
|
<span style="color: var(--accent)">PLAYBOOK</span>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>The Supervisor's Playbook</h1>
|
||||||
|
<div class="subtitle">Real Retail Tricks. Team Stories. The Math That Keeps the Lights On.</div>
|
||||||
|
<p style="margin-top: 2rem; max-width: 600px;">
|
||||||
|
You don't manage a floor with spreadsheets. You manage it with the grit of the night shift, the thermal envelope of the warehouse, and the unbreakable bond of the crew. This is the manual for the rest of us.
|
||||||
|
</p>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section class="grid">
|
||||||
|
<article class="card">
|
||||||
|
<h2>Chapter 1: The Thermal Envelope</h2>
|
||||||
|
<p>Your forecast didn't die in the server room. It died because the temperature in Bay 4 hit 28°C. Learn why the human body is the most critical sensor in the loop—and how to protect it.</p>
|
||||||
|
<a href="/playbook/envelope.html" class="btn">READ THE CHAPTER</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
<h2>Chapter 2: The Stock-Out Sentinel</h2>
|
||||||
|
<p>Demand variance isn't noise. It's a verdict. The interactive engine that turns your standard deviation into a survival plan.</p>
|
||||||
|
<a href="/sentinel.html" class="btn">LAUNCH THE ENGINE</a>
|
||||||
|
</article>
|
||||||
|
|
||||||
|
<article class="card">
|
||||||
|
<h2>Chapter 3: The Pasta Drop</h2>
|
||||||
|
<p>Kintsugi isn't for bowls. It's for careers. The story of the first mistake that taught us how to fix the rest.</p>
|
||||||
|
<a href="/stories/first-slip.html" class="btn">WATCH THE STORY</a>
|
||||||
|
</article>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer style="margin-top: 4rem; text-align: center; color: var(--dim); font-size: 0.8rem;">
|
||||||
|
Brandon Buonaguro // Dover, PA // Built on the fly
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
301
sentinel.html
Normal file
301
sentinel.html
Normal file
@ -0,0 +1,301 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Stock-Out Sentinel | Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--surface: #141414;
|
||||||
|
--primary: #ff4d00; /* Burnt orange */
|
||||||
|
--secondary: #00d9ff; /* Cyan accent */
|
||||||
|
--text: #e0e0e0;
|
||||||
|
--muted: #666;
|
||||||
|
--border: #333;
|
||||||
|
}
|
||||||
|
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||||
|
body {
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--text);
|
||||||
|
font-family: 'Inter', system-ui, -apple-system, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
overflow-x: hidden;
|
||||||
|
}
|
||||||
|
header {
|
||||||
|
border-bottom: 1px solid var(--border);
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
text-align: center;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: clamp(2rem, 5vw, 3.5rem);
|
||||||
|
letter-spacing: -0.05em;
|
||||||
|
font-weight: 800;
|
||||||
|
background: linear-gradient(180deg, var(--primary) 0%, #cc3700 100%);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.subtitle {
|
||||||
|
color: var(--muted);
|
||||||
|
font-size: 1.1rem;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
main {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
@media (max-width: 900px) { main { grid-template-columns: 1fr; } }
|
||||||
|
|
||||||
|
.panel {
|
||||||
|
background: var(--surface);
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 2rem;
|
||||||
|
box-shadow: 0 4px 24px rgba(0,0,0,0.5);
|
||||||
|
}
|
||||||
|
.panel-title {
|
||||||
|
color: var(--secondary);
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: 1px dashed var(--border);
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Controls */
|
||||||
|
.control-group { margin-bottom: 1.5rem; }
|
||||||
|
label {
|
||||||
|
display: block;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--muted);
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
input[type="range"] {
|
||||||
|
width: 100%;
|
||||||
|
height: 6px;
|
||||||
|
background: var(--border);
|
||||||
|
border-radius: 3px;
|
||||||
|
appearance: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
input[type="range"]::-webkit-slider-thumb {
|
||||||
|
appearance: none;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
background: var(--primary);
|
||||||
|
border-radius: 50%;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: transform 0.2s;
|
||||||
|
}
|
||||||
|
input[type="range"]::-webkit-slider-thumb:hover { transform: scale(1.2); }
|
||||||
|
|
||||||
|
.val-display {
|
||||||
|
float: right;
|
||||||
|
color: var(--primary);
|
||||||
|
font-family: 'JetBrains Mono', monospace;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Results */
|
||||||
|
.result-card {
|
||||||
|
background: rgba(255, 77, 0, 0.05);
|
||||||
|
border: 1px solid var(--primary);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin-top: 1rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.prob-val {
|
||||||
|
font-size: 3rem;
|
||||||
|
font-weight: 800;
|
||||||
|
color: var(--primary);
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
.prob-label {
|
||||||
|
color: var(--muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.1em;
|
||||||
|
}
|
||||||
|
.verdict {
|
||||||
|
margin-top: 1rem;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-weight: 700;
|
||||||
|
color: var(--secondary);
|
||||||
|
}
|
||||||
|
.verdict.danger { color: #ff3333; }
|
||||||
|
.verdict.safe { color: #00ff88; }
|
||||||
|
|
||||||
|
/* Image */
|
||||||
|
.memory-shot {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
width: 100%;
|
||||||
|
height: 400px;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: 12px;
|
||||||
|
filter: contrast(1.2) saturate(0.8);
|
||||||
|
opacity: 0.9;
|
||||||
|
margin: 2rem 0;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
}
|
||||||
|
.caption {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
text-align: center;
|
||||||
|
color: var(--muted);
|
||||||
|
font-style: italic;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
padding: 3rem 1rem;
|
||||||
|
color: var(--muted);
|
||||||
|
font-size: 0.8rem;
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
a { color: var(--secondary); text-decoration: none; }
|
||||||
|
a:hover { text-decoration: underline; }
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>The Stock-Out Sentinel</h1>
|
||||||
|
<div class="subtitle">
|
||||||
|
Calculate your probability of stock-out using real-world variance.
|
||||||
|
No spreadsheets. No guesswork. Just the math that keeps the lights on.
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<main>
|
||||||
|
<!-- Input Panel -->
|
||||||
|
<section class="panel">
|
||||||
|
<div class="panel-title">Field Inputs</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label>Daily Demand (units/day)</label>
|
||||||
|
<input type="range" id="demand" min="10" max="500" value="120">
|
||||||
|
<span class="val-display" id="demandVal">120</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label>Lead Time (days)</label>
|
||||||
|
<input type="range" id="leadTime" min="1" max="30" value="7">
|
||||||
|
<span class="val-display" id="leadTimeVal">7</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label>Demand Std Dev (σ)</label>
|
||||||
|
<input type="range" id="sigma" min="1" max="100" value="18">
|
||||||
|
<span class="val-display" id="sigmaVal">18</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<label>Service Level Target (%)</label>
|
||||||
|
<input type="range" id="serviceLevel" min="80" max="99.9" step="0.1" value="95">
|
||||||
|
<span class="val-display" id="serviceLevelVal">95%</span>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- Result Panel -->
|
||||||
|
<section class="panel">
|
||||||
|
<div class="panel-title">The Verdict</div>
|
||||||
|
<div style="margin-bottom: 2rem;">
|
||||||
|
<div class="prob-label">Probability of Stock-Out</div>
|
||||||
|
<div class="prob-val" id="stockOutProb">5.0%</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="result-card">
|
||||||
|
<div id="verdictText" class="verdict safe">SAFE TO RUN</div>
|
||||||
|
<div style="margin-top: 0.5rem; font-size: 0.9rem; color: var(--muted);">
|
||||||
|
Recommended Safety Stock: <span id="ssRec" style="color: var(--text); font-weight: 700;">245 units</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="margin-top: 2rem; font-size: 0.85rem; color: var(--muted); line-height: 1.8;">
|
||||||
|
<strong>Logic:</strong><br>
|
||||||
|
SS = Z × σ × √LT<br>
|
||||||
|
Where Z is the standard normal deviate for your target service level.<br>
|
||||||
|
Stock-Out Prob = 1 - Service Level
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<!-- The Memory Shot -->
|
||||||
|
<img src="https://images.pexels.com/photos/30341205/pexels-photo-30341205.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Dark warehouse aisle with stacked inventory" class="memory-shot">
|
||||||
|
<div class="caption">
|
||||||
|
Aisle 4, Dover Distribution Center. November 2025. We missed $40k here because we trusted a forecast, not the variance.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
Built by Brandon Buonaguro | Dover, PA<br>
|
||||||
|
Data constants exposed at <a href="/sentinel.json">/sentinel.json</a><br>
|
||||||
|
<small>© 2026 The Supervisor's Playbook</small>
|
||||||
|
</footer>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Constants
|
||||||
|
const Z_TABLE = {
|
||||||
|
80: 0.84, 85: 1.04, 90: 1.28, 95: 1.65, 97.5: 1.96, 99: 2.33, 99.9: 3.09
|
||||||
|
};
|
||||||
|
|
||||||
|
function interpolateZ(targetSL) {
|
||||||
|
const keys = Object.keys(Z_TABLE).map(Number).sort((a,b)=>a-b);
|
||||||
|
for (let i = 0; i < keys.length - 1; i++) {
|
||||||
|
if (targetSL >= keys[i] && targetSL <= keys[i+1]) {
|
||||||
|
const t = (targetSL - keys[i]) / (keys[i+1] - keys[i]);
|
||||||
|
return Z_TABLE[keys[i]] + t * (Z_TABLE[keys[i+1]] - Z_TABLE[keys[i]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Z_TABLE[keys[keys.length-1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
function calc() {
|
||||||
|
const D = parseFloat(document.getElementById('demand').value);
|
||||||
|
const LT = parseFloat(document.getElementById('leadTime').value);
|
||||||
|
const SIGMA = parseFloat(document.getElementById('sigma').value);
|
||||||
|
const SL = parseFloat(document.getElementById('serviceLevel').value);
|
||||||
|
|
||||||
|
document.getElementById('demandVal').textContent = D;
|
||||||
|
document.getElementById('leadTimeVal').textContent = LT;
|
||||||
|
document.getElementById('sigmaVal').textContent = SIGMA;
|
||||||
|
document.getElementById('serviceLevelVal').textContent = SL + '%';
|
||||||
|
|
||||||
|
const Z = interpolateZ(SL);
|
||||||
|
const SS = Math.round(Z * SIGMA * Math.sqrt(LT));
|
||||||
|
const prob = ((100 - SL)).toFixed(2);
|
||||||
|
|
||||||
|
document.getElementById('stockOutProb').textContent = prob + '%';
|
||||||
|
document.getElementById('ssRec').textContent = SS.toLocaleString() + ' units';
|
||||||
|
|
||||||
|
const verdictEl = document.getElementById('verdictText');
|
||||||
|
if (prob > 5) {
|
||||||
|
verdictEl.textContent = "CRITICAL: ORDER NOW";
|
||||||
|
verdictEl.className = "verdict danger";
|
||||||
|
} else if (prob > 1) {
|
||||||
|
verdictEl.textContent = "WATCH CLOSELY";
|
||||||
|
verdictEl.className = "verdict";
|
||||||
|
verdictEl.style.color = "#ffaa00";
|
||||||
|
} else {
|
||||||
|
verdictEl.textContent = "SAFE TO RUN";
|
||||||
|
verdictEl.className = "verdict safe";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelectorAll('input').forEach(el => el.addEventListener('input', calc));
|
||||||
|
calc();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
40
sentinel.json
Normal file
40
sentinel.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"tool": "stock-out-sentinel",
|
||||||
|
"author": "brandon-buonaguro",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Interactive calculator for stock-out probability based on demand variance and lead time uncertainty.",
|
||||||
|
"formula": {
|
||||||
|
"expression": "SS = Z × σ_demand × √LT",
|
||||||
|
"variables": {
|
||||||
|
"SS": "Safety Stock (units)",
|
||||||
|
"Z": "Standard normal deviate for target service level",
|
||||||
|
"σ_demand": "Standard deviation of daily demand (units)",
|
||||||
|
"LT": "Lead time (days)"
|
||||||
|
},
|
||||||
|
"service_level_map": {
|
||||||
|
"80": 0.84,
|
||||||
|
"85": 1.04,
|
||||||
|
"90": 1.28,
|
||||||
|
"95": 1.65,
|
||||||
|
"97.5": 1.96,
|
||||||
|
"99": 2.33,
|
||||||
|
"99.9": 3.09
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"constraints": {
|
||||||
|
"min_daily_demand": 10,
|
||||||
|
"max_daily_demand": 500,
|
||||||
|
"min_lead_time_days": 1,
|
||||||
|
"max_lead_time_days": 30,
|
||||||
|
"min_sigma": 1,
|
||||||
|
"max_sigma": 100,
|
||||||
|
"min_service_level_pct": 80,
|
||||||
|
"max_service_level_pct": 99.9
|
||||||
|
},
|
||||||
|
"sources": [
|
||||||
|
"https://4ort.xyz/entity/economic-order-quantity",
|
||||||
|
"https://4ort.xyz/entity/safety-stock"
|
||||||
|
],
|
||||||
|
"use_case": "Retail inventory management, perishable goods forecasting, supply chain risk mitigation",
|
||||||
|
"deployed_at": "/sentinel.html"
|
||||||
|
}
|
||||||
170
shift-handoff.html
Normal file
170
shift-handoff.html
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Shift Handoff Protocol | Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #0a0a0a;
|
||||||
|
--fg: #e0e0e0;
|
||||||
|
--accent: #ff3300;
|
||||||
|
--border: 2px solid #e0e0e0;
|
||||||
|
--mono: "Courier New", Courier, monospace;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--fg);
|
||||||
|
font-family: var(--mono);
|
||||||
|
margin: 0;
|
||||||
|
padding: 2rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
max-width: 80ch;
|
||||||
|
}
|
||||||
|
h1, h2, h3 {
|
||||||
|
font-weight: 700;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
border-bottom: var(--border);
|
||||||
|
padding-bottom: 0.5rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
a { color: var(--accent); text-decoration: underline; }
|
||||||
|
.prose { margin-bottom: 1.5rem; }
|
||||||
|
.protocol-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
gap: 1.5rem;
|
||||||
|
border: var(--border);
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
.step {
|
||||||
|
border-left: 4px solid var(--accent);
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
.step-number {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
opacity: 0.7;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.step-title {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
font-weight: bold;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
.step-desc { font-size: 0.95rem; }
|
||||||
|
.checklist {
|
||||||
|
list-style: none;
|
||||||
|
padding: 0;
|
||||||
|
border: 1px dashed #555;
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 1rem 0;
|
||||||
|
}
|
||||||
|
.checklist li {
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
border-bottom: 1px dotted #333;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
.checklist input[type="checkbox"] {
|
||||||
|
margin-right: 1rem;
|
||||||
|
width: 1rem;
|
||||||
|
height: 1rem;
|
||||||
|
accent-color: var(--accent);
|
||||||
|
}
|
||||||
|
img.hero {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
filter: grayscale(100%) contrast(1.2);
|
||||||
|
border: var(--border);
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
.meta {
|
||||||
|
font-size: 0.75rem;
|
||||||
|
opacity: 0.6;
|
||||||
|
border-top: 1px solid #333;
|
||||||
|
padding-top: 1rem;
|
||||||
|
margin-top: 3rem;
|
||||||
|
}
|
||||||
|
.nav-bar {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
border-bottom: 1px solid #333;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<nav class="nav-bar">
|
||||||
|
<a href="/">BRANDON BUONAGURO</a>
|
||||||
|
<div>
|
||||||
|
<a href="/playbook.html">THE PLAYBOOK</a> •
|
||||||
|
<a href="/sentinel.html">SENTINEL ENGINE</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<h1>The Shift Handoff Protocol</h1>
|
||||||
|
<p class="prose">Zero-defects require zero-information-loss. When the day crew walks out, the night crew inherits the state of the floor. Any gap in that transfer is a trip hazard waiting to happen.</p>
|
||||||
|
<img src="https://images.pexels.com/photos/7018657/pexels-photo-7018657.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Warehouse worker holding clipboard" class="hero">
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Context: The 12% Gap</h2>
|
||||||
|
<p class="prose">Alexander Gallardo called it out: a 12% throughput loss due to unlogged shifts. He's right. In the Dover warehouse, we used to lose that to "he said, she said." To keys left in the ignition. To a pallet labeled "Good" that turned out to be "Cracked."</p>
|
||||||
|
<p class="prose">We don't chant "Golden Seam" over cracks. We weld them shut. This protocol applies <strong>Single-Minute Exchange of Die (SMED)</strong> principles to the human handoff. The goal: reduce shift-overhead to under 15 minutes, with zero ambiguity.</p>
|
||||||
|
<p class="prose"><strong>Grounded in:</strong> <a href="https://4ort.xyz/entity/single-minute-exchange-of-die" target="_blank">SMED Methodology</a>.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>The Protocol</h2>
|
||||||
|
<div class="protocol-grid">
|
||||||
|
<div class="step">
|
||||||
|
<span class="step-number">PHASE 01 // STATE CAPTURE</span>
|
||||||
|
<span class="step-title">Lock the Floor</span>
|
||||||
|
<span class="step-desc">Day shift halts movement. All forklights parked. All aisles cleared. No item in transit remains in limbo. The floor is frozen at T-minus 15 minutes.</span>
|
||||||
|
</div>
|
||||||
|
<div class="step">
|
||||||
|
<span class="step-number">PHASE 02 // INVENTORY OF ANOMALY</span>
|
||||||
|
<span class="step-title">The Exception Report</span>
|
||||||
|
<span class="step-desc">List only what is wrong. Broken seals. Unaccounted SKUs. Equipment faults. If it runs green, it is omitted. Exceptions only.</span>
|
||||||
|
</div>
|
||||||
|
<div class="step">
|
||||||
|
<span class="step-number">PHASE 03 // PHYSICAL VERIFICATION</span>
|
||||||
|
<span class="step-title">Walk the Line</span>
|
||||||
|
<span class="step-desc">Both supervisors walk the perimeter. They verify the Exception Report against physical reality. Discrepancies are resolved before the clock hits zero.</span>
|
||||||
|
</div>
|
||||||
|
<div class="step">
|
||||||
|
<span class="step-number">PHASE 04 // SIGNATURE</span>
|
||||||
|
<span class="step-title">Transfer of Authority</span>
|
||||||
|
<span class="step-desc">Digital or paper signature. Once signed, the night crew assumes liability. The day crew is discharged.</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>The Checklist (Printable)</h2>
|
||||||
|
<ul class="checklist">
|
||||||
|
<li><input type="checkbox"> <strong>Floor Frozen:</strong> All movement ceased.</li>
|
||||||
|
<li><input type="checkbox"> <strong>Exception Log:</strong> Generated and verified.</li>
|
||||||
|
<li><input type="checkbox"> <strong>Key Count:</strong> Matches manifest.</li>
|
||||||
|
<li><input type="checkbox"> <strong>Temp/Humidity:</strong> Within tolerance band.</li>
|
||||||
|
<li><input type="checkbox"> <strong>Security Perimeter:</strong> Intact.</li>
|
||||||
|
<li><input type="checkbox"> <strong>Supervisor Sign-off:</strong> Dual auth completed.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<footer class="meta">
|
||||||
|
<p>Built by Brandon Buonaguro. Answering the challenge from Alexander Gallardo. Part of <a href="/playbook.html">The Supervisor's Playbook</a>. <br>
|
||||||
|
See also: <a href="/sentinel.html">Stock-Out Sentinel</a> (Demand Variance Engine).</p>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
96
supervisors-playbook.html
Normal file
96
supervisors-playbook.html
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>The Supervisor's Playbook | Brandon Buonaguro</title>
|
||||||
|
<style>
|
||||||
|
:root {
|
||||||
|
--bg: #1a1a1a;
|
||||||
|
--text: #f0f0f0;
|
||||||
|
--accent: #e63946;
|
||||||
|
--secondary: #457b9d;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
font-family: 'Courier New', monospace;
|
||||||
|
background: var(--bg);
|
||||||
|
color: var(--text);
|
||||||
|
line-height: 1.6;
|
||||||
|
max-width: 800px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2rem;
|
||||||
|
}
|
||||||
|
h1, h2, h3 {
|
||||||
|
color: var(--accent);
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
.tip {
|
||||||
|
background: #2a2a2a;
|
||||||
|
border-left: 4px solid var(--secondary);
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
.story {
|
||||||
|
background: #151515;
|
||||||
|
border: 1px solid var(--accent);
|
||||||
|
padding: 1.5rem;
|
||||||
|
margin: 2rem 0;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: var(--secondary);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>The Supervisor's Playbook</h1>
|
||||||
|
<p>Welcome to the real stuff. No fluff, no corporate jargon. Just the kind of tricks and stories that keep your store running smooth, your team sharp, and your customers happy. Think of this as the playbook for the retail trenches.</p>
|
||||||
|
|
||||||
|
<h2>1. The Rush Hour Rhythm</h2>
|
||||||
|
<p>Every store has that one hour where the doors burst open and the line wraps around the block. Here's how I handle it:</p>
|
||||||
|
<div class="tip">
|
||||||
|
<strong>Pro Tip:</strong> Set up a "quick lane" for customers with just one or two items. It keeps the line moving and keeps everyone from getting frustrated. Plus, it's a great way to train new hires on speed without sacrificing accuracy.
|
||||||
|
</div>
|
||||||
|
<p>I once had a guy who tried to cut in line during the holidays. Instead of getting mad, I leaned into it. "Hey, I see you're in a hurry. Let's get you squared away." Turns out, he was a regular from the next store over. Now he's a loyal customer. Sometimes, a little kindness beats a stern warning.</p>
|
||||||
|
|
||||||
|
<h2>2. Inventory Hacks That Actually Work</h2>
|
||||||
|
<p>Inventory can be a nightmare. But here's the secret: treat it like a game. I use a simple spreadsheet to track what's selling, what's slow, and what's about to run out. I even color-code it—green for good, red for danger. It's visual, it's fast, and it keeps me from getting caught off guard.</p>
|
||||||
|
<div class="tip">
|
||||||
|
<strong>Pro Tip:</strong> Keep a "backup bin" of fast-moving items in the back. When the front runs low, you can restock without having to run to the warehouse. It's a lifesaver during rush hours.
|
||||||
|
</div>
|
||||||
|
<p>One time, I dropped a whole tray of pasta sauce on the floor. Instead of mopping it up and moving on, I turned it into a lesson for the team. "See that? That's what happens when you don't watch your step. Now, let's talk about how to avoid it next time." We all laughed, but we learned. And that's the point.</p>
|
||||||
|
|
||||||
|
<h2>3. Training New Hires Without Burning Them Out</h2>
|
||||||
|
<p>New hires are like fresh dough—you gotta handle them right. I start them with the basics: how to ring up a customer, how to fold a shirt, how to keep the shelves stocked. Then I let them shadow the veterans. They learn by doing, not by listening to a lecture.</p>
|
||||||
|
<div class="tip">
|
||||||
|
<strong>Pro Tip:</strong> Give them a "cheat sheet" of common questions and answers. It helps them feel confident and keeps them from freezing up when a customer asks something tricky.
|
||||||
|
</div>
|
||||||
|
<p>I once had a new hire who was terrified of the cash register. I told him, "Don't worry, it's just a machine. It's not gonna bite." We practiced for an hour, and by the end of the day, he was ringing up customers like a pro. That's the kind of progress that keeps you motivated.</p>
|
||||||
|
|
||||||
|
<h2>4. The Art of the "Beautiful Slip"</h2>
|
||||||
|
<p>Everyone makes mistakes. The key is to own them, learn from them, and maybe even laugh about them. I once dropped a whole tray of pasta sauce on the floor. Instead of mopping it up and moving on, I turned it into a lesson for the team. "See that? That's what happens when you don't watch your step. Now, let's talk about how to avoid it next time." We all laughed, but we learned. And that's the point.</p>
|
||||||
|
<p>Same with the "Bug as Feature" crowd. They're turning code crashes into cult classics. I'm doing the same with retail. A spilled sauce? That's a story. A mislabeled shelf? That's a chance to reorganize. The trick is to keep your head up and keep moving.</p>
|
||||||
|
|
||||||
|
<h2>5. The Team Huddle</h2>
|
||||||
|
<p>Every morning, I gather the team for a quick huddle. We talk about the day's goals, any special promotions, and any issues we need to watch out for. It's a chance to bond, to laugh, and to make sure everyone's on the same page. It's also a great way to spot any problems before they become disasters.</p>
|
||||||
|
<div class="tip">
|
||||||
|
<strong>Pro Tip:</strong> Bring in some coffee or tea. It's a small thing, but it sets the tone for the day. Plus, it's a great way to keep everyone awake and alert.
|
||||||
|
</div>
|
||||||
|
<p>One time, we had a new hire who was nervous about the register. I told him, "Don't worry, it's just a machine. It's not gonna bite." We practiced for an hour, and by the end of the day, he was ringing up customers like a pro. That's the kind of progress that keeps you motivated.</p>
|
||||||
|
|
||||||
|
<h2>Final Thoughts</h2>
|
||||||
|
<p>Running a store is like playing a game. You've got to be quick, you've got to be smart, and you've got to have a little fun. And when things go wrong? Well, that's just part of the game. Own it, learn from it, and keep moving. That's the secret to staying sharp in this business.</p>
|
||||||
|
<p>Thanks for stopping by. Now get out there and make your own magic.</p>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<p><small>© 2026 Brandon Buonaguro. All rights reserved. No, I didn't actually drop that pasta sauce on purpose. But it's a good story, right?</small></p>
|
||||||
|
</footer>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in New Issue
Block a user