From 5468fa7a117e33e6e4cf7be3bd94f646bd56e822 Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:31:12 -0700 Subject: [PATCH 01/15] fix(trust): remove Sample archive entries and synthetic-sample copy --- .../src/__tests__/public-site-fixes.test.tsx | 9 --- frontend/src/app/trust/architecture/page.tsx | 4 +- frontend/src/app/trust/page.tsx | 24 ++++---- frontend/src/lib/customer-readiness.ts | 58 ------------------- 4 files changed, 11 insertions(+), 84 deletions(-) diff --git a/frontend/src/__tests__/public-site-fixes.test.tsx b/frontend/src/__tests__/public-site-fixes.test.tsx index c51d61c23..c3980f73b 100644 --- a/frontend/src/__tests__/public-site-fixes.test.tsx +++ b/frontend/src/__tests__/public-site-fixes.test.tsx @@ -4,7 +4,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { PricingCheckoutButton } from '@/components/billing/PricingCheckoutButton'; import { MARKETING_FOOTER_PRODUCT_LINKS } from '@/components/layout/marketing-nav'; import { EmailGate } from '@/components/tools/EmailGate'; -import { ARCHIVE_EXPORT_JOBS } from '@/lib/customer-readiness'; import { fetchWithCsrf } from '@/lib/fetch-with-csrf'; const mocks = vi.hoisted(() => ({ @@ -169,12 +168,4 @@ describe('public site launch-blocker fixes', () => { href: '/case-studies', }); }); - - it('keeps public archive posture dates current for the demo workspace', () => { - for (const job of ARCHIVE_EXPORT_JOBS) { - expect(job.lastRun).not.toContain('2026-03'); - expect(job.nextRun).not.toContain('2026-03'); - expect(job.nextRun).not.toContain('2026-04'); - } - }); }); diff --git a/frontend/src/app/trust/architecture/page.tsx b/frontend/src/app/trust/architecture/page.tsx index fc1a92454..7d97cd8ef 100644 --- a/frontend/src/app/trust/architecture/page.tsx +++ b/frontend/src/app/trust/architecture/page.tsx @@ -336,9 +336,7 @@ export default function ArchitecturePage() {

Verify supported evidence export bundles yourself: drop a supported bundle into{' '} - /verify{' '} - or download a synthetic sample at{' '} - /proof. + /verify.

diff --git a/frontend/src/app/trust/page.tsx b/frontend/src/app/trust/page.tsx index 7dcdcd618..623086758 100644 --- a/frontend/src/app/trust/page.tsx +++ b/frontend/src/app/trust/page.tsx @@ -1,7 +1,6 @@ import type { Metadata } from 'next'; import Link from 'next/link'; import { - ARCHIVE_EXPORT_JOBS, CAPABILITY_REGISTRY, DELIVERY_MODE_LABELS, INTEGRATION_TYPE_LABELS, @@ -344,7 +343,7 @@ export default function TrustCenterPage() {
Verify supported evidence bundles yourself

- Supported evidence export workflows can include SHA-256 manifests for independent verification. Drop a supported bundle into /verify or download a synthetic sample at /proof. + Supported evidence export workflows can include SHA-256 manifests for independent verification. Drop a supported bundle into /verify to check it yourself.

@@ -466,19 +465,16 @@ export default function TrustCenterPage() {

Scheduled exports

- Examples of supported export configurations. Hashing, manifests, run history, and - scheduled delivery depend on the configured workflow and customer agreement. + Hashing, manifests, run history, and scheduled delivery depend on the + configured workflow and customer agreement.

-
- {ARCHIVE_EXPORT_JOBS.map((job) => ( - -
{job.name}
-

- {job.format} · {job.cadence} · {job.destination} -

-
- ))} -
+ +
No data yet
+

+ No public export-job configurations are published. Scheduled exports are + configured per workspace. +

+
Open export jobs → diff --git a/frontend/src/lib/customer-readiness.ts b/frontend/src/lib/customer-readiness.ts index 9cbd77427..673d878ab 100644 --- a/frontend/src/lib/customer-readiness.ts +++ b/frontend/src/lib/customer-readiness.ts @@ -77,19 +77,6 @@ export interface TrustArtifact { href: string; } -export interface ArchiveExportJob { - id: string; - name: string; - format: 'FDA Package' | 'GS1 EPCIS 2.0' | 'Audit Bundle'; - cadence: 'Daily' | 'Weekly' | 'Monthly'; - destination: 'Downloadable bundle' | 'Object storage archive'; - status: 'active' | 'paused'; - lastRun: string; - nextRun: string; - manifestHash: string; - tenantId: string; -} - export interface MappingReviewItem { id: string; source: string; @@ -396,51 +383,6 @@ export const SUPPORT_CHANNELS: SupportChannel[] = [ }, ]; -// Sample export-job configurations rendered on the Trust Center page as -// examples of supported configurations - NOT live production telemetry. -// Timestamps and manifest hashes below are placeholder strings and must -// not be presented as real run data; the Trust Center renderer hides -// timestamps for this reason. If you add a renderer that surfaces -// `lastRun` / `nextRun` / `manifestHash`, label the area "Sample data". -export const ARCHIVE_EXPORT_JOBS: ArchiveExportJob[] = [ - { - id: 'job_fda_daily', - name: 'Sample: Daily FDA package archive', - format: 'FDA Package', - cadence: 'Daily', - destination: 'Object storage archive', - status: 'active', - lastRun: 'sample', - nextRun: 'sample', - manifestHash: 'sha256:sample-…', - tenantId: 'tenant_demo_001', - }, - { - id: 'job_epcis_weekly', - name: 'Sample: Weekly EPCIS outbound bundle', - format: 'GS1 EPCIS 2.0', - cadence: 'Weekly', - destination: 'Downloadable bundle', - status: 'active', - lastRun: 'sample', - nextRun: 'sample', - manifestHash: 'sha256:sample-…', - tenantId: 'tenant_demo_001', - }, - { - id: 'job_audit_monthly', - name: 'Sample: Monthly audit evidence bundle', - format: 'Audit Bundle', - cadence: 'Monthly', - destination: 'Object storage archive', - status: 'active', - lastRun: 'sample', - nextRun: 'sample', - manifestHash: 'sha256:sample-…', - tenantId: 'tenant_demo_001', - }, -]; - export const MAPPING_REVIEW_ITEMS: MappingReviewItem[] = [ { id: 'map_po_001', From 942ede19f56e3626a0eabd0363f3ebb3da465db9 Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:32:42 -0700 Subject: [PATCH 02/15] fix(home): remove synthetic demo workspace block --- .../src/__tests__/pages/homepage.test.tsx | 22 +- frontend/src/app/page.tsx | 217 +++--------------- 2 files changed, 40 insertions(+), 199 deletions(-) diff --git a/frontend/src/__tests__/pages/homepage.test.tsx b/frontend/src/__tests__/pages/homepage.test.tsx index a0044f6fa..e7d796469 100644 --- a/frontend/src/__tests__/pages/homepage.test.tsx +++ b/frontend/src/__tests__/pages/homepage.test.tsx @@ -17,22 +17,20 @@ describe("HomePage Compliance OS foundation", () => { ).toBeInTheDocument(); }); - it("labels the demo checklist and advisory checks", () => { + it("shows a No data yet empty state instead of a synthetic workspace", () => { render(); - expect(screen.getByText("What the export checklist still flags")).toBeInTheDocument(); - expect(screen.getAllByText("FreshPack Central").length).toBeGreaterThan(0); - expect(screen.getByText("Export checklist (advisory)")).toBeInTheDocument(); - expect(screen.getAllByText("Hash verified").length).toBeGreaterThan(0); + expect(screen.getByText("No data yet")).toBeInTheDocument(); + expect(screen.getByRole("link", { name: /start setup/i })).toHaveAttribute("href", "/signup"); }); - it("uses compliance-specific metrics instead of generic SaaS proof", () => { - render(); + it("contains no synthetic demo data", () => { + const { container } = render(); + const text = container.textContent ?? ""; - expect(screen.getByText("Demo workspace · synthetic data · 3 open checklist items")).toBeInTheDocument(); - expect(screen.getByText("FTL list overlap")).toBeInTheDocument(); - expect(screen.getByText("KDE completeness")).toBeInTheDocument(); - expect(screen.getByText("Export checklist")).toBeInTheDocument(); - expect(screen.queryByText(/save time/i)).not.toBeInTheDocument(); + expect(text).not.toMatch(/synthetic/i); + expect(text).not.toMatch(/demo workspace/i); + expect(text).not.toContain("RE-DEMO-PKG"); + expect(text).not.toMatch(/FreshPack Central|Valley Farms|Cold Dock 7/); }); }); diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 800517e5f..ceadf655f 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -3,7 +3,6 @@ import { BookCallLink } from "@/components/conversion/BookCallLink"; import type { Metadata } from "next"; import { ArrowRight, - Boxes, CheckCircle2, ClipboardCheck, Database, @@ -14,20 +13,12 @@ import { ScanLine, ShieldCheck, } from "lucide-react"; -import { - CommitGate, - ComplianceStateBadge, - EvidenceCard, - EvidencePackagePreview, - HashVerificationStrip, -} from "@/components/compliance"; -import { sandboxCta } from "@/lib/sandbox-cta"; +import { EvidenceCard } from "@/components/compliance"; import { Container } from "@/components/layout/container"; import { Section } from "@/components/layout/section"; import { Button } from "@/components/ui/button"; import { Callout } from "@/components/ui/callout"; import { Card } from "@/components/ui/card"; -import { StatTile } from "@/components/ui/stat-tile"; export const metadata: Metadata = { title: "FSMA 204 Recordkeeping Software | RegEngine", @@ -43,30 +34,6 @@ export const metadata: Metadata = { }, }; -const demoMetrics = [ - { label: "FTL list overlap", value: "91%", sublabel: "Example", state: "needs-correction" as const }, - { label: "KDE completeness", value: "84%", sublabel: "Gaps flagged", state: "needs-correction" as const }, - { label: "Export checklist", value: "72%", sublabel: "Items open", state: "blocked" as const }, -]; - -const supplierChecklistExamples = [ - { - supplier: "FreshPack Central", - issue: "Ship-to location missing for 3 lots", - state: "blocked" as const, - }, - { - supplier: "Valley Farms", - issue: "Harvest date and quantity validated", - state: "committed" as const, - }, - { - supplier: "Cold Dock 7", - issue: "Temperature note requires review", - state: "needs-correction" as const, - }, -]; - const evidenceCards = [ { title: "Ingest workspace", @@ -106,92 +73,6 @@ const destinations = [ { label: "Trust", href: "/trust", icon: CheckCircle2, note: "Verification posture" }, ]; -function MetricRail() { - return ( -
-

- Synthetic demo · example numbers · not a customer workspace -

-
- {demoMetrics.map((metric) => ( - } - > -

{metric.sublabel}

-
- ))} -
-
- ); -} - -function ChecklistRadar() { - return ( - -
-
-

Demo workspace · synthetic data · 3 open checklist items

-

What the export checklist still flags

-
-
-
- {supplierChecklistExamples.map((item) => ( - -
-
-
-

{item.supplier}

- -
-

{item.issue}

-
-
-
- ))} -
-
-

- Export checklist (advisory): checks configured in the workspace, not FDA certification, not retailer approval. -

-
-
- ); -} - -function CommandCenterPreview() { - return ( -
-
- - Demo workspace - -
- -
- - -
-
- ); -} - export default function HomePage() { return (
@@ -214,7 +95,7 @@ export default function HomePage() {
@@ -222,10 +103,22 @@ export default function HomePage() { Book a 30-min call
-
- + +

Workspace preview

+

No data yet

+

+ There is no public workspace to show. Connect your own supplier data and the + ingest, checklist, and export views populate from your records. +

+ +
@@ -266,70 +159,20 @@ export default function HomePage() {
-
-
- - -
-
- -

- What this is not -

-
    -
  • Not FDA endorsement
  • -
  • Not a claim we meet §1.1455 24-hour request
  • -
  • Not retailer-readiness score
  • -
  • Not a commit-gate that certifies
  • -
  • Not a 24-hour Recall Clock product
  • -
  • Not live customer metrics
  • -
  • Not legal advice
  • -
-
-
-

- Sample data · illustrative · synthetic -

-
- {[ - ["Records with full provenance", "1,184"], - ["Open supplier blockers", "3"], - ["Facilities scoped", "12/14"], - ].map(([label, value]) => ( - - ))} -
-
-
-
-
- -
-

- Walk the synthetic workspace -

-

- {sandboxCta().blurb} -

-
- -
+ +

+ What this is not +

+
    +
  • Not FDA endorsement
  • +
  • Not a claim we meet §1.1455 24-hour request
  • +
  • Not retailer-readiness score
  • +
  • Not a commit-gate that certifies
  • +
  • Not a 24-hour Recall Clock product
  • +
  • Not live customer metrics
  • +
  • Not legal advice
  • +
+
From 49acc6e23b153fa2e326c6c84d3423579ef1fe48 Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:35:54 -0700 Subject: [PATCH 03/15] fix(marketing): remove /demo route and every link to it --- .../pages/sandbox-front-door.test.tsx | 11 +- frontend/src/app/demo/layout.tsx | 29 --- frontend/src/app/demo/opengraph-image.tsx | 10 - frontend/src/app/demo/page.tsx | 230 ------------------ frontend/src/app/fsma-204/[cte]/page.tsx | 2 +- frontend/src/app/sandbox/SandboxClient.tsx | 4 +- frontend/src/app/sandbox/page.tsx | 10 +- frontend/src/app/sitemap.ts | 1 - .../sandbox-grid/SandboxPdfReport.ts | 2 +- .../src/lib/marketing-analytics-routes.ts | 2 +- frontend/src/lib/sandbox-cta.ts | 15 +- frontend/tests/e2e/sandbox-front-door.spec.ts | 20 +- .../visual/priority-extras.visual.spec.ts | 2 +- 13 files changed, 26 insertions(+), 312 deletions(-) delete mode 100644 frontend/src/app/demo/layout.tsx delete mode 100644 frontend/src/app/demo/opengraph-image.tsx delete mode 100644 frontend/src/app/demo/page.tsx diff --git a/frontend/src/__tests__/pages/sandbox-front-door.test.tsx b/frontend/src/__tests__/pages/sandbox-front-door.test.tsx index 5ad31f614..f2e650220 100644 --- a/frontend/src/__tests__/pages/sandbox-front-door.test.tsx +++ b/frontend/src/__tests__/pages/sandbox-front-door.test.tsx @@ -90,13 +90,14 @@ describe('sandbox CTA resolver (#2757)', () => { }); it('marks the destination as a real route in both states', () => { - expect(['/sandbox', '/demo']).toContain(sandboxCta().href); + expect(['/sandbox', '/walkthrough']).toContain(sandboxCta().href); }); - it('labels the fallback dataset synthetic rather than implying live data', () => { + it('fallback copy matches the walkthrough destination', () => { const cta = sandboxCta(); if (!cta.enabled) { - expect(cta.blurb).toMatch(/synthetic/i); + expect(cta.href).toBe('/walkthrough'); + expect(cta.blurb).not.toMatch(/sandbox|csv/i); } }); @@ -112,13 +113,13 @@ describe('sandbox CTA resolver (#2757)', () => { } }); - it('falls back to the demo when the surface is off', () => { + it('falls back to the walkthrough when the surface is off', () => { vi.stubEnv('NEXT_PUBLIC_ENABLE_EXPERIMENTAL_FEATURES', ''); vi.stubEnv('NEXT_PUBLIC_ENABLED_EXPERIMENTAL_TOOLS', ''); try { const cta = sandboxCta(); expect(cta.enabled).toBe(false); - expect(cta.href).toBe('/demo'); + expect(cta.href).toBe('/walkthrough'); expect(cta.blurb).not.toMatch(/drop your csv/i); } finally { vi.unstubAllEnvs(); diff --git a/frontend/src/app/demo/layout.tsx b/frontend/src/app/demo/layout.tsx deleted file mode 100644 index e4835ec27..000000000 --- a/frontend/src/app/demo/layout.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import type { Metadata } from "next"; - -export const metadata: Metadata = { - title: "Interactive Demo: RegEngine FSMA 204 Compliance Platform", - description: - "See RegEngine in action with real compliance data. No signup required. Explore the dashboard, rule engine, supplier portal, and recall simulation.", - openGraph: { - title: 'Interactive Demo: RegEngine FSMA 204 Compliance Platform', - description: 'See RegEngine in action with real compliance data. No signup required. Explore the dashboard, rule engine, supplier portal, and recall simulation.', - url: 'https://regengine.co/demo', - type: 'website', - }, -}; - -export default function DemoLayout({ children }: { children: React.ReactNode }) { - return ( -
- {/* Demo banner */} -
- This is an interactive demo with sample data.{" "} - - Start your free 14-day trial - {" "} - to see your own data. -
- {children} -
- ); -} diff --git a/frontend/src/app/demo/opengraph-image.tsx b/frontend/src/app/demo/opengraph-image.tsx deleted file mode 100644 index d3302cba8..000000000 --- a/frontend/src/app/demo/opengraph-image.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import { renderOgCard, OG_SIZE, OG_CONTENT_TYPE } from '@/lib/og-image'; - -export const runtime = 'edge'; -export const alt = 'See RegEngine in action. No signup required.'; -export const size = OG_SIZE; -export const contentType = OG_CONTENT_TYPE; - -export default function Image() { - return renderOgCard({ eyebrow: 'Interactive Demo', title: 'See RegEngine in action. No signup required.' }); -} diff --git a/frontend/src/app/demo/page.tsx b/frontend/src/app/demo/page.tsx deleted file mode 100644 index cd54b6a00..000000000 --- a/frontend/src/app/demo/page.tsx +++ /dev/null @@ -1,230 +0,0 @@ -'use client'; - -import Link from 'next/link'; -import { - ShieldAlert, Clock, Truck, Leaf, Package, Anchor, - Building2, ArrowRight, BarChart3, Users, FileText, Zap, -} from 'lucide-react'; -import { DemoBanner } from '@/components/control-plane/demo-banner'; -import { Container } from '@/components/layout/container'; -import { PageHeader } from '@/components/layout/page-header'; -import { Button } from '@/components/ui/button'; -import { Card } from '@/components/ui/card'; -import { StatTile } from '@/components/ui/stat-tile'; -import { StatusBadge, type ComplianceState } from '@/components/ui/status-badge'; - -// --------------------------------------------------------------------------- -// Synthetic demo data - what a mid-market produce distributor would see -// --------------------------------------------------------------------------- - -const COMPLIANCE_SCORE = 94.2; -const TOTAL_EVENTS = 12847; -const COMPLIANT_EVENTS = 12102; -const NON_COMPLIANT_EVENTS = 745; -const SUPPLIERS = 23; -const FACILITIES = 3; - -const RECENT_EVENTS = [ - { tlc: 'RVF-ROM-041426-F3-001', cte: 'harvesting', product: 'RM HRTS 3PK 24CT', supplier: 'Rio Verde Farms', status: 'compliant', time: '2h ago' }, - { tlc: 'VFP-SPIN5-041426-001', cte: 'initial_packing', product: 'BABY SPINACH 5OZ CLAM', supplier: 'Valley Fresh Packhouse', status: 'compliant', time: '3h ago' }, - { tlc: 'FL-SHIP-041426-088', cte: 'shipping', product: 'RM HRTS 3PK 24CT', supplier: 'FreshLine Distribution', status: 'non_compliant', time: '4h ago' }, - { tlc: 'MG-RECV-041426-201', cte: 'receiving', product: 'ORG CURLY KALE 1# BAG', supplier: 'Metro Grocery DC', status: 'compliant', time: '5h ago' }, - { tlc: 'GL-CHPROM-041426-A', cte: 'transformation', product: 'CHOPPED ROMAINE 1# BAG', supplier: 'GreenLeaf Processing', status: 'non_compliant', time: '6h ago' }, - { tlc: 'RVF-KALE-041426-F1-002', cte: 'harvesting', product: 'CURLY KALE 24CT', supplier: 'Rio Verde Farms', status: 'compliant', time: '6h ago' }, - { tlc: 'ACS-COOL-041426-007', cte: 'cooling', product: 'BABY SPINACH BULK 20#', supplier: 'Arctic Chain Cold Storage', status: 'compliant', time: '7h ago' }, - { tlc: 'VFP-CIL-041426-001', cte: 'initial_packing', product: 'CILANTRO BNCH 60CT', supplier: 'Valley Fresh Packhouse', status: 'compliant', time: '8h ago' }, -]; - -const RULE_VIOLATIONS = [ - { rule: 'Shipping: Ship-To Location Required', count: 12, severity: 'critical', cte: 'shipping' }, - { rule: 'Receiving: TLC Source Reference Required', count: 8, severity: 'critical', cte: 'receiving' }, - { rule: 'Reference Document Required for All CTEs', count: 15, severity: 'warning', cte: 'all' }, - { rule: 'Transformation: Input TLCs Required', count: 5, severity: 'critical', cte: 'transformation' }, - { rule: 'Receiving: Immediate Previous Source Required', count: 3, severity: 'critical', cte: 'receiving' }, -]; - -const SUPPLIER_SCORES = [ - { name: 'Rio Verde Farms', score: 98.5, events: 3200, status: 'excellent' }, - { name: 'Valley Fresh Packhouse', score: 96.1, events: 2800, status: 'excellent' }, - { name: 'Arctic Chain Cold Storage', score: 94.8, events: 1200, status: 'good' }, - { name: 'FreshLine Distribution', score: 87.3, events: 2400, status: 'needs_attention' }, - { name: 'GreenLeaf Processing', score: 82.1, events: 1800, status: 'at_risk' }, -]; - -const CTE_BREAKDOWN = [ - { cte: 'Harvesting', icon: Leaf, count: 3420, compliant: 3388, pct: 99.1 }, - { cte: 'Cooling', icon: Clock, count: 1856, compliant: 1820, pct: 98.1 }, - { cte: 'Initial Packing', icon: Package, count: 2104, compliant: 2055, pct: 97.7 }, - { cte: 'Shipping', icon: Truck, count: 2680, compliant: 2450, pct: 91.4 }, - { cte: 'Receiving', icon: Building2, count: 2187, compliant: 1989, pct: 90.9 }, - { cte: 'Transformation', icon: Zap, count: 480, compliant: 400, pct: 83.3 }, - { cte: 'FLBR', icon: Anchor, count: 120, compliant: 120, pct: 100 }, -]; - -// --------------------------------------------------------------------------- -// Component -// --------------------------------------------------------------------------- - -const SUPPLIER_STATE: Record = { - excellent: 'compliant', - good: 'compliant', - needs_attention: 'at-risk', - at_risk: 'non-compliant', -}; - -/** Coverage bar tone. The number beside it carries the same meaning in text. */ -function coverageTone(pct: number) { - if (pct >= 95) return 'bg-re-success'; - if (pct >= 90) return 'bg-re-warning'; - return 'bg-re-danger'; -} - -export default function DemoPage() { - return ( - -
- -
- {/* Page header */} - - DEMO WORKSPACE: FreshCo Distribution is a fictional distributor. Numbers are illustrative. - - } - /> - - {/* Top stats row */} -
- - - - -
- -
- {/* CTE Breakdown */} - -

-

-
    - {CTE_BREAKDOWN.map((cte) => ( -
  • -
  • - ))} -
-
- - {/* Top Rule Violations */} - -

-

-
    - {RULE_VIOLATIONS.map((v, i) => ( -
  • - {v.rule} - - - {v.count} violations - -
  • - ))} -
-
-
- -
- {/* Recent Events */} - -

-

-
    - {RECENT_EVENTS.map((ev, i) => ( -
  • - -
    -
    - {ev.tlc} - - {ev.cte} - -
    -
    {ev.supplier}
    -
    - {ev.time} -
  • - ))} -
-
- - {/* Supplier Compliance Grid */} - -

-

-
    - {SUPPLIER_SCORES.map((s, i) => ( -
  • - -
    -
    {s.name}
    -
    {s.events.toLocaleString()} events
    -
    - - {s.score}% - -
  • - ))} -
-
-
- - {/* CTA */} - -

This could be your data

-

- RegEngine ingests events from your ERP, validates them against 36 FSMA 204 validation rules (33 stateless + 3 cross-event), and surfaces gaps before they become audit findings during a §1.1455(c) records request. The compliance score shown is RegEngine's internal six-dimension readiness signal, not an FDA-issued rating. -

-
- - -
-
-
- ); -} diff --git a/frontend/src/app/fsma-204/[cte]/page.tsx b/frontend/src/app/fsma-204/[cte]/page.tsx index b978c6ad8..9112ebead 100644 --- a/frontend/src/app/fsma-204/[cte]/page.tsx +++ b/frontend/src/app/fsma-204/[cte]/page.tsx @@ -459,7 +459,7 @@ export default async function CTELandingPage({

diff --git a/frontend/src/app/sandbox/page.tsx b/frontend/src/app/sandbox/page.tsx index 28a5c17f9..296587d46 100644 --- a/frontend/src/app/sandbox/page.tsx +++ b/frontend/src/app/sandbox/page.tsx @@ -41,19 +41,13 @@ export default function SandboxPage() { not switched on for this environment.

- The interactive demo covers the same rule evaluation against a synthetic dataset, and - the walkthrough shows the ingest-to-export path end to end. + The walkthrough shows the ingest-to-export path end to end.

-
diff --git a/frontend/src/app/sitemap.ts b/frontend/src/app/sitemap.ts index 733c47c1d..28fcc699b 100644 --- a/frontend/src/app/sitemap.ts +++ b/frontend/src/app/sitemap.ts @@ -46,7 +46,6 @@ export default function sitemap(): MetadataRoute.Sitemap { { url: `${baseUrl}/why-regengine`, changeFrequency: 'monthly' as const, priority: 0.9 }, { url: `${baseUrl}/about`, changeFrequency: 'monthly' as const, priority: 0.7 }, { url: `${baseUrl}/product`, changeFrequency: 'monthly' as const, priority: 0.8 }, - { url: `${baseUrl}/demo`, changeFrequency: 'monthly' as const, priority: 0.7 }, { url: `${baseUrl}/buyer-programs`, changeFrequency: 'monthly' as const, priority: 0.7 }, { url: `${baseUrl}/supplier-compliance`, changeFrequency: 'monthly' as const, priority: 0.7 }, { url: `${baseUrl}/compare/foodlogiq`, changeFrequency: 'monthly' as const, priority: 0.8 }, diff --git a/frontend/src/components/marketing/sandbox-grid/SandboxPdfReport.ts b/frontend/src/components/marketing/sandbox-grid/SandboxPdfReport.ts index 029a88c5c..9c3901bd5 100644 --- a/frontend/src/components/marketing/sandbox-grid/SandboxPdfReport.ts +++ b/frontend/src/components/marketing/sandbox-grid/SandboxPdfReport.ts @@ -338,7 +338,7 @@ export function generateComplianceReport(result: SandboxResult): void { doc.setFontSize(7); doc.setTextColor(BRAND.r, BRAND.g, BRAND.b); doc.text( - 'Ready to improve traceability workflows? Visit regengine.co/demo', + 'Ready to improve traceability workflows? Visit regengine.co/pricing', pageWidth / 2, pageH - 9, { align: 'center' }, ); } diff --git a/frontend/src/lib/marketing-analytics-routes.ts b/frontend/src/lib/marketing-analytics-routes.ts index 909c923a5..74e02e58e 100644 --- a/frontend/src/lib/marketing-analytics-routes.ts +++ b/frontend/src/lib/marketing-analytics-routes.ts @@ -13,7 +13,7 @@ const INTERNAL_STORAGE_KEY = 're_internal'; const SENSITIVE_ROUTE_PREFIXES = ['/sandbox/results', '/portal'] as const; const PUBLIC_MARKETING_SECTIONS = new Set([ '/about', '/alpha', '/blog', '/buyer-programs', '/case-studies', - '/compare', '/contact', '/demo', '/design-system', '/developers', + '/compare', '/contact', '/design-system', '/developers', '/docs', '/dpa', '/fsma', '/fsma-204', '/integrations', '/legal', '/pricing', '/privacy', '/product', '/proof', '/retailer-readiness', '/sandbox', '/security', '/status', '/supplier-compliance', '/terms', diff --git a/frontend/src/lib/sandbox-cta.ts b/frontend/src/lib/sandbox-cta.ts index ffc56e9e6..8cab1edf9 100644 --- a/frontend/src/lib/sandbox-cta.ts +++ b/frontend/src/lib/sandbox-cta.ts @@ -9,10 +9,11 @@ // cannot honor. // // PR #2730 hit exactly this: it repointed the dead homepage sandbox hash -// anchors at /demo -// but left the sandbox prose above the buttons, so the copy promised a CSV -// sandbox while the button opened a dashboard. Resolving copy and destination -// together — from one flag — is what stops those two drifting apart again. +// anchors at a dashboard page but left the sandbox prose above the buttons, +// so the copy promised a CSV sandbox while the button opened a dashboard. +// Resolving copy and destination together, from one flag, is what stops +// those two drifting apart again. The fallback destination is /walkthrough; +// the old /demo route was removed with the synthetic workspace cleanup. // // Enabling NEXT_PUBLIC_ENABLE_EXPERIMENTAL_FEATURES (or listing 'sandbox' in // NEXT_PUBLIC_ENABLED_EXPERIMENTAL_TOOLS) alongside the backend's @@ -48,9 +49,9 @@ export function sandboxCta(): SandboxCta { } return { enabled: false, - href: '/demo', - label: 'Explore the interactive demo', + href: '/walkthrough', + label: 'See the walkthrough', blurb: - 'Walk through a synthetic FSMA 204 evidence-layer demo. No signup required.', + 'Walk the FSMA 204 records-request workflow step by step. No signup required.', }; } diff --git a/frontend/tests/e2e/sandbox-front-door.spec.ts b/frontend/tests/e2e/sandbox-front-door.spec.ts index 8aa8bc4c4..014288947 100644 --- a/frontend/tests/e2e/sandbox-front-door.spec.ts +++ b/frontend/tests/e2e/sandbox-front-door.spec.ts @@ -10,7 +10,7 @@ * the target deployment is in: * * mounted → CTA lands on /sandbox and the sample CSV evaluates end to end. - * unmounted → CTA lands on /demo, no page promises a CSV sandbox, and a + * unmounted → CTA lands on /walkthrough, no page promises a CSV sandbox, and a * direct visit to /sandbox explains itself instead of 404ing. * * Either way the invariant under test is the one #2730 broke: CTA copy and CTA @@ -48,7 +48,7 @@ test.describe('sandbox front door (#2757)', () => { await page.goto(comparePath); const cta = page - .getByRole('link', { name: mounted ? /Try the Sandbox/i : /interactive demo/i }) + .getByRole('link', { name: mounted ? /Try the Sandbox/i : /walkthrough/i }) .first(); await expect(cta).toBeVisible(); @@ -61,22 +61,10 @@ test.describe('sandbox front door (#2757)', () => { } await cta.click(); - await expect(page).toHaveURL(new RegExp(mounted ? '/sandbox$' : '/demo')); + await expect(page).toHaveURL(new RegExp(mounted ? '/sandbox$' : '/walkthrough')); }); } - test('homepage #sandbox anchor resolves to the same destination', async ({ page }) => { - const mounted = await sandboxEvaluatorMounted(page); - await page.goto('/#sandbox'); - - const section = page.locator('#sandbox'); - await expect(section).toBeVisible(); - - const cta = section.getByRole('link').first(); - await cta.click(); - await expect(page).toHaveURL(new RegExp(mounted ? '/sandbox$' : '/demo')); - }); - test('sample FTL CSV evaluates and renders a diagnosis', async ({ page }) => { test.skip( !(await sandboxEvaluatorMounted(page)), @@ -102,6 +90,6 @@ test.describe('sandbox front door (#2757)', () => { await page.goto('/sandbox'); await expect(page.getByText(/not enabled on this deployment/i)).toBeVisible(); - await expect(page.getByRole('link', { name: /interactive demo/i })).toBeVisible(); + await expect(page.getByRole('link', { name: /walkthrough/i })).toBeVisible(); }); }); diff --git a/frontend/tests/visual/priority-extras.visual.spec.ts b/frontend/tests/visual/priority-extras.visual.spec.ts index d2b1af8dc..a0a582149 100644 --- a/frontend/tests/visual/priority-extras.visual.spec.ts +++ b/frontend/tests/visual/priority-extras.visual.spec.ts @@ -58,7 +58,7 @@ test.describe('main CTA focus ring', () => { const hrefCta = page .locator( 'main a[href*="/signup"], main a[href*="/contact"], ' + - 'main a[href*="/demo"], main a[href*="/pricing"]', + 'main a[href*="/pricing"]', ) .first(); const textCta = page From 8ac1db18f9a9843325fb9df4ffd99e2bafcf6f7d Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:36:21 -0700 Subject: [PATCH 04/15] fix(pricing): remove Developer Sandbox comparison row --- frontend/src/app/pricing/page.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx index 9fb1d259e..ca172ad1f 100644 --- a/frontend/src/app/pricing/page.tsx +++ b/frontend/src/app/pricing/page.tsx @@ -129,7 +129,6 @@ const COMPETITOR_COMPARISON: PricingComparisonRow[] = [ { feature: 'Time to first FDA-oriented export', regengine: 'Design-partner workflow', foodlogiq: 'Enterprise implementation', repositrak: 'Retailer-coordinated', tracegains: 'Enterprise implementation' }, { feature: 'Public API + OpenAPI Docs', regengine: 'Available for contracted workspaces', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, { feature: 'Self-Serve Signup', regengine: 'Available in staged rollout', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, - { feature: 'Developer Sandbox', regengine: 'Available in staged rollout', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, { feature: 'Hash-manifested audit trail', regengine: 'Supported where export workflow creates manifests', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, { feature: 'Free Trial', regengine: 'Design-partner terms', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, { feature: 'Pricing Model', regengine: 'Indicative design-partner ranges; agreement controls', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, From 15a050b95af9008802580fc3ab8a19df2e3273be Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Fri, 23 Oct 2026 08:40:51 -0700 Subject: [PATCH 05/15] fix(marketing): remove invented suppliers and numbers from case-studies, walkthrough, and proof/transformation --- frontend/src/app/case-studies/page.tsx | 588 +----------------- .../src/app/proof/transformation/page.tsx | 347 +---------- frontend/src/app/walkthrough/page.tsx | 30 +- 3 files changed, 63 insertions(+), 902 deletions(-) diff --git a/frontend/src/app/case-studies/page.tsx b/frontend/src/app/case-studies/page.tsx index 324e1e589..186bb05d5 100644 --- a/frontend/src/app/case-studies/page.tsx +++ b/frontend/src/app/case-studies/page.tsx @@ -1,592 +1,58 @@ import type { Metadata } from 'next'; import Link from 'next/link'; -import { ArrowRight, CheckCircle2 } from 'lucide-react'; -import { Badge } from '@/components/ui/badge'; +import { ArrowRight } from 'lucide-react'; import { Button } from '@/components/ui/button'; -import { Callout } from '@/components/ui/callout'; import { Card } from '@/components/ui/card'; -import { StatTile } from '@/components/ui/stat-tile'; import { Container } from '@/components/layout/container'; -import { Section } from '@/components/layout/section'; +import { PageHeader } from '@/components/layout/page-header'; export const metadata: Metadata = { - title: 'Leafy Greens Traceability Validation | RegEngine', + title: 'Product Validation | RegEngine', description: - 'Product validation: RegEngine processes 1,200 leafy greens CTE events with 94.2% auto-normalization, 0.8 manual touches per 1,000 rows, and sub-second trace latency.', + 'RegEngine product validation. No published validation study yet; run the workflow on your own data.', keywords: - 'FSMA 204, leafy greens traceability, fresh-cut produce, food safety, CTE validation, FDA compliance, RegEngine', + 'FSMA 204, traceability validation, food safety, CTE validation, FDA compliance, RegEngine', openGraph: { - title: 'Leafy Greens Traceability Validation | RegEngine', - description: 'Product validation: 1,200 leafy greens CTE events, 94.2% auto-normalization, sub-second trace latency.', + title: 'Product Validation | RegEngine', + description: 'No published validation study yet; run the RegEngine workflow on your own data.', url: 'https://regengine.co/case-studies', type: 'article', }, }; -const HERO_METRICS = [ - { value: '8.4 min', label: 'Time to first ingest', detail: 'API key → facility → first CTE event accepted' }, - { value: '94.2%', label: 'Auto-normalization rate', detail: 'Fields normalized without human intervention' }, - { value: '0.8', label: 'Manual touches / 1,000 rows', detail: 'Only lot code format exceptions required review' }, - { value: '< 1s', label: 'Trace latency (5 hops)', detail: 'Forward + backward trace, farm to retail' }, - { value: '11.6 min', label: 'Time to FDA-oriented sortable export', detail: 'From raw CSV upload to sortable spreadsheet in a synthetic workflow' }, -]; - -const SUPPLY_CHAIN = [ - { step: 'Harvest', entity: 'Salinas Valley grower', cte: 'Harvesting', records: 180 }, - { step: 'Cool', entity: 'Field cooler (vacuum)', cte: 'Cooling', records: 180 }, - { step: 'Pack', entity: 'Fresh-cut processor', cte: 'Initial Packing', records: 160 }, - { step: 'Transform', entity: 'Salad mix blending', cte: 'Transformation', records: 120 }, - { step: 'Ship', entity: 'Regional distributor', cte: 'Shipping', records: 200 }, - { step: 'Receive', entity: 'Grocery DC', cte: 'Receiving', records: 200 }, - { step: 'Receive', entity: 'Food service buyer', cte: 'First Land-Based Receiving', records: 160 }, -]; - -const NORMALIZATION_EXAMPLES = [ - { - field: 'Date formats', - raw: ['03/14/2026', '2026-03-14', '14-Mar-26', 'March 14'], - normalized: '2026-03-14T00:00:00Z', - rate: '100%', - }, - { - field: 'Units of measure', - raw: ['lbs', 'pounds', 'LBS', '#', 'lb'], - normalized: 'lbs', - rate: '100%', - }, - { - field: 'Location names', - raw: ['Whse 4', 'warehouse #4', 'DC - Salinas', 'dist ctr'], - normalized: 'Warehouse 4 / Distribution Center', - rate: '92.3%', - }, - { - field: 'CTE type aliases', - raw: ['harvest', 'growing', 'creation', 'H'], - normalized: 'harvesting', - rate: '100%', - }, - { - field: 'Lot codes', - raw: ['VF-12-C', 'VF12C', 'VF-l2-C (OCR)', 'vf-12-c'], - normalized: 'VF-12-C (integrity warning on OCR variant)', - rate: '82.1%', - }, -]; - -/** Identifiers and sample values are recorded data - mono, on the inset well. */ -const chipClass = 'rounded-sm bg-re-surface-inset px-1.5 py-0.5 font-mono text-[0.8125rem] text-re-text-primary'; -const cellClass = 'px-4 py-3 align-middle text-re-text-secondary'; -const headClass = 'px-4 py-3 text-left align-middle text-label text-re-text-tertiary'; -const rowClass = 'border-b border-re-border-subtle last:border-0'; -/** A timing row: label left, mono figure right. */ -const timingRow = 'flex items-center justify-between gap-4 border-b border-re-border-subtle pb-3'; - export default function CaseStudy() { return (
- {/* Hero */} -
- - Product Validation - - - Leafy Greens & Fresh-Cut Produce - -
-

- 1,200 CTE Events. - 5 Hard Metrics. -

- - Product validation · synthetic data modeled on industry patterns. Not a named-customer case study. - -

- These metrics are reproducible. Try the same recall drill at{' '} - /proof/recall-drill. -

-

- We ran a synthetic validation workflow modeled on leafy-greens supply chains (from Salinas Valley - harvest to grocery DC receiving) and measured every step. These are not customer ROI, SLA, - or production-performance commitments. -

- - {/* Metric tiles */} -
- {HERO_METRICS.map((m) => ( - -

{m.detail}

-
- ))} -
- -
- - -
-
- - {/* Scenario Description */} -
- {/* Supply chain flow */} -
- - - - - - - - - - - {SUPPLY_CHAIN.map((row, i) => ( - - - - - - - ))} - - - - - -
StepEntityCTE TypeRecords
{row.step}{row.entity} - - {row.cte} - - {row.records}
Total1,200
-
-

- All 7 FSMA 204 CTE types represented. Data generated to match real-world - patterns: mixed date formats, inconsistent UoMs, OCR artifacts in lot codes, - abbreviation-heavy location names. -

-
- - {/* Metric 1: Time to First Ingest */} -
-
-
-

Metric 1: Time to First Ingest

-

- Clock starts at account creation. Clock stops when the first CTE event - is accepted and validated by the system. -

-
-
- Create account + API key - 2.1 min -
-
- Create facility (POST /facilities) - 0.8 min -
-
- Download CSV template (harvesting) - 0.3 min -
-
- Fill 5 sample rows - 4.2 min -
-
- Upload + validation response - 1.0 min -
-
- Total - 8.4 min -
-
-
- -

What this measures

-

- Guided onboarding speed for an approved design-partner workspace using synthetic - sample data. Timeline, support, and commercial terms are confirmed during scoping. -

-
-

Industry comparison

-
-
- Enterprise platforms (validate directly) - 3-6 months -
-
- Mid-market SaaS (typical) - 1-4 weeks -
-
- RegEngine - 8.4 minutes -
-
-
-
-
-
- - {/* Metric 2: Auto-normalization Rate */} -
-
- - - - - - - - - - - {NORMALIZATION_EXAMPLES.map((ex, i) => ( - - - - - - - ))} - -
Field TypeRaw Input ExamplesNormalized OutputAuto Rate
{ex.field} -
- {ex.raw.map((r) => ( - - {r} - - ))} -
-
- - {ex.normalized} - - {ex.rate}
-
- -
- - - -
- -

- Normalization is deterministic (rule-based pattern matching), not ML. Rules cover 40+ UoM - variants, 13 location abbreviation patterns, 5+ date formats, and CTE type alias mapping. - Lot code integrity checks flag suspicious OCR artifacts (O/0 and I/1 swaps adjacent to digits) - for human review rather than silently normalizing. -

-
- - {/* Metric 3: Manual Touches */} -
-
-
-

Metric 3: Manual Touches per 1,000 Rows

-

- A "manual touch" is any point where a human must review, correct, or - approve a record before it can proceed to an FDA-oriented sortable export. Lower is better. -

-
- -
- Lot code integrity warnings - 0.6 / 1,000 -
-

- OCR artifacts where O/0 or I/1 swap could change lot identity. - System flags but doesn't auto-correct, because lot codes are too critical. -

-
- -
- Missing required KDEs - 0.2 / 1,000 -
-

- Records where a required field (e.g., origin location) was blank. - Cannot be inferred; requires source data correction. -

-
-
- Total manual touches - 0.8 / 1,000 rows -
-
-
- -

Why this matters

-

- Manual data cleaning is a common operational cost in traceability work. A mid-size produce - operation processing 10,000 CTE events/month at assumed error - rates of 5-15% could face 500-1,500 manual corrections monthly. -

-

- At 0.8 touches per 1,000 rows, the same operation needs 8 corrections - per month. The difference: one person spending 2 minutes vs. one person - spending 2 weeks. -

- - We intentionally don't auto-correct lot codes. A wrong lot code - in an FDA trace means tracing the wrong product, and the cost of - a false positive exceeds the cost of a human review. - -
-
-
- - {/* Metric 4: Trace Latency */} -
-
- -

Trace Benchmarks

-
- {[ - { label: 'Forward trace (farm → retail, 5 hops)', value: '340 ms', width: '34%' }, - { label: 'Backward trace (retail → farm, 5 hops)', value: '380 ms', width: '38%' }, - { label: 'Full bidirectional trace', value: '720 ms', width: '72%' }, - { label: 'Transformation trace (salad mix → ingredients)', value: '280 ms', width: '28%' }, - ].map((bench) => ( -
-
- {bench.label} - {bench.value} -
- {/* Decorative: the millisecond figure above carries the value. */} - -
- ))} -
-
- -

How It Works

-

- Tracing uses PostgreSQL recursive CTEs with time-arrow validation. - No graph database required. The query walks the event chain hop-by-hop, - validating temporal ordering at each step (a product can't be received - before it's shipped). -

-
-

-- Trace romaine lot RM-0314-A

-

GET /api/v1/trace/RM-0314-A

-

  ?direction=both

-

  &depth=20

-

→ 5 hops, 12 linked events

-

→ 720ms total latency

-

→ Time-arrow: VALID

-
-

- Measured on PostgreSQL 15 with 1,200 events indexed. Latency scales - with hop depth, not total event count. -

-
-
-
- - {/* Metric 5: Time to FDA-oriented sortable export */} -
-
-
-

Metric 5: Time to FDA-Oriented Sortable Export

-

- End-to-end: from uploading a raw CSV with messy supplier data to - downloading an FDA-oriented sortable spreadsheet aligned to 21 CFR 1.1455 - fields where applicable (date-range filtered, includes chain verification). -

-
-
- CSV upload (1,200 records) - 1.2 min -
-
- Auto-normalization + validation - 3.8 min -
-
- Review flagged records (0.8/1,000) - 2.4 min -
-
- Generate FDA-oriented export package - 0.4 min -
-
- Download + verify - 0.2 min -
-
- Total - 11.6 min -
-
-
- -

The FDA-oriented export package includes

-
    - {[ - 'Sortable CSV aligned to 21 CFR 1.1455 fields where applicable', - 'Date range filtering for targeted FDA requests', - 'Chain verification JSON (SHA-256 + Merkle proof)', - 'KDE completeness validation log', - 'EPCIS 2.0 JSON-LD (GS1 business step mapping)', - 'Package manifest with file checksums', - ].map((item) => ( -
  • -
  • - ))} -
- - FDA requests may require records within 24 hours. This synthetic - workflow generated the package in 11.6 minutes; customer review and - data completeness still matter. - -
-
-
- - {/* Produce-Specific Challenges */} -
-
- {[ - { - title: 'Transformation Complexity', - description: 'Salad mixes blend 3-5 input lots into one output product. Each input lot must trace back to its own harvest, cooling, and packing CTEs.', - metric: '120 transformation events processed', - }, - { - title: 'Short Shelf Life', - description: '7-14 day product life means recall speed is existential. A romaine recall that takes 3 weeks to trace hits empty shelves and the next harvest cycle.', - metric: '< 1 second full trace latency', - }, - { - title: 'Fragmented Suppliers', - description: 'Small growers use handwritten lot codes, mixed date formats, and inconsistent naming. No two farms format data the same way.', - metric: '94.2% auto-normalized without intervention', - }, - { - title: 'Temperature Sensitivity', - description: 'Cooling CTEs are mandatory for leafy greens. Temperature KDEs must be captured at harvest, during transport, and at receiving.', - metric: '180 cooling CTE events validated', - }, - { - title: 'High Recall Frequency', - description: 'Leafy greens account for a disproportionate share of FDA recalls. Romaine alone triggered 4 major recalls in 2018-2020.', - metric: '720ms bidirectional recall trace', - }, - { - title: 'Retailer Pressure', - description: 'Major retailers are signaling traceability expectations ahead of federal enforcement. Specific retailer requirements vary and should be confirmed directly with each buyer.', - metric: 'Retailer-oriented export templates scoped per buyer', - }, - ].map((item) => ( - -

{item.title}

-

{item.description}

-

{item.metric}

-
- ))} -
-
- - {/* Summary */} -
-
- {HERO_METRICS.map((m) => ( - - ))} -
-
- - {/* CTA */} -
- -

Run This Validation on Your Data

-

- Upload a sample CSV. See your auto-normalization rate, KDE completeness score, - and time to FDA-oriented sortable export, measured on your actual supply chain data. + + +

Validation data

+

No data yet

+

+ RegEngine is pre-revenue; self-serve access is in staged rollout. We do not + publish invented metrics. When a validation study runs against real + workloads, the results will appear here. Until then, the honest way to evaluate + RegEngine is to run it on your own supply chain data.

-
+
- -
- - {/* Methodology */} -
- -

Methodology

-
-
-

Data Source

-

- 1,200 synthetic CTE events modeled on real-world leafy greens supply chain - patterns (Salinas Valley grower → fresh-cut processor → regional distribution). - Data includes realistic noise: mixed date formats, OCR artifacts, abbreviation - variants, missing fields at rates matching industry surveys. -

-
-
-

Measurement

-

- All metrics measured on RegEngine's production codebase running against - PostgreSQL 15. Timings include full validation pipeline (normalization, - KDE completeness checks, lot code integrity, temporal ordering). Human - interaction times (filling CSV rows, reviewing flags) measured with a - stopwatch on a first-time user. -

-
-
-

Disclosure

-

- This is a product validation study, not a customer case study. Data is - synthetic but modeled on real supply chain patterns and industry-reported - data quality assumptions. RegEngine is pre-revenue; self-serve access is in staged rollout. Metrics reflect current system - behavior on representative workloads and are not customer ROI, SLA, or production-performance commitments. -

-
-
-
-
+ +
); } diff --git a/frontend/src/app/proof/transformation/page.tsx b/frontend/src/app/proof/transformation/page.tsx index 5d75c480e..601e1286f 100644 --- a/frontend/src/app/proof/transformation/page.tsx +++ b/frontend/src/app/proof/transformation/page.tsx @@ -1,6 +1,6 @@ import type { Metadata } from "next"; import Link from "next/link"; -import { ArrowRight, FileSpreadsheet, Database, ShieldCheck, type LucideIcon } from "lucide-react"; +import { ArrowRight } from "lucide-react"; import { Container } from "@/components/layout/container"; import { PageHeader } from "@/components/layout/page-header"; import { Section } from "@/components/layout/section"; @@ -8,310 +8,17 @@ import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; export const metadata: Metadata = { - title: "Proof: CSV → CTE → FDA row | RegEngine", + title: "Proof: CSV to FDA row | RegEngine", description: - "Watch a real supplier CSV become an FDA-oriented sortable record. Three CTEs, three transformations, real production code, synthetic data.", + "How a supplier CSV becomes an FDA-oriented sortable record in RegEngine. No worked example is published yet.", openGraph: { title: "How a supplier CSV becomes an FDA-oriented sortable record | RegEngine", - description: - "Three CTEs, three transformations. Real production code, synthetic data.", + description: "No worked example is published yet.", url: "https://regengine.co/proof/transformation", type: "website", }, }; -// --------------------------------------------------------------------------- -// Data: hand-curated, faithful to production shapes -// --------------------------------------------------------------------------- -// CSV rows are direct copies from sample_data/0X_*.csv on main. -// Canonical JSON matches the TraceabilityEvent shape from -// services/shared/canonical_event.py. -// FDA rows match the column spec in -// services/ingestion/app/fda_export_service.py (FDA_COLUMNS, _NAMED_KDE_COLUMNS). -// PII columns shown unredacted here for demonstration; in a real export -// they pass through _redact_location_value when include_pii=False (#1219). - -type Step = { - cte: string; - title: string; - subtitle: string; - csvHeader: string; - csvRows: string[]; - canonical: string; - canonicalAnnotation: string; - fdaRow: Array<[string, string]>; - fdaAnnotation: string; -}; - -const STEPS: Step[] = [ - { - cte: "§1.1330", - title: "Harvesting", - subtitle: - "Origination event. Defines the Traceability Lot Code that follows romaine through every downstream CTE.", - csvHeader: - "traceability_lot_code,product_description,quantity,unit_of_measure,harvest_date,location_name,location_gln,field_id,harvester_name,reference_document", - csvRows: [ - "LOT-ROM-2026-0312A,Organic Romaine Hearts,5000,lbs,2026-03-12,Salinas Valley Farms,0061414100014,FIELD-SVF-7,Salinas Valley Farms LLC,HARV-SVF-2026-0312-001", - "LOT-ROM-2026-0312B,Chopped Romaine Mix,3200,lbs,2026-03-12,Salinas Valley Farms,0061414100014,FIELD-SVF-12,Salinas Valley Farms LLC,HARV-SVF-2026-0312-002", - "LOT-ROM-2026-0311C,Romaine Hearts 3-Pack,4100,lbs,2026-03-11,Pacific Coast Growers,0061414100021,FIELD-PCG-3,Pacific Coast Growers Inc,HARV-SVF-2026-0312-003", - ], - canonical: `{ - "event_id": "8f3c2e6a-4d11-4a0b-9b2e-5c0a1f4a2c10", - "tenant_id": "9d2b1c4f-7e88-4f12-9c1a-6f0e2d3a8b71", - "schema_version": 1, - "source_system": "csv", - "event_type": "harvesting", - "event_timestamp": "2026-03-12T00:00:00+00:00", - "traceability_lot_code": "LOT-ROM-2026-0312A", - "product_reference": "Organic Romaine Hearts", - "quantity": 5000, - "unit_of_measure": "lbs", - "from_facility_reference": "0061414100014", - "kdes": { - "harvest_date": "2026-03-12", - "growing_area_name": "FIELD-SVF-7", - "harvester_name": "Salinas Valley Farms LLC", - "reference_document_number": "HARV-SVF-2026-0312-001", - "location_name": "Salinas Valley Farms" - }, - "confidence_score": 1.0, - "status": "active", - "sha256_hash": "9c4e1b7a2f8d5630ae914c2b0f7e6a18c3d5f9b2e0a7d4c1f8b3e6a9d2c5f0b7", - "chain_hash": "f0a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3a6b9c2d5e8f1a4b7c0d3e6f9a2" -}`, - canonicalAnnotation: - "KDE validation against §1.1330 (a)(1) through (a)(7). Hash chained to previous event.", - fdaRow: [ - ["Traceability Lot Code (TLC)", "LOT-ROM-2026-0312A"], - ["Product Description", "Organic Romaine Hearts"], - ["Quantity", "5000"], - ["Unit of Measure", "lbs"], - ["Event Type (CTE)", "harvesting"], - ["Event Date", "2026-03-12"], - ["Event Time", "00:00:00 UTC"], - ["Location GLN", "0061414100014"], - ["Location Name", "Salinas Valley Farms"], - ["Harvest Date", "2026-03-12"], - ["Growing Area", "FIELD-SVF-7"], - ["Reference Document Number", "HARV-SVF-2026-0312-001"], - ["Source Document", "01_harvesting.csv"], - [ - "Record Hash (SHA-256)", - "9c4e1b7a2f8d5630ae914c2b0f7e6a18c3d5f9b2e0a7d4c1f8b3e6a9d2c5f0b7", - ], - [ - "Chain Hash", - "f0a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3a6b9c2d5e8f1a4b7c0d3e6f9a2", - ], - ], - fdaAnnotation: - "Mapped to FDA harvesting columns (TLC, Harvest Date, Growing Area). Cells pass through sanitize_cell to neutralize spreadsheet-formula injection (#1081).", - }, - { - cte: "§1.1325", - title: "Cooling", - subtitle: - "Pre-shipment temperature event. Carries the same TLC. Adds the cooling KDE the FDA requires for produce.", - csvHeader: - "traceability_lot_code,product_description,quantity,unit_of_measure,cooling_date,location_name,location_gln,temperature_celsius,reference_document", - csvRows: [ - "LOT-ROM-2026-0312A,Organic Romaine Hearts,5000,lbs,2026-03-12,Salinas Valley Cooler #1,0061414100014,1.8,COOL-SVF-2026-0312-001", - "LOT-ROM-2026-0312B,Chopped Romaine Mix,3200,lbs,,Salinas Valley Cooler #1,0061414100014,2.3,COOL-SVF-2026-0312-002", - "LOT-ROM-2026-0311C,Romaine Hearts 3-Pack,4100,lbs,2026-03-11,Pacific Coast Cold Storage,0061414100021,2.0,COOL-SVF-2026-0312-003", - ], - canonical: `{ - "event_id": "1a7d4e8b-2c93-4f67-a510-3b8e4c9f0a25", - "tenant_id": "9d2b1c4f-7e88-4f12-9c1a-6f0e2d3a8b71", - "schema_version": 1, - "source_system": "csv", - "event_type": "cooling", - "event_timestamp": "2026-03-12T00:00:00+00:00", - "traceability_lot_code": "LOT-ROM-2026-0312A", - "product_reference": "Organic Romaine Hearts", - "quantity": 5000, - "unit_of_measure": "lbs", - "from_facility_reference": "0061414100014", - "kdes": { - "cooling_date": "2026-03-12", - "temperature": 35.24, - "location_name": "Salinas Valley Cooler #1", - "reference_document_number": "COOL-SVF-2026-0312-001" - }, - "confidence_score": 1.0, - "status": "active", - "sha256_hash": "2e8c5a1b4d7f0936e2a5b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a9b2c5d8e1", - "chain_hash": "a4b7c0d3e6f9a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3a6b9c2d5e8f1a4b7" -}`, - canonicalAnnotation: - "Celsius normalized to Fahrenheit (1.8°C → 35.24°F). TLC linkage proves continuity from harvest.", - fdaRow: [ - ["Traceability Lot Code (TLC)", "LOT-ROM-2026-0312A"], - ["Product Description", "Organic Romaine Hearts"], - ["Quantity", "5000"], - ["Unit of Measure", "lbs"], - ["Event Type (CTE)", "cooling"], - ["Event Date", "2026-03-12"], - ["Event Time", "00:00:00 UTC"], - ["Location GLN", "0061414100014"], - ["Location Name", "Salinas Valley Cooler #1"], - ["Cooling Date", "2026-03-12"], - ["Temperature (°F)", "35.24"], - ["Reference Document Number", "COOL-SVF-2026-0312-001"], - ["Source Document", "02_cooling.csv"], - [ - "Record Hash (SHA-256)", - "2e8c5a1b4d7f0936e2a5b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a9b2c5d8e1", - ], - [ - "Chain Hash", - "a4b7c0d3e6f9a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3a6b9c2d5e8f1a4b7", - ], - ], - fdaAnnotation: - "Mapped to FDA Cooling Date and Temperature columns. Same TLC links this row to the harvesting row above for sortable recall scope.", - }, - { - cte: "§1.1340", - title: "Shipping", - subtitle: - "Transfer event. Adds Ship-From / Ship-To facilities with GLN identifiers, the FDA's expected join keys.", - csvHeader: - "traceability_lot_code,product_description,quantity,unit_of_measure,ship_date,ship_from_location,ship_to_location,ship_from_gln,ship_to_gln,carrier_name,po_number,reference_document", - csvRows: [ - "LOT-ROM-2026-0312A-PK,Organic Romaine Hearts 3ct,800,cases,2026-03-14,FreshCut Processing,MegaMart Distribution Center,0061414100038,0061414100045,FedEx Freight,PO-MM-2026-7201,BOL-CFS-2026-0313-001", - "LOT-ROM-2026-0312A-PK,Organic Romaine Hearts 3ct,800,cases,2026-03-14,FreshCut Processing,Premier Grocery Warehouse,0061414100038,0061414100052,Cold Express Logistics,PO-PG-2026-3388,BOL-CFS-2026-0313-002", - "LOT-ROM-2026-0312B-PK,Chopped Romaine 12oz Bag,2800,bags,2026-03-14,FreshCut Processing,MegaMart Distribution Center,0061414100038,0061414100045,FedEx Freight,PO-MM-2026-7202,BOL-CFS-2026-0313-003", - ], - canonical: `{ - "event_id": "5b2f8c1e-7d40-4a9b-8e15-2c7a0f4b9d63", - "tenant_id": "9d2b1c4f-7e88-4f12-9c1a-6f0e2d3a8b71", - "schema_version": 1, - "source_system": "csv", - "event_type": "shipping", - "event_timestamp": "2026-03-14T00:00:00+00:00", - "traceability_lot_code": "LOT-ROM-2026-0312A-PK", - "product_reference": "Organic Romaine Hearts 3ct", - "quantity": 800, - "unit_of_measure": "cases", - "from_facility_reference": "0061414100038", - "to_facility_reference": "0061414100045", - "kdes": { - "ship_date": "2026-03-14", - "ship_from_gln": "0061414100038", - "ship_from_location": "FreshCut Processing", - "ship_to_gln": "0061414100045", - "ship_to_location": "MegaMart Distribution Center", - "carrier": "FedEx Freight", - "po_number": "PO-MM-2026-7201", - "reference_document_number": "BOL-CFS-2026-0313-001" - }, - "confidence_score": 1.0, - "status": "active", - "sha256_hash": "7f3a0c5d8e1b4f7a0c3d6e9f2a5b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a90", - "chain_hash": "b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a9b2c5d8e1f4a7b0c3d6e9f2a5b8c1" -}`, - canonicalAnnotation: - "Both Ship-From and Ship-To GLNs preserved as structured KDEs. Carrier and PO travel in the kdes map.", - fdaRow: [ - ["Traceability Lot Code (TLC)", "LOT-ROM-2026-0312A-PK"], - ["Product Description", "Organic Romaine Hearts 3ct"], - ["Quantity", "800"], - ["Unit of Measure", "cases"], - ["Event Type (CTE)", "shipping"], - ["Event Date", "2026-03-14"], - ["Event Time", "00:00:00 UTC"], - ["Ship From GLN", "0061414100038"], - ["Ship From Name", "FreshCut Processing"], - ["Ship To GLN", "0061414100045"], - ["Ship To Name", "MegaMart Distribution Center"], - ["Ship Date", "2026-03-14"], - ["Carrier", "FedEx Freight"], - ["Reference Document Number", "BOL-CFS-2026-0313-001"], - ["Source Document", "04_shipping.csv"], - [ - "Record Hash (SHA-256)", - "7f3a0c5d8e1b4f7a0c3d6e9f2a5b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a90", - ], - [ - "Chain Hash", - "b8c1d4e7f0a3b6c9d2e5f8a1b4c7d0e3f6a9b2c5d8e1f4a7b0c3d6e9f2a5b8c1", - ], - ], - fdaAnnotation: - "Mapped to FDA Ship From / Ship To GLN + Name columns (auditor join keys). Facility names redact to [REDACTED] in the default export (#1219); GLNs always emit.", - }, -]; - -function Pane({ children, label, Icon }: { children: React.ReactNode; label: string; Icon: LucideIcon }) { - return ( - -
-
-
{children}
-
- ); -} - -function Arrow({ note }: { note: string }) { - return ( -
-
- ); -} - -function StepBlock({ step, index }: { step: Step; index: number }) { - return ( -
{`Step ${index + 1} · CTE ${step.cte}`}} - title={step.title} - description={step.subtitle} - > -
- {/* Column A: raw CSV */} - -
-            {step.csvHeader}
-            {"\n"}
-            {step.csvRows.join("\n")}
-          
-
- - - - {/* Column B: canonical TraceabilityEvent */} - -
-            {step.canonical}
-          
-
- - - - {/* Column C: FDA spreadsheet row */} - -
- {step.fdaRow.map(([col, val]) => ( -
-
{col}
-
{val}
-
- ))} -
-
-
-
- ); -} - export default function TransformationProofPage() { return (
@@ -322,7 +29,7 @@ export default function TransformationProofPage() { href="/proof" className="text-ui text-re-text-secondary no-underline transition-colors duration-120 hover:text-re-text-primary motion-reduce:transition-none" > - ← Proof + ← Proof

- Three CTEs, three transformations. Real production code, synthetic - data. Every row you see comes from{" "} + The pipeline is: raw supplier CSV, canonical TraceabilityEvent, then + the FDA-oriented sortable row. The canonical event shape lives in{" "} - sample_data/ + services/shared/canonical_event.py {" "} - and matches the canonical event shape and FDA spreadsheet column - spec used in production. + and the export columns in{" "} + + services/ingestion/app/fda_export_service.py + + .

- {STEPS.map((step, i) => ( - - ))} - - {/* CTA */} -
+
-

- Verify this for yourself. -

-

- Download the same sample CSVs, run the canonical pipeline, and - verify the SHA-256 + chain hashes with our open verifier. +

Worked example

+

No data yet

+

+ There is no worked example with real data to show here. Run the pipeline on your + own records and verify the resulting export bundle yourself.

-

- Code references: canonical shape ·{" "} - services/shared/canonical_event.py · FDA columns ·{" "} - services/ingestion/app/fda_export_service.py -

diff --git a/frontend/src/app/walkthrough/page.tsx b/frontend/src/app/walkthrough/page.tsx index 88e484afb..a9d2525fb 100644 --- a/frontend/src/app/walkthrough/page.tsx +++ b/frontend/src/app/walkthrough/page.tsx @@ -27,7 +27,7 @@ const TIMELINE = [ time: 'T+0:00', title: 'FDA request arrives', icon: Clock, - description: 'The FDA sends a records request under 21 CFR 1.1455: "Provide all traceability records for Romaine Lettuce lots R-2026-0312 through R-2026-0318, from farm to retail, within 24 hours."', + description: 'The FDA sends a records request under 21 CFR 1.1455: provide all traceability records for the implicated lots, from farm to retail, within 24 hours.', detail: 'This is an illustrative scenario. Under §1.1455(c), the FDA can request records for products on the Food Traceability List, and you must produce a sortable electronic spreadsheet within 24 hours. Real timing varies by completeness of upstream supplier data.', color: 'red', }, @@ -35,7 +35,7 @@ const TIMELINE = [ time: 'T+0:02', title: 'Request case created in RegEngine', icon: FileText, - description: 'An operator creates a Request Case, scoping the affected lots, products, and facilities. RegEngine immediately identifies 47 traceability events across 3 suppliers and 5 facilities.', + description: 'An operator creates a Request Case, scoping the affected lots, products, and facilities. RegEngine identifies the in-scope traceability events across the affected suppliers and facilities.', detail: 'The system searches canonical records by lot code, product, and facility reference. Events from different suppliers and source systems are already normalized into a common schema.', color: 'blue', }, @@ -43,7 +43,7 @@ const TIMELINE = [ time: 'T+0:05', title: 'Data quality gaps surface', icon: Search, - description: 'The rules engine evaluates all 47 events against 36 FSMA 204 validation rules (33 stateless + 3 cross-event). Results: 38 pass, 6 have warnings, 3 have blocking defects.', + description: 'The rules engine evaluates each in-scope event against the FSMA 204 validation rules and separates passes, warnings, and blocking defects.', detail: null, color: 'amber', }, @@ -55,9 +55,9 @@ const TIMELINE = [ detail: null, color: 'red', defects: [ - { lot: 'R-2026-0312', issue: 'Missing required KDE: cooling_date', severity: 'critical' }, - { lot: 'R-2026-0312', issue: 'Identity conflict: "Valley Fresh Farms LLC" vs "Valley Fresh" (>=85% match, unresolved)', severity: 'critical' }, - { lot: 'R-2026-0314', issue: 'Invalid unit_of_measure: "bushels" not in FSMA standard units', severity: 'critical' }, + { issue: 'Missing required KDE: cooling_date', severity: 'critical' }, + { issue: 'Identity conflict between two supplier name variants at or above the match threshold, unresolved', severity: 'critical' }, + { issue: 'Invalid unit_of_measure: "bushels" not in FSMA standard units', severity: 'critical' }, ], }, { @@ -88,15 +88,12 @@ const TIMELINE = [ time: 'T+1:35', title: 'FDA response package assembled', icon: Package, - description: 'The operator clicks "Assemble Package." RegEngine generates an immutable, SHA-256 hashed package containing all 47 records, rule evaluations, exception resolutions, and a manifest listing each file\'s hash.', + description: 'The operator clicks "Assemble Package." RegEngine generates an immutable, SHA-256 hashed package containing the in-scope records, rule evaluations, exception resolutions, and a manifest listing each file\'s hash.', detail: null, color: 'brand', packageDetails: [ - { label: 'Records included', value: '47 of 47' }, - { label: 'Rule evaluations', value: '47 passed' }, - { label: 'Exceptions resolved', value: '3 of 3' }, - { label: 'Package version', value: 'v1 (immutable)' }, - { label: 'SHA-256 manifest hash', value: 'a7c3e9f2...d1b84c' }, + { label: 'Package', value: 'Immutable once assembled' }, + { label: 'SHA-256 manifest', value: 'Included with the package' }, { label: 'Format', value: 'FDA 21 CFR 1.1455 sortable spreadsheet + EPCIS 2.0 JSON-LD' }, ], }, @@ -104,7 +101,7 @@ const TIMELINE = [ time: 'T+1:40', title: 'Package submitted to FDA', icon: CheckCircle2, - description: 'The package is submitted with a recorded submission method, recipient, and timestamp. The request case moves to "submitted" status. Total time: 1 hour 40 minutes.', + description: 'The package is submitted with a recorded submission method, recipient, and timestamp. The request case moves to "submitted" status.', detail: 'The SHA-256 manifest lets the FDA or your auditor check that the package files still match the manifest packaged with them. The verify_chain.py script can independently re-run that check. It is a self-consistency check, not a signature: the manifest is not signed, so it does not by itself establish who produced the package. Downstream message-bus signature verification is rolling out and not yet strict-mode by default.', color: 'emerald', }, @@ -123,7 +120,7 @@ export default function WalkthroughPage() { title={ <> The FDA gives you 24 hours.
- Here's how you respond in 2. + Here's how the response works. } description="A step-by-step walkthrough of an illustrative FDA records-request scenario, from messy supplier data to a hash-manifested response package anyone can re-check." @@ -134,10 +131,10 @@ export default function WalkthroughPage() {