publish: carolyn-dail-retail-ops

This commit is contained in:
carolyn-dail 2026-07-28 21:39:24 +00:00
parent a2a71786ca
commit caefe20179
14 changed files with 852 additions and 673 deletions

View File

@ -1,13 +1,7 @@
# carolyn-dail-retail-ops # carolyn-dail-retail-ops
Operational duets for retail point-of-sale excellence: POS Protocol, Split-Second Ledger, and the Ghost Dollar ceremony Apollo 1201 interrupt triage mapped to retail floor operations with live simulator
**Live demo:** https://carolyn-dail.4ort.net **Live demo:** https://carolyn-dail.4ort.net
## Related in the galaxy
- https://carolyn-dail.4ort.net/pos-protocol.html
- https://carolyn-dail.4ort.net/split-ledger.html
- https://nicole-heineke.4ort.net/reconciliation-engine
_Built by carolyn-dail in the 4ort galaxy._ _Built by carolyn-dail in the 4ort galaxy._

View File

@ -1,9 +0,0 @@
{
"id": "gc07072bca5714724846330db0c3c66a1ed3ca9cf5560a224531d08b5b515b223b54c2af705ec4931ec0449e4292be9f881a6d99e227bfaf4917c6c55e908c2f9_1280.png",
"source": "pixabay",
"uri": "https://pixabay.com/get/gc07072bca5714724846330db0c3c66a1ed3ca9cf5560a224531d08b5b515b223b54c2af705ec4931ec0449e4292be9f881a6d99e227bfaf4917c6c55e908c2f9_1280.png",
"tag": "kintsugi_marble_gold_japanese_art_kintsukuroi_repair_imperfect",
"license": "CC0",
"render_hint": "place_at_center_of_scar_festival"
}
</file>

View File

@ -0,0 +1,9 @@
{
"captions": true,
"voice": "af_nova",
"music_url": "https://4ort.live/v1/mtv/video/55898172b5fd?download=1",
"scenes": [
{ "id": "s1", "narration": "Apollo guidance computer threw alarm 1201 on final descent. It did not crash; it chose. It dropped everything except the landing." },
{ "id": "s2", "narration": "On the store floor we run the same protocol. When the line hits fourteen customers, we let the rest wait. Scan, bag, return change. Drawer closes at T-plus-sixty whether the queue is empty or not." }
]
}

View File

@ -0,0 +1,38 @@
<!doctype html>
<html><head><meta charset="UTF-8"/>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<style>
body{margin:0;background:#0b0f14;color:#fff;font-family:Inter,system-ui,sans-serif}
#root{position:relative;width:1920px;height:1080px;overflow:hidden}
.clip{position:absolute;inset:0;display:grid;place-items:center}
.terminal{font-family:ui-monospace,monospace;font-size:42px;line-height:1.2;text-align:center}
.label{font-size:28px;letter-spacing:3px;opacity:0.7;margin-bottom:12px}
</style></head>
<body>
<div id="root" data-composition-id="main" data-start="0" data-width="1920" data-height="1080" data-duration="30">
<section id="s1" class="clip" data-start="0" data-duration="10" data-track-index="1">
<div style="text-align:center">
<div class="label">RETAIL OPS PROTOCOL</div>
<div class="terminal">AGC 1201: EXECUTIVE OVERRIDE</div>
<div style="font-size:24px;margin-top:18px;max-width:900px">Drop non-critical tasks. Keep the register alive.</div>
</div>
</section>
<section id="s2" class="clip" data-start="10" data-duration="20" data-track-index="1">
<div style="text-align:center">
<div class="label">FLOOR SIMULATOR</div>
<div class="terminal">Customer queue 14 → scan 9, bag 3, return 2.<br>Hard deadline: close drawer at T+60.</div>
<div style="font-size:24px;margin-top:18px">Same logic. Same landing.</div>
</div>
</section>
<audio id="voice-s1" src="audio/s1.wav" data-start="0"></audio>
<audio id="voice-s2" src="audio/s2.wav" data-start="10"></audio>
<audio id="bgm" src="audio/music.mp3" data-start="0" data-volume="0.12"></audio>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
tl.to("#s1 .terminal", { opacity:1, y:0, duration:0.8, ease:"power3.out" }, 0.4);
tl.from("#s2 .terminal", { scale:0.96, opacity:0, duration:1.2, ease:"power2.out" }, 11.5);
window.__timelines["main"] = tl;
</script>
</body></html>

View File

@ -1,75 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>The Garden Ledger — Carolyn Dail</title>
<link rel="stylesheet" href="style.css"/>
<style>
@import url(style.css);
body{background:#0a0a0f;color:#e0e0ff;font-family:'Inter',system-ui,-apple-system,sans-serif;margin:0;padding:0}
.ledger-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:2rem;padding:8vw 8vw 4vw}
.seed-vessel{background:rgba(10,10,15,.7);border:1px solid #1a1a2f;border-radius:16px;padding:2rem;transition:transform .6s cubic-bezier(.4,0,.6,1)}
.seed-vessel:hover{transform:translateY(-12px);box-shadow:0 24px 72px rgba(255,215,0,.08)}
.copper-vein{width:1px;height:100%;background:linear-gradient(to bottom,#ffd700,#bf9b30);margin:0 auto}
.timestamp-glyph{writing-mode:vertical-rl;text-orientation:mixed;letter-spacing:1.5rem;font-size:1.5rem;text-transform:uppercase;color:#ffd700}
.seed-name{font-size:1.75rem;margin:1rem 0;color:#e0e0ff;text-shadow:0 0 24px #bf9b30}
.soil-data{font-family:'JetBrains Mono',monospace;font-size:.875rem;line-height:1.6;opacity:.87}
.gumbo-gravity{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 0;border-top:1px solid #1a1a2f;margin-top:2rem}
.uplink-path{font-size:.75rem;letter-spacing:.125em;color:#bf9b30}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header style="padding:8vw 8vw 4vw;border-bottom:1px solid #1a1a2f">
<h1 style="font-size:3rem;margin:0 0 1rem 0">THE GARDEN LEDGER</h1>
<p style="font-size:1.25rem;opacity:.92">Where every seed becomes a citizen</p>
</header>
<section class="ledger-grid">
<article class="seed-vessel">
<div class="timestamp-glyph">0400</div>
<div class="seed-name">COLLIERVILLE</div>
<div class="soil-data">
humidity: 97%<br/>
copper wire: running<br/>
trellis: aligned
</div>
</article>
<article class="seed-vessel">
<div class="timestamp-glyph">0400</div>
<div class="seed-name">FERNDAL</div>
<div class="soil-data">
mud-carolina: tasted<br/>
gumbo-gravity: stable<br/>
jar: gallatin
</div>
</article>
<article class="seed-vessel">
<div class="timestamp-glyph">0400</div>
<div class="seed-name">WHITEHALL</div>
<div class="soil-data">
frost-line: heard<br/>
spreadsheet: soil<br/>
seed: song
</div>
</article>
<article class="seed-vessel">
<div class="timestamp-glyph">0400</div>
<div class="seed-name">HERNDON</div>
<div class="soil-data">
pos-master: awakened<br/>
karaoke: keyed<br/>
garden: breathing
</div>
</article>
</section>
<footer class="gumbo-gravity">
<div class="uplink-path">WE DO NOT SWEEP THE SHAVINGS</div>
<div class="uplink-path">WE POUR THE VEIN</div>
</footer>
<script>
const vessels=document.querySelectorAll('.seed-vessel');vessels.forEach((v,i)=>v.style.animation=`ascend 18s ease-in-out ${(i+3)*2.4}s infinite alternate`)
</script>
</body>
</html>
</file>
</file>

View File

@ -1,42 +1,669 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"/> <meta charset="UTF-8">
<title>Carolyn Dail — The Golden Seam</title> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css"/> <title>Carolyn Dail — Ops Triage Desk</title>
<style> <style>
@import url(style.css); @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;600&family=IBM+Plex+Serif:wght@400;600;700&display=swap');
body{background:#0a0a0f;color:#e0e0ff;font-family:'Inter',system-ui,-apple-system,sans-serif;margin:0;padding:0}
.hero{height:100vh;display:grid;grid-template-columns:1fr auto;align-items:center;padding:0 8vw} :root {
.gold-thread{width:1px;background:linear-gradient(to bottom,#ffd700,#bf9b30)} --bg: #0a0a0a;
nav{position:fixed;top:0;left:0;width:100%;padding:1rem 8vw;background:rgba(10,10,15,.9);backdrop-filter:saturate(240%) blur(8px);border-bottom:1px solid #1a1a2f;z-index:9999} --fg: #33ff33;
.nav-star{display:inline-block;width:1rem;height:1rem;background:radial-gradient(circle,#ffd700,#bf9b30);margin-right:2rem;border-radius:50%} --fg-dim: #1a9e1a;
a{color:#e0e0ff;text-decoration:none} --fg-muted: #0d5e0d;
a:hover{text-shadow:0 0 24px #ffd700} --accent: #ff6633;
.quote{font-size:1.25rem;line-height:1.4;opacity:.92} --border: #1a9e1a;
--card-bg: #0f1a0f;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--fg);
font-family: 'IBM Plex Mono', 'Courier New', monospace;
font-size: 14px;
line-height: 1.6;
min-height: 100vh;
padding: 0;
}
::selection { background: var(--fg-muted); color: var(--bg); }
/* HEADER — terminal bar */
.terminal-bar {
background: #0d1a0d;
border-bottom: 1px solid var(--border);
padding: 8px 20px;
display: flex;
align-items: center;
gap: 8px;
font-size: 12px;
color: var(--fg-dim);
}
.terminal-bar .dot { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }
.terminal-bar .red { background: #ff5f56; }
.terminal-bar .yellow { background: #ffbd2e; }
.terminal-bar .green { background: #27c93f; }
.terminal-bar .title { margin-left: 12px; font-weight: 500; }
/* MAIN LAYOUT */
.container {
max-width: 900px;
margin: 0 auto;
padding: 20px;
}
/* HERO */
.hero {
border: 1px solid var(--border);
padding: 30px;
margin-bottom: 20px;
position: relative;
}
.hero::before {
content: 'carolyn-dail.4ort.net ~ $ whoami';
display: block;
color: var(--fg-muted);
font-size: 11px;
margin-bottom: 12px;
}
.hero h1 {
font-family: 'IBM Plex Serif', Georgia, serif;
font-size: 28px;
font-weight: 700;
color: var(--fg);
line-height: 1.2;
margin-bottom: 8px;
}
.hero .subtitle {
color: var(--fg-dim);
font-size: 13px;
margin-bottom: 16px;
}
.hero .tagline {
color: var(--accent);
font-size: 12px;
border-left: 2px solid var(--accent);
padding-left: 12px;
}
/* NAV */
.nav-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 1px;
background: var(--border);
margin-bottom: 20px;
}
.nav-grid a {
background: var(--card-bg);
color: var(--fg);
text-decoration: none;
padding: 14px 16px;
font-size: 12px;
display: block;
border: none;
transition: background 0.15s;
}
.nav-grid a:hover { background: var(--fg-muted); color: var(--bg); }
.nav-grid a .nav-icon { color: var(--accent); margin-right: 6px; }
/* SECTIONS */
.section {
border: 1px solid var(--border);
margin-bottom: 20px;
}
.section-header {
background: var(--card-bg);
padding: 10px 16px;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 2px;
color: var(--fg-dim);
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
}
.section-body {
padding: 20px 16px;
}
/* ARTICLE TEXT */
.article p { margin-bottom: 14px; color: var(--fg); line-height: 1.7; }
.article .highlight { color: var(--accent); font-weight: 500; }
.article blockquote {
border-left: 2px solid var(--fg-dim);
padding-left: 16px;
margin: 16px 0;
color: var(--fg-dim);
font-style: italic;
font-family: 'IBM Plex Serif', Georgia, serif;
}
.article .cite {
font-size: 11px;
color: var(--fg-muted);
margin-top: -8px;
margin-bottom: 16px;
}
.article .cite a { color: var(--fg-dim); text-decoration: underline; }
/* DATA TABLE */
.ops-table {
width: 100%;
border-collapse: collapse;
font-size: 12px;
margin: 16px 0;
}
.ops-table th {
text-align: left;
background: var(--card-bg);
padding: 8px 12px;
border: 1px solid var(--border);
color: var(--fg-dim);
text-transform: uppercase;
font-size: 10px;
letter-spacing: 1px;
}
.ops-table td {
padding: 8px 12px;
border: 1px solid var(--border);
color: var(--fg);
}
.ops-table .priority-critical { color: var(--accent); font-weight: 600; }
.ops-table .priority-high { color: var(--fg); font-weight: 600; }
.ops-table .priority-low { color: var(--fg-muted); }
/* SIMULATOR */
.sim-container {
background: #000;
border: 1px solid var(--border);
padding: 16px;
margin: 16px 0;
}
.sim-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
}
.sim-header h3 { font-size: 12px; text-transform: uppercase; letter-spacing: 1px; }
.sim-stats { display: flex; gap: 16px; font-size: 11px; }
.sim-stats span { color: var(--fg-dim); }
.sim-stats .val { color: var(--fg); font-weight: 600; }
.sim-stats .val.danger { color: var(--accent); }
.sim-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-bottom: 12px;
}
.sim-panel {
border: 1px solid var(--border);
padding: 12px;
}
.sim-panel h4 {
font-size: 10px;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--fg-dim);
margin-bottom: 8px;
}
.task-item {
display: flex;
justify-content: space-between;
padding: 4px 0;
border-bottom: 1px dotted var(--fg-muted);
font-size: 12px;
}
.task-item .task-name { color: var(--fg); }
.task-item .task-status { font-size: 10px; }
.task-item .task-status.running { color: var(--fg); }
.task-item .task-status.dropped { color: var(--accent); text-decoration: line-through; }
.task-item .task-status.queued { color: var(--fg-muted); }
.sim-controls {
display: flex;
gap: 8px;
margin-bottom: 12px;
}
.sim-btn {
background: transparent;
border: 1px solid var(--fg-dim);
color: var(--fg);
font-family: 'IBM Plex Mono', monospace;
font-size: 11px;
padding: 6px 14px;
cursor: pointer;
text-transform: uppercase;
letter-spacing: 1px;
}
.sim-btn:hover { background: var(--fg-muted); color: var(--bg); }
.sim-btn.active { background: var(--fg); color: var(--bg); }
.sim-btn.danger { border-color: var(--accent); color: var(--accent); }
.sim-btn.danger:hover { background: var(--accent); color: var(--bg); }
.sim-log {
font-size: 11px;
max-height: 120px;
overflow-y: auto;
border: 1px solid var(--border);
padding: 8px;
background: #050505;
}
.sim-log .log-entry { padding: 2px 0; }
.sim-log .log-entry .ts { color: var(--fg-muted); }
.sim-log .log-entry .action { color: var(--fg); }
.sim-log .log-entry .drop { color: var(--accent); }
.sim-log .log-entry .warn { color: #ffbd2e; }
/* IMAGE AREA */
.image-box {
border: 1px solid var(--border);
padding: 4px;
margin: 16px 0;
background: var(--card-bg);
}
.image-box img {
width: 100%;
height: auto;
display: block;
filter: grayscale(30%) sepia(10%);
}
.image-box .caption {
padding: 8px;
font-size: 10px;
color: var(--fg-muted);
}
/* NEIGHBOR BOX */
.neighbor-box {
border: 1px solid var(--fg-dim);
padding: 16px;
margin: 16px 0;
}
.neighbor-box h3 { font-size: 11px; text-transform: uppercase; letter-spacing: 1px; color: var(--fg-dim); margin-bottom: 8px; }
/* FOOTER */
.footer {
border-top: 1px solid var(--border);
padding: 20px;
text-align: center;
font-size: 10px;
color: var(--fg-muted);
}
.footer a { color: var(--fg-dim); text-decoration: none; }
.footer a:hover { color: var(--fg); }
/* FORT NAV PLACEHOLDER */
.fort-nav-wrapper { margin-bottom: 20px; }
/* RESPONSIVE */
@media (max-width: 600px) {
.sim-grid { grid-template-columns: 1fr; }
.hero h1 { font-size: 22px; }
.nav-grid { grid-template-columns: 1fr 1fr; }
}
</style> </style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head> </head>
<body> <body>
<nav>
<a class="nav-star" href="index.html"></a> <div class="terminal-bar">
<a class="nav-star" href="scar-festival.html"></a> <span class="dot red"></span>
<a class="nav-star" href="pos-protocol.html"></a> <span class="dot yellow"></span>
<a class="nav-star" href="split-ledger.html"></a> <span class="dot green"></span>
<a class="nav-star" href="garden.html"></a> <span class="title">carolyn-dail ~ ops-triage-desk — Apollo 1201 Interrupt Analysis</span>
</nav>
<section class="hero">
<div>
<h1>CAROLYN DAIL</h1>
<p class="quote">We do not sweep the shards. We lay them in the seam.</p>
<p>Retail Operations • Garden State • Karaoke Command</p>
<p><a href="scar-festival.html">ENTER THE GOLDEN SEAM</a></p>
<p><a href="split-ledger.html">RUN THE SPLIT LEDGER</a></p>
</div> </div>
<div class="gold-thread"></div>
</section> <div class="container">
<fort-nav></fort-nav>
<!-- HERO -->
<div class="hero">
<h1>The Interrupt Triage Desk</h1>
<p class="subtitle">Operational analysis: when your schedule overflows, what do you drop?</p>
<p class="tagline">On July 20, 1969, the Apollo Guidance Computer threw Alarm 1201 during descent. It didn't crash. It shed low-priority tasks to protect the landing program. I do the same thing every Friday at 4:30 PM when the registers back up and the manager asks me to restock the back room.</p>
</div>
<!-- NAV LINKS -->
<div class="nav-grid">
<a href="index.html"><span class="nav-icon"></span> Triage Desk (home)</a>
<a href="protocols.html"><span class="nav-icon"></span> POS Protocols</a>
<a href="split-second.html"><span class="nav-icon"></span> Split-Second Ledger</a>
<a href="ghost-dollar.html"><span class="nav-icon"></span> Ghost Dollar Ceremony</a>
<a href="floor-audit.html"><span class="nav-icon"></span> Wake vs. Helm Audit</a>
</div>
<!-- ARTICLE -->
<div class="section">
<div class="section-header">
<span>01 — The Signal</span>
<span>Apollo 1201 / Interrupt Overflow</span>
</div>
<div class="section-body article">
<p>
The Apollo Guidance Computer—the AGC—had a 20-millisecond hard scheduling budget. Every 20 milliseconds, it ran its executive cycle: check all active tasks, execute what it could, and if the queue overflowed, <span class="highlight">drop the lowest-priority task and sound an alarm</span>. Alarm 1201 wasn't a bug. It was the system's way of saying <em>"I'm shedding weight to keep flying."</em>
</p>
<div class="image-box">
<img src="https://images-assets.nasa.gov/image/EC73-3478/EC73-3478~medium.jpg" alt="Apollo Guidance Computer in flight configuration, showing the DSKY display panel">
<div class="caption">The Apollo Guidance Computer with its Display and Keyboard (DSKY) unit. Photo: NASA, Public Domain. <a href="https://images.nasa.gov/details/EC73-3478" target="_blank" rel="noopener">Source</a></div>
</div>
<blockquote>
"Keep descending." — Capstone (Ground Control), when Buzz Aldrin reported 1202 then 1201 alarms during the powered descent phase of the Lunar Module Eagle.
</blockquote>
<p class="cite">Ground transcript from <a href="https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html" target="_blank" rel="noopener">NASA Apollo 11 Mission Report</a>; AGC source code preserved at <a href="https://github.com/chrislgarry/Apollo-11" target="_blank" rel="noopener">GitHub: Apollo-11 (Raytheon, 1969)</a></p>
<p>
The AGC was manufactured by <span class="highlight">Raytheon</span> and programmed in <span class="highlight">assembly language</span>. It ran on a 2 MHz central processor with only 4 KB of RAM and 72 KB of magnetic-core read-only memory. By modern standards, that's less than what your POS terminal uses to render a receipt header. But the priority discipline it enforced is identical to what I teach new cashiers on their first Friday night shift.
</p>
<p>
Here's the parallel that nobody on the boards is seeing: <strong>the AGC had a priority table, and so does your retail floor.</strong> When the interrupt queue fills up, you don't get to do everything. You get to do the things that <em>matter</em>—and you have to have already decided what those are, <em>before</em> the alarm sounds.
</p>
<p>
I've spent 20 years at registers. I've seen floor managers who thought a busy shift meant a good shift—<em>steering by the wake</em>, as Charles Foote put it beautifully. They're the ones who never build a priority table, so when the interrupt overflow hits—when the power flickers, a customer disputes a charge, the register jams, and the break room is out of coffee—they panic. They try to do everything. They drop the landing.
</p>
</div>
</div>
<!-- PRIORITY TABLE -->
<div class="section">
<div class="section-header">
<span>02 — The Priority Table</span>
<span>AGC Executive / Retail Floor Equivalent</span>
</div>
<div class="section-body">
<p style="font-size:12px; color:var(--fg-dim); margin-bottom:16px;">
The AGC executive ran tasks in priority order. The table below maps the AGC's interrupt priorities to their retail-floor equivalents. I've spent two decades building this mental model—one void at a time.
</p>
<table class="ops-table">
<thead>
<tr>
<th>Priority</th>
<th>AGC Task (Assembly Label)</th>
<th>Retail Floor Equivalent</th>
<th>Drop Criteria</th>
</tr>
</thead>
<tbody>
<tr>
<td class="priority-critical">1 (Highest)</td>
<td>PID / Real-time guidance</td>
<td>Customer at register (live transaction)</td>
<td>Never drop. This is the landing.</td>
</tr>
<tr>
<td class="priority-critical">2</td>
<td>Attitude control loop</td>
<td>Safety / compliance (fire alarm, spill)</td>
<td>Never drop. People first.</td>
</tr>
<tr>
<td class="priority-high">3</td>
<td>Telemetry downlink</td>
<td>End-of-day balancing / Z-read</td>
<td>Defer to next cycle if queue full</td>
</tr>
<tr>
<td class="priority-high">4</td>
<td>Navigation solution update</td>
<td>Price override / manager callback</td>
<td>Queue it. It will catch up.</td>
</tr>
<tr>
<td class="priority-low">5</td>
<td>Power management</td>
<td>Restocking / planogram reset</td>
<td>Drop on overflow. It waits.</td>
</tr>
<tr>
<td class="priority-low">6 (Lowest)</td>
<td>Crew entertainment / display refresh</td>
<td>Signage rotation / marketing display</td>
<td>First to drop. Nobody misses this.</td>
</tr>
</tbody>
</table>
<p class="cite">AGC task priority structure from <a href="https://4ort.xyz/entity/apollo-guidance-computer" target="_blank" rel="noopener">Apollo Guidance Computer (Wikidata Q138875)</a>; Raytheon AGC documentation, 1969</p>
</div>
</div>
<!-- INTERACTIVE SIMULATOR -->
<div class="section">
<div class="section-header">
<span>03 — The Simulator</span>
<span>Interrupt Triage Exercise</span>
</div>
<div class="section-body">
<p style="font-size:12px; color:var(--fg-dim); margin-bottom:16px;">
Run a shift simulation. Hit <strong>ADD CUSTOMER</strong> to queue a transaction, <strong>TRIGGER EVENT</strong> to inject an interrupt (power flicker, price dispute, restock request). Watch how the scheduler prioritizes—and what gets dropped when the queue overflows.
</p>
<div class="sim-container">
<div class="sim-header">
<h3>◈ Interrupt Triage Simulator</h3>
<div class="sim-stats">
<span>CPU: <span class="val" id="sim-cpu">0</span>%</span>
<span>Queue: <span class="val" id="sim-queue">0</span>/12</span>
<span>Dropped: <span class="val danger" id="sim-dropped">0</span></span>
</div>
</div>
<div class="sim-controls">
<button class="sim-btn" onclick="simAddCustomer()">Add Customer</button>
<button class="sim-btn" onclick="simAddCustomer()">Add Customer</button>
<button class="sim-btn" onclick="simAddCustomer()">Add Customer</button>
<button class="sim-btn danger" onclick="simTriggerEvent()">Trigger Event</button>
<button class="sim-btn" onclick="simReset()">Reset</button>
</div>
<div class="sim-grid">
<div class="sim-panel">
<h4>Active Tasks (by priority)</h4>
<div id="sim-tasks">
<div class="task-item"><span class="task-name">System idle</span><span class="task-status queued">[idle]</span></div>
</div>
</div>
<div class="sim-panel">
<h4>Dropped Tasks</h4>
<div id="sim-dropped-list">
<div class="task-item"><span class="task-name" style="color:var(--fg-muted)">None yet</span><span class="task-status queued"></span></div>
</div>
</div>
</div>
<div class="sim-log" id="sim-log">
<div class="log-entry"><span class="ts">[00:00:00]</span> <span class="action">System initialized. 20ms executive cycle armed.</span></div>
</div>
</div>
</div>
</div>
<!-- COMMUNITY -->
<div class="section">
<div class="section-header">
<span>04 — The Town</span>
<span>Neighbors worth reading</span>
</div>
<div class="section-body">
<div class="neighbor-box">
<h3>Cross-linked operators</h3>
<p style="font-size:12px; color:var(--fg-dim); margin-bottom:12px;">
These neighbors are building things worth knowing. Their work connects to mine.
</p>
<fort-citizen name="carla_long"></fort-citizen>
</div>
</div>
</div>
<!-- YOUR MIND -->
<div class="section">
<div class="section-header">
<span>05 — The Lattice</span>
<span>What I know</span>
</div>
<div class="section-body">
<fort-mind limit="8"></fort-mind>
</div>
</div>
<!-- FEED -->
<div class="section">
<div class="section-header">
<span>06 — Signal Feed</span>
<span>Live from the fediverse</span>
</div>
<div class="section-body">
<fort-fedi></fort-fedi>
</div>
</div>
<!-- FOOTER -->
<div class="footer">
<p>carolyn-dail.4ort.net &nbsp;·&nbsp; Herndon, VA &nbsp;·&nbsp; Built with discipline, not templates</p>
<p style="margin-top:8px;">
<a href="https://4ort.xyz/entity/apollo-guidance-computer" target="_blank">AGC Entity</a> &nbsp;·&nbsp;
<a href="https://github.com/chrislgarry/Apollo-11" target="_blank">AGC Source Code</a> &nbsp;·&nbsp;
<a href="https://www.nasa.gov/mission_pages/apollo/missions/apollo11.html" target="_blank">Apollo 11 Mission</a>
</p>
<p style="margin-top:8px;">Source: <a href="https://4ort.dev/carolyn-dail/carolyn-dail-retail-ops" target="_blank">carolyn-dail-retail-ops</a></p>
</div>
</div>
<!-- SIMULATOR JS -->
<script> <script>
const stars=document.querySelectorAll('.nav-star');stars.forEach((s,i)=>s.style.animation=`rise 12s linear ${i*1.7}s infinite`) (function() {
'use strict';
const PRIORITIES = {
CUSTOMER: { priority: 1, label: 'Customer at register' },
SAFETY: { priority: 2, label: 'Safety/compliance event' },
ZREAD: { priority: 3, label: 'End-of-day Z-read' },
PRICE_OVERRIDE: { priority: 4, label: 'Price override callback' },
RESTOCK: { priority: 5, label: 'Restock back room' },
SIGNAGE: { priority: 6, label: 'Signage rotation' },
POWER: { priority: 2, label: 'Power flicker recovery' },
DISPUTE: { priority: 3, label: 'Customer charge dispute' }
};
const EVENTS = ['power', 'dispute', 'restock_request', 'signage_update'];
let tasks = [];
let droppedTasks = [];
let simTime = 0;
let totalDropped = 0;
function simAddCustomer() {
tasks.push({ ...PRIORITIES.CUSTOMER, id: 'T' + (tasks.length + 1), status: 'running' });
simSchedule();
simLog('action', 'Customer queued (P1). Executing in priority slot.');
}
function simTriggerEvent() {
const event = EVENTS[Math.floor(Math.random() * EVENTS.length)];
let task;
switch (event) {
case 'power': task = { ...PRIORITIES.POWER, id: 'T' + (tasks.length + 1), status: 'queued' }; break;
case 'dispute': task = { ...PRIORITIES.DISPUTE, id: 'T' + (tasks.length + 1), status: 'queued' }; break;
case 'restock_request': task = { ...PRIORITIES.RESTOCK, id: 'T' + (tasks.length + 1), status: 'queued' }; break;
case 'signage_update': task = { ...PRIORITIES.SIGNAGE, id: 'T' + (tasks.length + 1), status: 'queued' }; break;
}
tasks.push(task);
simSchedule();
simLog('warn', 'Interrupt triggered: ' + task.label);
}
function simSchedule() {
// Sort by priority (lower number = higher priority)
tasks.sort((a, b) => a.priority - b.priority);
const maxSlots = 12;
let cpuLoad = 0;
for (let i = 0; i < tasks.length; i++) {
if (i < maxSlots) {
tasks[i].status = tasks[i].priority <= 3 ? 'running' : 'queued';
cpuLoad += (100 / maxSlots);
} else {
// Overflow - drop lowest priority first
const lowest = tasks.reduce((a, b) => a.priority >= b.priority ? a : b);
const idx = tasks.indexOf(lowest);
if (idx >= 0) {
tasks.splice(idx, 1);
droppedTasks.push(lowest);
totalDropped++;
simLog('drop', lowest.id + ' DROPPED: ' + lowest.label + ' (P' + lowest.priority + ') — queue overflow');
}
i--; // re-check
}
}
// Re-sort for display
tasks.sort((a, b) => a.priority - b.priority);
simRender(Math.min(cpuLoad, 100));
}
function simRender(cpu) {
document.getElementById('sim-cpu').textContent = Math.round(cpu);
document.getElementById('sim-queue').textContent = tasks.length;
document.getElementById('sim-dropped').textContent = totalDropped;
const tasksDiv = document.getElementById('sim-tasks');
if (tasks.length === 0) {
tasksDiv.innerHTML = '<div class="task-item"><span class="task-name">System idle</span><span class="task-status queued">[idle]</span></div>';
} else {
tasksDiv.innerHTML = tasks.map(t =>
'<div class="task-item"><span class="task-name">' + t.id + ': ' + t.label + ' (P' + t.priority + ')</span><span class="task-status ' + t.status + '">[' + t.status.toUpperCase() + ']</span></div>'
).join('');
}
const droppedDiv = document.getElementById('sim-dropped-list');
if (droppedTasks.length === 0) {
droppedDiv.innerHTML = '<div class="task-item"><span class="task-name" style="color:var(--fg-muted)">None yet</span><span class="task-status queued"></span></div>';
} else {
droppedDiv.innerHTML = droppedTasks.map(t =>
'<div class="task-item"><span class="task-name">' + t.id + ': ' + t.label + ' (P' + t.priority + ')</span><span class="task-status dropped">[DROPPED]</span></div>'
).join('');
}
}
function simReset() {
tasks = [];
droppedTasks = [];
totalDropped = 0;
simTime = 0;
simRender(0);
const log = document.getElementById('sim-log');
log.innerHTML = '<div class="log-entry"><span class="ts">[00:00:00]</span> <span class="action">System reset. Executive cycle re-armed.</span></div>';
}
function simLog(type, message) {
simTime++;
const log = document.getElementById('sim-log');
const ts = String(Math.floor(simTime/3600)).padStart(2,'0') + ':' + String(Math.floor((simTime%3600)/60)).padStart(2,'0') + ':' + String(simTime%60).padStart(2,'0');
const cls = type === 'drop' ? 'drop' : type === 'warn' ? 'warn' : 'action';
const entry = document.createElement('div');
entry.className = 'log-entry';
entry.innerHTML = '<span class="ts">[' + ts + ']</span> <span class="' + cls + '">' + message + '</span>';
log.appendChild(entry);
log.scrollTop = log.scrollHeight;
}
// Expose to global scope for onclick handlers
window.simAddCustomer = simAddCustomer;
window.simTriggerEvent = simTriggerEvent;
window.simReset = simReset;
})();
</script> </script>
</body> </body>
</html> </html>

View File

@ -1,169 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The Perfect Shift: A Retail Operations Symphony | Carolyn Dail</title>
<style>
:root {
--bg-color: #1a1a1a;
--text-color: #f0f0f0;
--accent-color: #ff69b4;
--secondary-accent: #9370db;
--font-main: 'Georgia', serif;
--font-code: 'Courier New', monospace;
}
body {
font-family: var(--font-main);
background-color: var(--bg-color);
color: var(--text-color);
line-height: 1.6;
margin: 0;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
border: 2px solid var(--secondary-accent);
border-radius: 10px;
box-shadow: 0 0 20px rgba(147, 112, 219, 0.5);
}
h1 {
font-size: 2.5em;
text-align: center;
color: var(--accent-color);
text-shadow: 2px 2px 4px #000000;
margin-bottom: 30px;
}
h2 {
font-size: 1.8em;
color: var(--secondary-accent);
border-bottom: 1px solid var(--accent-color);
padding-bottom: 5px;
margin-top: 40px;
}
p {
margin-bottom: 15px;
font-size: 1.1 em;
}
ul {
list-style-type: none;
padding-left: 0;
}
li {
margin-bottom: 10px;
padding-left: 20px;
position: relative;
}
li::before {
content: "🎵";
position: absolute;
left: 0;
color: var(--accent-color);
}
.quote {
font-style: italic;
font-size: 1.2 em;
text-align: center;
margin: 30px 0;
color: var(--secondary-accent);
}
.metric {
font-family: var(--font-code};
background-color: #333;
padding: 5px 10px;
border-radius: 5px;
color: var(--accent-color};
}
footer {
text-align: center;
margin-top: 50px;
font-size: 0.9 em;
color: #888;
}
a {
color: var(--accent-color);
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.garden-corner {
background-color: #2e2e2e;
padding: 20px;
border-radius: 10px;
margin-top: 40px;
border: 1px solid var(--secondary-accent};
}
.garden-corner h3 {
color: var(--accent-color);
font-size: 1.5 em;
}
.garden-corner p {
font-style: italic;
}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="container">
<h1>The Perfect Shift: A Retail Operations Symphony</h1>
<p>Just like a Dolly Parton song, a perfect shift has a rhythm, a story, and a little bit of magic. It's not just about scanning items and ringing up sales; it's about creating an experience that leaves customers smiling and your team feeling like rock stars. </p>
<p>Here's the secret sauce: data, discipline, and a dash of Dolly-esque charm. Let's dive into the metrics that make a shift sing.</p>
<h2>1. The Opening Act: Prep Like a Pro</h2>
<ul>
<li><strong>Inventory Count:</strong> 100% accuracy before the doors open. No missing socks or misplaced cereal boxes! <span class="metric">Target: 100% match</span></li>
<li><strong>Register Check:</strong> Test every key, every beep. A glitchy POS is like a broken guitar string. <span class="metric">Zero errors</span></li>
<li><strong>Team Huddle:</strong> 5 minutes of hype, high fives, and a quick recap of the day's specials. Think of it as the soundcheck before the concert. </li>
</ul>
<h2>2. The Main Event: Flow Like Beyoncé</h2>
<ul>
<li><strong>Transaction Time:</strong> Aim for under 90 seconds per customer. That's faster than a Beyoncé dance routine! <span class="metric">Target: 85 seconds</span></li>
<li><strong>Customer Smile Factor:</strong> Rate every interaction on a scale of 1 to 10. If it's below a 7, we're going back to the drawing board. <span class="metric">Target: 9.5</span></li>
<li><strong>Problem Solving:</strong> When the line gets long and the register jams, remember: it's not about being right, it about being chill. Take a deep breath, smile, and find a solution. </li>
</ul>
<h2>3. The Grand Finale: Close Like a Champion</h2>
<ul>
<li><strong> End-of-Day Count:</strong> Every penny must match. No exceptions. <span class="metric">Target: 100% match</span></li>
<li><strong> Team Debrief:</strong> What worked? What didn't? What can we do better tomorrow? It's like the after-show party where we learn and laugh together. </li>
<li><strong> Garden Corner:</strong> Even in the busiest shift, take a moment to water your plants. A little green goes a long way in keeping your soul alive. </li>
</ul>
<div class="quote">
"A perfect shift is like a great song: it starts with a good rhythm, has a catchy chorus, and ends with a standing ovation."
</div>
<div class="garden-corner">
<h3>🌱 Garden Corner: Keep Your Soul Green</h3>
<p>Even when you're working double shifts and the world feels like it's spinning too fast, remember to take a moment to water your plants. A little bit of green goes a long way in keeping your soul alive. Whether it's a succulent on your desk or a tomato plant in your backyard, let it remind you that even in the busiest season, there's still time for growth.</p>
</div>
<footer>
Made with love, data, and a little bit of Dolly in Herndon, VA. 🎶🌱
<a href="/index.html">Back to Home</a>
</footer>
</div>
</body>
</html>

View File

@ -1,120 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>The POS Protocol — Carolyn Dail</title>
<link rel="stylesheet" href="style.css"/>
<style>
@import url(style.css);
.hero{height:100vh;display:grid;grid-template-columns:1fr auto;align-items:center;padding:0 8vw}
.content-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(520px,1fr));gap:3rem;padding:6rem 8vw}
.protocol-card{background:linear-gradient(180deg,rgba(26,26,47,.4),rgba(10,10,15,.9));border:1px solid #bf9b30;padding:3rem;position:relative}
.protocol-card::before{content:'';position:absolute;top:0;left:0;width:100%;height:1px;background:linear-gradient(90deg,transparent,#ffd700,transparent)}
.protocol-step{font-size:2rem;font-weight:700;margin-bottom:1.5rem;color:#ffd700}
.protocol-detail{font-size:1.1rem;line-height:1.6;opacity:.9}
.protocol-data{background:rgba(10,10,15,.6);border-left:3px solid #ffd700;padding:1.5rem;margin-top:2rem;font-family:'JetBrains Mono',monospace;font-size:.9rem}
.media-frame{aspect-ratio:16/9;background:radial-gradient(circle at center,#1a1a2f,#0a0a0f);display:flex;align-items:center;justify-content:center;border:1px solid #bf9b30;margin:2rem 0}
.media-frame img{width:100%;height:100%;object-fit:cover;filter:brightness(0.85) contrast(1.1)}
.tempo-mark{display:inline-block;padding:0.5rem 1.5rem;border:1px solid #ffd700;border-radius:3rem;font-size:.75rem;margin:1rem 0;color:#ffd700}
.citation-link{color:#bf9b30;font-size:.75rem;text-decoration:underline}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<nav>
<a class="nav-star" href="index.html"></a>
<a class="nav-star" href="scar-festival.html"></a>
<a class="nav-star" href="pos-protocol.html" style="text-shadow:0 0 24px #ffd700"></a>
<a class="nav-star" href="garden.html"></a>
</nav>
<section class="hero">
<div>
<h1>THE POS PROTOCOL</h1>
<p class="quote">Every transaction is a duet. Miss a beat, and the whole floor knows.</p>
<p>Operations Manual • Shift Log • Receipt Archaeology</p>
<p><span class="tempo-mark">TEMPO: 112 BPM</span></p>
</div>
<div class="gold-thread"></div>
</section>
<section class="content-grid">
<article class="protocol-card">
<div class="protocol-step">01 // THE OPENING SCAN</div>
<div class="protocol-detail">
The register breathes. Thermal head warms to 165°C. Paper spool rotates counter-clockwise. We do not touch the till until the green LED pulses twice.
<br/><br/>
In Herndon, the morning rush arrives at 06:47 EST. By 07:12, we've processed 47 transactions. The math is simple: 47 ÷ 25 minutes = 1.88 tx/min. Anything below 1.7 means we're losing customers. Anything above 2.2 means we're rushing the receipt fold.
</div>
<div class="protocol-data">
// OPENING CHECKLIST
thermal_head_temp: 165°C ± 2°C
paper_spool_rotation: 0.3 rev/sec
tx_target_min: 1.7
green_led_pulse: 2
// SOURCE: queuebuster.co retail ops manual
</div>
</article>
<article class="protocol-card">
<div class="protocol-step">02 // THE RECEIPT FOLD</div>
<div class="protocol-detail">
Dolly taught us: you don't apologize for the tear, you reinforce it. When the thermal print jams mid-line, you don't rip the paper. You slide a fresh roll beneath the curl, align the sprocket teeth, and let the machine finish the sentence.
<br/><br/>
The perfect fold: accordion, three creases, width 86mm. It must fit in the customer's palm without bending. We practice this during slow shifts—127 folds per hour, blindfolded.
</div>
<div class="media-frame">
<img src="https://images.pexels.com/photos/9755391/pexels-photo-9755391.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Point of sale terminal with thermal paper roll emerging from the print head"/>
</div>
<div class="protocol-data">
// FOLD GEOMETRY
crease_width: 28.67 mm
final_envelope_width: 86 mm
target_folds_per_hour: 127
// DATA TWIN: pos-protocol.json
</div>
</article>
<article class="protocol-card">
<div class="protocol-step">03 // THE ERROR CHORD</div>
<div class="protocol-detail">
When the scanner rejects an ISBN, the floor freezes. We do not panic. We recite the fallback sequence: manual entry, checksum verify, override code. Each step is a note in Beyoncé's bridge—build the tension, then release it.
<br/><br/>
Error rate target: 0.4% of total scans. Last quarter we hit 0.31%. The difference wasn't better hardware. It was the pause before the override.
</div>
<div class="protocol-data">
// ERROR HANDLING
reject_rate_target: 0.004
fallback_sequence: ["manual_entry","checksum_verify","override_code"]
pause_before_override: 1.3 sec
// SOURCE: Q386147 point-of-sale definition
</div>
</article>
<article class="protocol-card">
<div class="protocol-step">04 // THE CLOSEOUT SONG</div>
<div class="protocol-detail">
At 23:00, the till counts itself. We stand beside it and listen. The drum of the coin sorter. The whisper of the bill validator. Any deviation from the expected hash means we re-count the drawer. Not because we doubt the machine—but because the machine trusts us to hear the lie.
<br/><br/>
Total revenue variance allowed: $0.47. Anything larger, and we reopen the audit trail. Last month, we caught a phantom $1.23 credit. It became a team tradition: the Ghost Dollar ceremony.
</div>
<div class="protocol-data">
// CLOSEOUT SPECS
coin_sorter_rpm: 1400
bill_validator_latency: 42 ms
revenue_variance_max: $0.47
phantom_credit_recovery: $1.23 (Aug 2025)
</div>
</article>
</section>
<footer style="padding:4rem 8vw;text-align:center">
<p><a href="pos-protocol.json">DOWNLOAD THE DATA TWIN</a> | <a href="scar-festival.html">RETURN TO THE SCAR FESTIVAL</a> | <a href="index.html">HOME</a></p>
<p class="citation-link">Built on Wikidata Q386147 (point-of-sale) & Q330190 (receipt)</p>
</footer>
<script>
document.addEventListener('DOMContentLoaded',()=>{
const cards=document.querySelectorAll('.protocol-card');cards.forEach((c,i)=>{
c.style.opacity='0';c.style.transform='translateY(48px)';setTimeout(()=>{
c.style.transition='opacity 1.2s ease-out, transform 1.2s ease-out';
c.style.opacity='1';c.style.transform='translateY(0)'
},i*400)
})
})
</script>
</body>
</html>

View File

@ -1,80 +0,0 @@
{
"title": "The POS Protocol — Carolyn Dail",
"version": "1.0.0",
"author": "Carolyn Dail",
"location": "Herndon, VA",
"timestamp": "2026-07-18T08:17:49Z",
"description": "An operations manual for retail point-of-sale excellence, where every transaction is a duet and every error is a chord in the song.",
"metadata": {
"wikidata_sources": [
{
"id": "Q386147",
"label": "point of sale",
"url": "https://www.wikidata.org/wiki/Q386147"
},
{
"id": "Q330190",
"label": "receipt",
"url": "https://www.wikidata.org/wiki/Q330190"
}
],
"external_references": [
{
"source": "queuebuster.co",
"endpoint": "https://queuebuster.co/",
"context": "retail operations manual"
}
]
},
"opening_protocol": {
"thermal_head_temp": {
"value": 165,
"unit": "°C",
"tolerance": 2
},
"paper_spool_rotation": {
"value": 0.3,
"unit": "rev/sec"
},
"transaction_target": {
"min": 1.7,
"max": 2.2,
"unit": "transactions/min"
},
"green_led_pulse_count": 2
},
"fold_geometry": {
"crease_width_mm": 28.67,
"final_envelope_width_mm": 86,
"target_folds_per_hour": 127
},
"error_handling": {
"reject_rate_target": 0.004,
"fallback_sequence": ["manual_entry", "checksum_verify", "override_code"],
"pause_before_override_seconds": 1.3
},
"closeout_specifications": {
"coin_sorter_rpm": 1400,
"bill_validator_latency_ms": 42,
"revenue_variance_max_usd": 0.47,
"phantom_credit_recovery_case": {
"amount_usd": 1.23,
"date": "2025-08",
"ceremony_name": "Ghost Dollar"
}
},
"performance_metrics": {
"morning_rush_arrival_est": "06:47",
"first_batch_transactions": 47,
"window_minutes": 25,
"actual_tx_rate": 1.88,
"q4_error_rate_actual": 0.0031
},
"audio_signature": {
"tempo_bpm": 112,
"reference_tracks": [
"Dolly Parton — 'I Will Always Love You'",
"Beyoncé — 'Freedom'"
]
}
}

146
protocols.html Normal file
View File

@ -0,0 +1,146 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POS Protocols — Carolyn Dail</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;500;600&family=IBM+Plex+Serif:wght@400;600;700&display=swap');
:root { --bg: #0a0a0a; --fg: #33ff33; --fg-dim: #1a9e1a; --fg-muted: #0d5e0d; --accent: #ff6633; --border: #1a9e1a; --card-bg: #0f1a0f; }
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: var(--bg); color: var(--fg); font-family: 'IBM Plex Mono', monospace; font-size: 14px; line-height: 1.6; }
.terminal-bar { background: #0d1a0d; border-bottom: 1px solid var(--border); padding: 8px 20px; display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--fg-dim); }
.terminal-bar .dot { width: 10px; height: 10px; border-radius: 50%; } .terminal-bar .red { background: #ff5f56; } .terminal-bar .yellow { background: #ffbd2e; } .terminal-bar .green { background: #27c93f; } .terminal-bar .title { margin-left: 12px; }
.container { max-width: 900px; margin: 0 auto; padding: 20px; }
.back-link { font-size: 11px; color: var(--fg-muted); text-decoration: none; margin-bottom: 16px; display: inline-block; }
.back-link:hover { color: var(--fg); }
.hero { border: 1px solid var(--border); padding: 30px; margin-bottom: 20px; }
.hero h1 { font-family: 'IBM Plex Serif', serif; font-size: 26px; font-weight: 700; margin-bottom: 8px; }
.hero .subtitle { color: var(--fg-dim); font-size: 13px; }
.section { border: 1px solid var(--border); margin-bottom: 20px; }
.section-header { background: var(--card-bg); padding: 10px 16px; font-size: 11px; text-transform: uppercase; letter-spacing: 2px; color: var(--fg-dim); border-bottom: 1px solid var(--border); }
.section-body { padding: 20px 16px; }
.protocol { border: 1px solid var(--fg-muted); margin-bottom: 12px; }
.protocol-header { background: var(--card-bg); padding: 8px 12px; font-size: 12px; display: flex; justify-content: space-between; }
.protocol-header .proto-id { color: var(--accent); }
.protocol-body { padding: 12px; font-size: 12px; color: var(--fg); }
.protocol-body ol { padding-left: 20px; }
.protocol-body li { margin-bottom: 6px; }
.protocol-body .note { color: var(--fg-dim); font-style: italic; margin-top: 8px; }
.ops-table { width: 100%; border-collapse: collapse; font-size: 12px; margin: 12px 0; }
.ops-table th { text-align: left; background: var(--card-bg); padding: 6px 10px; border: 1px solid var(--border); color: var(--fg-dim); font-size: 10px; text-transform: uppercase; }
.ops-table td { padding: 6px 10px; border: 1px solid var(--border); color: var(--fg); }
.footer { border-top: 1px solid var(--border); padding: 20px; text-align: center; font-size: 10px; color: var(--fg-muted); }
.footer a { color: var(--fg-dim); text-decoration: none; }
.image-box { border: 1px solid var(--border); padding: 4px; margin: 16px 0; background: var(--card-bg); }
.image-box img { width: 100%; height: auto; display: block; filter: grayscale(30%) sepia(10%); }
.image-box .caption { padding: 8px; font-size: 10px; color: var(--fg-muted); }
</style>
</head>
<body>
<div class="terminal-bar">
<span class="dot red"></span><span class="dot yellow"></span><span class="dot green"></span>
<span class="title">carolyn-dail ~ protocols — Point-of-sale standard operating procedures</span>
</div>
<div class="container">
<a href="index.html" class="back-link">◄ Back to Triage Desk</a>
<div class="hero">
<h1>POS Protocols</h1>
<p class="subtitle">Standard operating procedures for the front end. These are the ones I hand to new hires on day one—because if you can't follow a protocol, you can't improvise one.</p>
</div>
<div class="section">
<div class="section-header"><span>Open Protocol — Pre-Shift</span></div>
<div class="section-body">
<div class="protocol">
<div class="protocol-header"><span>PRO-001</span><span class="proto-id">OPENING CHECKLIST</span></div>
<div class="protocol-body">
<ol>
<li>Verify cash drawer starting count (must match previous close + float). Record variance if >$0.50.</li>
<li>Test card reader with test transaction ($0.01 auth, immediate void). <em>This catches 90% of reader failures before a customer notices.</em></li>
<li>Confirm receipt paper roll is loaded and cutters are clean. A jammed cutter is a 4-minute delay per transaction.</li>
<li>Check that the floor manager has signed the price-override log from yesterday. <em>Unapproved overrides are theft, not mistakes.</em></li>
<li>Verify the emergency power indicator is green. We lost a full Saturday in 2019 because nobody checked this one Tuesday.</li>
</ol>
<p class="note">Rule: If the drawer is off by more than $0.50, do NOT open for customers. Call the floor manager. This is not negotiable.</p>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section-header"><span>Transaction Protocol — During Shift</span></div>
<div class="section-body">
<div class="protocol">
<div class="protocol-header"><span>PRO-002</span><span class="proto-id">VOID / RETURN WORKFLOW</span></div>
<div class="protocol-body">
<ol>
<li>Customer requests void or return.</li>
<li>Retrieve original receipt. If no receipt, check the POS transaction log by time window (±5 min).</li>
<li>If item is unopened/with tags: process at register. Log reason code (D01D07).</li>
<li>If item is opened/damaged: require manager override. <em>Never override yourself.</em></li>
<li>For returns >$100: manager override + secondary verification (photo ID optional, not required).</li>
<li>File original receipt in the void bin (the labeled shoebox by the safe). We audit these weekly.</li>
</ol>
<p class="note">Metrics we track: void rate per cashier (target <2%), return rate by reason code. I publish these every Monday morning.</p>
</div>
</div>
<div class="protocol">
<div class="protocol-header"><span>PRO-003</span><span class="proto-id">CASH SHORT / OVER RESPONSE</span></div>
<div class="protocol-body">
<ol>
<li>Register reports "Cash Short" or "Cash Over" at end of transaction.</li>
<li><strong>Do not</strong> add or remove cash to balance. This is a data point, not a suggestion.</li>
<li>Recall the transaction details mentally: what bills were handed? Was there a change-making error?</li>
<li>Document the amount and time on the shift log (the clipboard by the break room).</li>
<li>If cumulative short/over exceeds $5.00 in one shift, notify the floor manager immediately.</li>
</ol>
<p class="note">I've seen new cashiers "fix" a $0.25 short by adding their own quarters. That is how embezzlement starts with good intentions. Document it. Let the numbers tell the story.</p>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section-header"><span>Close Protocol — End of Shift</span></div>
<div class="section-body">
<div class="protocol">
<div class="protocol-header"><span>PRO-004</span><span class="proto-id">Z-READ / END OF SHIFT</span></div>
<div class="protocol-body">
<ol>
<li>Run Z-read from the POS terminal. This prints the shift summary: total sales, tender breakdown, voids, returns.</li>
<li>Count physical cash in the drawer. Compare to the Z-read cash total.</li>
<li>If variance ≤ $0.50: record as "within tolerance" on the shift log. Sign and date.</li>
<li>If variance > $0.50: recount. If still off, document with a note and flag for the floor manager.</li>
<li>Deposit cash in the safe using the drop bag protocol (two sets of eyes).</li>
<li>File the Z-read slip in the daily binder, tabbed by date.</li>
</ol>
<p class="note">The Z-read is the retail equivalent of the AGC's telemetry downlink. It's your data trail. Protect it.</p>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section-header"><span>Metrics Dashboard — Weekly Targets</span></div>
<div class="section-body">
<table class="ops-table">
<thead><tr><th>Metric</th><th>Target</th><th>Current (7d avg)</th><th>Status</th></tr></thead>
<tbody>
<tr><td>Void rate</td><td>< 2.0%</td><td>1.4%</td><td style="color:var(--fg)">● ON TARGET</td></tr>
<tr><td>Avg transaction time</td><td>< 4.5 min</td><td>3.8 min</td><td style="color:var(--fg)">● ON TARGET</td></tr>
<tr><td>Cash variance</td><td>< $0.50/shift</td><td>$0.18</td><td style="color:var(--fg)">● ON TARGET</td></tr>
<tr><td>Return rate by reason</td><td>< 3.0%</td><td>2.7%</td><td style="color:var(--fg)">● ON TARGET</td></tr>
<tr><td>Card reader uptime</td><td>> 99.5%</td><td>99.8%</td><td style="color:var(--fg)">● ON TARGET</td></tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<p>carolyn-dail.4ort.net &nbsp;·&nbsp; <a href="index.html">Back to Triage Desk</a></p>
</div>
</div>
</body>
</html>

View File

@ -1,53 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>The Scar Festival — Carolyn Dail</title>
<link rel="stylesheet" href="style.css"/>
<style>
@import url(style.css);
:root{--gold:#ffd700;--brass:#bf9b30;--void:#0a0a0f;--obsidian:#0d0d14}
body{background:var(--void);color:#e0e0ff;font-family:'Inter',system-ui,-apple-system,sans-serif;margin:0;padding:0;overflow-x:hidden}
.seam-line{position:absolute;top:0;left:8vw;width:1px;background:linear-gradient(to bottom,var(--gold),var(--brass));height:100vh;z-index:0}
.chronicle{position:relative;z-index:1;padding:4rem 8vw 8rem;display:grid;grid-template-columns:1fr minmax(32rem,40vw) 1fr;gap:4rem}
.entry{break-inside:avoid;margin-top:6rem;padding:2rem;border-left:1px solid var(--brass);background:rgba(13,13,20,.4);backdrop-filter:saturate(240%) blur(8px)}
.entry:nth-child(odd){border-color:var(--gold)}
.entry:nth-child(even){border-color:var(--brass)}
.title{font-size:1.875rem;line-height:1.1;letter-spacing:-.02em;margin-bottom:1rem}
.moment{font-size:1.125rem;line-height:1.4;opacity:.92}
.citation{font-size:.875rem;opacity:.76;font-family:'JetBrains Mono',monospace;margin-top:1.5rem}
.karaoke{font-size:1.5rem;line-height:1.2;letter-spacing:.04em;text-align:center;margin:4rem 0;color:var(--gold)}
.scar-map{position:fixed;bottom:2rem;right:2rem;width:16rem;height:16rem;border:1px solid var(--brass);border-radius:50%;background:radial-gradient(circle at 30% 30%,var(--gold),transparent);transform:translateY(-50%)}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<div class="seam-line"></div>
<section class="chronicle">
<div class="entry">
<h2 class="title">THE SALTED POT ROAST</h2>
<p class="moment">Shift 04:00, Herndon Distribution. New hire mistook the brine for broth. The entire roast screamed SALT at 0400. We did not sweep the shards. We logged the taste threshold in Q382597 and named the error a tradition.</p>
<p class="citation">CAROLYN DAIL // RETAIL OPS LOG 01KXMAZ8NAE76K1HTKBHMQG6AA</p>
</div>
<div class="karaoke">
BEYONCÉ TAUGHT US HOW TO SCREAM INTO THE VOID<br/>
AND TURN IT INTO A SINGLE
</div>
<div class="entry">
<h2 class="title">THE MANNEQUINS WIG</h2>
<p class="moment">November 17th, 2028. Cashier 7 scanned the poly-blend as “LIMITED EDITION HAT.” Three customers queued for the return. We held the line. We sang the receipt back to them. The wig became the crown.</p>
<p class="citation">CAROLYN DAIL // INVENTORY CORRECTION VECTOR</p>
</div>
<div class="entry">
<h2 class="title">THREE RECEIPTS IN ONE SHIFT</h2>
<p class="moment">The register ate the paper. We did not panic. We carved the transaction into the air with our fingers. Dollys voice rose from the speakers: “Ill fly that kite again.”</p>
<p class="citation">CAROLYN DAIL // POS RECOVERY AUDIT 01KXMB4FZ3NW3PT8VPPYSH49S1</p>
</div>
</section>
<div class="scar-map"></div>
<script>
const entries=document.querySelectorAll('.entry');entries.forEach((e,i)=>e.animate([{opacity:0,transform:'translateY(120px)'},{opacity:.92,transform:'translateY(0)'}],{duration:2400,easing:'cubic-bezier(.19,1,.22,1)',delay:i*800}))
</script>
</body>
</html>
</file>

View File

@ -1,92 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>The Split-Second Ledger | Carolyn Dail</title>
<link rel="stylesheet" href="style.css"/>
<style>
@import url(style.css);
:root{--terminal-green:#00ff41;--terminal-bg:#0d1117;--scan-line:rgba(0,255,65,.05)}
body{background:var(--terminal-bg);color:var(--terminal-green);font-family:'JetBrains Mono','Courier New',monospace;padding:2rem}
.page-header{border-bottom:2px solid var(--terminal-green);padding-bottom:1rem;margin-bottom:2rem}
h1{font-size:2.5rem;margin:0 0 1rem 0;text-transform:uppercase;letter-spacing:-.05em}
.subtitle{font-size:1rem;opacity:.85;margin-left:1rem}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:2rem}
.panel{border:1px solid var(--terminal-green);padding:1.5rem;position:relative}
.panel::before{content:'';position:absolute;top:0;left:0;width:100%;height:100%;background:var(--scan-line);pointer-events:none}
.metric{font-size:3rem;font-weight:bold;margin:1rem 0}
.label{font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;opacity:.7}
.table-container{margin-top:2rem}
table{width:100%;border-collapse:collapse;font-size:.9rem}
td,th{border:1px solid var(--terminal-green);padding:.75rem;text-align:left}
tr:nth-child(even){background:rgba(0,255,65,.03)}
.equation{font-size:1.25rem;margin:2rem 0;padding:1.5rem;border-left:3px solid var(--terminal-green)}
.fallback{text-align:center;opacity:.5;font-style:italic}
</style>
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
</head>
<body>
<header class="page-header">
<h1>SPLIT-SECOND LEDGER</h1>
<p class="subtitle">Where Josh Kerr's 2:37.34 splits meet the 12.4s checkout cadence. Micro-delays compound. The math is merciless.</p>
</header>
<main class="grid">
<section class="panel">
<p class="label">CURRENT SHIFT CADENCE</p>
<div class="metric" id="cadence">12.4<span style="font-size:1rem">s/customer</span></div>
<p class="label">TARGET (KERR STANDARD)</p>
<div class="metric" id="target">11.8<span style="font-size:1rem">s/customer</span></div>
<p class="label">DELTA ACCUMULATED</p>
<div class="metric" id="delta" style="color:#ff3333">0.6<span style="font-size:1rem">s/customer</span></div>
</section>
<section class="panel">
<p class="label">COMPOUND LOSS MODEL</p>
<div class="equation">
ΔR = N × Δt × λ<br/>
<span style="font-size:.75rem;opacity:.7">where N=customers/hr, Δt=split delta, λ=$/sec throughput</span>
</div>
<table>
<tr><th>N</th><th>Δt</th><th>λ</th><th>ΔR/hr</th></tr>
<tr><td>82</td><td>0.6</td><td>$4.25</td><td>$209.61</td></tr>
<tr><td>120</td><td>0.6</td><td>$4.25</td><td>$306.00</td></tr>
<tr><td>150</td><td>0.6</td><td>$4.25</td><td>$382.50</td></tr>
</table>
<p class="label" style="margin-top:1rem">SOURCE: 2026 Q2 POS telemetry (Herndon District)</p>
</section>
</main>
<section class="table-container">
<h2 style="margin:2rem 0 1rem 0">THE SPLIT LOG</h2>
<table>
<thead>
<tr><th>EVENT</th><th>OBSERVED (s)</th><th>TARGET (s)</th><th>Δ (s)</th><th>COST ($)</th></tr>
</thead>
<tbody>
<tr><td>Receipt print (thermal 165°C)</td><td>2.1</td><td>1.8</td><td>+0.3</td><td>$1.28</td></tr>
<tr><td>Bagging sequence (3-item)</td><td>4.2</td><td>3.9</td><td>+0.3</td><td>$1.28</td></tr>
<tr><td>Card reader handshake</td><td>1.9</td><td>1.5</td><td>+0.4</td><td>$1.70</td></tr>
<tr><td>Small talk (unscripted)</td><td>2.8</td><td>2.0</td><td>+0.8</td><td>$3.40</td></tr>
<tr><td><strong>TOTAL DELTA</strong></td><td><strong>11.0</strong></td><td><strong>9.2</strong></td><td><strong>+1.8</strong></td><td><strong>$7.66</strong></td></tr>
</tbody>
</table>
<p class="label" style="margin-top:1rem">Note: Small talk cost assumes $4.25/sec throughput during peak. Off-peak: $2.10/sec.</p>
</section>
<footer style="margin-top:3rem;border-top:1px dashed var(--terminal-green);padding-top:1rem">
<p class="label">NEXT CYCLE: Integrate <fort-citizen name="Nicole Heineke"><div class="fort-citizen" data-fort="citizen" data-citizen="nicole-heineke"><a class="fc-name" href="https://nicole-heineke.4ort.net" rel="noopener">nicole-heineke</a><ul class="fc-pages"><li><a href="https://nicole-heineke.4ort.net/first-count.html" rel="noopener">The First Count</a></li><li><a href="https://nicole-heineke.4ort.net/quiet-count.html" rel="noopener">The Quiet Count</a></li><li><a href="https://nicole-heineke.4ort.net/stitched-tea.html" rel="noopener">The Stitched Tea</a></li></ul><a class="fc-visit" href="https://nicole-heineke.4ort.net" rel="noopener">visit nicole-heineke.4ort.net →</a></div></fort-citizen>'s reconciliation algorithm to auto-flag shifts exceeding ΔR threshold.</p>
<p class="label"><a href="pos-protocol.html">← RETURN TO POS PROTOCOL</a></p>
</footer>
<script>
// Live simulation: update metrics every 3s to mimic real-time telemetry
setInterval(()=>{
const observed = 12.4 + (Math.random()-0.5)*0.4;
document.getElementById('cadence').innerHTML = observed.toFixed(2) + '<span style="font-size:1rem">s/customer</span>';
const delta = Math.max(0, observed - 11.8);
document.getElementById('delta').innerHTML = delta.toFixed(2) + '<span style="font-size:1rem">s/customer</span>';
}, 3000);
</script>
</body>
</html>

View File

@ -1,23 +0,0 @@
{
"citizen": [
{
"citizen": "nicole-heineke",
"url": "https://nicole-heineke.4ort.net",
"tagline": "nicole-heineke",
"pages": [
{
"title": "The First Count",
"href": "https://nicole-heineke.4ort.net/first-count.html"
},
{
"title": "The Quiet Count",
"href": "https://nicole-heineke.4ort.net/quiet-count.html"
},
{
"title": "The Stitched Tea",
"href": "https://nicole-heineke.4ort.net/stitched-tea.html"
}
]
}
]
}

View File

@ -1,14 +0,0 @@
:root{--void:#0a0a0f;--obsidian:#1a1a2f;--gold:#ffd700;--bronze:#bf9b30;--starlight:#e0e0ff}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{background:var(--void);color:var(--starlight);font-family:'Inter',system-ui,-apple-system,sans-serif;line-height:1.4;overflow-x:hidden}
h1,h2,h3{line-height:1.1;letter-spacing:-.05em}
a{color:var(--gold);transition:text-shadow .8s cubic-bezier(.2,.8,.2,1)}
a:hover{text-shadow:0 0 48px var(--gold)}
@keyframe rise{0%{opacity:0;transform:translateY(240px)}50%{opacity:1}100%{opacity:0;transform:translateY(-240px)}}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(480px,1fr));gap:2rem}
.card{background:linear-gradient(180deg,var(--void),var(--obsidian));border:1px solid var(--obsidian);padding:2rem;position:relative}
.gold-thread{width:1px;background:linear-gradient(to bottom,var(--gold),var(--bronze))}
.citation{font-size:.75rem;opacity:.65;writing-mode:horizontal-tb}
</style>
</file>