Files
CompanySite/src/components/HomepageFaq.astro
T
platform-mcpandClaude Opus 4.8 5a2b68763f
Deploy to Production / Build & Verify (push) Has been cancelled
Deploy to Production / Pre-Deploy Tests (push) Has been cancelled
Deploy to Production / Deploy to Railway (push) Has been cancelled
Deploy to Production / Deploy to Render (push) Has been cancelled
Deploy to Production / Deploy to VPS (PM2) (push) Has been cancelled
Deploy to Production / Deploy to Fly.io (push) Has been cancelled
Deploy to Production / Post-Deploy Verification (push) Has been cancelled
Deploy to Production / Notify on Failure (push) Has been cancelled
E2E Test Suite / Smoke Tests (P0) (push) Has been cancelled
E2E Test Suite / Critical User Journeys (push) Has been cancelled
E2E Test Suite / API Integration Tests (push) Has been cancelled
E2E Test Suite / Form Interaction Tests (push) Has been cancelled
E2E Test Suite / Destructive & Chaos Tests (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (chromium) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (firefox) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (webkit) (push) Has been cancelled
E2E Test Suite / Mobile Device Tests (push) Has been cancelled
E2E Test Suite / Security Header Tests (push) Has been cancelled
E2E Test Suite / Test Report Summary (push) Has been cancelled
Ping Search Engines / Notify Search Engines (push) Failing after 14m45s
chore(content): unify company facts for NAP consistency
Reconcile inconsistent company facts to the canonical set (single
source of truth):

- Structured-data Organization/LocalBusiness/publisher/provider names
  now use the legal entity name "WorkRoot IT Solutions LLP"
  (SEO.astro, utils/seo.ts) for NAP consistency. Brand short forms
  ("WorkRoot", "WorkRoot IT Solutions") retained only as display brand
  and alternateName.
- Headline government-reach proof figure unified to "11+ districts"
  across all company-level proof bands and marketing/SEO copy
  (ProofNumbers, /about, /portfolio, homepage, /services, SEO desc).
  Specific Bihar Police Management System case studies / service-page
  stat tiles keep the factual "11 districts" — documented rationale.
- Verified phone (+91 9561417403), email (admin@workroot.in),
  founded (2022), 20+ projects, 50,000+ records, 99.9% uptime and
  IIT Patna partnership are consistent site-wide.

Added .agent/scratch/FACTS-CANONICAL.md as the single source of truth
plus an off-site checklist (LinkedIn, Clutch, GoodFirms, Crunchbase,
GeM) to keep external listings identical. Build passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 09:34:30 +05:30

251 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
// HomepageFaq — single homepage FAQ section rendered just above the final
// CTA band. Covers both buyer-stage objections (cost, timeline, NDA, IP, GeM,
// stack) and the process/support/security questions that used to live in the
// older "Common Questions" block higher up the page. That earlier block was
// removed to avoid a duplicate FAQ rendering and a duplicate FAQPage JSON-LD
// emission — this component is now the canonical homepage FAQ.
//
// Emits a single FAQPage JSON-LD inline (below) for rich-result eligibility.
//
// Accessibility:
// - Each question is a real <button> with aria-expanded toggled in JS.
// - aria-controls links to the answer region; the region has role="region"
// and aria-labelledby pointing back to the question.
// - Max-height transition has no layout shift on load — answers are
// collapsed (max-height:0) server-side and only the rotating chevron
// animates.
// - Keyboard: native <button> handles Enter & Space; Tab moves between
// items. No custom key handling needed.
// Each answer is written as a definitive, self-contained paragraph: it can be
// read (or quoted) in isolation without the question for context, and the
// buyer-stage answers bundle the WorkRoot name with the canonical numbers
// (founded 2022 · 20+ projects · 11+ districts · 50,000+ records · 99.9%
// uptime · GeM · IIT Patna). Keep every figure identical to <ProofNumbers />
// and the homepage `companyFacts` set — the visible text below is also the
// source for the FAQPage JSON-LD emitted at the bottom of this component.
const moneyFaqs = [
{
question: 'How much does a project cost? Do you work with fixed budgets?',
answer:
'WorkRoot IT Solutions projects start from ₹1,00,000, and most web, mobile, and ERP builds land between ₹2,00,000 and ₹15,00,000 depending on scope. Yes — we work with fixed budgets: tell us the number you have in mind and we will scope exactly what we can deliver within it. Every quote is free, itemised, and carries no obligation.',
},
{
question: 'How much does a custom ERP cost?',
answer:
'A custom ERP from WorkRoot IT Solutions typically runs ₹2,00,000–₹15,00,000, with a genuinely production-grade single-department system starting around ₹6,00,000. We offer fixed-price quotes for well-defined scopes and time-and-materials pricing for evolving ones, and every estimate is free and itemised.',
},
{
question: 'What is your typical timeline?',
answer:
'Most WorkRoot IT Solutions engagements run 416 weeks from kickoff to launch, and a typical MVP ships in about 6 weeks. We work in 2-week sprints with a live staging environment from day one, so you see and steer working software early rather than waiting for a single big-bang release.',
},
{
question: 'Do you sign NDAs?',
answer:
'Yes. WorkRoot IT Solutions signs a mutual NDA before any detailed discussion of your idea, data, or codebase — at no cost and with no conditions attached. Your concept and commercial details stay confidential from the very first call.',
},
{
question: 'Who owns the source code?',
answer:
'You do. Every WorkRoot IT Solutions engagement includes full intellectual-property transfer on delivery: you receive the complete source repositories, deployment access, and documentation, with no per-seat licence fees and no vendor lock-in. You are free to host, extend, or hand the system to another team at any time.',
},
{
question: 'Do you work with government tenders / GeM?',
answer:
'Yes. WorkRoot IT Solutions is empanelled on the Government e-Marketplace (GeM) for relevant IT service categories and can respond to government tenders. We have delivered public-service platforms live across 11+ districts of Bihar at 99.9% uptime, including a Police Management System and a Smart Crematorium Management System for the Bihar Government.',
},
{
question: 'What technologies do you work with?',
answer:
'WorkRoot IT Solutions builds on Astro, Next.js, Angular, and React Native on the front end; Spring Boot, Go, and Node.js on the back end; and PostgreSQL or MySQL for data — the same stack behind the IIT Patna University Management System and our multi-district government deployments, all deployed and operated on the AWS and GCP cloud.',
},
{
question: 'Do you offer ongoing support after launch?',
answer:
'Yes. WorkRoot IT Solutions offers maintenance packages covering bug fixes, security patches, performance monitoring, and feature enhancements, each with a response SLA matched to your uptime needs — the same operational discipline that keeps our government systems running at 99.9% uptime.',
},
{
question: 'What is your development process?',
answer:
'WorkRoot IT Solutions works in Agile 2-week sprints with weekly check-ins and a live staging environment from day one. You see working software early and steer the roadmap as it ships, rather than waiting for a single final handover at the end of the project.',
},
{
question: 'Can you work with our existing team?',
answer:
'Absolutely. WorkRoot IT Solutions augments in-house teams as readily as it delivers fully managed builds, adapting to your repository, branch strategy, ticketing system, and code-review process so we slot into the way your team already works.',
},
{
question: 'How do you ensure project security?',
answer:
'Security is built into every phase at WorkRoot IT Solutions: OWASP-aligned code reviews, encrypted data at rest and in transit, role-based access control, regular dependency audits, and GDPR- and SOC 2-style controls where a project demands them. The same architecture secures a Bihar government police platform deployed across 11 districts.',
},
];
// FAQPage JSON-LD — emitted inline so the schema travels with the component.
// This is the ONLY FAQPage emitted on the homepage; the site-wide <SEO>
// no longer receives a `faq` prop on / so Google sees exactly one valid
// FAQPage with every visible Q&A pair.
const faqPageSchema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
'@id': 'https://workroot.in/#homepage-money-faq',
mainEntity: moneyFaqs.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
};
---
<section
id="homepage-money-faq"
class="py-20 sm:py-24 bg-secondary-50 dark:bg-secondary-950 border-t border-secondary-100 dark:border-secondary-800"
aria-labelledby="homepage-money-faq-heading"
>
<div class="container-wrapper">
<div class="max-w-3xl mx-auto">
<!-- Section heading -->
<div class="text-center mb-12 sm:mb-16" data-animate="fade-up">
<span
class="inline-block px-4 py-2 rounded-full bg-accent-50 dark:bg-accent-900/30 text-accent-700 dark:text-accent-300 text-xs sm:text-sm font-bold uppercase tracking-wider mb-4"
>
Before you reach out
</span>
<h2
id="homepage-money-faq-heading"
class="text-3xl sm:text-4xl lg:text-5xl font-bold text-secondary-900 dark:text-secondary-100 mb-4 leading-tight"
>
Frequently asked questions
</h2>
<p class="text-base sm:text-lg text-secondary-600 dark:text-secondary-300">
Quick answers on cost, timelines, ownership, our process, support, security, and the stack we ship.
</p>
</div>
<!-- Accordion list -->
<ul class="space-y-3 sm:space-y-4" role="list">
{
moneyFaqs.map((item, index) => (
<li
class="bg-white dark:bg-secondary-800 rounded-2xl border border-secondary-200 dark:border-secondary-700 hover:border-primary-300 dark:hover:border-primary-500/60 shadow-sm transition-colors duration-200 overflow-hidden"
>
<button
type="button"
class="money-faq-question w-full text-left px-5 sm:px-7 py-5 sm:py-6 flex items-start justify-between gap-4 focus:outline-none focus-visible:ring-2 focus-visible:ring-primary-400 focus-visible:ring-offset-2 focus-visible:ring-offset-secondary-50 dark:focus-visible:ring-offset-secondary-950 rounded-2xl"
aria-expanded="false"
aria-controls={`money-faq-answer-${index}`}
id={`money-faq-question-${index}`}
data-money-faq-index={index}
>
<span class="font-semibold text-base sm:text-lg text-secondary-900 dark:text-secondary-100 leading-snug">
{item.question}
</span>
<svg
class="money-faq-icon w-5 h-5 sm:w-6 sm:h-6 mt-0.5 sm:mt-1 text-primary-500 dark:text-primary-400 flex-shrink-0 transition-transform duration-300"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
aria-hidden="true"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2.5"
d="M19 9l-7 7-7-7"
/>
</svg>
</button>
<div
class="money-faq-answer grid grid-rows-[0fr] transition-[grid-template-rows] duration-300 ease-out"
id={`money-faq-answer-${index}`}
role="region"
aria-labelledby={`money-faq-question-${index}`}
>
<div class="overflow-hidden">
<p class="px-5 sm:px-7 pb-5 sm:pb-6 -mt-1 text-sm sm:text-base text-secondary-600 dark:text-secondary-300 leading-relaxed">
{item.answer}
</p>
</div>
</div>
</li>
))
}
</ul>
<!-- Soft secondary CTA — links to the contact page for visitors whose
question wasn't covered. Avoids competing with the final CTA band
below. -->
<p class="text-center text-sm sm:text-base text-secondary-600 dark:text-secondary-400 mt-10 sm:mt-12">
Have a different question?{' '}
<a
href="/contact?source=homepage-money-faq"
class="font-semibold text-primary-600 dark:text-primary-300 hover:underline"
>
Ask us directly &rarr;
</a>
</p>
</div>
</div>
</section>
<!-- FAQPage structured data for rich-result eligibility -->
<script type="application/ld+json" set:html={JSON.stringify(faqPageSchema)} />
<style>
/* The grid-rows trick gives a true intrinsic-height expand/collapse with
no max-height guesswork and no layout shift on load (answers start at
0fr). It animates smoothly in every modern browser; older browsers
simply snap, which is still accessible. */
.money-faq-answer[data-expanded='true'] {
grid-template-rows: 1fr;
}
.money-faq-question[aria-expanded='true'] .money-faq-icon {
transform: rotate(180deg);
}
@media (prefers-reduced-motion: reduce) {
.money-faq-answer,
.money-faq-icon {
transition: none !important;
}
}
</style>
<script is:inline>
(function () {
var buttons = document.querySelectorAll('.money-faq-question');
if (!buttons.length) return;
function setExpanded(button, expanded) {
button.setAttribute('aria-expanded', expanded ? 'true' : 'false');
var answerId = button.getAttribute('aria-controls');
if (!answerId) return;
var answer = document.getElementById(answerId);
if (!answer) return;
if (expanded) {
answer.setAttribute('data-expanded', 'true');
} else {
answer.removeAttribute('data-expanded');
}
}
buttons.forEach(function (button) {
button.addEventListener('click', function () {
var isOpen = button.getAttribute('aria-expanded') === 'true';
// Single-open accordion — collapse the rest so only one answer is
// visible at a time. Matches the existing FAQ block's UX.
buttons.forEach(function (other) {
if (other !== button) setExpanded(other, false);
});
setExpanded(button, !isOpen);
});
});
})();
</script>