One Deploy.
Everywhere at Once.
The same runtime that's on your laptop runs in every region. No edge build, no replication service to maintain, no multi-region rewrite. Push once, and your backend is live everywhere you want it.
Explore Harper Fabric

';
}
for (let lng = -150; lng
';
}
m.innerHTML = h;
}
function cubeHTML() {
return ''
+ '
';
}
function buildNodes() {
const host = root.querySelector('.hf-nodes');
host.innerHTML = '';
const byId = Object.fromEntries(REGIONS.map(r => [r.id, r]));
const ROOT_DELAY = 0.4, ROOT_DUR = 1.3, CHILD_DUR = 0.95, GEN_STEP = 0.55;
let maxEnd = 0;
REGIONS.forEach(r => {
const p = project(r.lat, r.lng);
const isRoot = r.parent == null;
const par = isRoot ? null : byId[r.parent];
const pp = par ? project(par.lat, par.lng) : null;
let dx = 0, dy = 0;
if (isRoot) { dx = 0; dy = -17; }
else { dx = pp.x - p.x; dy = (pp.y - p.y) * 0.5; }
const dur = isRoot ? ROOT_DUR : CHILD_DUR;
const delay = isRoot ? ROOT_DELAY
: ROOT_DELAY + ROOT_DUR * 0.55 + (r.gen - 1) * GEN_STEP;
const landAt = delay + dur * 0.78;
const shockDel = landAt - 0.05;
const haloDel = landAt + 0.05;
if (delay + dur > maxEnd) maxEnd = delay + dur;
const el = document.createElement('div');
el.className = 'hf-node';
el.style.left = p.x + '%';
el.style.top = p.y + '%';
el.style.setProperty('--hf-dx', dx);
el.style.setProperty('--hf-dy', dy);
el.style.setProperty('--hf-delay', delay + 's');
el.style.setProperty('--hf-dur', dur + 's');
el.style.setProperty('--hf-shock-delay', shockDel + 's');
el.style.setProperty('--hf-halo-delay', haloDel + 's');
el.innerHTML = ''
+ '
'
+ '
'
+ '
' + cubeHTML() + '
';
host.appendChild(el);
});
return maxEnd * 1000 + 200; // total run length in ms (+ tail buffer)
}
buildMap();
buildMeridians();
/* Visibility-driven playback with mid-wave resume.
— totalMs: how long one full cascade run takes (returned by buildNodes).
— origin: virtual perf.now()-style start anchor, shifted forward by
paused-time so `elapsed = now − origin` only counts time spent
actually playing.
— pausedAt: 0 while running, otherwise the perf.now we paused at.
Entering view: if the cascade never ran or already completed, rebuild
(fresh restart). Otherwise resume from where we paused.
Leaving view: if mid-play, capture pause time so the next entry resumes;
drop the hf-play class so the CSS freezes every animation in place. */
let built = false, totalMs = 0, origin = 0, pausedAt = 0;
const elapsed = () => built ? (pausedAt || performance.now()) - origin : Infinity;
const done = () => elapsed() >= totalMs;
function startFresh() {
totalMs = buildNodes();
origin = performance.now();
pausedAt = 0;
built = true;
}
function pause() { if (built && !pausedAt) pausedAt = performance.now(); }
function resume() {
if (!built || !pausedAt) return;
origin += performance.now() - pausedAt;
pausedAt = 0;
}
const io = new IntersectionObserver((entries) => {
for (const e of entries) {
if (e.isIntersecting) {
if (!built || done()) startFresh();
else resume();
root.classList.add('hf-play');
} else {
if (built && !done()) pause();
root.classList.remove('hf-play');
}
}
}, { threshold: 0.25 });
io.observe(root);
})();
Automatic Failover
Geo-distributed replication is a property of the runtime, not a parallel infrastructure project. Workloads stay up across regional failures, and users get fast responses wherever they are without a separate replication tier or sync service.
Deployment Flexibility
The same code runs in managed cloud, at the edge, on infrastructure, and in regulated on-prem environments. Where workloads run becomes a business decision — driven by compliance, latency, or customer needs, not by what your platform supports.
Cost Efficient at Scale
Fewer vendor contracts, fewer services to operate, fewer integrations to maintain. Cost-per-interaction drops as volume rises instead of climbing with it — because one system absorbs the load instead of six each charging for it.