diff --git a/app/about-us/page.tsx b/app/about-us/page.tsx index f440b4c..29d41c6 100644 --- a/app/about-us/page.tsx +++ b/app/about-us/page.tsx @@ -280,8 +280,9 @@ export default function AboutPage() { whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} transition={{ duration: 0.5, delay: idx * 0.1 }} + className="h-full" > -
+
{value.icon}
@@ -313,7 +314,7 @@ export default function AboutPage() {

Leadership

-

+

Choosing a mentor is more important than choosing a company

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

Why Procedure

-

+

The numbers speak for themselves

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

Trust & Compliance

-

+

Enterprise-grade security you can trust

diff --git a/app/ai-safety/page.tsx b/app/ai-safety/page.tsx index b6e9fa1..6f747f3 100644 --- a/app/ai-safety/page.tsx +++ b/app/ai-safety/page.tsx @@ -764,7 +764,7 @@ export default function AISafetyPage() {

Our Principles

-

+

Six Pillars of{" "} Responsible AI.

@@ -812,7 +812,7 @@ export default function AISafetyPage() {

How We Operationalize Safety

-

+

Safety Integrated at{" "} Every Stage.

@@ -851,7 +851,7 @@ export default function AISafetyPage() {

Frameworks & Standards

-

+

Built on{" "} Industry Standards.

@@ -988,7 +988,7 @@ export default function AISafetyPage() {

Industry-Specific Safety

-

+

Tailored for Your Domain.

diff --git a/app/ai-upskill/page.tsx b/app/ai-upskill/page.tsx index ee5b663..daa77e9 100644 --- a/app/ai-upskill/page.tsx +++ b/app/ai-upskill/page.tsx @@ -70,7 +70,7 @@ const faqs = [ { question: "When does the next cohort start?", answer: - "Watch for announcements in Slack. Our target launch is Q2 2025 (July). We'll share exact dates and registration details as they're finalized.", + "Watch for announcements in Slack. Our target launch is Q2 2026 (July). We'll share exact dates and registration details as they're finalized.", }, { question: "Do I need to know how to code?", @@ -860,7 +860,7 @@ export default function AIUpskillPage() { href="/contact-us" className="inline-flex items-center justify-center gap-2 px-8 py-4 bg-cta text-cta-text font-semibold rounded-xl hover:brightness-110 transition-all" > - Contact Us + Bring AI Upskill to Your Team - {/* Final CTA Section */} -
-

-
-
- -
- -

- The future is AI-driven. -
- - Build the skills to lead it. - -

-

- Join Procedure's AI Upskill bootcamp and transform from a - developer into an AI engineer. Real projects. Real skills. Real - impact. -

-
- - Apply to Join - - - - - - Have Questions? - -
- - {/* Social links */} -
- Find us online: - -
-
-
- ); } diff --git a/app/approach/page.tsx b/app/approach/page.tsx index cd89377..97f2e2c 100644 --- a/app/approach/page.tsx +++ b/app/approach/page.tsx @@ -683,30 +683,6 @@ export default function ApproachPage() { - {/* Stats row */} - - {outcomes.map((outcome, idx) => ( -
-
- - {outcome.stat} - - - {outcome.unit} - -
-

{outcome.label}

-
- ))} -
@@ -798,7 +774,7 @@ export default function ApproachPage() {

How We Work

-

+

From First Conversation{" "} to Production.

@@ -863,15 +839,16 @@ export default function ApproachPage() {
{/* Phase Cards Grid */} -
+
{processPhases.map((phase, idx) => ( - setActivePhase(idx)} - /> +
+ setActivePhase(idx)} + /> +
))}
@@ -905,7 +882,7 @@ export default function ApproachPage() {

What Makes Us Different

-

+

Not Your Typical Dev Shop.

@@ -947,7 +924,7 @@ export default function ApproachPage() {

Our Principles

-

+

The beliefs that{" "} guide our work.

@@ -994,7 +971,7 @@ export default function ApproachPage() {

What You Can Expect

-

+

Outcomes, Not Outputs.

diff --git a/app/blogs/[slug]/page.tsx b/app/blogs/[slug]/page.tsx index 08b7d80..4b09adc 100644 --- a/app/blogs/[slug]/page.tsx +++ b/app/blogs/[slug]/page.tsx @@ -775,7 +775,7 @@ export default async function BlogPostPage({ params }: BlogPostPageProps) { )} {/* CTA Section */} - + ); } diff --git a/app/careers/page.tsx b/app/careers/page.tsx index 3177838..719d589 100644 --- a/app/careers/page.tsx +++ b/app/careers/page.tsx @@ -211,7 +211,7 @@ export default function CareersPage() {

Why Join Procedure

-

+

Benefits Designed for Senior AI Engineers

@@ -275,7 +275,7 @@ export default function CareersPage() {

Our Engineering Culture

-

+

The Values That Drive Our Work

@@ -346,7 +346,7 @@ export default function CareersPage() {

Current Openings

-

+

Remote AI and Engineering Positions

diff --git a/app/contact-us/page.tsx b/app/contact-us/page.tsx index f7af1ab..cd2cdf7 100644 --- a/app/contact-us/page.tsx +++ b/app/contact-us/page.tsx @@ -565,7 +565,7 @@ export default function ContactPage() { transition={{ duration: 0.6 }} className="text-center mb-12" > -

+

Global presence, local expertise

@@ -646,7 +646,7 @@ export default function ContactPage() { transition={{ duration: 0.6 }} className="text-center mb-12" > -

+

Frequently asked questions

diff --git a/app/culture/page.tsx b/app/culture/page.tsx index c214f52..661fd94 100644 --- a/app/culture/page.tsx +++ b/app/culture/page.tsx @@ -464,18 +464,15 @@ export default function CulturePage() {

How It Started

-

+

Procedure started as a small crew that just loved making things work better, and that hasn't changed. -

-

- Today, we're still experimenting, breaking, fixing, and - shipping together, because that's how real products and real - teams grow. Our team is a mixed bag. Of the smart and the hard - workers. Of the organised and slightly chaotic. Of the early - risers and the burners of the midnight oil. We appreciate - diversity and truly like having differing perspectives in the - room. + +

+ We're still experimenting, breaking, fixing, and shipping + together—because that's how real products and real + teams grow. A diverse mix of perspectives, personalities, and + working styles, united by a shared love for the craft.

@@ -520,7 +517,7 @@ export default function CulturePage() { {/* Beliefs Grid */} -
+
{workBeliefs.map((belief, idx) => ( {/* Card glow effect */}
diff --git a/app/events/page.tsx b/app/events/page.tsx index bf7fac3..edb942a 100644 --- a/app/events/page.tsx +++ b/app/events/page.tsx @@ -316,7 +316,7 @@ export default function EventsPage() {

Flagship Meetup

-

+

Mumbai Meets AI - Edition 4

@@ -532,7 +532,7 @@ export default function EventsPage() {

Event Archive

-

+

Where We've Been

@@ -828,7 +828,7 @@ export default function EventsPage() {

Our Philosophy

-

+

Why We Show Up

@@ -926,7 +926,7 @@ export default function EventsPage() {

-

+

Stay in the Loop

@@ -1000,7 +1000,7 @@ export default function EventsPage() {

Join Us

-

+

There's a Place for You Here

diff --git a/app/services/[slug]/AISecurityPageClient.tsx b/app/services/[slug]/AISecurityPageClient.tsx index dfb92c4..76a994d 100644 --- a/app/services/[slug]/AISecurityPageClient.tsx +++ b/app/services/[slug]/AISecurityPageClient.tsx @@ -3,7 +3,7 @@ import { motion } from "framer-motion"; import { PageHero } from "@/components/ui"; import { CalInline } from "@/components/CalInline"; -import { RelatedExpertise } from "@/components/expertise"; +import { RelatedExpertise, FAQSection } from "@/components/expertise"; interface RelatedPage { slug: string; @@ -140,7 +140,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { headlineAccent={data.hero.headlineAccent} description={data.hero.description} primaryCTA={{ text: "Book Security Assessment", href: "#book-call" }} - secondaryCTA={{ text: "See How We Work", href: "#services" }} + secondaryCTA={{ text: "See How We Work", href: "#process" }} /> {/* Risks Section */} @@ -150,7 +150,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - className="mb-12" + className="text-center mb-12" >

The Risks @@ -193,7 +193,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - className="mb-12" + className="text-center mb-12" >

What We Do @@ -240,13 +240,13 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { {/* Process Section */} -

+

How We Work @@ -283,7 +283,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { initial={{ opacity: 0, y: 20 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} - className="mb-12" + className="text-center mb-12" >

Is This For You? @@ -344,39 +344,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) {

{/* FAQ Section */} -
-
- -

- Questions -

-

- Frequently Asked Questions -

-
- -
- {data.faqs.map((faq, idx) => ( - -

{faq.question}

-

{faq.answer}

-
- ))} -
-
-
+ {data.faqs.length > 0 && } {/* Related Expertise */} {relatedPages.length > 0 && ( @@ -392,7 +360,7 @@ export default function AISecurityPageClient({ data, relatedPages }: Props) { viewport={{ once: true }} className="text-center mb-10" > -

+

Let's Find the Gaps{" "} Before Attackers Do

diff --git a/app/services/[slug]/ExpertisePageClient.tsx b/app/services/[slug]/ExpertisePageClient.tsx index 05084eb..8a43d91 100644 --- a/app/services/[slug]/ExpertisePageClient.tsx +++ b/app/services/[slug]/ExpertisePageClient.tsx @@ -204,7 +204,6 @@ export default function ExpertisePageClient({ badge={pageData.hero.badge} headline={pageData.hero.headline} headlineAccent={pageData.hero.headlineAccent} - tagline={pageData.hero.tagline} description={pageData.hero.description} primaryCTA={ expertise.slug === "frontend-development" @@ -378,7 +377,7 @@ export default function ExpertisePageClient({ viewport={{ once: true }} transition={{ duration: 0.6 }} > -

+

Discuss Your .NET Project

diff --git a/app/services/[slug]/ServicePageClient.tsx b/app/services/[slug]/ServicePageClient.tsx index ac34089..2451eea 100644 --- a/app/services/[slug]/ServicePageClient.tsx +++ b/app/services/[slug]/ServicePageClient.tsx @@ -101,7 +101,7 @@ export default function ServicePageClient({ service }: Props) { viewport={{ once: true }} className="text-center mb-16" > -

+

{benefitsTitle}

@@ -151,7 +151,7 @@ export default function ServicePageClient({ service }: Props) { viewport={{ once: true }} className="text-center mb-16" > -

+

{processTitle}

@@ -202,7 +202,7 @@ export default function ServicePageClient({ service }: Props) { viewport={{ once: true }} className="text-center mb-12" > -

+

{additionalItemsTitle}

@@ -235,7 +235,7 @@ export default function ServicePageClient({ service }: Props) { viewport={{ once: true }} className="text-center mb-12" > -

+

Compliance & Security

@@ -267,7 +267,7 @@ export default function ServicePageClient({ service }: Props) { viewport={{ once: true }} className="text-center mb-12" > -

+

{idealForTitle}

diff --git a/app/why-us/page.tsx b/app/why-us/page.tsx index 0217f74..3174a74 100644 --- a/app/why-us/page.tsx +++ b/app/why-us/page.tsx @@ -230,7 +230,7 @@ export default function WhyUsPage() {

Why Choose Procedure

-

+

Five reasons teams choose{" "} Procedure for AI

@@ -278,7 +278,7 @@ export default function WhyUsPage() {

The Comparison

-

+

This is not your typical consultancy

@@ -451,7 +451,7 @@ export default function WhyUsPage() {

Our Process

-

+

From first call to{" "} production AI

diff --git a/app/work/[slug]/CaseStudyDetailClient.tsx b/app/work/[slug]/CaseStudyDetailClient.tsx index 4738ab0..2beee20 100644 --- a/app/work/[slug]/CaseStudyDetailClient.tsx +++ b/app/work/[slug]/CaseStudyDetailClient.tsx @@ -463,7 +463,7 @@ export function CaseStudyDetailClient({ viewport={{ once: true }} transition={{ duration: 0.6 }} > -

+

Ready to Build Your
Success Story? diff --git a/components/FooterReveal.tsx b/components/FooterReveal.tsx index 5c395c6..7f607e8 100644 --- a/components/FooterReveal.tsx +++ b/components/FooterReveal.tsx @@ -13,7 +13,7 @@ export function FooterReveal() { textColor="var(--color-text-muted)" dotColor="var(--color-text-muted)" variant="outlined" - className="w-[120%] max-w-none h-auto opacity-70" + className="w-full max-w-none h-auto opacity-70" />

diff --git a/components/blog/BlogCTA.tsx b/components/blog/BlogCTA.tsx index f991748..7271fd7 100644 --- a/components/blog/BlogCTA.tsx +++ b/components/blog/BlogCTA.tsx @@ -3,7 +3,89 @@ import Link from "next/link"; import { motion } from "framer-motion"; -export function BlogCTA() { +interface CTAContent { + headingLine1: string; + headingLine2: string; + description: string; + secondaryLabel: string; + secondaryHref: string; +} + +const categoryCTAMap: Record = { + "ai-engineering": { + headingLine1: "Ready to Build Production", + headingLine2: "AI Systems?", + description: + "Our team has deployed AI systems serving billions of requests. Let\u2019s talk about your AI engineering challenges and how we can help.", + secondaryLabel: "Explore AI Engineering Services", + secondaryHref: "/services/ai-engineering", + }, + "llm-applications": { + headingLine1: "Ready to Build with", + headingLine2: "Large Language Models?", + description: + "From RAG pipelines to AI agents, we build LLM-powered applications that scale in production. Let\u2019s discuss your use case.", + secondaryLabel: "Explore AI Engineering Services", + secondaryHref: "/services/ai-engineering", + }, + engineering: { + headingLine1: "Need Senior Engineers", + headingLine2: "Who Ship from Day One?", + description: + "Our embedded engineering teams write production code from week one. Scale your team with senior developers who integrate seamlessly.", + secondaryLabel: "Explore Engineering Services", + secondaryHref: "/services/frontend-development", + }, + "product-development": { + headingLine1: "Ready to Ship Your", + headingLine2: "Product Faster?", + description: + "From concept to production in weeks, not months. Our product engineering teams have shipped 100+ products to production.", + secondaryLabel: "Explore Product Development", + secondaryHref: "/services/product-build", + }, + "industry-insights": { + headingLine1: "Ready to Transform", + headingLine2: "Your Business with AI?", + description: + "Our team brings deep industry expertise and proven engineering practices to every engagement. Let\u2019s discuss your next project.", + secondaryLabel: "View Our Work", + secondaryHref: "/work", + }, + "ai-security": { + headingLine1: "Need to Secure Your", + headingLine2: "AI Systems?", + description: + "From prompt injection defense to model security, we help teams ship AI systems that are secure by design.", + secondaryLabel: "Explore AI Security Services", + secondaryHref: "/services/ai-security", + }, + "cloud-infrastructure": { + headingLine1: "Ready to Scale Your", + headingLine2: "Cloud Infrastructure?", + description: + "Our cloud architects design and implement infrastructure that scales reliably. From Kubernetes to multi-cloud, we\u2019ve got you covered.", + secondaryLabel: "Explore Cloud Services", + secondaryHref: "/services/cloud", + }, +}; + +const defaultCTA: CTAContent = { + headingLine1: "Ready to Build Production", + headingLine2: "AI Systems?", + description: + "Our team has deployed AI systems serving billions of requests. Let\u2019s talk about your engineering challenges and how we can help.", + secondaryLabel: "View Our Work", + secondaryHref: "/work", +}; + +interface BlogCTAProps { + categorySlug?: string; +} + +export function BlogCTA({ categorySlug }: BlogCTAProps) { + const cta = (categorySlug && categoryCTAMap[categorySlug]) || defaultCTA; + return (
@@ -14,14 +96,12 @@ export function BlogCTA() { transition={{ duration: 0.6 }} >

- Ready to Build Production + {cta.headingLine1}
- AI Systems? + {cta.headingLine2}

- Our team has deployed AI systems serving billions of requests. - Let's talk about your engineering challenges and how we can - help. + {cta.description}

{/* Dual CTAs */} @@ -46,10 +126,10 @@ export function BlogCTA() { - View Our Work + {cta.secondaryLabel}
diff --git a/components/footer.tsx b/components/footer.tsx index abd38da..15dbfa7 100644 --- a/components/footer.tsx +++ b/components/footer.tsx @@ -163,10 +163,10 @@ export function Footer() { {/* Column 1: AI & ML + Engineering */}
-

+

AI & ML

-
    +
      {footerLinks.aiServices.map((link) => (
    • -

      +

      Engineering

      -
        +
          {footerLinks.productEngineering.map((link) => (
        • -

          +

          Cloud & Design

          -
            +
              {footerLinks.cloudDesign.map((link) => (
            • -

              +

              Industries

              -
                +
                  {footerLinks.industries.map((link) => (
                • -

                  +

                  Company

                  -
                    +
                      {footerLinks.company.map((link) => (
                    • -

                      +

                      Resources

                      -
                        +
                        • s.featured); - const regularSolutions = solutions.filter((s) => !s.featured); - return (
                          @@ -66,124 +63,47 @@ export function SolutionsGrid({ )} - {/* Solutions layout */} + {/* Uniform solutions grid */} - {/* Featured + side cards layout */} - {featuredSolution && ( -
                          - {/* Featured card - takes 2 columns */} - ( + +
                          -
                          -
                          - {featuredSolution.icon} -
                          +
                          + {solution.icon}
                          - -

                          - {featuredSolution.title} -

                          -

                          - {featuredSolution.description} -

                          - - - {/* Side cards */} -
                          - {regularSolutions.slice(0, 2).map((solution, index) => ( - -
                          -
                          - {solution.icon} -
                          -
                          -

                          - {solution.title} -

                          -

                          - {solution.description} -

                          -
                          - ))}
                          -
                          - )} - - {/* Bottom row */} -
                          - {(featuredSolution ? regularSolutions.slice(2) : solutions).map( - (solution, index) => ( - -
                          -
                          - {solution.icon} -
                          -
                          -

                          - {solution.title} -

                          -

                          - {solution.description} -

                          -
                          - ), - )} -
                          +

                          + {solution.title} +

                          +

                          + {solution.description} +

                          + + ))}
                          diff --git a/components/industries/SuccessMetrics.tsx b/components/industries/SuccessMetrics.tsx index a4dee9a..4ebec41 100644 --- a/components/industries/SuccessMetrics.tsx +++ b/components/industries/SuccessMetrics.tsx @@ -72,20 +72,20 @@ export function SuccessMetrics({ key={index} variants={cardVariants} className={cn( - "p-6 sm:p-8 rounded-2xl text-center", + "p-6 rounded-2xl text-center", "bg-gradient-to-br from-accent/10 to-accent-secondary/10", "border border-accent/20", "hover:border-accent/40 transition-colors duration-300", )} > -
                          +
                          {metric.value}
                          -
                          +
                          {metric.label}
                          {metric.context && ( -
                          +
                          {metric.context}
                          )} diff --git a/components/sections/CTA.tsx b/components/sections/CTA.tsx index 8944ff9..077b30d 100644 --- a/components/sections/CTA.tsx +++ b/components/sections/CTA.tsx @@ -30,8 +30,8 @@ export function CTA() { transition={{ duration: 0.6 }} className="relative max-w-4xl mx-auto px-4 sm:px-6 text-center" > -

                          - Ready to secure your AI initiatives? +

                          + Ready to Secure Your AI Initiatives?

                          Whether you're building your first LLM application or scaling diff --git a/components/sections/EngagementModels.tsx b/components/sections/EngagementModels.tsx index a710012..d6e2e88 100644 --- a/components/sections/EngagementModels.tsx +++ b/components/sections/EngagementModels.tsx @@ -111,8 +111,8 @@ export function EngagementModels() {

                          Engagement Models

                          -

                          - Enterprise partnership models built for scale +

                          + Enterprise Partnership Models Built for Scale

                          Three proven engagement frameworks designed for different business diff --git a/components/sections/FAQ.tsx b/components/sections/FAQ.tsx index 03ce225..cdb546d 100644 --- a/components/sections/FAQ.tsx +++ b/components/sections/FAQ.tsx @@ -67,7 +67,7 @@ export function FAQ() { FAQ

                          - Frequently asked questions + Frequently Asked Questions

                          diff --git a/components/sections/FeaturedCaseStudies.tsx b/components/sections/FeaturedCaseStudies.tsx index eefbc21..24862ac 100644 --- a/components/sections/FeaturedCaseStudies.tsx +++ b/components/sections/FeaturedCaseStudies.tsx @@ -35,7 +35,7 @@ export function FeaturedCaseStudies({ caseStudies }: FeaturedCaseStudiesProps) { Proven Results

                          - AI that ships. Results that matter. + AI That Ships. Results That Matter.

                          Our Process

                          -

                          - From first call to{" "} - production-ready code +

                          + From First Call to{" "} + Production-Ready Code

                          A proven engagement process built for enterprise velocity. Your team diff --git a/components/sections/Services.tsx b/components/sections/Services.tsx index c64d452..d5318d3 100644 --- a/components/sections/Services.tsx +++ b/components/sections/Services.tsx @@ -177,7 +177,7 @@ export function Services() { What You Get

                          - AI engineering and product development services + AI Engineering and Product Development Services

                          diff --git a/components/sections/Stats.tsx b/components/sections/Stats.tsx index 85fc30d..36df9bb 100644 --- a/components/sections/Stats.tsx +++ b/components/sections/Stats.tsx @@ -20,7 +20,7 @@ interface StatsProps { } export function Stats({ - title = "Proven results from embedded engineering", + title = "Proven Results from Embedded Engineering", stats = defaultStats, }: StatsProps) { return ( diff --git a/components/sections/Team.tsx b/components/sections/Team.tsx index 14aa8d8..d4bb99e 100644 --- a/components/sections/Team.tsx +++ b/components/sections/Team.tsx @@ -171,7 +171,7 @@ export function Team() {

                          Our Team

                          -

                          +

                          Senior Engineers. Production Focus. Your Extended Team.

                          diff --git a/components/sections/Testimonials.tsx b/components/sections/Testimonials.tsx index eb6f51f..fe04a06 100644 --- a/components/sections/Testimonials.tsx +++ b/components/sections/Testimonials.tsx @@ -29,7 +29,7 @@ export function Testimonials() { Testimonials

                          - Trusted by engineering leaders + Trusted by Engineering Leaders

                          diff --git a/components/sections/ValueProposition.tsx b/components/sections/ValueProposition.tsx index dcdf6b4..437d68e 100644 --- a/components/sections/ValueProposition.tsx +++ b/components/sections/ValueProposition.tsx @@ -97,8 +97,8 @@ export function ValueProposition() {

                          Why teams choose us

                          -

                          - AI engineers who build, not consultants who advise +

                          + AI Engineers Who Build, Not Consultants Who Advise

                          Procedure delivers senior AI engineers who write production code, not diff --git a/content/industries/education.mdx b/content/industries/education.mdx index ee3dd45..e36eb1a 100644 --- a/content/industries/education.mdx +++ b/content/industries/education.mdx @@ -43,15 +43,7 @@ solutions: - title: "Accessibility-First Design" description: "Build educational AI that works for all learners. Screen reader compatibility, caption generation, and inclusive design patterns." icon: "users" -compliance: - - name: "FERPA" - description: "Compliant" - - name: "COPPA" - description: "Compliant" - - name: "WCAG 2.1 AA" - description: "Accessible" - - name: "SOC 2" - description: "Certified" +compliance: [] useCases: - adaptive-learning - content-generation diff --git a/content/industries/financial-services.mdx b/content/industries/financial-services.mdx index bc2a93c..4da2b83 100644 --- a/content/industries/financial-services.mdx +++ b/content/industries/financial-services.mdx @@ -43,15 +43,7 @@ solutions: - title: "Compliance & RegTech" description: "Automated compliance monitoring, transaction surveillance, and regulatory reporting. AI that helps you stay compliant, not create new risks." icon: "clipboard" -compliance: - - name: "SOC 2 Type II" - description: "Certified" - - name: "PCI-DSS" - description: "Compliant" - - name: "FINRA/SEC" - description: "Ready" - - name: "GDPR" - description: "Compliant" +compliance: [] useCases: - fraud-detection - algorithmic-trading diff --git a/content/industries/healthcare.mdx b/content/industries/healthcare.mdx index 165bc8c..677a29f 100644 --- a/content/industries/healthcare.mdx +++ b/content/industries/healthcare.mdx @@ -43,15 +43,7 @@ solutions: - title: "Population Health Analytics" description: "Predictive models for risk stratification, care gaps, and population health management. Data-driven insights for better outcomes." icon: "chart" -compliance: - - name: "HIPAA" - description: "Compliant" - - name: "HITRUST" - description: "Certified" - - name: "HL7 FHIR" - description: "Compatible" - - name: "FDA" - description: "Pathway Ready" +compliance: [] useCases: - clinical-documentation - diagnostic-support @@ -89,6 +81,5 @@ seo: ## Results We've Delivered - **30-50% reduction** in documentation time -- **100% HIPAA compliant** across all deployments - **15-25% improvement** in clinical workflow efficiency - **85%+ clinician satisfaction** with AI-assisted tools diff --git a/content/industries/saas.mdx b/content/industries/saas.mdx index 7c775d2..64f03c2 100644 --- a/content/industries/saas.mdx +++ b/content/industries/saas.mdx @@ -43,15 +43,7 @@ solutions: - title: "API & Platform AI" description: "Build AI capabilities into your platform that customers and partners can leverage. AI as a product differentiator." icon: "code" -compliance: - - name: "SOC 2" - description: "Certified" - - name: "GDPR" - description: "Compliant" - - name: "API Security" - description: "Best Practices" - - name: "Data Privacy" - description: "By Design" +compliance: [] useCases: - ai-copilot - intelligent-search diff --git a/content/services/scale-ups.mdx b/content/services/scale-ups.mdx index 0237773..0310f12 100644 --- a/content/services/scale-ups.mdx +++ b/content/services/scale-ups.mdx @@ -9,7 +9,7 @@ primaryCTA: text: "Scale Your Team Now" href: "/contact-us" secondaryCTA: - text: "View Scale-Up Case Studies" + text: "See Case Studies" href: "/work" benefits: - title: "Add Senior Capacity in Days" diff --git a/content/services/startups.mdx b/content/services/startups.mdx index 14943c6..f1b19cc 100644 --- a/content/services/startups.mdx +++ b/content/services/startups.mdx @@ -8,7 +8,7 @@ primaryCTA: text: "Talk to Us This Week" href: "/contact-us" secondaryCTA: - text: "See Startup Case Studies" + text: "See Case Studies" href: "/work" benefits: - title: "Weeks to Market, Not Months" diff --git a/lib/content.ts b/lib/content.ts index 7bb33fd..47250bd 100644 --- a/lib/content.ts +++ b/lib/content.ts @@ -1011,8 +1011,9 @@ function parseMetricsFromContent( if (match) { const [, boldPart, context] = match; // Try to split bold part into value and label + // Matches: optional $, digits/symbols, optional letter suffix (e.g. "ms", "M", "x"), optional trailing +/% const valueLabelMatch = boldPart.match( - /^([\d\.\-<>%\+]+\s*[\w]*)\s+(.+)$/, + /^(\$?[\d.\-<>%+]+[A-Za-z]*[+%]?)\s+(.+)$/, ); if (valueLabelMatch) { return { diff --git a/lib/notion-blog.ts b/lib/notion-blog.ts index 31af5c9..450ad67 100644 --- a/lib/notion-blog.ts +++ b/lib/notion-blog.ts @@ -275,15 +275,6 @@ function generateSlug(title: string): string { } // ============================================================================= -// Read Time Calculation -// ============================================================================= - -function calculateReadTime(content: string): number { - const wordsPerMinute = 200; - const words = content.trim().split(/\s+/).length; - return Math.ceil(words / wordsPerMinute); -} - // ============================================================================= // Transform Notion Page to BlogPost // ============================================================================= @@ -812,18 +803,18 @@ export const getNotionBlogPostBySlug = cache( // Cache any images in the content to public folder await cacheContentImages(notionContent, slug, "blog"); - // Generate content string for read time calculation + // Generate content string const contentText = notionContent .filter((block) => block.text) .map((block) => block.text) .join(" "); - const readTime = calculateReadTime(contentText) || detail.readTime; - + // Use the same readTime from Notion property as the listing cards + // to ensure consistency between blog cards and blog post pages. + // The Notion "Read Time" property (or default 5) is set in processNotionPage(). return { ...detail, content: contentText, - readTime, notionContent, }; }