From 61bf990f67e9a37f75851ab99cbf877a31443973 Mon Sep 17 00:00:00 2001 From: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> Date: Thu, 22 Oct 2026 21:47:05 -0700 Subject: [PATCH 1/8] docs(frontend): remove dashes from live pages; list only CSV and JSON API as live Signed-off-by: Christopher <131207452+PetrefiedThunder@users.noreply.github.com> --- .../src/__tests__/pages/homepage.test.tsx | 2 +- frontend/src/app/about/page.tsx | 2 +- frontend/src/app/blog/24-hour-rule/page.tsx | 4 +- .../page.tsx | 8 ++-- .../blog/food-traceability-software/page.tsx | 28 ++++++------- .../page.tsx | 2 +- .../blog/fsma-204-compliance-guide/page.tsx | 18 ++++----- .../app/blog/fsma-204-cte-kde-guide/page.tsx | 6 +-- .../blog/fsma-204-mid-market-guide/page.tsx | 20 +++++----- .../fsma-204-traceability-lot-codes/page.tsx | 6 +-- frontend/src/app/blog/opengraph-image.tsx | 2 +- frontend/src/app/blog/page.tsx | 4 +- .../page.tsx | 20 +++++----- frontend/src/app/case-studies/page.tsx | 16 ++++---- frontend/src/app/compare/foodlogiq/page.tsx | 8 ++-- frontend/src/app/compare/repositrak/page.tsx | 6 +-- frontend/src/app/compare/tracegains/page.tsx | 6 +-- frontend/src/app/contact/layout.tsx | 2 +- frontend/src/app/contact/page.tsx | 4 +- frontend/src/app/demo/layout.tsx | 4 +- frontend/src/app/demo/opengraph-image.tsx | 4 +- frontend/src/app/demo/page.tsx | 2 +- frontend/src/app/developers/page.tsx | 4 +- .../src/app/docs/api/ApiReferenceClient.tsx | 20 +++++----- frontend/src/app/docs/authentication/page.tsx | 2 +- frontend/src/app/docs/changelog/page.tsx | 4 +- frontend/src/app/docs/page.tsx | 2 +- frontend/src/app/docs/sdks/page.tsx | 2 +- frontend/src/app/docs/walkthrough/page.tsx | 20 +++++----- frontend/src/app/dpa/page.tsx | 10 ++--- frontend/src/app/fsma-204/page.tsx | 30 +++++++------- .../src/app/integrations/opengraph-image.tsx | 4 +- frontend/src/app/integrations/page.tsx | 14 +++---- frontend/src/app/page.tsx | 8 ++-- frontend/src/app/pricing/page.tsx | 12 +++--- frontend/src/app/privacy/page.tsx | 10 ++--- frontend/src/app/proof/page.tsx | 10 ++--- .../src/app/proof/transformation/page.tsx | 4 +- frontend/src/app/supplier-compliance/page.tsx | 8 ++-- frontend/src/app/terms/TermsClient.tsx | 4 +- frontend/src/app/trust/architecture/page.tsx | 8 ++-- frontend/src/app/trust/page.tsx | 4 +- frontend/src/app/trust/retention/page.tsx | 2 +- frontend/src/app/trust/support/page.tsx | 4 +- frontend/src/app/walkthrough/page.tsx | 10 ++--- frontend/src/app/why-regengine/page.tsx | 12 +++--- .../components/control-plane/demo-banner.tsx | 2 +- frontend/src/lib/customer-readiness.ts | 40 +++++++++---------- 48 files changed, 212 insertions(+), 212 deletions(-) diff --git a/frontend/src/__tests__/pages/homepage.test.tsx b/frontend/src/__tests__/pages/homepage.test.tsx index f75a5b2c4..c91cb7985 100644 --- a/frontend/src/__tests__/pages/homepage.test.tsx +++ b/frontend/src/__tests__/pages/homepage.test.tsx @@ -13,7 +13,7 @@ describe("HomePage Compliance OS foundation", () => { }), ).toBeInTheDocument(); expect( - screen.getByText(/ingest supply-chain data through webhooks, csv, epcis, or edi/i), + screen.getByText(/ingest supply-chain data through csv upload or the json events api\. epcis, edi, and sftp intake are on the roadmap\./i), ).toBeInTheDocument(); }); diff --git a/frontend/src/app/about/page.tsx b/frontend/src/app/about/page.tsx index 3b8ebb178..94c23dce0 100644 --- a/frontend/src/app/about/page.tsx +++ b/frontend/src/app/about/page.tsx @@ -22,7 +22,7 @@ import { Card } from "@/components/ui/card"; export const metadata: Metadata = { title: "About RegEngine | FSMA 204 Compliance 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.", + "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", description: diff --git a/frontend/src/app/blog/24-hour-rule/page.tsx b/frontend/src/app/blog/24-hour-rule/page.tsx index 72fe69667..1ffcb866e 100644 --- a/frontend/src/app/blog/24-hour-rule/page.tsx +++ b/frontend/src/app/blog/24-hour-rule/page.tsx @@ -42,7 +42,7 @@ const COMMON_MISTAKES = [ }, { mistake: "Not testing your recall readiness", - fix: "Run a mock recall drill quarterly — the FDA recommends this", + fix: "Run a mock recall drill quarterly, as the FDA recommends", }, { mistake: "Waiting for an FDA request to organize records", @@ -100,7 +100,7 @@ export default function TwentyFourHourRulePage() {

- The clock starts when the FDA sends the request — not when you read it. + The clock starts when the FDA sends the request, not when you read it. Weekends and holidays are not excluded. This means your traceability system needs to be accessible and queryable at any time.

diff --git a/frontend/src/app/blog/fda-food-traceability-requirements/page.tsx b/frontend/src/app/blog/fda-food-traceability-requirements/page.tsx index 92e70a7a1..896ac6805 100644 --- a/frontend/src/app/blog/fda-food-traceability-requirements/page.tsx +++ b/frontend/src/app/blog/fda-food-traceability-requirements/page.tsx @@ -134,15 +134,15 @@ export default function FDAFoodTraceabilityRequirements() {
  • - §1.1305 lists multiple narrow exemptions, including very small farms, certain retail food establishments selling directly to consumers, and entities meeting specific size and revenue thresholds that vary by category. There is no single "less than $1M" carve-out — confirm against the rule for your specific operation. + §1.1305 lists multiple narrow exemptions, including very small farms, certain retail food establishments selling directly to consumers, and entities meeting specific size and revenue thresholds that vary by category. There is no single "less than $1M" carve-out. Confirm against the rule for your specific operation.

    @@ -202,7 +202,7 @@ export default function FDAFoodTraceabilityRequirements() { ))}

    - Not every CTE applies to every business — you only record CTEs that occur at your operation. A farm typically records Harvesting and Cooling (§1.1325) and possibly Initial Packing (§1.1330). A manufacturer records Receiving (§1.1345), Transformation (§1.1350), and Shipping (§1.1340). A seafood receiver from a fishing vessel records First Land-Based Receiving (§1.1335) — non-seafood importers record Receiving instead. Use RegEngine's CTE Mapper to walk through which CTEs apply to your role. + Not every CTE applies to every business; you only record CTEs that occur at your operation. A farm typically records Harvesting and Cooling (§1.1325) and possibly Initial Packing (§1.1330). A manufacturer records Receiving (§1.1345), Transformation (§1.1350), and Shipping (§1.1340). A seafood receiver from a fishing vessel records First Land-Based Receiving (§1.1335). Non-seafood importers record Receiving instead. Use RegEngine's CTE Mapper to walk through which CTEs apply to your role.

    diff --git a/frontend/src/app/blog/food-traceability-software/page.tsx b/frontend/src/app/blog/food-traceability-software/page.tsx index ec1131292..bdd315334 100644 --- a/frontend/src/app/blog/food-traceability-software/page.tsx +++ b/frontend/src/app/blog/food-traceability-software/page.tsx @@ -53,7 +53,7 @@ export default function FoodTraceabilitySoftwarePage() {

    The Selection Challenge

    - Food traceability software ranges from basic Excel-based tracking to enterprise-grade platforms with automated supply chain visibility. Some vendors pitch themselves as FSMA 204 specialists. Others are generic supply chain tools retrofitted with compliance features. Many promise integration with your ERP—until you learn the integration costs $50K+ and takes six months. + Food traceability software ranges from basic Excel-based tracking to enterprise-grade platforms with automated supply chain visibility. Some vendors pitch themselves as FSMA 204 specialists. Others are generic supply chain tools retrofitted with compliance features. Many promise integration with your ERP, until you learn the integration costs $50K+ and takes six months.

    The problem: most vendor comparison tools are written by vendors. They highlight features that make their product look best, not features that matter most for FDA's July 2028 enforcement date or your budget. @@ -120,7 +120,7 @@ export default function FoodTraceabilitySoftwarePage() {

    2. Integration: Will It Connect to Your Existing Systems?

    - A food traceability platform doesn't live in isolation. It needs to pull data from your ERP, WMS, inventory system, or supplier networks—and push compliance data to FDA systems, retailers, or auditors. + A food traceability platform doesn't live in isolation. It needs to pull data from your ERP, WMS, inventory system, or supplier networks, and push compliance data to FDA systems, retailers, or auditors.

    @@ -128,11 +128,11 @@ export default function FoodTraceabilitySoftwarePage() {

    Tier 1: Native Connectors (Low Cost)

    -

    Pre-built integrations to popular ERPs (SAP, NetSuite, Salesforce). Usually $0–$5K setup, 2–4 weeks implementation.

    +

    Pre-built integrations to popular ERPs (SAP, NetSuite, Salesforce). Usually $0 to $5K setup, 2 to 4 weeks implementation.

    Tier 2: API-Based Integration (Medium Cost)

    -

    RESTful or SOAP APIs requiring custom development. $10K–$30K, 4–8 weeks. Your IT team or a consultant builds the bridge.

    +

    RESTful or SOAP APIs requiring custom development. $10K to $30K, 4 to 8 weeks. Your IT team or a consultant builds the bridge.

    Tier 3: Manual Data Entry or Middleware (High Cost)

    @@ -159,7 +159,7 @@ export default function FoodTraceabilitySoftwarePage() {

    3. Compliance Feature Depth: Does It Enforce FSMA 204 Requirements?

    - Not all platforms enforce FSMA 204 compliance equally. Some are passive trackers—they record what you tell them to record. Better platforms actively enforce data validation, deviation tracking, and 24-hour response requirements. + Not all platforms enforce FSMA 204 compliance equally. Some are passive trackers: they record what you tell them to record. Better platforms actively enforce data validation, deviation tracking, and 24-hour response requirements.

    @@ -209,11 +209,11 @@ export default function FoodTraceabilitySoftwarePage() {
    • Setup & Onboarding - Configuration, data migration, user training: $5K–$50K depending on platform and complexity. + Configuration, data migration, user training: $5K to $50K depending on platform and complexity.
    • Integration Development - Connecting to your ERP or supplier systems: $10K–$100K+ if custom development is required. + Connecting to your ERP or supplier systems: $10K to $100K+ if custom development is required.
    • Per-User or Per-Transaction Fees @@ -221,7 +221,7 @@ export default function FoodTraceabilitySoftwarePage() {
    • Custom Development & Support - Premium support tiers, custom reporting, or feature development: $100–$500/hour or flat retainers. + Premium support tiers, custom reporting, or feature development: $100 to $500/hour or flat retainers.
    • Data Storage & Archival @@ -245,12 +245,12 @@ export default function FoodTraceabilitySoftwarePage() {
    • Improved supplier relationships and transparency

    - If the platform saves your team 5–10 hours/week in compliance work, that alone justifies the cost. + If the platform saves your team 5 to 10 hours/week in compliance work, that alone justifies the cost.

    - Request a detailed cost breakdown from every vendor. Ask for references—especially from companies of similar size—and ask them directly about hidden costs. + Request a detailed cost breakdown from every vendor. Ask for references (especially from companies of similar size) and ask them directly about hidden costs.

    @@ -272,7 +272,7 @@ export default function FoodTraceabilitySoftwarePage() {
  • 2.
    -

    Shortlist 3–5 Vendors

    +

    Shortlist 3 to 5 Vendors

    Request demos focused on your specific use cases, not generic feature tours.

  • @@ -287,7 +287,7 @@ export default function FoodTraceabilitySoftwarePage() { 4.

    Contact References

    -

    Speak to 2–3 companies using each platform. Ask about implementation reality vs. promises, hidden costs, and support quality.

    +

    Speak to 2 or 3 companies using each platform. Ask about implementation reality vs. promises, hidden costs, and support quality.

  • @@ -317,7 +317,7 @@ export default function FoodTraceabilitySoftwarePage() {
  • diff --git a/frontend/src/app/blog/fsma-204-compliance-checklist-2026/page.tsx b/frontend/src/app/blog/fsma-204-compliance-checklist-2026/page.tsx index 17109ff19..f12753ffb 100644 --- a/frontend/src/app/blog/fsma-204-compliance-checklist-2026/page.tsx +++ b/frontend/src/app/blog/fsma-204-compliance-checklist-2026/page.tsx @@ -69,7 +69,7 @@ export default function FSMA204ComplianceChecklist() { { task: 'Document your supply chain', detail: 'List all suppliers, distributors, and customers. Where does data flow today?', done: false }, { task: 'Assess your IT systems', detail: 'What ERP, WMS, or other systems do you use? Can they be integrated with a traceability platform?', done: false }, { task: 'Estimate implementation cost and timeline', detail: 'Get quotes from 2-3 FSMA 204 platform vendors. Build a budget for 2026-2027', done: false }, - { task: 'Assign a compliance lead', detail: 'Designate one person to own FSMA 204 implementation. This is a significant role—don\'t dilute it', done: false }, + { task: 'Assign a compliance lead', detail: 'Designate one person to own FSMA 204 implementation. This is a significant role, so don\'t dilute it', done: false }, ].map((item, idx) => (
    diff --git a/frontend/src/app/blog/fsma-204-compliance-guide/page.tsx b/frontend/src/app/blog/fsma-204-compliance-guide/page.tsx index 2fdaca063..f2eeab7f3 100644 --- a/frontend/src/app/blog/fsma-204-compliance-guide/page.tsx +++ b/frontend/src/app/blog/fsma-204-compliance-guide/page.tsx @@ -60,7 +60,7 @@ export default function FSMA204ComplianceGuide() { What Is FSMA 204?

    - FSMA 204 is the FDA's Food Traceability Rule. It requires covered food businesses to keep records identifying the immediate previous sources and immediate recipients of their products. When the FDA needs your traceability data—due to a foodborne illness outbreak, contamination, or suspected intentional adulteration—you have 24 hours to provide it. + FSMA 204 is the FDA's Food Traceability Rule. It requires covered food businesses to keep records identifying the immediate previous sources and immediate recipients of their products. When the FDA needs your traceability data (due to a foodborne illness outbreak, contamination, or suspected intentional adulteration), you have 24 hours to provide it.

    The rule applies to foods specifically listed on the FDA's Food Traceability List (FTL), including leafy greens, berry crops, bivalve mollusks, soft cheeses, and more. If your business handles an FTL product, FSMA 204 traceability obligations may apply. @@ -119,27 +119,27 @@ export default function FSMA204ComplianceGuide() {

    @@ -247,7 +247,7 @@ export default function FSMA204ComplianceGuide() { 2. Standardize Your Traceability Lot Code

    - Implement a consistent, unique TLC format across your supply chain. This doesn't need to be complex—it just needs to identify the product, lot, and date. Work with your suppliers and customers to ensure compatibility. + Implement a consistent, unique TLC format across your supply chain. This doesn't need to be complex. It just needs to identify the product, lot, and date. Work with your suppliers and customers to ensure compatibility.

    @@ -296,7 +296,7 @@ export default function FSMA204ComplianceGuide() {
  • @@ -333,7 +333,7 @@ export default function FSMA204MidMarketGuide() {
  • - An audit trail and chained hashing won't certify your data is correct — only your operation can do that — but they make it materially easier to show how a record was entered, by whom, and whether it changed after ingest. A standalone spreadsheet generally cannot. + An audit trail and chained hashing won't certify your data is correct (only your operation can do that), but they make it materially easier to show how a record was entered, by whom, and whether it changed after ingest. A standalone spreadsheet generally cannot.

    @@ -114,9 +114,9 @@ export default function RegEngineVsSpreadsheets() {
    • • People forget to fill in fields or enter them incorrectly
    • -
    • • Date and time formats vary—is that 3/5 or 5/3?
    • +
    • • Date and time formats vary: is that 3/5 or 5/3?
    • • Typos in supplier or customer names break traceability links
    • -
    • • No validation—data that doesn't make sense (e.g., receiving before shipping) is accepted
    • +
    • • No validation: data that doesn't make sense (e.g., receiving before shipping) is accepted
    • • At 100+ transactions per day, error rates are significant
    @@ -242,7 +242,7 @@ export default function RegEngineVsSpreadsheets() {
  • • Suppliers filling out templates incorrectly
  • • You manually entering supplier data into your spreadsheet
  • • No visibility into what's missing until you need it
  • -
  • • Supplier compliance is low—they don't see why it matters
  • +
  • • Supplier compliance is low because they don't see why it matters
  • @@ -253,7 +253,7 @@ export default function RegEngineVsSpreadsheets() {
    • • Supplier portal: suppliers log in and submit traceability data directly
    • -
    • • Simple templates: no expertise needed—suppliers fill in basic fields
    • +
    • • Simple templates: no expertise needed, since suppliers fill in basic fields
    • • Automatic validation: the system checks data before it's submitted
    • • Real-time visibility: you see what you're missing and who hasn't responded
    • • Fewer support emails: suppliers get instant feedback on what's needed
    • @@ -276,7 +276,7 @@ export default function RegEngineVsSpreadsheets() { Spreadsheet Total Cost of Ownership

      - Illustrative line items, not a forecast — model your own operation against your actual labor and recall-history baseline. + Illustrative line items, not a forecast. Model your own operation against your actual labor and recall-history baseline.

      • • Staff time to maintain spreadsheets and reconcile lot codes
      • @@ -292,11 +292,11 @@ export default function RegEngineVsSpreadsheets() { RegEngine Total Cost of Ownership
          -
        • • RegEngine subscription (priced against volume — contact us for a quote)
        • +
        • • RegEngine subscription (priced against volume; contact us for a quote)
        • • One-time implementation and team onboarding
        • • Less staff time spent on manual reconciliation once ingestion is wired in
        • • Pre-formatted §1.1455(c) export rather than ad-hoc preparation
        • -
        • • Audit trail and chained hashing to support — not replace — your compliance program
        • +
        • • Audit trail and chained hashing to support, not replace, your compliance program
    @@ -349,7 +349,7 @@ export default function RegEngineVsSpreadsheets() {

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

    @@ -324,7 +324,7 @@ export default function CaseStudy() {

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

    @@ -347,7 +347,7 @@ export default function CaseStudy() {

    We intentionally don't auto-correct lot codes. A wrong lot code - in an FDA trace means tracing the wrong product — the cost of + in an FDA trace means tracing the wrong product, and the cost of a false positive exceeds the cost of a human review. @@ -486,7 +486,7 @@ export default function CaseStudy() { }, { 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.', + 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', }, { @@ -534,7 +534,7 @@ export default function CaseStudy() {

    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. + and time to FDA-oriented sortable export, measured on your actual supply chain data.

    @@ -350,7 +350,7 @@ export default function FSMA204BusinessGuidePage() { Don't wait for the deadline.

    - Start with a free tool. See where you stand. Get compliant on your schedule — not the FDA's. + Start with a free tool. See where you stand. Get compliant on your schedule, not the FDA's.

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

    @@ -204,7 +204,7 @@ export default function HomePage() { FSMA 204 recordkeeping for the Food Traceability Rule.

    - Ingest supply-chain data through webhooks, CSV, EPCIS, or EDI. Check CTE/KDE coverage and completeness in the Inflow Workbench. Persist append-only after checks you configure. Export FDA-oriented and buyer-oriented spreadsheets. + Ingest supply-chain data through CSV upload or the JSON events API. EPCIS, EDI, and SFTP intake are on the roadmap. Check CTE/KDE coverage and completeness in the Inflow Workbench. Persist append-only after checks you configure. Export FDA-oriented and buyer-oriented spreadsheets.

    diff --git a/frontend/src/app/pricing/page.tsx b/frontend/src/app/pricing/page.tsx index eb55d3925..ba2adca9a 100644 --- a/frontend/src/app/pricing/page.tsx +++ b/frontend/src/app/pricing/page.tsx @@ -85,7 +85,7 @@ const PRICING_TIERS = [ id: 'standard', name: 'Standard', icon: 'rocket' as const, - description: '2–3 facilities, scaling up', + description: '2 to 3 facilities, scaling up', gaMonthly: 1299, gaAnnual: 1099, partnerMonthly: 649, @@ -93,12 +93,12 @@ const PRICING_TIERS = [ highlighted: true, cta: 'Apply for Standard', features: [ - '2–3 facilities', + '2 to 3 facilities', 'No per-CTE caps (fair use)', 'Everything in Base', 'Multi-facility operations', 'Retailer-specific readiness benchmarks', - 'FDA-oriented sortable export + EPCIS 2.0 support', + 'FDA-oriented sortable export + EPCIS 2.0 export', 'Priority email support', ], }, @@ -136,13 +136,13 @@ const COMPETITOR_COMPARISON: PricingComparisonRow[] = [ ]; 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 handles 2–3 facilities with unlimited CTEs. Premium is for 4+ facilities with dedicated support and quarterly compliance reviews.' }, + { 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 handles 2 to 3 facilities with unlimited CTEs. Premium 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: '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: 'What integrations are available?', a: 'Core APIs and export flows are available today. ERP, retailer, and partner-system integrations are evaluated per delivery mode: native API, webhook, CSV/SFTP import, or custom-scoped implementation.' }, - { 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: '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, EDI, and SFTP intake are on the roadmap.' }, + { 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: '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.' }, diff --git a/frontend/src/app/privacy/page.tsx b/frontend/src/app/privacy/page.tsx index 9eb3431d3..5e91fd2a7 100644 --- a/frontend/src/app/privacy/page.tsx +++ b/frontend/src/app/privacy/page.tsx @@ -71,7 +71,7 @@ const collectItems = [ { Icon: Database, subtitle: 'Compliance Data', - text: 'When you use RegEngine to manage FSMA 204 compliance, we process and store the traceability data you submit — including Critical Tracking Events (CTEs), Key Data Elements (KDEs), and Traceability Lot Codes (TLCs). This data belongs to you. We store it to provide the service.', + text: 'When you use RegEngine to manage FSMA 204 compliance, we process and store the traceability data you submit, including Critical Tracking Events (CTEs), Key Data Elements (KDEs), and Traceability Lot Codes (TLCs). This data belongs to you. We store it to provide the service.', }, { Icon: MonitorSmartphone, @@ -111,7 +111,7 @@ const storageItems = [ { Icon: Lock, subtitle: 'Isolation', - text: "Tenant data is scoped by PostgreSQL row-level policies and authenticated tenant context, designed and tested to restrict cross-tenant access on core PostgreSQL-backed paths. Identity-resolution and graph-layer hardening is in active rollout — see the DPA for the full subprocessor list.", + text: "Tenant data is scoped by PostgreSQL row-level policies and authenticated tenant context, designed and tested to restrict cross-tenant access on core PostgreSQL-backed paths. Identity-resolution and graph-layer hardening is in active rollout. See the DPA for the full subprocessor list.", }, { Icon: Hash, @@ -424,8 +424,8 @@ export default function PrivacyPage() { className={PROSE_LINK} > privacy@regengine.co - {' '} - — you'll hear from the founder directly, not a legal department. + + . You'll hear from the founder directly, not a legal department.

    @@ -437,7 +437,7 @@ export default function PrivacyPage() {

    - Your data belongs to you — always + Your data belongs to you, always

    Become a Founding Design Partner to review the current tenant-isolation posture and diff --git a/frontend/src/app/proof/page.tsx b/frontend/src/app/proof/page.tsx index 6837687a5..63e5bfbbf 100644 --- a/frontend/src/app/proof/page.tsx +++ b/frontend/src/app/proof/page.tsx @@ -10,7 +10,7 @@ import { Card, CardHeader } from "@/components/ui/card"; export const metadata: Metadata = { title: "Proof | RegEngine", description: - "Download three verifiable sample artifacts generated by production code — FSMA 204 sortable spreadsheet, EPCIS 2.0 JSON-LD export, and a Merkle-rooted audit bundle — without signing up.", + "Download three verifiable sample artifacts generated by production code (FSMA 204 sortable spreadsheet, EPCIS 2.0 JSON-LD export, and a Merkle-rooted audit bundle) without signing up.", openGraph: { title: "Verify RegEngine without signing up", description: @@ -102,7 +102,7 @@ export default function ProofPage() { size="hero" eyebrow={Proof} title="Verify RegEngine without signing up." - description="Three artifacts. No email gate, no demo call. Download the files, open them in your tools, and check the hashes yourself. If the output does not match the claim, the product fails — and you have the receipts." + description="Three artifacts. No email gate, no demo call. Download the files, open them in your tools, and check the hashes yourself. If the output does not match the claim, the product fails, and you have the receipts." className="mb-0 border-b-0 pb-0" />

    @@ -222,15 +222,15 @@ export default function ProofPage() {
    Changelog}> -

    2026-05-09 — verifier mismatch found and fixed

    +

    2026-05-09: verifier mismatch found and fixed

    - A reader running the recipe on this page got an argparse error instead of a verification. The verifier we'd shipped didn't match the bundle we'd shipped — the hashes were correct, but the script next to them read JSON, not the zip the page describes. + A reader running the recipe on this page got an argparse error instead of a verification. The verifier we'd shipped didn't match the bundle we'd shipped. The hashes were correct, but the script next to them read JSON, not the zip the page describes.

    Replaced with a verifier that opens the zip, recomputes every per-file SHA-256, and rebuilds the Merkle root using the same algorithm RegEngine ships in services/shared/merkle_tree.py. Added the EPCIS payload to manifest.json, added a build block (commit, generated_at, release), and published audit-bundle-tampered.zip so anyone can watch the new verifier fail closed.

    - If you found the original bug before we did — thank you. That's the system working. + If you found the original bug before we did, thank you. That's the system working.

    diff --git a/frontend/src/app/proof/transformation/page.tsx b/frontend/src/app/proof/transformation/page.tsx index f2b58580c..5d75c480e 100644 --- a/frontend/src/app/proof/transformation/page.tsx +++ b/frontend/src/app/proof/transformation/page.tsx @@ -81,7 +81,7 @@ const STEPS: Step[] = [ "chain_hash": "f0a2b5c8d1e4f7a0b3c6d9e2f5a8b1c4d7e0f3a6b9c2d5e8f1a4b7c0d3e6f9a2" }`, canonicalAnnotation: - "KDE validation against §1.1330 (a)(1)–(7). Hash chained to previous event.", + "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"], @@ -175,7 +175,7 @@ const STEPS: Step[] = [ cte: "§1.1340", title: "Shipping", subtitle: - "Transfer event. Adds Ship-From / Ship-To facilities with GLN identifiers — the FDA's expected join keys.", + "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: [ diff --git a/frontend/src/app/supplier-compliance/page.tsx b/frontend/src/app/supplier-compliance/page.tsx index 6b99c78a8..6d9af9f93 100644 --- a/frontend/src/app/supplier-compliance/page.tsx +++ b/frontend/src/app/supplier-compliance/page.tsx @@ -11,7 +11,7 @@ import { Container } from '@/components/layout/container'; export const metadata: Metadata = { title: 'Your Buyer Asked About FSMA 204 Traceability | RegEngine', - description: 'Major retailers are increasingly asking suppliers for FSMA 204 traceability data. Start submitting in minutes — full FSMA 204 program coverage takes longer. No rip-and-replace required.', + description: 'Major retailers are increasingly asking suppliers for FSMA 204 traceability data. Start submitting in minutes; full FSMA 204 program coverage takes longer. No rip-and-replace required.', openGraph: { title: 'Your Buyer Asked About FSMA 204 Traceability | RegEngine', description: 'Major retailers are asking suppliers for traceability data. Start submitting in minutes with RegEngine.', @@ -48,7 +48,7 @@ const COMPLIANCE_STEPS = [ // retailer contracting terms. If a buyer mandate is publicly cited, link // to the source rather than asserting it here. const RETAILERS_ENFORCING = [ - { name: 'Major retailers', detail: 'Multiple top-10 grocers have publicly signaled supplier traceability expectations ahead of the 2028 deadline. Specific requirements vary by buyer — confirm directly with your buyer.' }, + { name: 'Major retailers', detail: 'Multiple top-10 grocers have publicly signaled supplier traceability expectations ahead of the 2028 deadline. Specific requirements vary by buyer, so confirm directly with your buyer.' }, ]; const FAQ = [ @@ -183,7 +183,7 @@ export default function SupplierCompliancePage() { { icon: FileCheck, title: 'Who it applies to', - body: 'Any business that manufactures, processes, packs, or holds foods on the Food Traceability List (FTL) — including fresh produce, seafood, dairy, eggs, deli salads, nut butters, and more. This includes domestic and foreign suppliers.', + body: 'Any business that manufactures, processes, packs, or holds foods on the Food Traceability List (FTL), including fresh produce, seafood, dairy, eggs, deli salads, nut butters, and more. This includes domestic and foreign suppliers.', }, { icon: Truck, @@ -224,7 +224,7 @@ export default function SupplierCompliancePage() { Need your suppliers to submit traceability data?

    - Generate portal links from your RegEngine dashboard and share them with suppliers. They submit data directly — no account needed, no training required. Data flows into your workspace automatically. + Generate portal links from your RegEngine dashboard and share them with suppliers. They submit data directly, with no account needed and no training required. Data flows into your workspace automatically.

    @@ -258,7 +258,7 @@ export default function AboutPage() {

    Book a free gap analysis call. We'll review your current FSMA 204 posture, identify coverage gaps, and show you exactly what RegEngine - handles—no commitment required. + handles. No commitment required.

    diff --git a/frontend/src/app/compliance/traceability-plan/page.tsx b/frontend/src/app/compliance/traceability-plan/page.tsx index 2e7475e01..3bce508fb 100644 --- a/frontend/src/app/compliance/traceability-plan/page.tsx +++ b/frontend/src/app/compliance/traceability-plan/page.tsx @@ -195,7 +195,7 @@ export default function TraceabilityPlanPage() {
    diff --git a/frontend/src/app/dashboard/compliance/page.tsx b/frontend/src/app/dashboard/compliance/page.tsx index a3f187739..2256832fa 100644 --- a/frontend/src/app/dashboard/compliance/page.tsx +++ b/frontend/src/app/dashboard/compliance/page.tsx @@ -102,20 +102,20 @@ const STATUS_CONFIG = { 'compliant': { icon: Shield, label: 'FSMA 204 Ready', - desc: "Your traceability data meets RegEngine's readiness checks — an advisory indicator, not a legal determination.", + desc: "Your traceability data meets RegEngine's readiness checks. This is an advisory indicator, not a legal determination.", bg: 'bg-re-brand-muted border-re-brand/30', text: 'text-re-brand', }, 'at-risk': { icon: ShieldAlert, - label: 'At Risk — Action Needed', + label: 'At Risk: Action Needed', desc: 'Gaps in your traceability data could cause issues during an FDA inspection.', bg: 'bg-re-warning-muted0/10 border-re-warning/30', text: 'text-re-warning', }, 'critical': { icon: ShieldX, - label: 'Critical — Not Compliant', + label: 'Critical: Not Compliant', desc: 'Significant gaps exist. Prioritize the actions below before your next audit.', bg: 'bg-re-danger-muted0/10 border-re-danger/30', text: 'text-re-danger', diff --git a/frontend/src/app/dashboard/export-jobs/page.tsx b/frontend/src/app/dashboard/export-jobs/page.tsx index d82866278..3e344d220 100644 --- a/frontend/src/app/dashboard/export-jobs/page.tsx +++ b/frontend/src/app/dashboard/export-jobs/page.tsx @@ -49,7 +49,7 @@ export default function ExportJobsPage() { const createJobMutation = useMutation({ mutationFn: async () => { throw new Error( - 'Export job scheduling is not yet available — records remain exportable on demand.', + 'Export job scheduling is not yet available. Records remain exportable on demand.', ); }, }); @@ -115,7 +115,7 @@ export default function ExportJobsPage() { icon={Link2Off} title={"Scheduled export jobs aren't available on this workspace yet."} > - Recurring archive scheduling is still in development — no amount of connected data unlocks it today. Your records stay exportable on demand from FDA Export, and this page will activate when scheduling ships. + Recurring archive scheduling is still in development. No amount of connected data unlocks it today. Your records stay exportable on demand from FDA Export, and this page will activate when scheduling ships. ) : ( diff --git a/frontend/src/app/dashboard/heartbeat/page.tsx b/frontend/src/app/dashboard/heartbeat/page.tsx index 74e8e016a..a559779c6 100644 --- a/frontend/src/app/dashboard/heartbeat/page.tsx +++ b/frontend/src/app/dashboard/heartbeat/page.tsx @@ -503,7 +503,7 @@ function HeartbeatPageContent() {
    -

    {error} — showing cached data if available.

    +

    {error}. Showing cached data if available.

    diff --git a/frontend/src/app/dashboard/inflow-lab/page.tsx b/frontend/src/app/dashboard/inflow-lab/page.tsx index 5e6156882..7d381be63 100644 --- a/frontend/src/app/dashboard/inflow-lab/page.tsx +++ b/frontend/src/app/dashboard/inflow-lab/page.tsx @@ -6,7 +6,7 @@ import { isExperimentalPageEnabled } from "@/lib/experimental-features"; export const metadata: Metadata = { title: "Inflow Lab | RegEngine Dashboard", description: - "Test supplier traceability data before it flows into production exports — sandbox-only diagnostics, grouped exceptions, and a sticky lot lifecycle.", + "Test supplier traceability data before it flows into production exports: sandbox-only diagnostics, grouped exceptions, and a sticky lot lifecycle.", }; export default function DashboardInflowLabPage() { diff --git a/frontend/src/app/dashboard/issues/page.tsx b/frontend/src/app/dashboard/issues/page.tsx index bc61539af..fefc06dc2 100644 --- a/frontend/src/app/dashboard/issues/page.tsx +++ b/frontend/src/app/dashboard/issues/page.tsx @@ -172,7 +172,7 @@ export default function IssuesPage() { header: 'Case', cell: (c) => ( - {c.requesting_party} — {c.scope_description || c.package_status} + {c.requesting_party}: {c.scope_description || c.package_status} ), }, @@ -232,7 +232,7 @@ export default function IssuesPage() { 0 && (

    - Blocking Defects — Must Fix Before Submission + Blocking Defects: Must Fix Before Submission

    0 && ( - Warnings — Non-Blocking + Warnings (Non-Blocking)
      diff --git a/frontend/src/app/dashboard/layout.tsx b/frontend/src/app/dashboard/layout.tsx index 01418e112..06d08932d 100644 --- a/frontend/src/app/dashboard/layout.tsx +++ b/frontend/src/app/dashboard/layout.tsx @@ -550,7 +550,7 @@ export default function DashboardLayout({ children }: { children: React.ReactNod {demoMode && ( - Sandbox mode — using sample data for demonstration. + Sandbox mode: using sample data for demonstration. Connect real data to exit sample mode diff --git a/frontend/src/app/dashboard/notifications/page.tsx b/frontend/src/app/dashboard/notifications/page.tsx index a3abe881d..d012f1dc2 100644 --- a/frontend/src/app/dashboard/notifications/page.tsx +++ b/frontend/src/app/dashboard/notifications/page.tsx @@ -348,7 +348,7 @@ export default function NotificationPrefsPage() { title="Quiet Hours" description={ <> - Suppress non-critical {effectivePrefs.quiet_hours.start_hour}:00 – {effectivePrefs.quiet_hours.end_hour}:00 + Suppress non-critical {effectivePrefs.quiet_hours.start_hour}:00 to {effectivePrefs.quiet_hours.end_hour}:00 {effectivePrefs.quiet_hours.override_critical && ' (critical bypass)'} } diff --git a/frontend/src/app/dashboard/page.tsx b/frontend/src/app/dashboard/page.tsx index 763df1e72..112db7c1e 100644 --- a/frontend/src/app/dashboard/page.tsx +++ b/frontend/src/app/dashboard/page.tsx @@ -348,7 +348,7 @@ export default function DashboardPage() {

      Daily Compliance Heartbeat

      - Score, alerts, chain status & next actions — your morning check + Score, alerts, chain status & next actions: your morning check

    @@ -479,7 +479,7 @@ export default function ProductCatalogPage() { {deleteProductMutation.isError && (

    )} diff --git a/frontend/src/app/dashboard/recall-drills/page.tsx b/frontend/src/app/dashboard/recall-drills/page.tsx index 38d51cc64..59a3cd87e 100644 --- a/frontend/src/app/dashboard/recall-drills/page.tsx +++ b/frontend/src/app/dashboard/recall-drills/page.tsx @@ -76,7 +76,7 @@ export default function RecallDrillsPage() { const startDrillMutation = useMutation({ mutationFn: async () => { throw new Error( - 'Recall drill automation is not yet available — use the Requests workflow for a manual drill.', + 'Recall drill automation is not yet available. Use the Requests workflow for a manual drill.', ); }, }); diff --git a/frontend/src/app/dashboard/recall-report/page.tsx b/frontend/src/app/dashboard/recall-report/page.tsx index 774669119..48d608b74 100644 --- a/frontend/src/app/dashboard/recall-report/page.tsx +++ b/frontend/src/app/dashboard/recall-report/page.tsx @@ -89,7 +89,7 @@ const NOTICE_BASE = /* ── Demo Fallback Data (shown only when demo_mode=true from API) ── */ const DEMO_INVESTIGATION = { - scenario: 'Romaine Lettuce — E. coli O157:H7', + scenario: 'Romaine Lettuce (E. coli O157:H7)', initiated: '2026-03-15T08:30:00Z', response_time_hours: 4.2, sla_target: 24, @@ -111,10 +111,10 @@ const DEMO_AFFECTED_LOTS = [ const DEMO_TIMELINE = [ { time: '08:30', label: 'FDA Request Received', desc: 'FSMA 204 records request for romaine lettuce lots from Salinas Valley region', icon: AlertTriangle, done: true }, { time: '08:35', label: 'Automated Trace Initiated', desc: 'RegEngine backward trace from retail to harvest across 8 facilities', icon: Zap, done: true }, - { time: '08:42', label: '12 Lots Identified', desc: 'Forward trace mapped all downstream distribution — 3 supplier origins confirmed', icon: Package, done: true }, + { time: '08:42', label: '12 Lots Identified', desc: 'Forward trace mapped all downstream distribution; 3 supplier origins confirmed', icon: Package, done: true }, { time: '09:15', label: 'Supplier Notifications Sent', desc: '3 suppliers contacted: Salinas Valley Farms, Pacific Coast Growers, FreshCut Processing', icon: Users, done: true }, { time: '10:00', label: 'FDA CSV Export Generated', desc: '24-hour response package with all CTEs, KDEs, and chain hashes', icon: Download, done: true }, - { time: '—', label: 'Retailer EPCIS Notification', desc: 'GS1 EPCIS 2.0 export package ready for retailer portal upload — confirm specific format with each buyer', icon: ShoppingCart, done: false }, + { time: '—', label: 'Retailer EPCIS Notification', desc: 'GS1 EPCIS 2.0 export package ready for retailer portal upload. Confirm specific format with each buyer', icon: ShoppingCart, done: false }, { time: '—', label: 'Investigation Closed', desc: 'All affected lots accounted for, remediation verified', icon: CheckCircle2, done: false }, ]; @@ -366,7 +366,7 @@ export default function RecallReportPage() {
    diff --git a/frontend/src/app/dashboard/receiving/page.tsx b/frontend/src/app/dashboard/receiving/page.tsx index fb397b1a9..62f235314 100644 --- a/frontend/src/app/dashboard/receiving/page.tsx +++ b/frontend/src/app/dashboard/receiving/page.tsx @@ -244,7 +244,7 @@ export default function ReceivingDockPage() { quantity: item.quantity, unit_of_measure: 'cases', timestamp: item.scannedAt || new Date().toISOString(), - location_name: `Receiving Dock — ${session.supplier}`, + location_name: `Receiving Dock: ${session.supplier}`, kdes: { gtin: item.gtin || undefined, lot_code: item.lotCode || undefined, @@ -639,7 +639,7 @@ export default function ReceivingDockPage() {

    Receiving Complete

    - {session.supplier} — PO {session.poNumber} + {session.supplier}, PO {session.poNumber}

    {ts}

    diff --git a/frontend/src/app/dashboard/scan/page.tsx b/frontend/src/app/dashboard/scan/page.tsx index cb93551ef..e29617365 100644 --- a/frontend/src/app/dashboard/scan/page.tsx +++ b/frontend/src/app/dashboard/scan/page.tsx @@ -90,7 +90,7 @@ const HOW_IT_WORKS = [ { step: '2', title: 'Select event type & scan item', - detail: 'Choose what you\'re doing: Receiving, Shipping, or Transforming. Point your camera at the barcode — product number, lot code, expiry, and serial are extracted automatically.', + detail: 'Choose what you\'re doing: Receiving, Shipping, or Transforming. Point your camera at the barcode; product number, lot code, expiry, and serial are extracted automatically.', }, { step: '3', @@ -195,7 +195,7 @@ function ScanPageContent() {

    - Display this QR code on a tablet or print it. Floor operators scan it with their phone to open the capture tool — no app install required. + Display this QR code on a tablet or print it. Floor operators scan it with their phone to open the capture tool. No app install required.

    {/* QR Code */} @@ -282,7 +282,7 @@ function ScanPageContent() { ))}

    - Barcodes are parsed automatically — product number, lot code, serial, expiry, and pack date are extracted and mapped to the required data fields. + Barcodes are parsed automatically: product number, lot code, serial, expiry, and pack date are extracted and mapped to the required data fields.

    diff --git a/frontend/src/app/dashboard/settings/page.tsx b/frontend/src/app/dashboard/settings/page.tsx index fafc5df1d..415dedfe4 100644 --- a/frontend/src/app/dashboard/settings/page.tsx +++ b/frontend/src/app/dashboard/settings/page.tsx @@ -367,7 +367,7 @@ export default function SettingsPage() { size="lg" value={profile.fei_number} onChange={e => setProfile({ ...profile, fei_number: e.target.value })} - placeholder="Optional — used in FDA exports" + placeholder="Optional, used in FDA exports" /> diff --git a/frontend/src/app/demo/page.tsx b/frontend/src/app/demo/page.tsx index 5b6e57dee..a3656f0ea 100644 --- a/frontend/src/app/demo/page.tsx +++ b/frontend/src/app/demo/page.tsx @@ -90,7 +90,7 @@ export default function DemoPage() { title="Compliance Dashboard" description={ <> - DEMO WORKSPACE — FreshCo Distribution is a fictional distributor. Numbers are illustrative. + DEMO WORKSPACE: FreshCo Distribution is a fictional distributor. Numbers are illustrative. } /> diff --git a/frontend/src/app/design-system/page.tsx b/frontend/src/app/design-system/page.tsx index bcf352b55..8c47b3832 100644 --- a/frontend/src/app/design-system/page.tsx +++ b/frontend/src/app/design-system/page.tsx @@ -264,7 +264,7 @@ export default function DesignSystemPage() {
    -

    Card variant inset — wells, code blocks and summary strips.

    +

    Card variant inset: wells, code blocks and summary strips.

    diff --git a/frontend/src/app/developers/compliance-verticals/page.tsx b/frontend/src/app/developers/compliance-verticals/page.tsx index e12957749..946b69891 100644 --- a/frontend/src/app/developers/compliance-verticals/page.tsx +++ b/frontend/src/app/developers/compliance-verticals/page.tsx @@ -34,7 +34,7 @@ const FRAMEWORKS = [ title: 'Seafood', icon: Fish, description: 'Finfish and shellfish chain-of-custody controls', - details: 'Reference scaffold for seafood obtained from a fishing vessel — uses §1.1335 First Land-Based Receiving as the entry CTE. Final CTE/KDE coverage is configured during onboarding.', + details: 'Reference scaffold for seafood obtained from a fishing vessel. Uses §1.1335 First Land-Based Receiving as the entry CTE. Final CTE/KDE coverage is configured during onboarding.', jsonSnippet: `{ "profile": "seafood", "ftl_categories": ["Fresh Finfish", "Crustaceans"], diff --git a/frontend/src/app/developers/page.tsx b/frontend/src/app/developers/page.tsx index 3ac0d8ee2..e096f7a1c 100644 --- a/frontend/src/app/developers/page.tsx +++ b/frontend/src/app/developers/page.tsx @@ -1,7 +1,7 @@ import type { Metadata } from 'next'; import Link from 'next/link'; import { - ArrowRight, Webhook, Cog, Users, FileSpreadsheet, + ArrowRight, Braces, Cog, Users, FileSpreadsheet, BarChart3, GitBranch, Terminal, BookOpen, } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; @@ -13,11 +13,11 @@ import { INGEST_CURL_SAMPLE, INGEST_ENV_SETUP } from '@/lib/api-samples/ingest-s export const metadata: Metadata = { title: 'Developers | RegEngine FSMA 204 Compliance API', description: - 'Build on the RegEngine API: webhook ingestion with KDE validation, 36 FSMA 204 rules, identity resolution, FDA export, compliance scoring, and request workflow management.', + 'Build on the RegEngine API: a JSON events API with KDE validation, 36 FSMA 204 rules, identity resolution, FDA export, compliance scoring, and request workflow management.', openGraph: { title: 'Developers | RegEngine FSMA 204 Compliance API', description: - 'Build on the RegEngine API: webhook ingestion, rules engine, identity resolution, FDA export, compliance scoring, and request workflow.', + 'Build on the RegEngine API: JSON events API, rules engine, identity resolution, FDA export, compliance scoring, and request workflow.', url: 'https://regengine.co/developers', type: 'website', }, @@ -26,9 +26,9 @@ export const metadata: Metadata = { /* ── API Capabilities ── */ const capabilities = [ { - Icon: Webhook, - title: 'Webhook Ingestion', - description: 'POST events with KDE validation. Inbound CTEs are validated against FSMA 204 Key Data Elements; failures surface as exceptions before package assembly.', + Icon: Braces, + title: 'JSON events API', + description: 'POST CTE events as JSON with KDE validation. Inbound events are validated against FSMA 204 Key Data Elements; failures surface as exceptions before package assembly.', }, { Icon: Cog, @@ -167,7 +167,7 @@ export default function DevelopersPage() {

    SDKs Coming Soon

    Official client libraries for Python, Node.js, and Go are planned. - In the meantime, use our REST API directly — all endpoints accept and return JSON. + In the meantime, use our REST API directly. All endpoints accept and return JSON.

    diff --git a/frontend/src/app/fsma-204/page.tsx b/frontend/src/app/fsma-204/page.tsx index 042db8e8a..85879c14d 100644 --- a/frontend/src/app/fsma-204/page.tsx +++ b/frontend/src/app/fsma-204/page.tsx @@ -57,7 +57,7 @@ const CTES_PLAIN = [ name: "First Land-Based Receiving", icon: Anchor, who: "Receivers of seafood from a fishing vessel", - what: "Per §1.1330: record when seafood was received from a fishing vessel, the lot code, the harvest and landing location, and the receiving facility. This is distinct from generic imported-food entry.", + what: "Under §1.1335, record when seafood was received from a fishing vessel, the lot code, the harvest and landing location, and the receiving facility. This is distinct from generic imported-food entry.", }, { name: "Shipping", diff --git a/frontend/src/app/fsma/integration/page.tsx b/frontend/src/app/fsma/integration/page.tsx index f183ef5d8..db1d67f72 100644 --- a/frontend/src/app/fsma/integration/page.tsx +++ b/frontend/src/app/fsma/integration/page.tsx @@ -29,7 +29,7 @@ export default function IntegrationHubPage() {
    @@ -42,7 +42,7 @@ export default function IntegrationHubPage() { The "Overlay" Traceability Model

    - RegEngine doesn't replace your WMS or inventory management system. We capture the Critical Tracking Events your operations require — Harvesting and Cooling (§1.1325), Initial Packing (§1.1330) for RACs other than from a fishing vessel, First Land-Based Receiving (§1.1335) for seafood from a fishing vessel, Shipping (§1.1340), Receiving (§1.1345, subject to §1.1305(j) restaurant/RFE exemption), and Transformation (§1.1350) — link them to your Traceability Lot Codes, and store them with SHA-256 manifests so you can produce a sortable electronic spreadsheet within 24 hours of an FDA request under §1.1455(c). + RegEngine doesn't replace your WMS or inventory management system. We capture the Critical Tracking Events your operations require: Harvesting and Cooling (§1.1325), Initial Packing (§1.1330) for RACs other than from a fishing vessel, First Land-Based Receiving (§1.1335) for seafood from a fishing vessel, Shipping (§1.1340), Receiving (§1.1345, subject to §1.1305(j) restaurant/RFE exemption), and Transformation (§1.1350). We link them to your Traceability Lot Codes and store them with SHA-256 manifests so you can produce a sortable electronic spreadsheet within 24 hours of an FDA request under §1.1455(c).

    diff --git a/frontend/src/app/fsma/layout.tsx b/frontend/src/app/fsma/layout.tsx index b008dd5c5..4cf5d478a 100644 --- a/frontend/src/app/fsma/layout.tsx +++ b/frontend/src/app/fsma/layout.tsx @@ -4,7 +4,7 @@ export const metadata: Metadata = { title: 'FSMA 204 Dashboard | Traceability & Recall Management | RegEngine', description: 'FSMA 204 compliance dashboard with traceability lot tracking, recall drill simulations, supplier KDE completeness, and FDA export readiness.', openGraph: { - title: 'FSMA 204 Dashboard — RegEngine', + title: 'FSMA 204 Dashboard | RegEngine', description: 'FSMA 204 compliance dashboard with lot tracking, recall drills, and FDA export readiness.', url: 'https://regengine.co/fsma', type: 'website', diff --git a/frontend/src/app/identity/page.tsx b/frontend/src/app/identity/page.tsx index 389ec0f4e..759e279b1 100644 --- a/frontend/src/app/identity/page.tsx +++ b/frontend/src/app/identity/page.tsx @@ -282,7 +282,7 @@ function IdentityResolutionPageContent() {
    Ambiguous Match Review Queue - Potential duplicates requiring human review — confirm match, confirm distinct, or defer + Potential duplicates requiring human review: confirm match, confirm distinct, or defer
    diff --git a/frontend/src/app/ingest/results/[id]/AnalysisResultClient.tsx b/frontend/src/app/ingest/results/[id]/AnalysisResultClient.tsx index 101d5bbbe..e03937b5d 100644 --- a/frontend/src/app/ingest/results/[id]/AnalysisResultClient.tsx +++ b/frontend/src/app/ingest/results/[id]/AnalysisResultClient.tsx @@ -107,7 +107,7 @@ export default function AnalysisResultClient() {
    Cryptographic Timeline - Simulated example — not a verification record + Simulated example, not a verification record
    diff --git a/frontend/src/app/login/layout.tsx b/frontend/src/app/login/layout.tsx index c60a75d11..35e5cb5f2 100644 --- a/frontend/src/app/login/layout.tsx +++ b/frontend/src/app/login/layout.tsx @@ -4,7 +4,7 @@ export const metadata: Metadata = { title: 'Sign In | RegEngine', description: 'Sign in to your RegEngine workspace to manage FSMA 204 traceability records and review-ready exports.', openGraph: { - title: 'Sign In — RegEngine', + title: 'Sign In | RegEngine', description: 'Sign in to your RegEngine workspace to manage FSMA 204 traceability records and review-ready exports.', type: 'website', url: 'https://regengine.co/login', diff --git a/frontend/src/app/onboarding/bulk-upload/page.tsx b/frontend/src/app/onboarding/bulk-upload/page.tsx index 9417e84f1..89f896b1b 100644 --- a/frontend/src/app/onboarding/bulk-upload/page.tsx +++ b/frontend/src/app/onboarding/bulk-upload/page.tsx @@ -320,7 +320,7 @@ export default function BulkUploadPage() { Free preview mode

    - Upload a CSV to preview and validate your data against FSMA 204 traceability expectations — no account required. Sign in to commit with cryptographic integrity and generate review-ready records. + Upload a CSV to preview and validate your data against FSMA 204 traceability expectations. No account required. Sign in to commit with cryptographic integrity and generate review-ready records.

    )} diff --git a/frontend/src/app/onboarding/setup/facility/page.tsx b/frontend/src/app/onboarding/setup/facility/page.tsx index 4519ebddf..d0714e738 100644 --- a/frontend/src/app/onboarding/setup/facility/page.tsx +++ b/frontend/src/app/onboarding/setup/facility/page.tsx @@ -109,7 +109,7 @@ export default function FacilityPage() { } else if (status === 400 || status === 422) { setError( apiError.response.data?.detail || - 'Validation failed — check your facility details and try again.', + 'Validation failed. Check your facility details and try again.', ); } else if (status === 409) { setError( @@ -119,7 +119,7 @@ export default function FacilityPage() { setError('Too many requests. Please wait a moment and try again.'); } else if (status !== undefined && status >= 500) { setError( - 'Could not save facility — server error. Try again or email support@regengine.co.', + 'Could not save facility (server error). Try again or email support@regengine.co.', ); } else { setError( @@ -260,7 +260,7 @@ export default function FacilityPage() { size="lg" onClick={() => router.push('/dashboard')} > - Skip for now — I'll set up later + Skip for now. I'll set up later {!showResults ? (

    - Coming soon — JPG, PNG or GIF. Max size 2MB. + Coming soon: JPG, PNG or GIF. Max size 2MB.

    diff --git a/frontend/src/app/settings/security/page.tsx b/frontend/src/app/settings/security/page.tsx index 62e08a1a4..ff73cf73c 100644 --- a/frontend/src/app/settings/security/page.tsx +++ b/frontend/src/app/settings/security/page.tsx @@ -108,7 +108,7 @@ export default function SecuritySettingsPage() { - You sign in with an email code or a passkey — there is no password to manage. + You sign in with an email code or a passkey. There is no password to manage. Use a passkey when prompted for high-assurance routes.