diff --git a/src/components/Header.astro b/src/components/Header.astro index 0374ab5..a573906 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -78,7 +78,7 @@ const currentPath = Astro.url.pathname; href="/contact" class="btn-primary text-sm" > - Get Started + Get my free proposal @@ -182,7 +182,7 @@ const currentPath = Astro.url.pathname; href="/contact" class="btn-primary w-full justify-center" > - Get Started + Get my free proposal diff --git a/src/components/PricingTimelineBand.astro b/src/components/PricingTimelineBand.astro index b72a56e..1a0a498 100644 --- a/src/components/PricingTimelineBand.astro +++ b/src/components/PricingTimelineBand.astro @@ -90,21 +90,20 @@

Projects from - $X,XXX + ₹1,00,000

diff --git a/src/components/ProofNumbers.astro b/src/components/ProofNumbers.astro index 098f922..e132609 100644 --- a/src/components/ProofNumbers.astro +++ b/src/components/ProofNumbers.astro @@ -33,24 +33,21 @@ interface Props { items?: ProofItem[]; } -// TODO(content): confirm these proof numbers with the WorkRoot leadership / -// marketing team before each public release. Defaults reflect the current -// public-facing claims (hero badge: "20+ teams · 11 districts") plus the -// performance budget the site is built against (<2s LCP on 4G). +// Canonical site-wide proof set. These four numbers are the single source of +// truth for WorkRoot's headline stats and MUST stay identical to the homepage +// stats band (src/pages/index.astro), the /portfolio stats bar, and the +// /about stats grid. Changing one without the others reintroduces the +// credibility bug this set was created to fix. // -// - "20+ Projects Delivered" — sourced from existing homepage stats array -// - "5★ Client Rating" — every testimonial in this file has -// rating: 5; tighten to "4.9★" once a -// weighted average is available -// - "11 Districts Deployed" — matches hero trust badge copy -// - "< 2s Avg Page Load" — performance budget for the marketing site -// -// If real audited numbers become available, prefer those over these defaults. +// - "20+ Projects" — total delivered engagements +// - "11 Districts Deployed" — matches hero trust badge copy +// - "50,000+ Records Managed" — records under management across deployments +// - "8+ Years Avg Experience" — average team experience const defaultItems: ProofItem[] = [ - { value: '20+', label: 'Projects Delivered' }, - { value: '5★', label: 'Client Rating' }, + { value: '20+', label: 'Projects' }, { value: '11', label: 'Districts Deployed' }, - { value: '< 2s', label: 'Avg Page Load' }, + { value: '50,000+', label: 'Records Managed' }, + { value: '8+', label: 'Years Avg Experience' }, ]; const { items = defaultItems } = Astro.props; diff --git a/src/pages/about.astro b/src/pages/about.astro index 24c50ae..63f714b 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -32,12 +32,14 @@ const teamMembers = [ }, ]; -// Company stats +// Company stats — canonical site-wide proof set (kept identical to the +// homepage ProofNumbers band, the /portfolio stats bar, and the homepage +// stats counters) so the numbers never contradict across pages. const stats = [ - { value: '3+', label: 'Years in Business' }, - { value: '20+', label: 'Projects Delivered' }, + { value: '20+', label: 'Projects' }, + { value: '11', label: 'Districts Deployed' }, + { value: '50,000+', label: 'Records Managed' }, { value: '8+', label: 'Years Avg Experience' }, - { value: '100%', label: 'Client Satisfaction' }, ]; // Company timeline diff --git a/src/pages/contact.astro b/src/pages/contact.astro index 085f5a8..67131a7 100644 --- a/src/pages/contact.astro +++ b/src/pages/contact.astro @@ -363,7 +363,7 @@ const trustStats = [ (optional)
- {['< $5K', '$5K – $15K', '$15K – $50K', '$50K+', 'Not sure yet'].map((range, i) => ( + {['< ₹1L', '₹1L – ₹5L', '₹5L – ₹15L', '₹15L+', 'Not sure yet'].map((range, i) => (
@@ -828,7 +830,9 @@ const techStack = [ // Guaranteed final state — set the resolved value up front so a // mid-animation failure can never leave the user staring at "0". - const finalText = target + suffix; + // Use the Indian locale grouping so large counters (e.g. 50,000+) + // render with the same comma format as the server-rendered markup. + const finalText = target.toLocaleString('en-IN') + suffix; if (reduceMotion || !Number.isFinite(target) || target <= 0) { counter.textContent = finalText; @@ -840,7 +844,7 @@ const techStack = [ counter.dataset.counted = 'true'; const startTime = performance.now(); - counter.textContent = '0' + suffix; + counter.textContent = (0).toLocaleString('en-IN') + suffix; function updateCounter(currentTime: number) { const elapsed = currentTime - startTime; @@ -848,7 +852,7 @@ const techStack = [ const easeOutQuart = 1 - Math.pow(1 - progress, 4); const current = Math.floor(easeOutQuart * target); - counter.textContent = current + suffix; + counter.textContent = current.toLocaleString('en-IN') + suffix; if (progress < 1) { requestAnimationFrame(updateCounter); diff --git a/src/pages/portfolio.astro b/src/pages/portfolio.astro index b776339..882bde5 100644 --- a/src/pages/portfolio.astro +++ b/src/pages/portfolio.astro @@ -223,10 +223,10 @@ const featuredProjects = projects.filter(p => p.featured);
{[ - { value: '20+', label: 'Projects Delivered' }, - { value: '10+', label: 'Happy Clients' }, - { value: '4', label: 'Specializations' }, - { value: '5★', label: 'Average Rating' }, + { value: '20+', label: 'Projects' }, + { value: '11', label: 'Districts Deployed' }, + { value: '50,000+', label: 'Records Managed' }, + { value: '8+', label: 'Years Avg Experience' }, ].map((stat) => (

{stat.value}

@@ -624,7 +624,7 @@ const featuredProjects = projects.filter(p => p.featured); href="/contact" class="inline-flex items-center justify-center rounded-xl bg-white px-8 py-3.5 font-semibold text-primary transition-all hover:bg-primary-50 hover:shadow-xl focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-primary" > - Start a Project + Get my free proposal - Get Started + Get my free proposal @@ -809,7 +809,7 @@ const processSteps = [ : 'bg-secondary-900 dark:bg-secondary-700 text-white hover:bg-secondary-800 dark:hover:bg-secondary-600 focus:ring-secondary-400' }`} > - {tier.cta === 'Most Popular' ? 'Get Started' : tier.cta} + {tier.cta} @@ -820,7 +820,7 @@ const processSteps = [

All prices are estimates. Final scope and pricing determined after discovery call. - Schedule a free consultation → + Get my free proposal →

@@ -886,7 +886,7 @@ const processSteps = [ href="/contact" class="inline-flex items-center justify-center px-8 py-4 bg-white text-primary-600 font-bold rounded-xl hover:bg-primary-50 hover:shadow-xl transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-primary-600" > - Schedule a Free Call + Get my free proposal