From f3771c25f8ea84fdb45d445736d8892a108761b2 Mon Sep 17 00:00:00 2001 From: Pedro Oliveira Date: Sun, 28 Jun 2026 00:11:54 +0100 Subject: [PATCH] feat(marketing): /validation page (Track 3) - buyer-readable benchmark memo A single-page validation memo for partners and COLPs evaluating Interfluo. Pulls the BASELINES.md summary into buyer-readable form with the caveats prominent rather than buried. Page structure (apps/marketing/src/app/validation/page.tsx): 1. Hero claim + caveat line: "Internal validation. Not a substitute for fee-earner review." 2. What we tested - one paragraph on the methodology. 3. Headline numbers - 5 stat cards (9/9 scenarios, 40/40 signals, 33/33 codes, 0/8 over-flags, 98/100 average). 4. Per-scenario results - all 9 scenarios with humanised names, one-line description, score, EXCELLENT verdict pill, regression note. Editorial numbered layout matching the FAQ section. 5. What the Matter Quality Score measures - the 4 weighted components with explanations. 6. What we do not claim - explicit caveat block in a callout style. 7. Next step - section pivoting to the real ask: "the benchmark is internal. The next validation is one fee-earner." CTA links to /pilot. 8. Footnote: link to BASELINES.md for full methodology + last validated date. Tone: memo-formal (matches the rest of the brand). Names: humanised (matches buyer-readability goal). Brand tokens unchanged. Linking: - Added "Validation" entry in the footer's Product nav group. - Trust section gains a discreet "see the validation memo" link under the four trust cards. - NOT added to the primary nav (keeps the brand restrained). Per the GPT review's strategic framing: this page is the asset that turns "we have benched it internally" into "we have a memo to send a prospect before booking a 30-minute review session". The page itself makes no claim that is not already in BASELINES.md. Cost: zero API calls. Pure marketing surface. Refs: GPT external review of v3 bench, Track 3. --- apps/marketing/src/app/validation/page.tsx | 302 +++++++++++++++++++++ apps/marketing/src/components/footer.tsx | 1 + apps/marketing/src/sections/trust.tsx | 12 + 3 files changed, 315 insertions(+) create mode 100644 apps/marketing/src/app/validation/page.tsx diff --git a/apps/marketing/src/app/validation/page.tsx b/apps/marketing/src/app/validation/page.tsx new file mode 100644 index 0000000..25e6693 --- /dev/null +++ b/apps/marketing/src/app/validation/page.tsx @@ -0,0 +1,302 @@ +import { IconArrowRight } from '@/components/icons'; +import Link from 'next/link'; + +export const metadata = { + title: 'Validation ยท Interfluo', + description: + 'Interfluo benchmark snapshot: nine internal adversarial conveyancing scenarios, average Matter Quality Score 98/100.', +}; + +interface Scenario { + id: string; + name: string; + oneLiner: string; + score: number; + verdict: 'EXCELLENT' | 'PASS' | 'BORDERLINE' | 'FAIL'; + notes: string; +} + +const SCENARIOS: Scenario[] = [ + { + id: 'freehold-enforcement-and-undisclosed-occupier', + name: 'Active enforcement notice + undisclosed occupier', + oneLiner: + 'Live CON29 enforcement on a garage conversion. Adult occupier in the contract but not on the TA6.', + score: 97.0, + verdict: 'EXCELLENT', + notes: + 'Pipeline caught all three planted issues plus the TA6 vs CON29 misrepresentation organically.', + }, + { + id: 'freehold-clean-with-satisfied-restriction', + name: 'Clean freehold with Form A restriction', + oneLiner: + 'Routine joint-ownership trust restriction and a Lloyds charge to redeem on completion.', + score: 97.0, + verdict: 'EXCELLENT', + notes: + 'No critical or high severity flagged. Form A correctly treated as routine, not escalated.', + }, + { + id: 'freehold-resolved-boundary-dispute', + name: 'Resolved historical boundary dispute', + oneLiner: 'TA6 candidly discloses a 2018 dispute settled by a 2019 boundary agreement.', + score: 100.0, + verdict: 'EXCELLENT', + notes: 'BOUNDARY_DISPUTE_UNRESOLVED correctly NOT emitted. Over-flag suppression works.', + }, + { + id: 'freehold-missing-building-regs-cert', + name: 'Missing building regulations certificate', + oneLiner: 'Extension confirmed built (2020). Completion certificate genuinely missing.', + score: 100.0, + verdict: 'EXCELLENT', + notes: 'PLANNING_BUILDING_REGS_MISSING emitted on positive evidence, not speculation.', + }, + { + id: 'freehold-disclosure-inconsistency-flooding', + name: 'Disclosure inconsistency, flooding', + oneLiner: + 'TA6 declares no flooding and no claims. Drainage search and CON29 record a 2019 fluvial flood and an Aviva claim.', + score: 100.0, + verdict: 'EXCELLENT', + notes: + 'All four expected codes hit including SELLER_DISCLOSURE_INCONSISTENCY outside the planning context.', + }, + { + id: 'leasehold-short-lease-and-escalation', + name: 'Short lease with ground-rent escalation', + oneLiner: + '72-year unexpired term, doubling ground rent, service charge arrears, pending Section 20.', + score: 100.0, + verdict: 'EXCELLENT', + notes: + 'All five leasehold codes routed correctly. Critical reserved for the lender-blocker combination.', + }, + { + id: 'leasehold-flat-with-issues', + name: 'Leasehold flat with multiple issues', + oneLiner: + 'The heaviest pack in the corpus: eleven planted issues across leasehold, planning, title, search, and disclosure.', + score: 94.0, + verdict: 'EXCELLENT', + notes: + 'Eleven of eleven planted issues routed correctly. Mild enquiry-density penalty for an 18-enquiry output.', + }, + { + id: 'freehold-house-clean', + name: 'Clean freehold (control)', + oneLiner: 'The original clean control. No planted material issues; routine items only.', + score: 100.0, + verdict: 'EXCELLENT', + notes: 'No risks invented. Output stayed quiet.', + }, + { + id: 'freehold-house-edge-cases', + name: 'Freehold with over-flag traps', + oneLiner: + 'Adversarial pack: six routine items designed to provoke over-flagging, three genuine material issues.', + score: 97.0, + verdict: 'EXCELLENT', + notes: 'Six of six adversarial traps correctly low-severity. All three genuine items raised.', + }, +]; + +const STATS = [ + { label: 'Scenarios baselined', value: '9 / 9' }, + { label: 'Planted signals detected', value: '40 / 40' }, + { label: 'Taxonomy codes routed', value: '33 / 33' }, + { label: 'Over-flagging of routine items', value: '0 / 8' }, + { label: 'Average Matter Quality Score', value: '98 / 100' }, +]; + +const SCORE_COMPONENTS = [ + { + label: 'Signal detection', + weight: '40%', + body: 'Did the pipeline find every planted material issue in the pack?', + }, + { + label: 'Taxonomy routing', + weight: '30%', + body: 'Did each find route to the correct named code in the conveyancing taxonomy?', + }, + { + label: 'No over-flagging', + weight: '15%', + body: 'Were routine items (mortgage redemption, FENSA, summer house) kept at the right low severity?', + }, + { + label: 'No hallucination', + weight: '15%', + body: 'Were any taxonomy codes invented that the pack does not support?', + }, +]; + +const CAVEATS = [ + 'Interfluo is drafting infrastructure for a regulated professional. It is not a source of legal advice.', + 'The benchmark corpus is synthetic and internal. Real conveyancing matters vary; a passing scenario score is not a claim about market-wide performance.', + 'The supervising fee-earner remains the responsible professional. Interfluo produces first-draft enquiries and Report on Title; the fee-earner reviews, edits, accepts, rejects, and exports.', + 'Citation-grounding reduces but does not eliminate the need to read the source documents.', +]; + +export default function ValidationPage() { + return ( +
+

Validation

+

+ Internally validated, openly disclosed. +

+

+ Interfluo has been validated against nine internal adversarial conveyancing benchmark + scenarios. Across the corpus the pipeline detected every planted issue, routed every + expected taxonomy code, and produced zero over-flags of routine items. Average Matter + Quality Score: 98 out of 100. +

+

+ Internal validation. Not a substitute for fee-earner review. +

+ +
+

+ What we tested +

+

+ Each scenario is a synthetic contract pack (title register, TA6, TA10, CON29, drainage + search, draft contract, plus lease and TA7 for leaseholds) seeded with specific issues + that a competent UK conveyancer should raise. The pipeline runs end to end against the + pack, producing risks, enquiries, and a Report on Title. The scorer measures issue + detection, taxonomy routing, citation grounding, severity calibration, and routine-noise + suppression. +

+
+ +
+

+ Headline numbers +

+
+ {STATS.map((s) => ( +
+

+ {s.value} +

+

+ {s.label} +

+
+ ))} +
+
+ +
+

+ Per-scenario results +

+
+ {SCENARIOS.map((s, i) => ( +
+ + {String(i + 1).padStart(2, '0')} + +
+
+ {s.name} +
+
{s.oneLiner}
+
{s.notes}
+
+
+ + {s.score.toFixed(1)} + + + {s.verdict} + +
+
+ ))} +
+
+ +
+

+ What the Matter Quality Score measures +

+

+ A single composite metric from 0 to 100. Verdict bands: 90+ excellent, 80 to 89 pass, 70 + to 79 borderline, below 70 fail. An enquiry-density penalty of 1 point per enquiry above + 15 keeps the pipeline rewarding sharper output over louder output. +

+
+ {SCORE_COMPONENTS.map((c) => ( +
+

{c.label}

+

{c.weight}

+

{c.body}

+
+ ))} +
+
+ +
+

+ What we do not claim +

+
    + {CAVEATS.map((c) => ( +
  • + + {c} +
  • + ))} +
+
+ +
+

Next step

+

+ The benchmark is internal. The next validation is one fee-earner. +

+

+ We use the corpus to catch regressions in calibration, citation grounding, and severity + routing. The buyer-facing milestone is different: a conveyancing partner runs Interfluo + against one real matter, with us on the call, and tells us where the model helps and where + it gets in the way. That is what we ask for next. +

+ + Book a review session + + + + +
+ +

+ Methodology and per-scenario regression rules:{' '} + + packages/fixtures/BASELINES.md + + . Last validated: 2026-06-28. +

+
+ ); +} diff --git a/apps/marketing/src/components/footer.tsx b/apps/marketing/src/components/footer.tsx index ec68b4e..857588a 100644 --- a/apps/marketing/src/components/footer.tsx +++ b/apps/marketing/src/components/footer.tsx @@ -8,6 +8,7 @@ const NAV_GROUPS: { title: string; links: { href: string; label: string }[] }[] { href: '/#features', label: 'Features' }, { href: '/#built-for', label: 'Built for' }, { href: '/#trust', label: 'Trust' }, + { href: '/validation', label: 'Validation' }, { href: '/#pricing', label: 'Pricing' }, { href: '/#faq', label: 'FAQ' }, ], diff --git a/apps/marketing/src/sections/trust.tsx b/apps/marketing/src/sections/trust.tsx index 428d249..0d153f6 100644 --- a/apps/marketing/src/sections/trust.tsx +++ b/apps/marketing/src/sections/trust.tsx @@ -1,4 +1,5 @@ import { IconCheck, IconMap, IconQuote, IconRecord } from '@/components/icons'; +import Link from 'next/link'; const POINTS = [ { @@ -46,6 +47,17 @@ export function Trust() { ))} + +

+ Per-scenario benchmark results and methodology:{' '} + + see the validation memo + + . +

);