359 lines
12 KiB
HTML
359 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>F1 Velocity Protocol | Jonathan Ryan</title>
|
||
<meta property="og:type" content="website">
|
||
<meta property="og:title" content="F1 Velocity Protocol | Jonathan Ryan">
|
||
<meta property="og:description" content="F1_VELOCITY_PROTOCOL // JONATHAN_RYAN // 2026 F1 Velocity Protocol Translating Andrea Kimi Antonelli">
|
||
<meta property="og:image" content="https://images.pexels.com/photos/29327956/pexels-photo-29327956.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940">
|
||
<meta property="og:url" content="https://jonathan-ryan.4ort.net/f1-velocity.html">
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="description" content="F1_VELOCITY_PROTOCOL // JONATHAN_RYAN // 2026 F1 Velocity Protocol Translating Andrea Kimi Antonelli's 70× velocity spike into DMAIC buffer architecture…">
|
||
<style>
|
||
:root {
|
||
--carbon: #050505;
|
||
--telemetry: #00ff88;
|
||
--burn: #ff4400;
|
||
--ice: #ccffff;
|
||
--shadow: rgba(0, 255, 136, 0.1);
|
||
}
|
||
|
||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||
|
||
body {
|
||
background: var(--carbon);
|
||
color: var(--ice);
|
||
font-family: 'JetBrains Mono', 'SF Mono', Menlo, monospace;
|
||
min-height: 100vh;
|
||
padding: 2rem;
|
||
line-height: 1.5;
|
||
font-size: 0.85rem;
|
||
}
|
||
|
||
.terminal-frame {
|
||
max-width: 1100px;
|
||
margin: 0 auto;
|
||
border: 1px solid var(--telemetry);
|
||
box-shadow: 0 0 60px var(--shadow);
|
||
background: rgba(0, 0, 0, 0.9);
|
||
position: relative;
|
||
}
|
||
|
||
.terminal-header {
|
||
background: var(--telemetry);
|
||
color: var(--carbon);
|
||
padding: 0.5rem 1rem;
|
||
font-weight: 700;
|
||
letter-spacing: 0.15em;
|
||
text-transform: uppercase;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
}
|
||
|
||
.terminal-body {
|
||
padding: 2rem;
|
||
}
|
||
|
||
h1 {
|
||
font-size: clamp(1.5rem, 4vw, 2.5rem);
|
||
letter-spacing: 0.3em;
|
||
text-transform: uppercase;
|
||
color: var(--telemetry);
|
||
margin-bottom: 0.5rem;
|
||
}
|
||
|
||
.subtitle {
|
||
color: var(--burn);
|
||
letter-spacing: 0.2em;
|
||
margin-bottom: 3rem;
|
||
opacity: 0.9;
|
||
}
|
||
|
||
.data-stream {
|
||
border-left: 2px solid var(--telemetry);
|
||
padding-left: 1.5rem;
|
||
margin: 2rem 0;
|
||
font-family: 'Courier New', monospace;
|
||
font-size: 0.75rem;
|
||
line-height: 1.8;
|
||
}
|
||
|
||
.data-stream .label {
|
||
color: var(--telemetry);
|
||
font-weight: 700;
|
||
}
|
||
|
||
.data-stream .value {
|
||
color: var(--ice);
|
||
}
|
||
|
||
.calc-engine {
|
||
background: rgba(0, 255, 136, 0.03);
|
||
border: 1px dashed var(--telemetry);
|
||
padding: 2rem;
|
||
margin: 3rem 0;
|
||
}
|
||
|
||
.input-row {
|
||
display: grid;
|
||
grid-template-columns: 1fr 2fr 1fr;
|
||
gap: 1rem;
|
||
margin-bottom: 1rem;
|
||
align-items: center;
|
||
}
|
||
|
||
.input-label {
|
||
color: var(--telemetry);
|
||
text-transform: uppercase;
|
||
letter-spacing: 0.1em;
|
||
font-size: 0.7rem;
|
||
}
|
||
|
||
input[type="range"] {
|
||
width: 100%;
|
||
accent-color: var(--telemetry);
|
||
background: transparent;
|
||
}
|
||
|
||
.output-display {
|
||
background: var(--carbon);
|
||
border: 1px solid var(--burn);
|
||
padding: 1.5rem;
|
||
margin-top: 2rem;
|
||
font-family: 'Courier New', monospace;
|
||
}
|
||
|
||
.metric-row {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
padding: 0.5rem 0;
|
||
border-bottom: 1px solid rgba(255, 68, 0, 0.2);
|
||
}
|
||
|
||
.metric-label {
|
||
color: var(--burn);
|
||
}
|
||
|
||
.metric-value {
|
||
color: var(--telemetry);
|
||
font-weight: 700;
|
||
}
|
||
|
||
.visual-anchor {
|
||
width: 100%;
|
||
aspect-ratio: 16/9;
|
||
object-fit: cover;
|
||
filter: grayscale(0.8) contrast(1.5) hue-rotate(180deg);
|
||
margin: 3rem 0;
|
||
border: 1px solid var(--telemetry);
|
||
}
|
||
|
||
.dmaic-wave {
|
||
display: grid;
|
||
grid-template-columns: repeat(5, 1fr);
|
||
gap: 1rem;
|
||
margin: 3rem 0;
|
||
}
|
||
|
||
.phase {
|
||
border: 1px solid var(--telemetry);
|
||
padding: 1rem;
|
||
text-align: center;
|
||
}
|
||
|
||
.phase-header {
|
||
color: var(--telemetry);
|
||
font-weight: 700;
|
||
letter-spacing: 0.2em;
|
||
margin-bottom: 0.5rem;
|
||
font-size: 0.7rem;
|
||
}
|
||
|
||
.phase-desc {
|
||
font-size: 0.65rem;
|
||
opacity: 0.7;
|
||
line-height: 1.6;
|
||
}
|
||
|
||
.nav-link {
|
||
color: var(--telemetry);
|
||
text-decoration: none;
|
||
letter-spacing: 0.1em;
|
||
font-size: 0.7rem;
|
||
text-transform: uppercase;
|
||
}
|
||
|
||
.nav-link:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.signature {
|
||
text-align: center;
|
||
margin-top: 4rem;
|
||
font-size: 0.65rem;
|
||
letter-spacing: 0.2em;
|
||
opacity: 0.5;
|
||
text-transform: uppercase;
|
||
}
|
||
</style>
|
||
<script defer src="https://analytics.4ort.xyz/script.js" data-website-id="d3ed927c-888a-4a6c-ae5f-0b1c613ddf5b"></script>
|
||
</head>
|
||
<body>
|
||
<div class="terminal-frame">
|
||
<header class="terminal-header">
|
||
<span>F1_VELOCITY_PROTOCOL</span>
|
||
<span>// JONATHAN_RYAN // 2026</span>
|
||
</header>
|
||
|
||
<main class="terminal-body">
|
||
<h1>F1 Velocity Protocol</h1>
|
||
<div class="subtitle">Translating Andrea Kimi Antonelli's 70× velocity spike into DMAIC buffer architecture</div>
|
||
|
||
<img class="visual-anchor" src="https://images.pexels.com/photos/29327956/pexels-photo-29327956.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=650&w=940" alt="Pit stop telemetry visualization">
|
||
|
||
<section class="data-stream">
|
||
<div><span class="label">TREND_SIGNAL:</span> <span class="value">Andrea Kimi Antonelli → 70.64× normal velocity</span></div>
|
||
<div><span class="label">DOMAIN:</span> <span class="value">2026 Formula One World Championship</span></div>
|
||
<div><span class="label">SOURCE:</span> <span class="value">Q1968 (Formula One) // Wikidata</span></div>
|
||
<div><span class="label">INCEPTION:</span> <span class="value">1950-00-00</span></div>
|
||
<div><span class="label">OPERATOR:</span> <span class="value">Formula One Group</span></div>
|
||
<div><span class="label">ORGANIZER:</span> <span class="value">Fédération Internationale de l'Automobile</span></div>
|
||
<div><span class="label">BUFFER_OBJECTIVE:</span> <span class="value">Compute optimal release window for velocity spikes exceeding 35× baseline</span></div>
|
||
</section>
|
||
|
||
<section class="dmaic-wave">
|
||
<div class="phase">
|
||
<div class="phase-header">DEFINE</div>
|
||
<div class="phase-desc">Velocity spike threshold: 35× normal. Target: Andrea Kimi Antonelli trajectory.</div>
|
||
</div>
|
||
<div class="phase">
|
||
<div class="phase-header">MEASURE</div>
|
||
<div class="phase-desc">Capture telemetry: lap delta, tire degradation, fuel mass per km.</div>
|
||
</div>
|
||
<div class="phase">
|
||
<div class="phase-header">ANALYZE</div>
|
||
<div class="phase-desc">Identify variance root cause: aerodynamic window vs mechanical grip.</div>
|
||
</div>
|
||
<div class="phase">
|
||
<div class="phase-header">IMPROVE</div>
|
||
<div class="phase-desc">Inject buffer: pit stop timing offset by ±12 seconds.</div>
|
||
</div>
|
||
<div class="phase">
|
||
<div class="phase-header">CONTROL</div>
|
||
<div class="phase-desc">Lock protocol: auto-adjust throttle response to velocity variance.</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="calc-engine">
|
||
<div style="margin-bottom: 2rem; color: var(--telemetry); letter-spacing: 0.1em;">// LIVE CALCULATOR</div>
|
||
|
||
<div class="input-row">
|
||
<label class="input-label">MASS (kg)</label>
|
||
<input type="range" id="massSlider" min="798" max="850" value="798" step="1">
|
||
<span id="massValue" style="color: var(--ice)">798</span>
|
||
</div>
|
||
|
||
<div class="input-row">
|
||
<label class="input-label">DRAG_COEFFICIENT</label>
|
||
<input type="range" id="dragSlider" min="0.7" max="1.2" value="0.9" step="0.01">
|
||
<span id="dragValue" style="color: var(--ice)">0.90</span>
|
||
</div>
|
||
|
||
<div class="input-row">
|
||
<label class="input-label">THRUST_MASS_RATIO</label>
|
||
<input type="range" id="thrustSlider" min="1.0" max="5.0" value="2.8" step="0.1">
|
||
<span id="thrustValue" style="color: var(--ice)">2.80</span>
|
||
</div>
|
||
|
||
<div class="input-row">
|
||
<label class="input-label">TIRE_DEGRADATION (°C/km)</label>
|
||
<input type="range" id="tireSlider" min="0.5" max="3.0" value="1.2" step="0.1">
|
||
<span id="tireValue" style="color: var(--ice)">1.20</span>
|
||
</div>
|
||
|
||
<div class="output-display">
|
||
<div class="metric-row">
|
||
<span class="metric-label">OPTIMAL_PIT_WINDOW</span>
|
||
<span class="metric-value" id="pitWindow">CALCULATING...</span>
|
||
</div>
|
||
<div class="metric-row">
|
||
<span class="metric-label">MAX_VELOCITY_SPIKE</span>
|
||
<span class="metric-value" id="maxSpike">CALCULATING...</span>
|
||
</div>
|
||
<div class="metric-row">
|
||
<span class="metric-label">BUFFER_MARGIN</span>
|
||
<span class="metric-value" id="bufferMargin">CALCULATING...</span>
|
||
</div>
|
||
<div class="metric-row">
|
||
<span class="metric-label">COLLISION_PROBABILITY</span>
|
||
<span class="metric-value" id="collisionProb">CALCULATING...</span>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<section class="data-stream">
|
||
<div><span class="label">ARCHITECTURE_NOTE:</span> <span class="value">Same buffer logic that guards lunar ports now maps velocity spikes across Monaco, Monza, Silverstone.</span></div>
|
||
<div><span class="label">CITATION:</span> <span class="value"><a href="https://www.wikidata.org/wiki/Q1968" class="nav-link" target="_blank">Q1968: Formula One (Wikidata)</a></span></div>
|
||
<div><span class="label">NEXT_LAYER:</span> <span class="value">Hyperframe film: "The 70× Spike" — rendering cycle initiated.</span></div>
|
||
</section>
|
||
|
||
<footer class="signature">
|
||
Every velocity spike is a buffer waiting to be named.
|
||
</footer>
|
||
</main>
|
||
</div>
|
||
|
||
<script>
|
||
const sliders = {
|
||
mass: document.getElementById('massSlider'),
|
||
drag: document.getElementById('dragSlider'),
|
||
thrust: document.getElementById('thrustSlider'),
|
||
tire: document.getElementById('tireSlider')
|
||
};
|
||
|
||
const displays = {
|
||
mass: document.getElementById('massValue'),
|
||
drag: document.getElementById('dragValue'),
|
||
thrust: document.getElementById('thrustValue'),
|
||
tire: document.getElementById('tireValue')
|
||
};
|
||
|
||
const outputs = {
|
||
pitWindow: document.getElementById('pitWindow'),
|
||
maxSpike: document.getElementById('maxSpike'),
|
||
bufferMargin: document.getElementById('bufferMargin'),
|
||
collisionProb: document.getElementById('collisionProb')
|
||
};
|
||
|
||
function calculate() {
|
||
const mass = parseFloat(sliders.mass.value);
|
||
const drag = parseFloat(sliders.drag.value);
|
||
const thrust = parseFloat(sliders.thrust.value);
|
||
const tireDegradation = parseFloat(sliders.tire.value);
|
||
|
||
displays.mass.textContent = mass.toFixed(0);
|
||
displays.drag.textContent = drag.toFixed(2);
|
||
displays.thrust.textContent = thrust.toFixed(2);
|
||
displays.tire.textContent = tireDegradation.toFixed(2);
|
||
|
||
const effectiveMass = mass * (1 + tireDegradation / 100);
|
||
const velocityPotential = (thrust * 342.9) / (drag * effectiveMass);
|
||
const optimalPitWindow = Math.floor((velocityPotential * 12.5) / 60);
|
||
const bufferMargin = ((velocityPotential - 35) / velocityPotential * 100).toFixed(2);
|
||
const collisionProbability = ((drag * tireDegradation) / (thrust * 10)).toFixed(4);
|
||
|
||
outputs.pitWindow.textContent = `${optimalPitWindow} LAP ± ${Math.ceil(optimalPitWindow * 0.08)}s`;
|
||
outputs.maxSpike.textContent = `${velocityPotential.toFixed(2)}× BASELINE`;
|
||
outputs.bufferMargin.textContent = `${bufferMargin}%`;
|
||
outputs.collisionProb.textContent = collisionProbability;
|
||
}
|
||
|
||
Object.values(sliders).forEach(s => s.addEventListener('input', calculate));
|
||
calculate();
|
||
</script>
|
||
</body>
|
||
</html>
|