forj builds and tests the pages inside your perimeter; nothing publishes without passing the gate.
{
"accent": "#0A5CFF",
"radius": 12,
"tone": "assured"
}
left: a model with no rules. right: the same hero rebuilt to the brand book of tarn — a fintech invented for this demo — each change signed by the rule that produced it.
L0 · banned: purple-gradient heroL3 · truth: unmapped claim → failL0 · banned: hero-metric, card gridL1 · color.tokens, strategy: restrainedL0 · signature element + L1 atmosphereL3 · claims-ledger#TARN-CL-014the left pane is a quarantined specimen. tarn is fictional; all figures are demo data.
swipe → forj
| capability | testing tools vwo·optimizely | ai builders lovable·bolt |
both jobs · your perimeter frj |
|---|---|---|---|
| builds landing pageswho produces the page itself | no. splits existing pages only | yes. yes, in their cloud | yes. yes, inside your perimeter |
| variants as hypotheseswhat a variant is allowed to change | partly. traffic split, no hypothesis | no. no experiment engine | yes. one declared axis, diff-checked |
| brand as inputwhere the visual rules come from | no. out of scope | partly. model taste, drifts per run | yes. brand.json, every value sourced |
| runs in your perimeterwhere the code and the data sit | partly. cloud, enterprise tiers only | no. vendor cloud only | yes. your infra, your network |
| audit trailwhat compliance can read afterwards | partly. test logs, no artifacts | no. no audit artifacts | yes. gate report + claims ledger |
positioning, not a competitor audit — public materials, august 2026.
contrast, working states, no worn-out fintech patterns.
every value cites a source; gaps become proposals.
brand rules and disclosures never move.
no ledger entry, no number on the page.
if the hero leads with an audited savings figure instead of a testimonial, then application submissions rise, because visitors from paid search arrive primed for numbers.
a change to anything outside the declared axis fails the gate.
| §1 static | brand fidelity — 41/41 values resolve to brand.json | pass |
| §2 static | craft floor — contrast 4.9:1 min · 4 widths · 1.2s LCP | pass |
| §3 critic | first screen — what / why / do, desktop + mobile | pass |
| §4 static+human | truth & compliance — 1 unmapped claim | fail |
|
rule L3.claims.mapped — a figure has no entry in the claims ledger fix add the ledger entry, or cut the figure blocked until brand owner + compliance sign | ||
| §5 diff | vs control — only hero.proof moved · 0 other diff | pass |
demo report · this archive is what an examiner receives
one machine-readable file; every value cites its source.
nothing on screen that isn't sourced.
"this isn't our brand" costs minutes here, weeks later.