mirror of
https://github.com/Nutlope/hallmark.git
synced 2026-08-14 12:35:33 +02:00
Hallmark was telling good models what to build. This splits it into a floor that binds and a library that offers, and bans the eyebrow outright. The eyebrow. Gate 54 goes from geometry to existence: short inert type before a heading that announces it is banned in every arrangement, and no brief earns it back. The detector inverts from CSS-first to DOM-first, so it now sees flex and block stacks, heads declared inside a media query, class-less headings, and the word "overline". Small type before a heading survives only when it carries a fact, a destination, or an identifier, which keeps captions, field labels, datelines, unit labels and linked chips legal. references/section-entry.md is the replacement: twelve ways into a section, ten of them pointing at material the skill already had. Themes stay themes. A written contract in theme-axes.md says a theme carries material and never a page plan, and all 24 are trimmed to it: 4,070 lines down to 2,861. Lumen loses a mandatory hero apparatus and a fixed section sequence; hum loses 45 lines of global layout rules filed under a theme. Fake brands, invented people and shippable taglines come out. Genre files stop mandating nav and footer archetypes they disagreed with the themes about. Tiers. All 58 gates gain one: 34 carry a Floor clause nothing ships through, 18 are Reflex gates a build with an argument can waive on the record, 6 never block. Fifteen gates split so a real floor stops dragging a taste threshold behind it. Gates 42 and 43 stop ordering a rotation through the catalog and instead ask that the default be named rather than defaulted into. A waiver declares itself in the stamp with guard evidence the linter re-derives; three per artifact, one per gate, Floor never waivable, and an over-cap waiver lets its gate fire so waiving twelve is worse than waiving none. The catalogs stop being a mandatory pick. Step 2 asks for a designed page shape stated in plain words; the named shapes are there when a starting point helps. Anti-repetition moves from "rotate the codes" to "differ from your last three and say how", which constrains sameness without constraining invention. Contradictions. Display line-height had three ranges and now has one owner. The outlier face was capped at two slots by one line and uncapped by the next. Gate 39 hard-coded 44px against finish.md's 32-40px allowance. Gate 14 banned padding animation that floating-nav.md prescribes. Gate 57's theme list had drifted to 20 of 24. F3 and gate 51 fought over overflow-wrap; break-word settles it. Evidence. 201 eyebrows removed across 38 example pages and 32 across the archived test builds, each replaced with a real opening rather than deleted; aggregate failures fell while doing it. The marketing site drops its own section labels and moves hero labels below the lede. A cold build through the revised skill lands 0 FAIL / 0 WARN, names its own structure instead of picking a code, and argues with a Reflex gate rather than waiving it.
111 lines
6.0 KiB
HTML
111 lines
6.0 KiB
HTML
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>Loop — real-time payment-rail observability for fintechs</title>
|
|
<meta name="description" content="See every cross-rail payment in real time. Find the regressed leg, read why, and clear the queue before the SLA fires." />
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist+Mono:wght@400;500&family=Geist:wght@400;500;600&display=swap" />
|
|
<link rel="stylesheet" href="style.css" />
|
|
</head>
|
|
<body>
|
|
<main class="page">
|
|
<header class="masthead">
|
|
<span class="masthead__brand"><span class="dot"></span>loop · v0.7</span>
|
|
<nav class="masthead__nav">
|
|
<a href="#walkthrough">Walkthrough</a>
|
|
<a href="#">Rails</a>
|
|
<a href="#">Pricing</a>
|
|
<a href="#">Docs</a>
|
|
</nav>
|
|
</header>
|
|
|
|
<section class="hero">
|
|
<div class="hero__copy">
|
|
<hr class="hero__mark" />
|
|
<h1 class="hero__head">Real-time payment-rail observability that <em>tells you why.</em></h1>
|
|
<p class="hero__sub">
|
|
Watch every leg of a cross-rail payment in flight. Find the regressed
|
|
hop, read why — in plain text — without grafana, splunk, and a status-page hunt.
|
|
Loop is what your on-call wishes the bank's API gave them.
|
|
</p>
|
|
<div class="hero__cta">
|
|
<a class="btn btn--primary" href="#">Try it free <span aria-hidden="true">→</span></a>
|
|
<a class="btn" href="#">Talk to sales</a>
|
|
</div>
|
|
</div>
|
|
<aside class="hero__panel" aria-label="Sample trace preview">
|
|
<div class="hero__panel-head"><span>payment · 9c3a72ef</span><span>4.21 s</span></div>
|
|
<div class="trace">
|
|
<div class="span"><span class="span__label">api.transfer</span><span class="span__bar"><i style="width:100%"></i></span><span class="span__time">4.21s</span></div>
|
|
<div class="span"><span class="span__label">↳ kyc.verify</span><span class="span__bar"><i style="width:18%"></i></span><span class="span__time">762ms</span></div>
|
|
<div class="span span--err"><span class="span__label">↳ rail.swift</span><span class="span__bar"><i style="width:78%"></i></span><span class="span__time">3.28s</span></div>
|
|
<div class="span span--warn"><span class="span__label"> ↳ fx.spot</span><span class="span__bar"><i style="width:62%"></i></span><span class="span__time">2.71s</span></div>
|
|
<div class="span"><span class="span__label">↳ ledger.write</span><span class="span__bar"><i style="width:6%"></i></span><span class="span__time">240ms</span></div>
|
|
</div>
|
|
</aside>
|
|
</section>
|
|
|
|
<section class="workbench" id="walkthrough">
|
|
<div class="steps">
|
|
<article class="step">
|
|
<p class="step__num">step 01 · open</p>
|
|
<h2 class="step__head">Open the payment, not a dashboard.</h2>
|
|
<p class="step__body">
|
|
Drop a payment ID, an idempotency key, or a five-second time window. Loop
|
|
pulls the legs from your rails and renders them inline — no Grafana hop,
|
|
no link to Splunk, no separate logs window. The payment is the unit of work.
|
|
</p>
|
|
</article>
|
|
|
|
<article class="step">
|
|
<p class="step__num">step 02 · find</p>
|
|
<h2 class="step__head">Find the regressed leg.</h2>
|
|
<p class="step__body">
|
|
Loop ranks legs by <strong>p99 deviation against your rail's seven-day baseline</strong>.
|
|
The first one in the list is almost always the problem. The baseline is
|
|
precomputed every five minutes per rail; you don't set it.
|
|
</p>
|
|
</article>
|
|
|
|
<article class="step">
|
|
<p class="step__num">step 03 · read</p>
|
|
<h2 class="step__head">Read why, in plain text.</h2>
|
|
<p class="step__body">
|
|
Each leg carries an <strong>auto-generated explainer</strong>: which dependency
|
|
regressed, which version of which service, which deploy correlates, and the
|
|
diff between then and now. Plain text, copy-paste ready into a post-mortem.
|
|
</p>
|
|
</article>
|
|
</div>
|
|
|
|
<aside class="pinned" aria-label="Pinned trace panel">
|
|
<header class="pinned__head">
|
|
<span>payment · 9c3a72ef</span>
|
|
<span class="pinned__chip">REGRESSED</span>
|
|
</header>
|
|
<div class="trace">
|
|
<div class="span"><span class="span__label">api.transfer</span><span class="span__bar"><i style="width:100%"></i></span><span class="span__time">4.21s</span></div>
|
|
<div class="span"><span class="span__label">↳ kyc.verify</span><span class="span__bar"><i style="width:18%"></i></span><span class="span__time">762ms</span></div>
|
|
<div class="span span--err"><span class="span__label">↳ rail.swift</span><span class="span__bar"><i style="width:78%"></i></span><span class="span__time">3.28s</span></div>
|
|
<div class="span span--warn"><span class="span__label"> ↳ fx.spot</span><span class="span__bar"><i style="width:62%"></i></span><span class="span__time">2.71s</span></div>
|
|
<div class="span"><span class="span__label">↳ ledger.write</span><span class="span__bar"><i style="width:6%"></i></span><span class="span__time">240ms</span></div>
|
|
</div>
|
|
<p class="pinned__why">
|
|
<strong>WHY:</strong> rail.swift p99 doubled at 14:02 UTC. Correlates with
|
|
counterparty BNYM-N's queue depth crossing 12 k pending. Loop's escalation
|
|
fires automatically; oncall has the diff in their inbox.
|
|
</p>
|
|
</aside>
|
|
</section>
|
|
|
|
<footer class="colophon">
|
|
<span>Loop · v0.7 · made in Lisbon & Berlin</span>
|
|
<span><a href="#">docs</a> · <a href="#">changelog</a> · <a href="#">status</a> · <a href="#">github</a></span>
|
|
</footer>
|
|
</main>
|
|
</body>
|
|
</html>
|