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);