diff --git a/frontend/src/__tests__/pages/about-copy.test.tsx b/frontend/src/__tests__/pages/about-copy.test.tsx index 0eb030688..3b596b061 100644 --- a/frontend/src/__tests__/pages/about-copy.test.tsx +++ b/frontend/src/__tests__/pages/about-copy.test.tsx @@ -16,13 +16,15 @@ describe('about page public copy', () => { ); }); - it('scopes early tester feedback, and keeps the published price', () => { + it('scopes early tester feedback, and shows no dollar amounts (A-2169)', () => { expect(source).toContain( 'No committee approvals. Early tester feedback is scoped by', ); expect(source).not.toContain('Design-partner feedback is scoped to'); expect(source).not.toContain('quarterly release trains'); - expect(source).toContain('$425/mo'); + expect(source).toContain('Plans are priced per facility, and we set terms with you in a written proposal.'); + expect(source).not.toMatch(/\$\s?\d/); + expect(source).not.toContain('$425'); }); it('renders the two sentences as continuous copy', () => { @@ -34,7 +36,9 @@ describe('about page public copy', () => { expect(text).toContain( 'No committee approvals. Early tester feedback is scoped by the founder and ships when the change is ready to verify, without waiting on a large release committee.', ); - expect(text).toContain('$425/mo'); + expect(text).toContain('Plans are priced per facility, and we set terms with you in a written proposal.'); + expect(text).not.toMatch(/\$\s?\d/); + expect(text).not.toContain('$425'); expect(text).not.toContain('Customers can independently verify'); expect(text).not.toContain('Design-partner feedback is scoped to'); expect(text).not.toContain('quarterly release trains'); diff --git a/frontend/src/__tests__/pages/pre-revenue-copy.test.ts b/frontend/src/__tests__/pages/pre-revenue-copy.test.ts index 62bf50397..9c373e82a 100644 --- a/frontend/src/__tests__/pages/pre-revenue-copy.test.ts +++ b/frontend/src/__tests__/pages/pre-revenue-copy.test.ts @@ -4,6 +4,9 @@ import { describe, expect, it } from 'vitest'; const read = (path: string) => readFileSync(resolve(process.cwd(), path), 'utf8'); +// A dollar sign followed by a digit (template literals like `${x}` do not match). +const DOLLAR_AMOUNT = /\$\s?\d/; + const PUBLIC_FILES = [ 'src/components/pricing/PricingPageClient.tsx', 'src/app/pricing/page.tsx', @@ -47,16 +50,69 @@ describe('pre-revenue public copy', () => { } }); - it('shows no hardcoded prices on pricing surfaces', () => { + it('pricing surfaces take prices only from the approved terms module', () => { const client = read('src/components/pricing/PricingPageClient.tsx'); - expect(client).not.toContain('$425'); - expect(client).toContain('Founding rate\n'); + expect(client).toContain("from '@/lib/pricing-terms'"); + expect(client).not.toMatch(/tier\.(gaAnnual|gaMonthly|partnerAnnual|partnerMonthly)/); + expect(client).not.toContain('50% off'); + expect(client).not.toMatch(/annual billing/i); const page = read('src/app/pricing/page.tsx'); - expect(page).not.toContain('$425'); + expect(page).toContain("from '@/lib/pricing-terms'"); expect(page).not.toMatch(/gaMonthly: \d/); - expect(page).toContain('Pricing is temporarily unavailable'); - expect(page).toContain('What does the Founding rate include?'); + expect(page).toContain('How does the pilot work?'); + }); + + it('approved terms module carries no dollar amounts, only per-facility and contact copy (A-2169)', () => { + const terms = read('src/lib/pricing-terms.ts'); + expect(terms).not.toMatch(DOLLAR_AMOUNT); + expect(terms).toContain("'Contact us for pricing.'"); + expect(terms).toContain("'Plans are priced per facility.'"); + expect(terms).toContain('90 days on 1 facility'); + expect(terms).toContain('credited toward your first subscription invoice'); + }); + + it.each([ + ...PUBLIC_FILES, + 'src/app/about/page.tsx', + 'src/app/buyer-programs/page.tsx', + 'src/lib/pricing-terms.ts', + 'src/lib/roi-calculator-data.ts', + ])('%s carries no dollar amounts and no published-pricing claim (A-2169)', (file) => { + const source = read(file); + expect(source, `${file} still shows a dollar amount`).not.toMatch(DOLLAR_AMOUNT); + expect(source, `${file} still claims published pricing`).not.toMatch(/published pricing|transparent pricing|list prices on our website/i); + }); + + it('ROI calculator shows hours, with no hidden platform cost, payback or ROI', () => { + const data = read('src/lib/roi-calculator-data.ts'); + expect(data).not.toMatch(/platformCost|paybackMonths|netBenefit|annual-revenue/); + const client = read('src/app/tools/roi-calculator/components/ROICalculatorClient.tsx'); + expect(client).toContain('hrs/yr'); + expect(client).not.toMatch(/netBenefit|riskReduction|platform cost/i); + }); + + it('buyer-programs carries no Walmart or Kroger dates', () => { + const source = read('src/app/buyer-programs/page.tsx'); + const start = source.indexOf('Walmart'); + const end = source.indexOf('What we export', start); + expect(start).toBeGreaterThan(-1); + const retailerBlock = source.slice(start, end > start ? end : undefined); + expect(retailerBlock).not.toMatch(/\b(January|February|March|April|May|June|July|August|September|October|November|December) \d{4}\b/); + expect(retailerBlock).not.toMatch(/August 1, 2025|June 30, 2025|December 2023|January 20, 2026|87 FR 70910|90 FR 38084/); + }); + + it.each([ + ...PUBLIC_FILES, + 'src/app/about/page.tsx', + 'src/app/buyer-programs/page.tsx', + 'src/lib/pricing-terms.ts', + ])('%s carries no stale prices, retailer deadlines, or billed-annually terms', (file) => { + const source = read(file); + for (const stale of ['$425', '$849', '$850', '$549', '$1,099', '$639', '$1,275', 'billed annually']) { + expect(source, `${file} still contains "${stale}"`).not.toContain(stale); + } + expect(source).not.toMatch(/sysco|albertsons/i); }); it('home page and root layout never say pre-revenue (metadata and JSON-LD included)', () => { diff --git a/frontend/src/app/about/page.tsx b/frontend/src/app/about/page.tsx index 9446d6b6f..79401bc16 100644 --- a/frontend/src/app/about/page.tsx +++ b/frontend/src/app/about/page.tsx @@ -20,11 +20,11 @@ import { Button } from "@/components/ui/button"; import { Card } from "@/components/ui/card"; export const metadata: Metadata = { - title: "About RegEngine | FSMA 204 Compliance Infrastructure", + title: "About RegEngine | FSMA 204 Recordkeeping Infrastructure", description: "RegEngine was built by Christopher Sellers (AmeriCorps alum, former Senate staffer, and solo technical founder) to make FSMA 204 compliance accessible to mid-market food companies without six-figure platforms.", openGraph: { - title: "About RegEngine | FSMA 204 Compliance Infrastructure", + title: "About RegEngine | FSMA 204 Recordkeeping Infrastructure", description: "RegEngine was built by Christopher Sellers to make FSMA 204 compliance accessible to mid-market food companies without six-figure platforms.", url: "https://regengine.co/about", @@ -64,7 +64,7 @@ const PRINCIPLES = [ Icon: Target, title: "Accessible by default", description: - "Mid-market food companies deserve modern compliance tooling. RegEngine starts at $425/mo (billed annually).", + "Mid-market food companies deserve modern recordkeeping tools for FSMA 204. Plans are priced per facility, and we set terms with you in a written proposal.", }, { Icon: Shield, @@ -76,7 +76,7 @@ const PRINCIPLES = [ Icon: Lightbulb, title: "Transparent operations", description: - "Published pricing. Public trust center. Open security posture. No enterprise sales gates hiding what you actually get.", + "Per-facility pricing set in writing. Public trust center. Open security posture. No enterprise sales gates hiding what you actually get.", }, { Icon: Sparkles, @@ -102,7 +102,7 @@ export default function AboutPage() { } description={ <> - RegEngine is FSMA 204 compliance infrastructure built for mid-market + RegEngine is FSMA 204 recordkeeping infrastructure built for mid-market food companies, by someone who saw the gap from inside government, enterprise sales, and the regulatory stack itself. @@ -253,7 +253,7 @@ export default function AboutPage() {

- Ready to talk compliance? + Ready to organize your traceability records?

Book a free gap analysis call. We'll review your current FSMA 204 diff --git a/frontend/src/app/buyer-programs/page.tsx b/frontend/src/app/buyer-programs/page.tsx index 69700dba1..c5921b894 100644 --- a/frontend/src/app/buyer-programs/page.tsx +++ b/frontend/src/app/buyer-programs/page.tsx @@ -6,6 +6,7 @@ import { Button } from "@/components/ui/button"; import { Callout } from "@/components/ui/callout"; import { Card } from "@/components/ui/card"; import { Container } from "@/components/layout/container"; +import { PILOT_TERMS, PRICING_BASIS, PRICING_CONTACT } from "@/lib/pricing-terms"; export const metadata: Metadata = { title: "Buyer traceability programs | RegEngine", @@ -82,38 +83,23 @@ export default function BuyerProgramsPage() {

  • • ASN containing KDEs
  • • SSCC-18 on food pallets
  • • GS1-128 on food cases
  • -
  • • As of August 1, 2025 Walmart and Sam's Club require all food and beverage ASN+packaging
  • -
  • • FTL by that date; other products ASAP
  • +
  • • Confirm current scope and timing with Walmart directly
  • We do not make you Walmart-ready, transmit ASN on Retail Link, certify labels, or assess chargebacks.

    - -

    - Albertsons Companies -

    -

    - Source: Letter dated 17 September 2025 (PDF at suppliers.safeway.com) -

    -
      -
    • • All food and non-alcoholic beverages
    • -
    • • Albertsons deadline January 1, 2027
    • -
    • • FDA enforcement not before July 20, 2028
    • -
    -
    -

    Kroger Food Traceability Policy

    - Source: December 2023 first-party letter + Source: first-party Kroger supplier letter

    - A December 2023 first-party Kroger letter stated a June 30, 2025 supplier transition. We have not found a later first-party update. The compliance date under the rule remains January 20, 2026 (87 FR 70910); the extension is only proposed (90 FR 38084). FDA has said it will not enforce the Food Traceability Rule before July 20, 2028, following a Congressional directive. This is not a claim that anyone is Kroger-ready. + Kroger has sent suppliers a first-party traceability letter. Confirm current scope and timing with Kroger directly. FDA has said it will not enforce the Food Traceability Rule before July 20, 2028, following a Congressional directive. This is not a claim that anyone is Kroger-ready.

    @@ -165,12 +151,12 @@ export default function BuyerProgramsPage() { Pricing -
    - $425 - per month, billed annually -
    +
      +
    • • {PRICING_BASIS} {PRICING_CONTACT}
    • +
    • • {PILOT_TERMS}
    • +

    - No facility/CTE cap. No SLA. No retailer-specific benchmark. No quarterly compliance review. No audit. No readiness score. No FDA/buyer approval. No three-tier ladder or strikethrough list prices. + No CTE cap. No SLA. No retailer-specific benchmark. No quarterly compliance review. No audit. No readiness score. No FDA/buyer approval. No three-tier ladder or strikethrough list prices.

    diff --git a/frontend/src/app/compare/foodlogiq/page.tsx b/frontend/src/app/compare/foodlogiq/page.tsx index e23f8d0b5..6a8d176ef 100644 --- a/frontend/src/app/compare/foodlogiq/page.tsx +++ b/frontend/src/app/compare/foodlogiq/page.tsx @@ -8,12 +8,12 @@ import { PageHeader } from "@/components/layout/page-header"; import { CheckCircle, XCircle, Minus, ArrowRight, Shield, Clock, Code, Zap } from "lucide-react"; export const metadata: Metadata = { - title: "RegEngine vs FoodLogiQ (Aptean): FSMA 204 Compliance Comparison", + title: "RegEngine vs FoodLogiQ (Aptean): FSMA 204 Traceability Comparison", description: - "Compare RegEngine and FoodLogiQ for FSMA 204 compliance. See how self-serve setup, rule evaluation, and transparent pricing differ from enterprise-only deployment.", + "Compare RegEngine and FoodLogiQ for FSMA 204 traceability recordkeeping. See how self-serve setup, rule evaluation, and per-facility pricing differ from enterprise-only deployment.", openGraph: { - title: 'RegEngine vs FoodLogiQ (Aptean): FSMA 204 Compliance Comparison', - description: 'Compare RegEngine and FoodLogiQ for FSMA 204 compliance. See how self-serve setup, rule evaluation, and transparent pricing differ from enterprise-only deployment.', + title: 'RegEngine vs FoodLogiQ (Aptean): FSMA 204 Traceability Comparison', + description: 'Compare RegEngine and FoodLogiQ for FSMA 204 traceability recordkeeping. See how self-serve setup, rule evaluation, and per-facility pricing differ from enterprise-only deployment.', url: 'https://regengine.co/compare/foodlogiq', type: 'website', }, @@ -28,7 +28,6 @@ const FEATURES = [ { feature: "CSV upload and JSON events API", regengine: "check", competitor: "partial", note: "Both; verify FoodLogiQ's current ingestion surface" }, { feature: "Supplier portal with compliance scoring", regengine: "check", competitor: "check", note: "Both offer supplier management" }, { feature: "Recall drills", regengine: "check", competitor: "check", note: "FoodLogiQ's original strength" }, - { feature: "Published pricing on website", regengine: "check", competitor: "x", note: "List price from $849/mo (Founding rates from $425/mo, billed annually) vs custom enterprise quotes" }, ]; const WHY_SWITCH = [ @@ -38,7 +37,7 @@ const WHY_SWITCH = [ { title: "Self-serve onboarding", desc: "RegEngine evaluates your first CSV against the FSMA 204 rule set on upload, with no implementation project to get a readiness answer. FoodLogiQ ships through enterprise implementation; verify current onboarding timelines with their team." }, { title: "Purpose-built for FSMA 204", desc: "FoodLogiQ originated as recall management; FSMA 204 capabilities were added later per their public roadmap. RegEngine was designed for the Food Traceability Rule from day one with KDE validation and cross-event integrity checks." }, { title: "Open data egress", desc: "RegEngine ships a public API, OpenAPI docs, and CSV export of every record. Confirm FoodLogiQ's current data-egress options with their team before committing." }, - { title: "Published pricing", desc: "Facility-based list pricing from $849/mo, with Founding rates from $425/mo (billed annually) and no multi-year commitment required. FoodLogiQ pricing is custom-quoted, so request both to compare for your facility count." }, + { title: "Per-facility pricing", desc: "RegEngine plans are priced per facility. Contact us for pricing. FoodLogiQ pricing is custom-quoted, so request both to compare for your facility count." }, ]; @@ -71,7 +70,7 @@ export default function FoodLogiQCompare() { } description={ <> - FoodLogiQ was built for enterprise recall management. RegEngine was built for FSMA 204 compliance from day one. + FoodLogiQ was built for enterprise recall management. RegEngine was built for FSMA 204 recordkeeping from day one. FoodLogiQ was acquired by Aptean in 2023; check their roadmap for current direction. } diff --git a/frontend/src/app/compare/repositrak/page.tsx b/frontend/src/app/compare/repositrak/page.tsx index ce555458f..1a241af85 100644 --- a/frontend/src/app/compare/repositrak/page.tsx +++ b/frontend/src/app/compare/repositrak/page.tsx @@ -8,12 +8,12 @@ import { PageHeader } from "@/components/layout/page-header"; import { CheckCircle, XCircle, Minus, ArrowRight, Shield, ShoppingCart, Zap, Code } from "lucide-react"; export const metadata: Metadata = { - title: "RegEngine vs ReposiTrak: FSMA 204 Compliance Comparison", + title: "RegEngine vs ReposiTrak: FSMA 204 Traceability Comparison", description: - "Compare RegEngine and ReposiTrak for FSMA 204 compliance. Deep rule validation vs retailer compliance tracking.", + "Compare RegEngine and ReposiTrak for FSMA 204 traceability recordkeeping. Deep rule validation vs retailer compliance tracking.", openGraph: { - title: 'RegEngine vs ReposiTrak: FSMA 204 Compliance Comparison', - description: 'Compare RegEngine and ReposiTrak for FSMA 204 compliance. Deep rule validation vs retailer compliance tracking.', + title: 'RegEngine vs ReposiTrak: FSMA 204 Traceability Comparison', + description: 'Compare RegEngine and ReposiTrak for FSMA 204 traceability recordkeeping. Deep rule validation vs retailer compliance tracking.', url: 'https://regengine.co/compare/repositrak', type: 'website', }, @@ -28,11 +28,10 @@ const FEATURES = [ { feature: "CSV upload and JSON events API", regengine: "check", competitor: "partial", note: "Both; verify ReposiTrak's current ingestion options" }, { feature: "Retailer compliance network", regengine: "partial", competitor: "check", note: "ReposiTrak's core strength" }, { feature: "Supplier portal", regengine: "check", competitor: "check", note: "Both offer supplier management" }, - { feature: "Published pricing on website", regengine: "check", competitor: "x", note: "List price from $849/mo (Founding rates from $425/mo, billed annually) vs custom retailer quotes" }, ]; const WHY_SWITCH = [ - { title: "Validation, not just submission tracking", icon: Zap, desc: "ReposiTrak focuses on supplier-data submission tracking. RegEngine validates whether the underlying data is FSMA 204 compliant, checking KDEs, cross-event integrity, and mass balance. You can use both." }, + { title: "Validation, not just submission tracking", icon: Zap, desc: "ReposiTrak focuses on supplier-data submission tracking. RegEngine checks the underlying CTE/KDE records for gaps, including KDE coverage, cross-event integrity, and mass balance. Checks are advisory and RegEngine does not certify compliance. You can use both." }, { title: "Works beyond one retailer", icon: Shield, desc: "ReposiTrak is optimized for retailer-supplier compliance mandates. RegEngine works across your supply chain regardless of which retailers you serve." }, { title: "Public API and open egress", icon: Code, desc: "RegEngine ships a public REST API, OpenAPI spec, JSON events API, and CSV export at any time. Confirm ReposiTrak's current integration options for your stack." }, { title: "Complement your retailer tools", icon: ShoppingCart, desc: "Use ReposiTrak for retailer compliance tracking AND RegEngine for FSMA 204 validation. They solve adjacent problems." }, @@ -64,8 +63,8 @@ export default function ReposiTrakCompare() { title={"RegEngine vs ReposiTrak"} description={ <> - ReposiTrak connects suppliers to retailer compliance mandates. RegEngine validates your traceability data - against FSMA 204 rules before the FDA asks to see it. + ReposiTrak connects suppliers to retailer compliance mandates. RegEngine helps you check CTE/KDE gaps + in your traceability records before you assemble an FDA-oriented export. Checks are advisory. } /> diff --git a/frontend/src/app/compare/tracegains/page.tsx b/frontend/src/app/compare/tracegains/page.tsx index caf4bd9a0..8b3c5fdff 100644 --- a/frontend/src/app/compare/tracegains/page.tsx +++ b/frontend/src/app/compare/tracegains/page.tsx @@ -8,12 +8,12 @@ import { PageHeader } from "@/components/layout/page-header"; import { CheckCircle, XCircle, Minus, ArrowRight, Shield, FileText, Zap, Users } from "lucide-react"; export const metadata: Metadata = { - title: "RegEngine vs TraceGains: FSMA 204 Compliance Comparison", + title: "RegEngine vs TraceGains: FSMA 204 Traceability Comparison", description: - "Compare RegEngine and TraceGains for FSMA 204 compliance. Supplier document management vs CTE-level traceability rule evaluation.", + "Compare RegEngine and TraceGains for FSMA 204 traceability recordkeeping. Supplier document management vs CTE-level traceability rule evaluation.", openGraph: { - title: 'RegEngine vs TraceGains: FSMA 204 Compliance Comparison', - description: 'Compare RegEngine and TraceGains for FSMA 204 compliance. Supplier document management vs CTE-level traceability rule evaluation.', + title: 'RegEngine vs TraceGains: FSMA 204 Traceability Comparison', + description: 'Compare RegEngine and TraceGains for FSMA 204 traceability recordkeeping. Supplier document management vs CTE-level traceability rule evaluation.', url: 'https://regengine.co/compare/tracegains', type: 'website', }, @@ -28,7 +28,6 @@ const FEATURES = [ { feature: "CSV upload and JSON events API", regengine: "check", competitor: "partial", note: "Both; verify TraceGains' current ingestion options" }, { feature: "Supplier document management (COAs, specs)", regengine: "partial", competitor: "check", note: "TraceGains' core strength" }, { feature: "Supplier onboarding portal", regengine: "check", competitor: "check", note: "Both offer supplier management" }, - { feature: "Published pricing on website", regengine: "check", competitor: "x", note: "List price from $849/mo (Founding rates from $425/mo, billed annually) vs custom quotes" }, ]; const WHY_SWITCH = [ diff --git a/frontend/src/app/compliance/labels/page.tsx b/frontend/src/app/compliance/labels/page.tsx index 71a136150..53781b5bb 100644 --- a/frontend/src/app/compliance/labels/page.tsx +++ b/frontend/src/app/compliance/labels/page.tsx @@ -168,7 +168,7 @@ export default function LabelsPage() { {/* Input Form */} diff --git a/frontend/src/app/fsma-204/page.tsx b/frontend/src/app/fsma-204/page.tsx index a7157ad16..82be30ff4 100644 --- a/frontend/src/app/fsma-204/page.tsx +++ b/frontend/src/app/fsma-204/page.tsx @@ -11,7 +11,7 @@ import { Card } from "@/components/ui/card"; export const metadata: Metadata = { title: "FSMA 204 Compliance Guide: What Your Farm Needs to Know | RegEngine", description: - "Plain-English guide to the FDA Food Traceability Rule. Learn what FSMA 204 requires, whether your products are covered, and how to get compliant. No developer needed.", + "Plain-English guide to the FDA Food Traceability Rule. Learn what FSMA 204 requires, whether your products are covered, and how to organize your traceability records. No developer needed.", openGraph: { title: 'FSMA 204 Compliance Guide: What Your Farm Needs to Know', description: 'Plain-English guide to the FDA Food Traceability Rule: what it requires, whether your products are covered, and how to comply.', diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx index 4fefdd330..15041809f 100644 --- a/frontend/src/app/pricing/page.tsx +++ b/frontend/src/app/pricing/page.tsx @@ -1,34 +1,29 @@ import type { Metadata } from 'next'; -import Link from 'next/link'; import { PricingPageClient } from '@/components/pricing/PricingPageClient'; import type { PricingComparisonRow, PricingFaqItem } from '@/components/pricing/PricingPageClient'; -import { Container } from '@/components/layout/container'; -import { Button } from '@/components/ui/button'; +import { PILOT_TERMS, PRICING_BASIS, PRICING_SUMMARY } from '@/lib/pricing-terms'; export const metadata: Metadata = { title: 'FSMA 204 Pricing | RegEngine', - description: 'FSMA 204 traceability workspace pricing with transparent Founding rate figures. Onboarding terms are controlled by your agreement.', + description: `FSMA 204 recordkeeping workspace pricing. ${PRICING_SUMMARY}`, openGraph: { title: 'FSMA 204 Pricing | RegEngine', - description: 'FSMA 204 traceability workspace pricing with transparent Founding rate figures. Onboarding terms are controlled by your agreement.', + description: `FSMA 204 recordkeeping workspace pricing. ${PRICING_SUMMARY}`, url: 'https://regengine.co/pricing', type: 'website', }, }; -// Cache pricing for 1 hour server-side so the page stays fast even when -// the billing service is slow. When billing is unreachable the page renders -// an honest unavailable state instead of hardcoded prices. +// Cache plan copy for 1 hour server-side so the page stays fast even when +// the billing service is slow. Public pricing copy comes from +// lib/pricing-terms and carries no dollar amounts; the billing service only +// refines plan descriptions and feature lists. export const revalidate = 3600; interface BillingPlan { id: string; name: string; description?: string; - ga_monthly?: number; - ga_annual?: number; - partner_monthly?: number; - partner_annual?: number; features?: string[]; } @@ -57,13 +52,13 @@ async function fetchBillingPlans(): Promise { if (!Array.isArray(plans) || plans.length === 0) return null; return plans; } catch { - // Billing service unreachable: caller renders the unavailable state. + // Billing service unreachable: caller falls back to static plan copy. return null; } } -// Static tier copy (names, feature lists, CTAs). Prices come only from the -// billing service; nothing here may carry a number. +// Static tier copy (names, feature lists, CTAs). Nothing here may carry a +// price; pricing copy comes only from lib/pricing-terms. const PRICING_TIERS = [ { id: 'base', @@ -129,7 +124,7 @@ const COMPETITOR_COMPARISON: PricingComparisonRow[] = [ { feature: 'Self-Serve Signup', 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' }, + { feature: 'Pricing Model', regengine: 'Per-facility pricing on request; agreement controls', foodlogiq: 'Validate directly', repositrak: 'Validate directly', tracegains: 'Validate directly' }, ]; /** Keep Preview on any live billing feature string that names EPCIS without a status label. */ @@ -143,75 +138,33 @@ function ensureEpcisPreviewLabel(features: string[]): string[] { const FAQ: PricingFaqItem[] = [ { q: 'How do I choose between Base, Standard, and Premium?', a: 'It comes down to facility count. Base covers 1 facility with up to 500 CTEs/month. Standard (Beta) handles 2 to 3 facilities with unlimited CTEs. Premium (Beta) is for 4+ facilities with dedicated support and quarterly compliance reviews.' }, - { q: 'What does the Founding rate include?', a: 'Founding rate discounts are documented in the executed order form or design-partner agreement, including term, scope, renewal, taxes, add-ons, plan-change treatment, onboarding, and integration support.' }, + { q: 'What does RegEngine cost?', a: `${PRICING_SUMMARY} Founding design partner terms apply under an executed design-partner agreement.` }, + { q: 'How does the pilot work?', a: PILOT_TERMS }, { q: 'Can I switch plans anytime?', a: 'Plan changes are handled under your executed order form or design-partner agreement. We scope upgrades, downgrades, facility count, and billing changes before applying them.' }, - { q: 'Do you offer annual billing?', a: 'Annual and monthly billing can be scoped during procurement. Pricing shown is indicative; the executed agreement controls final plan, billing period, and checkout availability.' }, - { q: 'Does my Founding rate ever change?', a: 'Your Founding rate is controlled by the executed order form or design-partner agreement, including renewal, scope, add-ons, taxes, and plan changes.' }, + { q: 'How is billing set up?', a: `${PRICING_BASIS} Your executed order form or design-partner agreement controls scope, taxes, add-ons, and renewal.` }, { q: 'What integrations are available?', a: 'Core APIs and export flows are available today. ERP, retailer, and partner-system integrations are evaluated per delivery mode: CSV upload, the JSON events API, or custom-scoped implementation. EPCIS 2.0 is in Preview.' }, { q: 'What am I paying for if I must archive externally?', a: 'FSMA 204 requires at least two-year retention of traceability records under 21 CFR 1.1455. RegEngine is a compliance evidence layer with contract-defined retention, not a long-term archive. Your subscription pays for workspace access, ingestion, validation, and export workflows. You keep off-platform archives for long-term retention. See the Trust Center retention guidance for export and archive posture.' }, { q: 'What if the FDA delays enforcement again?', a: 'Major retailers are already requiring traceability data from suppliers regardless of the FDA timeline. RegEngine gives you the tooling and records to support either trigger: the FDA rule or a retailer mandate.' }, - { q: 'Do I need this if I\'m a small farm?', a: 'FSMA 204 applies to entities on the Food Traceability List handling specific foods. Use our free FTL Checker to see if your products are covered.' }, + { q: 'Do I need this if I\'m a small farm?', a: 'FSMA 204 applies to covered persons who manufacture, process, pack, or hold foods on the Food Traceability List. Being on the list is not the same as being a covered person. Use our free FTL Checker as a starting point, not a determination.' }, { q: 'Can I integrate with my existing ERP?', a: 'RegEngine accepts data via API, CSV upload, or scoped ERP integration. Guided onboarding is available for approved design-partner workspaces. Timeline, support, and commercial terms are confirmed during scoping.' }, { q: 'What happens to my data?', a: 'Data is encrypted in transit. Encryption at rest is provided by our managed database and storage providers (see the Trust Center subprocessor list). Tenant data is isolated via PostgreSQL row-level policies; tenant-trust hardening is in active rollout. We do not share or sell your data.' }, ]; export default async function PricingPage() { - // Load live pricing from the billing service. When it is unreachable or - // returns no usable plans, show an honest unavailable state rather than - // any hardcoded figures. + // Live plan copy refines descriptions and features when billing is + // reachable; otherwise the static tier copy is shown. Prices never come + // from here and never appear on this page. const livePlans = await fetchBillingPlans(); - if (!livePlans) { - return ( -
    - -

    - Pricing is temporarily unavailable -

    -

    - We could not load current plan pricing from our billing service, so no figures are shown here. - Plan rates are confirmed in your executed order form or design-partner agreement. -

    -
    - - -
    -
    -
    - ); - } - - const pricingTiers = PRICING_TIERS.flatMap((tier) => { - const live = livePlans.find((p) => p.id === tier.id); - if (!live) return []; - const { ga_monthly, ga_annual, partner_monthly, partner_annual } = live; - if ( - typeof ga_monthly !== 'number' || - typeof ga_annual !== 'number' || - typeof partner_monthly !== 'number' || - typeof partner_annual !== 'number' - ) { - return []; - } - return [{ + const pricingTiers = PRICING_TIERS.map((tier) => { + const live = livePlans?.find((p) => p.id === tier.id); + return { ...tier, - gaMonthly: ga_monthly, - gaAnnual: ga_annual, - partnerMonthly: partner_monthly, - partnerAnnual: partner_annual, - description: live.description ?? tier.description, + description: live?.description ?? tier.description, features: ensureEpcisPreviewLabel( - Array.isArray(live.features) && live.features.length > 0 ? live.features : tier.features, + live && Array.isArray(live.features) && live.features.length > 0 ? live.features : tier.features, ), - }]; + }; }); return ; diff --git a/frontend/src/app/supplier-compliance/page.tsx b/frontend/src/app/supplier-compliance/page.tsx index 263607109..606aa88a6 100644 --- a/frontend/src/app/supplier-compliance/page.tsx +++ b/frontend/src/app/supplier-compliance/page.tsx @@ -74,7 +74,7 @@ const FAQ = [ }, { q: 'What does this cost me?', - a: 'Submitting data through a portal link is free. Your buyer pays for RegEngine. If you want your own RegEngine account to manage traceability across all your buyers, plans start at $425/mo (billed annually) at the Founding rate.', + a: 'Submitting data through a portal link is free. Your buyer pays for RegEngine. If you want your own RegEngine account to manage traceability across all your buyers, plans are priced per facility. Contact us for pricing.', }, ]; @@ -101,7 +101,7 @@ export default function SupplierCompliancePage() {
    -
    +
    -

    Modeled labor-time avoided based on your reported manual hours. Illustrative only.

    -
    - -

    A small fraction of revenue used as a placeholder for compliance-event exposure. Illustrative; not a forecast or fine schedule.

    +

    Modeled labor time avoided per year based on your reported manual hours. Illustrative only.

    -

    Modeled time saved per record. Illustrative only.

    +

    Modeled time saved per record, per year. Illustrative only.

    -

    Modeled annual benefit minus an estimated platform cost. Illustrative only.

    +

    Sum of the two tiles. Illustrative only, not a forecast.

    @@ -80,7 +79,7 @@ export function ROICalculatorClient() { Book a call {' '} and we'll model it against your actual record volume and current - spend. The figures above are an illustrative starting point, not a commitment. + workload. The figures above are an illustrative starting point, not a commitment.

    @@ -88,11 +87,11 @@ export function ROICalculatorClient() {
    Methodology Note

    - Estimates use simple multipliers applied to your reported hours, record volume, and revenue. - We don't have verified customer ROI data yet, and the Founding rate reflects that. + Estimates use simple multipliers applied to your reported hours and record volume, and are shown + in hours per year, not dollars. + We don't have verified customer ROI data yet, and the founding design partner price reflects that. FDA has said it will not enforce the Food Traceability Rule before July 20, 2028, following a Congressional directive. - No public fine schedule exists, so the - risk-concentration tile is illustrative only. Actual results depend on your contracts, + Actual results depend on your contracts, existing systems, staffing, and data hygiene.

    @@ -130,7 +129,7 @@ export function ROICalculatorClient() { {[ { title: 'Labor time avoided', - desc: 'Teams typically move record retrieval from hours to minutes. We don\'t have verified customer ROI data yet, and the Founding rate reflects that.', + desc: 'Teams typically move record retrieval from hours to minutes. We don\'t have verified customer ROI data yet, and the founding design partner price reflects that.', icon: Clock }, { diff --git a/frontend/src/app/why-regengine/page.tsx b/frontend/src/app/why-regengine/page.tsx index f9ca46767..485940da1 100644 --- a/frontend/src/app/why-regengine/page.tsx +++ b/frontend/src/app/why-regengine/page.tsx @@ -20,13 +20,14 @@ import { Badge } from '@/components/ui/badge'; import { Callout } from '@/components/ui/callout'; import { Card } from '@/components/ui/card'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; +import { PRICING_SUMMARY } from '@/lib/pricing-terms'; export const metadata: Metadata = { - title: 'Why RegEngine | FSMA 204 Compliance, API-First', - description: 'API-first architecture, published pricing, and a self-serve path to your first FSMA 204 export. See how RegEngine compares to Trustwell, SafetyChain, and ReposiTrak.', + title: 'Why RegEngine | FSMA 204 Recordkeeping, API-First', + description: 'API-first architecture, per-facility pricing, and a self-serve path to your first FSMA 204 export. See how RegEngine compares to Trustwell, SafetyChain, and ReposiTrak.', openGraph: { - title: 'Why RegEngine | FSMA 204 Compliance Built Different', - description: 'API-first, transparent pricing, and a self-serve path to a first FSMA 204 export in days. See how RegEngine outpaces Trustwell, SafetyChain, and legacy competitors.', + title: 'Why RegEngine | FSMA 204 Recordkeeping Built Different', + description: 'API-first, per-facility pricing, and a self-serve path to a first FSMA 204 export in days. See how RegEngine outpaces Trustwell, SafetyChain, and legacy competitors.', url: 'https://regengine.co/why-regengine', type: 'website', }, @@ -48,13 +49,6 @@ const COMPARISON_DATA: ComparisonRow[] = [ safetychain: false, repositrak: false, }, - { - feature: 'Transparent, Published Pricing', - regengine: 'List price from $849/mo (partner rates from $425/mo)', - trustwell: 'Contact sales', - safetychain: 'Contact sales', - repositrak: 'Contact sales', - }, { feature: 'Time to first export', regengine: 'Days (self-serve)', @@ -133,14 +127,13 @@ const DIFFERENTIATORS = [ title: 'API-First Architecture', description: 'CSV upload and the JSON events API. Integrate RegEngine with your existing ERP, WMS, or custom systems through those two live paths. No rip-and-replace required.', - detail: 'Technical teams can be live in hours. Sales ops teams use our CSV templates. Everyone gets FSMA 204 compliance their way.', + detail: 'Technical teams can be live in hours. Sales ops teams use our CSV templates. Everyone gets FSMA 204 recordkeeping workflows their way.', }, { icon: DollarSign, - title: 'Transparent Pricing', - description: - 'No hidden sales calls. Founding rate plans start at $425/mo (billed annually). Pricing is published, so you do not need to "contact sales."', - detail: 'Compare directly to competitors who make you "contact sales." We believe pricing transparency builds trust and moves faster.', + title: 'Per-facility pricing', + description: PRICING_SUMMARY, + detail: 'We scope facility count, pilot terms and onboarding with you in writing before you sign.', }, { icon: Zap, @@ -168,7 +161,7 @@ const DIFFERENTIATORS = [ title: 'Built for SMBs', description: 'Not enterprise-only. Small produce distributors, regional suppliers, emerging brands. Self-serve signup, no minimum spend.', - detail: 'You don\'t need a 50-person implementation team. You need FSMA 204 compliance fast, cheaply, and without bureaucracy.', + detail: 'You don\'t need a 50-person implementation team. You need FSMA 204 records organized fast, cheaply, and without bureaucracy.', }, ]; @@ -184,13 +177,13 @@ export default function WhyRegEnginePage() {

    - FSMA 204 Compliance,{' '} + FSMA 204 Recordkeeping,{' '} Built for You

    - RegEngine pairs an API-first architecture with published pricing and a self-serve onboarding path designed to get your first FSMA 204 export ready for review in days, not months. + RegEngine pairs an API-first architecture with per-facility pricing and a self-serve onboarding path designed to get your first FSMA 204 export ready for review in days, not months.

    @@ -437,37 +430,35 @@ HTTP 201
    -

    Base Plan

    -

    $425/mo $849/mo

    -

    Founding rate, billed annually ($499/mo monthly) • 1 facility • 500 CTEs/mo

    +

    Pricing

    +

    Contact us for pricing

    +

    Priced per facility

    -

    Standard Plan

    -

    $549/mo $1,099/mo

    -

    Founding rate, billed annually ($649/mo monthly) • 2 to 3 facilities • Unlimited CTEs

    +

    Founding design partner

    +

    Terms set in a written proposal

    -

    Premium Plan

    -

    $639/mo $1,275/mo

    -

    Founding rate, billed annually ($749/mo monthly) • 4+ facilities • Dedicated support

    +

    90-day pilot

    +

    1 facility. Terms set in a written proposal. Pilot fee credited toward your first subscription invoice.

    - Pricing You Can See Before You Sign + Pricing Scoped to Your Facilities

    - Open pricing builds trust. We list prices on our website. No "contact sales" gatekeeping. No surprise enterprise minimums. + Contact us for pricing. We scope facility count and terms with you in writing before you sign. No surprise enterprise minimums.

    - The Founding rate is preferred pricing for the life of your account. Plans start at $425/mo (billed annually) or $499/mo monthly. Honest pricing for honest work. + {PRICING_SUMMARY}

      {[ - 'Simple design-partner agreements with no multi-year lock-in', + 'Priced per facility', 'API access for contracted workspaces', - 'Founding Design Partner rate never increases', + 'Pilot fee credited toward your first subscription invoice on conversion', ].map((item, idx) => (