`;
} else {
tooltip.style.opacity = '0';
}
if (activeP) {
canvas.style.cursor = 'pointer';
} else if (!isDragging) {
const onGlobe = Math.hypot(mouse.x - cx, mouse.y - cy) {
// Only start a rotate-drag when the pointer is on/near the globe itself,
// not anywhere in the (much larger) canvas pane.
const rect = canvas.getBoundingClientRect();
const lx = e.clientX - rect.left;
const ly = e.clientY - rect.top;
if (Math.hypot(lx - cx, ly - cy) > sphereRadius * 1.2 * zoomLevel) return;
isDragging = true;
hasDragged = false;
dragDelta = 0;
lastMouse.x = e.clientX;
lastMouse.y = e.clientY;
canvas.classList.add('dragging');
const hint = document.getElementById('drag-hint');
if (hint) {
hint.classList.add('fade-out');
setTimeout(() => hint.remove(), 1200);
}
});
window.addEventListener('pointermove', (e) => {
const rect = canvas.getBoundingClientRect();
mouse.x = e.clientX - rect.left;
mouse.y = e.clientY - rect.top;
if (isDragging) {
const dx = e.clientX - lastMouse.x;
const dy = e.clientY - lastMouse.y;
dragDelta += Math.abs(dx) + Math.abs(dy);
if (dragDelta > 4) hasDragged = true;
targetRotation.y += dx * 0.005;
targetRotation.x += dy * 0.005;
targetRotation.x = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, targetRotation.x));
if (focusedType && focusRot) {
const LIM = 0.12;
targetRotation.x = Math.max(focusRot.x - LIM, Math.min(focusRot.x + LIM, targetRotation.x));
targetRotation.y = Math.max(focusRot.y - LIM, Math.min(focusRot.y + LIM, targetRotation.y));
}
lastMouse.x = e.clientX;
lastMouse.y = e.clientY;
}
});
window.addEventListener('pointerup', (e) => {
isDragging = false;
canvas.classList.remove('dragging');
if (e.pointerType === 'touch') {
mouse.x = -9999;
mouse.y = -9999;
}
});
window.addEventListener('pointercancel', (e) => {
isDragging = false;
canvas.classList.remove('dragging');
if (e.pointerType === 'touch') {
mouse.x = -9999;
mouse.y = -9999;
}
});
function openZoom(type, dotParticle) {
const tpl = document.getElementById('zc-' + type.id);
const card = document.getElementById('zoom-card');
if (!tpl || !card) return;
isZoomed = true;
zoomedType = type;
zoomMode = 'detail';
targetZoom = focusedType ? 1.65 : 1.6;
// The anchor (dot + label) only exists when a map node was clicked.
if (dotParticle) {
const hd = highlightDots.find(({ p }) => p === dotParticle);
clickedDot = { p: dotParticle, color: hd ? hd.color : `rgb(${type.color.join(',')})` };
centerOnDot(dotParticle);
} else {
clickedDot = null;
targetRotation.x = rotation.x;
targetRotation.y = rotation.y;
}
card.innerHTML = tpl.innerHTML;
card.scrollTop = 0;
// Anchor label = the node's specific name from the card, not the category.
if (clickedDot) {
const nm = card.querySelector('.zc-name');
if (nm) clickedDot.name = nm.textContent.trim();
}
promptBar.classList.add('hidden');
zoomNav.classList.add('visible');
}
// Rotate the globe so the given particle lands front and center, slightly above
// the middle of the screen so the detail card never covers it.
function centerOnDot(p) {
const ox = p.ox;
const oy = p.oy;
const oz = p.oz;
const h = Math.sqrt(ox * ox + oz * oz) || 0.0001;
const r = Math.sqrt(ox * ox + oy * oy + oz * oz) || 1;
// Yaw: bring the particle to the front meridian (x = 0, z 10 ? (800 / zDist) * targetZoom : 3;
const yt = (height * 0.36 - cy) / sc;
let rx = Math.asin(Math.max(-1, Math.min(1, yt / r))) - Math.atan2(oy, h);
rx = Math.max(-Math.PI / 2, Math.min(Math.PI / 2, rx));
targetRotation.x = rx;
targetRotation.y = ry;
// Keep the drag clamp anchored on the new orientation.
if (focusedType) focusRot = { x: rx, y: ry };
}
window.closeZoom = function closeZoom() {
// Detail card sitting on top of a focused type steps back to its Top issues card.
if (zoomMode === 'detail' && focusedType) {
openTopIssues(focusedType);
return;
}
const backToMain = zoomMode === 'topissues' && focusedType;
isZoomed = false;
zoomedType = null;
zoomMode = null;
clickedDot = null;
zoomNav.classList.remove('visible');
promptBar.classList.remove('hidden');
if (backToMain) {
clearFocus(true);
} else {
targetZoom = focusedType ? 1.65 : 1.0;
}
};
function openTopIssues(type) {
const tpl = document.getElementById('zct-' + type.id);
const card = document.getElementById('zoom-card');
if (!tpl || !card) return;
isZoomed = true;
zoomedType = type;
card.innerHTML = tpl.innerHTML;
card.scrollTop = 0;
pickHighlightDots(type);
zoomMode = 'topissues';
clickedDot = null;
promptBar.classList.add('hidden');
zoomNav.classList.add('visible');
}
canvas.addEventListener('click', (e) => {
if (hasDragged) {
hasDragged = false;
return;
}
const rect = canvas.getBoundingClientRect();
const mx = e.clientX - rect.left;
const my = e.clientY - rect.top;
// Detail card open: clicking another highlighted dot switches straight to it;
// clicking anywhere else steps back to the Top issues list.
if (isZoomed && zoomMode === 'detail') {
if (focusedType && highlightDots.length) {
let hit = null;
let minD = 26;
highlightDots.forEach(({ p }) => {
if (!p || p.z >= 0 || p.scale = cb.x && mx = cb.y && my t.id === k);
if (ct) openZoom(ct, calloutNodes[k]);
return;
}
}
if (focusedType) {
let hit = null;
let minD = 26;
highlightDots.forEach(({ p }) => {
if (!p || p.z >= 0 || p.scale = 0 || p.scale t.id === closestId);
if (ct) openZoom(ct, closest);
}
});
const INACTIVE_TAG_OPACITY = '0.78';
const CALLOUT_IDS = ['pod', 'operation', 'storage', 'host', 'service'];
// Severity colors for the 5 highlighted dots, matching each type's Top issues card rows.
const HIGHLIGHT_SEVERITY = {
pod: ['#dc2626', '#dc2626', '#f59e0b', '#f59e0b', '#fbbf24'],
operation: ['#ef4444', '#ef4444', '#f59e0b', '#f59e0b', '#3b82f6'],
host: ['#dc2626', '#dc2626', '#f59e0b', '#f59e0b', '#fbbf24'],
storage: ['#f59e0b', '#f59e0b', '#fbbf24', '#fbbf24', '#fbbf24'],
service: ['#dc2626', '#ef4444', '#f59e0b', '#f59e0b', '#fbbf24'],
};
let highlightDots = [];
function hexToRgb(h) {
const n = parseInt(h.slice(1), 16);
return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
}
// Pick 5 particles facing the camera once the cluster is focused, spread so they don't overlap.
function pickHighlightDots(type) {
highlightDots = [];
const pool = particlesByType[type.id] || [];
const colors = HIGHLIGHT_SEVERITY[type.id] || [];
if (!pool.length || !colors.length) return;
const c = getZoneVector(type.zone);
// Sort by alignment with the cluster center: the zone vector rotates to face the camera in focus mode.
const sorted = pool.slice().sort((a, b) => b.gx * c.x + b.gy * c.y + b.gz * c.z - (a.gx * c.x + a.gy * c.y + a.gz * c.z));
const cap = Math.max(colors.length, Math.floor(sorted.length * 0.35));
const step = cap / colors.length;
colors.forEach((col, i) => {
const p = sorted[Math.min(Math.floor(step * i + step / 2), sorted.length - 1)];
if (p) highlightDots.push({ p, color: col });
});
}
const CHIP_TYPES = CALLOUT_IDS.map((id) => TYPES.find((t) => t.id === id)).filter(Boolean);
const CALLOUT_TAGS = [
{ id: 'service', side: 'right' },
{ id: 'operation', side: 'left' },
{ id: 'pod', side: 'right' },
{ id: 'host', side: 'left' },
{ id: 'storage', side: 'right' },
];
const CALLOUT_DIR = {
service: [0.55, -0.55, -0.55],
operation: [-0.55, -0.55, -0.55],
pod: [0.0, 0.0, -1.0],
host: [-0.55, 0.55, -0.55],
storage: [0.55, 0.55, -0.55],
};
const CALLOUT_QUADRANT = {
service: { x: 0.6, y: -0.55 },
operation: { x: -0.6, y: -0.55 },
pod: { x: 0.0, y: 0.0 },
host: { x: -0.6, y: 0.55 },
storage: { x: 0.6, y: 0.55 },
};
let calloutNodes = {};
let calloutBoxes = {};
let ttStyle = null;
function calloutStyle() {
const mob = width clearFocus(true));
bar.appendChild(allBtn);
const div = document.createElement('span');
div.style.cssText = 'width:1px;height:12px;background:rgba(0,0,0,0.08);flex-shrink:0;margin:0 2px;';
bar.appendChild(div);
CHIP_TYPES.forEach((t) => {
const [r, g, b] = t.color;
const btn = document.createElement('button');
btn.setAttribute('data-chip', t.id);
btn.style.cssText = mkChipStyle(r, g, b, false);
btn.textContent = t.label;
btn.addEventListener('mouseover', () => {
if (focusedType && focusedType.id === t.id) return;
btn.style.background = `rgba(${r},${g},${b},0.13)`;
});
btn.addEventListener('mouseout', () => {
if (focusedType && focusedType.id === t.id) return;
btn.style.background = `rgba(${r},${g},${b},0.07)`;
});
btn.addEventListener('click', () => toggleChipFocus(t));
bar.appendChild(btn);
});
}
function resetChipStyles() {
document.querySelectorAll('[data-chip]').forEach((b) => {
const tid = b.getAttribute('data-chip');
if (tid === '__all__') {
b.style.cssText = mkAllStyle(false);
b.textContent = 'All';
return;
}
const t2 = TYPES.find((x) => x.id === tid);
if (!t2) return;
const [r, g, b2] = t2.color;
b.style.cssText = mkChipStyle(r, g, b2, false);
b.style.opacity = '1';
});
}
function toggleChipFocus(type) {
if (!type) return;
if (focusedType && focusedType.id === type.id) {
clearFocus(true);
return;
}
focusedType = type;
targetGroupProgress = 1.0;
targetZoom = 1.65;
switch (type.zone) {
case 'right':
targetRotation.y = -Math.PI / 2;
targetRotation.x = 0;
break;
case 'left':
targetRotation.y = Math.PI / 2;
targetRotation.x = 0;
break;
case 'top':
targetRotation.x = Math.PI / 2;
targetRotation.y = 0;
break;
case 'bottom':
targetRotation.x = -Math.PI / 2;
targetRotation.y = 0;
break;
}
focusRot = { x: targetRotation.x, y: targetRotation.y };
resetChipStyles();
const [r, g, b2] = type.color;
document.querySelectorAll(`[data-chip="${type.id}"]`).forEach((btn) => {
btn.style.cssText = mkChipStyle(r, g, b2, true);
btn.style.opacity = '1';
btn.textContent = type.label;
});
document.querySelectorAll('[data-chip]').forEach((b) => {
if (b.getAttribute('data-chip') !== type.id && b.getAttribute('data-chip') !== '__all__') {
b.style.opacity = INACTIVE_TAG_OPACITY;
}
});
updateSidebarChips();
openTopIssues(type);
}
window.sidebarClick = function sidebarClick(id) {
const t = TYPES.find((x) => x.id === id);
if (!t) return;
// Always open from the sidebar: re-clicking the focused type reopens its list instead of defocusing.
if (focusedType && focusedType.id === t.id) {
openTopIssues(t);
return;
}
toggleChipFocus(t);
};
function updateSidebarChips() {
document.querySelectorAll('[data-sidebar-chip]').forEach((row) => {
const tid = row.getAttribute('data-sidebar-chip');
const t = TYPES.find((x) => x.id === tid);
const isClickable = CALLOUT_IDS.includes(tid);
const icon = row.querySelector('svg');
const label = row.querySelector('span.font-medium');
const count = row.querySelector('span.tabular-nums');
const isActive = focusedType && focusedType.id === tid;
if (isClickable && t) {
const [r, g, b] = t.color;
if (icon) icon.style.color = `rgb(${r},${g},${b})`;
row.style.background = isActive ? `rgba(${r},${g},${b},0.08)` : '';
row.style.opacity = !focusedType || isActive ? '1' : INACTIVE_TAG_OPACITY;
if (label) label.style.color = isActive ? `rgb(${r},${g},${b})` : '';
if (count) count.style.color = isActive ? `rgb(${r},${g},${b})` : '';
} else {
if (icon) icon.style.color = '';
if (label) label.style.color = '';
if (count) count.style.color = '';
row.style.background = '';
row.style.opacity = '0.5';
}
});
const selectAll = document.querySelector('[data-sidebar-select-all]');
if (selectAll) selectAll.style.opacity = focusedType ? INACTIVE_TAG_OPACITY : '1';
}
window.clearFocus = function clearFocus(resetOrb) {
focusedType = null;
focusRot = null;
clickedDot = null;
highlightDots = [];
if (resetOrb) {
targetGroupProgress = 0;
targetZoom = 1.0;
targetRotation.x = 0.2;
targetRotation.y = 0.4;
}
resetChipStyles();
updateSidebarChips();
const a = document.querySelector('[data-chip="__all__"]');
if (a) {
a.style.cssText = mkAllStyle(true);
a.textContent = 'All';
}
if (isZoomed) window.closeZoom();
};
const SUGGESTIONS = [
{ bold: 'api-gateway', rest: " is experiencing a Sev-1 outage. What's going on?" },
{ bold: 'What are', rest: ' the top alerts the Payments team needs to dig into?' },
{ bold: 'We just deployed', rest: ' checkout-api v4.2.1 to NYC1. Is it safe to roll out to other regions?' },
{ bold: 'What are', rest: ' the upstream and downstream dependencies of the Distributed Auth Engine?' },
];
function buildSuggestions() {
const panel = document.getElementById('suggestions-panel');
if (!panel) return;
panel.innerHTML = SUGGESTIONS.map(
(s, i) => `
${s.bold}${s.rest}
`,
).join('');
}
const AI_RESPONSES = [
{
loadingLabel: 'Analyzing API Gateway outage…',
get html() {
const n = document.getElementById('trv-q1-tpl');
return n ? n.innerHTML : '';
},
},
{
loadingLabel: 'Scanning Payments team alerts…',
get html() {
const n = document.getElementById('trv-q2-tpl');
return n ? n.innerHTML : '';
},
},
{
loadingLabel: 'Checking deploy safety for NYC1…',
get html() {
const n = document.getElementById('trv-q3-tpl');
return n ? n.innerHTML : '';
},
},
{
loadingLabel: 'Mapping service dependencies…',
get html() {
const n = document.getElementById('trv-q4-tpl');
return n ? n.innerHTML : '';
},
},
];
let aiTypingTimers = [];
function clearAiTimers() {
aiTypingTimers.forEach((t) => clearTimeout(t));
aiTypingTimers = [];
}
window.pickSuggestion = function pickSuggestion(i) {
const s = SUGGESTIONS[i];
const inp = document.getElementById('main-search');
if (inp) inp.value = s.bold + s.rest;
hideSuggestions();
startAiResponse(i);
};
function showSuggestions() {
const panel = document.getElementById('suggestions-panel');
if (panel) panel.style.display = 'block';
}
function hideSuggestions() {
const panel = document.getElementById('suggestions-panel');
if (panel) panel.style.display = 'none';
}
function ensureAiPanel() {
let panel = document.getElementById('ai-response-panel');
if (panel) {
if (panel._aiRemoveTimer) {
clearTimeout(panel._aiRemoveTimer);
panel._aiRemoveTimer = null;
}
panel.style.opacity = '1';
panel.style.transform = 'translateY(0)';
return panel;
}
const bar = document.getElementById('prompt-bar');
panel = document.createElement('div');
panel.id = 'ai-response-panel';
panel.style.cssText = "position:absolute;bottom:calc(100% + 8px);left:0;right:0;max-height:45vh;overflow:auto;overflow-x:hidden;background:white;border-radius:16px;border:1px solid rgba(0,0,0,0.07);box-shadow:0 12px 40px rgba(0,0,0,0.12);font-family:'Host Grotesk',sans-serif;z-index:60;transition:opacity .2s ease, transform .2s ease;opacity:0;transform:translateY(6px);pointer-events:auto;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;";
bar.querySelector('.w-full.relative').appendChild(panel);
requestAnimationFrame(() => {
panel.style.opacity = '1';
panel.style.transform = 'translateY(0)';
});
return panel;
}
function startAiResponse(idx) {
clearAiTimers();
const resp = AI_RESPONSES[idx];
const panel = ensureAiPanel();
panel.innerHTML = `
Analysis · analyzing…
Shared on Slack
`;
if (!document.getElementById('ai-kf')) {
const st = document.createElement('style');
st.id = 'ai-kf';
st.textContent = '@keyframes pulse-dot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(.7)}} @keyframes fadeSlideIn{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}} @keyframes aiStagger{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}} .q1-desktop{display:block} .q1-mobile{display:none} @media(max-width:768px){.q1-desktop{display:none} .q1-mobile{display:block}} #ai-response-panel{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,0.15) transparent} #ai-response-panel::-webkit-scrollbar{width:6px;height:6px} #ai-response-panel::-webkit-scrollbar-track{background:transparent} #ai-response-panel::-webkit-scrollbar-thumb{background:rgba(0,0,0,0.15);border-radius:3px;transition:background .2s ease} #ai-response-panel::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,0.28)} #ai-response-panel *{min-width:0} #ai-response-panel div,#ai-response-panel p{overflow-wrap:anywhere} #ai-response-panel svg{max-width:100%;height:auto} @media(prefers-reduced-motion:reduce){#ai-body *{animation:none !important;animation-delay:0ms !important}}';
document.head.appendChild(st);
}
const lbl = panel.querySelector('#ai-status-label');
if (lbl) lbl.innerHTML = `Analysis · ${resp.loadingLabel || 'analyzing…'}`;
const t = setTimeout(() => {
const body = panel.querySelector('#ai-body');
if (body) {
body.innerHTML = resp.html || '';
requestAnimationFrame(() => {
const apply = (parent, base) => {
const kids = Array.from(parent.children).filter((el) => el.tagName !== 'STYLE');
kids.forEach((el, i) => {
el.style.animation = 'aiStagger .35s cubic-bezier(.2,.7,.3,1) both';
el.style.animationDelay = base + i * 55 + 'ms';
});
return kids;
};
const top = apply(body, 0);
if (top.length === 1 && top[0].children.length > 1) {
apply(top[0], 90);
}
});
}
const dot = document.getElementById('ai-status-dot');
const lbl2 = document.getElementById('ai-status-label');
if (dot) {
dot.style.animation = 'none';
dot.style.background = '#22c55e';
}
if (lbl2) lbl2.innerHTML = 'Analysis · done';
}, 1400);
aiTypingTimers.push(t);
}
window.dismissAiResponse = function dismissAiResponse() {
clearAiTimers();
const panel = document.getElementById('ai-response-panel');
if (!panel) return;
panel.style.opacity = '0';
panel.style.transform = 'translateY(6px)';
panel._aiRemoveTimer = setTimeout(() => panel.remove(), 200);
const inp = document.getElementById('main-search');
if (inp) inp.value = '';
};
function syncInputMobile() {
const inp = document.getElementById('main-search');
if (!inp) return;
if (window.matchMedia('(max-width: 768px)').matches) {
inp.setAttribute('readonly', '');
inp.setAttribute('inputmode', 'none');
} else {
inp.removeAttribute('readonly');
inp.removeAttribute('inputmode');
}
}
setTimeout(() => {
const inp = document.getElementById('main-search');
if (!inp) return;
syncInputMobile();
inp.addEventListener('focus', () => {
buildSuggestions();
showSuggestions();
});
inp.addEventListener('blur', () => {
setTimeout(hideSuggestions, 180);
});
inp.addEventListener('input', () => {
if (inp.value.trim()) hideSuggestions();
else showSuggestions();
if (!inp.value.trim()) dismissAiResponse();
});
}, 200);
document.addEventListener('click', (e) => {
const panel = document.getElementById('ai-response-panel');
if (!panel) return;
if (panel.contains(e.target)) return;
const sg = document.getElementById('suggestions-panel');
if (sg && sg.contains(e.target)) return;
dismissAiResponse();
});
document.addEventListener('keydown', (e) => {
if (e.key !== 'Escape') return;
if (document.getElementById('ai-response-panel')) {
dismissAiResponse();
} else if (isZoomed) {
closeZoom();
}
});
window.addEventListener('resize', () => {
resize();
syncInputMobile();
});
buildSprites();
resize();
buildChips();
clearFocus(false);
// Pause rendering when the hero is offscreen or the tab is hidden, resume seamlessly.
let rafActive = true;
let rafQueued = false;
let pageVisible = !document.hidden;
let canvasInView = true;
function syncRunning() {
const on = pageVisible && canvasInView;
if (on === rafActive) return;
rafActive = on;
if (on && !rafQueued) {
rafQueued = true;
requestAnimationFrame(tick);
}
}
if ('IntersectionObserver' in window) {
new IntersectionObserver((entries) => {
canvasInView = entries[0].isIntersecting;
syncRunning();
}).observe(canvas);
}
document.addEventListener('visibilitychange', () => {
pageVisible = !document.hidden;
syncRunning();
});
tick();
Root cause
api-gateway is dropping 47% of requests because its connection pool to auth-service is exhausted. auth-service P99 latency jumped from 45ms to 4.2s at 14:06 UTC, holding gateway threads open until they time out. Whether this is auth-service itself or its dependencies needs a check on the identity-provider call chain.
Request analysisapi-gateway · Sev-1
Client
traffic
↓
api-gateway
47% requests dropped · pool exhausted
↓ P99 4.2s
auth-service
slow · originating · baseline 45ms
Fans out to 5 calls
validateJWT.v2
healthy · 12ms
readSessionCache.v1
healthy · 4ms
readPermissions.v3
healthy · 18ms
resolveIdentity.v2
slow · P99 4.1s
auditLog.v1
healthy · 6ms
↓ resolveIdentity.v2 depends on
identity-provider
.internal:8443 · timeout suspected
Healthy callFailing pathOriginating slow service
Top alerts · Payments team
5 alerts · 1 critical · 1 high · 1 medium · 1 low · 1 noisy
last 24h
Criticalcheckout-api down
14:08 UTC
Rolled back to v4.2.0 → 21 of 64 pods recovered, ETA full recovery 4 min
HighLatency spike on payment-processor
13:54 UTC
Engaged circuit breaker → rerouted to fallback, vendor confirmed degraded
MediumHigh response time on subscription-billing
14:11 UTC
Merged into payment-processor alert → same root cause, no separate action
LowMemory pressure on refund-service
12:30 UTC
Suppressed page → within tolerance, monitoring · re-alert if growth > 5%/hr
There are three separate but related issues blocking deployments right now.
1Production TimescaleDB destroyed
prod
PR #2092 merged ~17:26 UTC deleted values-iac-prod.yaml. ArgoCD reconciliation at ~18:22 UTC failed helm template and auto-pruned all 8 resources in timescale-db, destroying the CNPG cluster (3 instances). EBS volumes lost via cascading PVC deletion. #inci-2697 opened ~18:37 UTC.
2SaaS staging crash-looping
staging
Staging pods can't connect to the DB at startup. Karim flagged prisma.engine.errors.EngineConnectionError at ~22:16 UTC; Kyle confirmed staging timescale-db pods restarted ~30 min prior. Pods crash before serving traffic, so the fix can't deploy.
3Missing DB column in prod
prod
Since ~22:26 UTC, prod throws asyncpg.exceptions.UndefinedColumnError: column lc.attribute_values does not exist on get_log_patterns_for_entity, likely schema gaps in the rebuilt cluster. appd_metric_paths is also empty.
“We took real customer incidents that used to take our engineers an hour or more to resolve — and Traversal’s agents were identifying root causes in under a minute.“
“We worked with Traversal to build a self-healing system for common web hosting issues like DDoS and disk errors. With 95%+ accuracy, it lets thousands of customers solve problems instantly, cutting downtime and support costs.“
“Instead of the company's engineers responding to incidents across their infrastructure manually, Traversal completes comprehensive RCA in minutes, ingesting 250 billion logs of interest every day.“
Executive at Fortune 100
80%
RCA accuracy across incidents
6,000
Engineering hours saved per year
“For a F&B company, operating at Fortune 500 scale requires intelligent automation beyond traditional monitoring. Traversal’s AI SRE agents cut through this enormous complexity, automatically triaging alerts and surfacing root causes in minutes rather than hours.“
Projected MTTR reduction across evaluated incidents
75%
RCA accuracy across evaluated incidents
2000
senior engineering hours reclaimed per month via Chat with Prod
7 days
from initial deployment to production-ready performance
"[A key part of the] decision was because you have the BYOC product—for us, as a security-first company, that's a big plus. And we don't need to maintain extra context on our end. You handle all of that for us: building the Production World Model™, reading the documentation and other sources."
Head of SRE, Leading Global Crypto Exchange
This architecture powers every core capability of Traversal’s AI SRE
At a top global crypto exchange, Traversal projected 2,000+ senior engineering hours reclaimed per month through Production Support.
Iframe is blocked. Accept cookies to load it.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
By clicking "Accept", you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.