// Compliance Adda — home page sections.
const { Button, Card, Badge, Input, Select } = window.ComplianceAddaDesignSystem_3d98ba;
const HOME_HEADLINES = {
sorted: "Registrations, tax and compliance — sorted.",
chaos: "Compliance without the chaos",
};
/* ── hero widgets ── */
function nextDue(day, monthOffset = 0) {
const now = new Date();
let d = new Date(now.getFullYear(), now.getMonth() + monthOffset, day);
if (d < now) d = new Date(now.getFullYear(), now.getMonth() + monthOffset + 1, day);
return d;
}
function CalendarCard() {
const rows = [
{ day: 7, label: "TDS payment", sub: "Deducted last month" },
{ day: 11, label: "GSTR-1", sub: "Outward supplies" },
{ day: 20, label: "GSTR-3B", sub: "Summary return + tax" },
{ day: 15, label: "Advance tax", sub: "Quarterly instalment", quarterly: true },
].map((r) => {
let d = nextDue(r.day);
if (r.quarterly) {
const months = [5, 8, 11, 2];
const now = new Date();
let best = null;
for (const m of months) {
for (const y of [now.getFullYear(), now.getFullYear() + 1]) {
const c = new Date(y, m, 15);
if (c >= now && (!best || c < best)) best = c;
}
}
d = best;
}
const days = Math.ceil((d - new Date()) / 86400000);
return { ...r, date: d, days };
}).sort((a, b) => a.date - b.date);
const mon = (d) => d.toLocaleString("en-IN", { month: "short" });
return (
The next statutory deadlines, tracked live. We file before every one of them.
{rows.map((r) => (
{r.date.getDate()}
{mon(r.date)}
{r.days <= 1 ? "due now" : "in " + r.days + " days"}
))}
);
}
function QuoteCard() {
const S = window.CA_SERVICES;
const opts = ["gst-registration", "private-limited-company", "gst-return", "income-tax-return", "trademark-registration", "limited-liability-llp"];
const [slug, setSlug] = React.useState(opts[0]);
const d = S[slug];
return (
Get an instant quote
({ value: s, label: S[s].title }))} value={slug} onChange={(e) => setSlug(e.target.value)} />
Professional fee, from
{d.price}
Typical timeline
{d.time}
Apply now
No hidden fees. Government charges billed at cost.
);
}
/* ── hero search ── */
function ServiceSearch() {
const S = window.CA_SERVICES;
const [q, setQ] = React.useState("");
const [focus, setFocus] = React.useState(false);
const hits = q.trim() ? Object.keys(S).filter((s) => S[s].title.toLowerCase().includes(q.toLowerCase())).slice(0, 6) : [];
return (
{focus && hits.length > 0 ? (
) : null}
);
}
/* ── sections ── */
function Hero({ tweaks }) {
const chips = [
["GST registration", "gst-registration"],
["Private limited company", "private-limited-company"],
["Trademark", "trademark-registration"],
["ITR filing", "income-tax-return"],
["LLP", "limited-liability-llp"],
];
return (
CA, CS & advocate-led · serving all of India
{HOME_HEADLINES[tweaks.headline] || HOME_HEADLINES.sorted}
Company registration, GST, trademarks and tax filing — handled end-to-end by experts, with fixed fees quoted upfront and every deadline tracked for you.
Popular:
{chips.map(([label, slug]) => (
{label}
))}
{tweaks.heroWidget === "quote" ? : }
);
}
function StatsBand() {
const stats = window.CA_STATS || [];
return (
{stats.map(([n, label]) => (
))}
);
}
function PlatformSection() {
const feats = [
{ icon: "building", title: "Business incorporation", body: "Pvt Ltd, LLP, OPC and partnership setups — name to certificate, start to finish.", href: "services.html?cat=Startup" },
{ icon: "landmark", title: "Tax advisory", body: "ITR filing, regime planning and notice handling with a review before every filing.", href: "service.html?s=income-tax-return" },
{ icon: "shield-check", title: "Regulatory compliance", body: "GST, ROC and annual filings tracked on a calendar you can actually see.", href: "services.html?cat=GST" },
{ icon: "book-open", title: "Accounting & bookkeeping", body: "Clean monthly books that make every return and audit faster and cheaper.", href: "services.html" },
{ icon: "file-text", title: "Legal documentation", body: "Agreements, deeds and board paperwork drafted by advocates, not templates.", href: "services.html" },
{ icon: "award", title: "Trademark protection", body: "Search, filing, objections and oppositions — your brand defended nationwide.", href: "services.html?cat=Trademark%20%2F%20IPR" },
];
return (
);
}
function FeatureCard({ icon, title, body, href }) {
return (
{title}
{body}
Learn more
);
}
function ProcessSection() {
const steps = [
{ icon: "search", title: "Select your service", body: "Search or pick what you need. The fee and timeline are on the page — no call required to see a price." },
{ icon: "users", title: "Expert consultation", body: "A dedicated professional calls to confirm your exact case and sends a simple document checklist." },
{ icon: "file-text", title: "Documentation & filing", body: "We draft, verify and file with the department — and chase the approvals so you don't have to." },
{ icon: "circle-check", title: "Completion & support", body: "Certificates delivered, next due dates loaded into your calendar, reminders on us." },
];
return (
{steps.map((s, i) => (
{"0" + (i + 1)}
{s.title}
{s.body}
))}
);
}
function MarketplacePreview() {
const cats = ["All"].concat(window.CA_CATS);
const [cat, setCat] = React.useState("All");
const slugs = Object.keys(window.CA_SERVICES).filter((s) => cat === "All" || window.CA_SERVICES[s].cat === cat);
const featured = cat === "All" ? window.CA_POPULAR.concat(["limited-liability-llp", "msme-registration"]) : slugs.slice(0, 6);
return (
All {Object.keys(window.CA_SERVICES).length} services
{cats.map((c) => (
setCat(c)} style={{ padding: "7px 16px", fontSize: 14 }}>{c}
))}
{featured.slice(0, 6).map((s) =>
)}
);
}
function AboutSection() {
const points = [
"Qualified CAs, CSs and advocates on every case — never a call-centre script",
"Fixed fees quoted before we start, government charges at actuals",
"Fully digital process with secure document handling, pan-India",
"Free deadline reminders for as long as you're a client",
];
return (
Watch · 90 seconds
{}}
style={{ alignSelf: "center", width: 76, height: 76, borderRadius: "var(--rounded-pill)", background: "var(--color-primary)", border: "none", display: "grid", placeItems: "center", cursor: "pointer" }}>
How a filing works at Compliance Adda
From your WhatsApp message to the stamped acknowledgment.
{points.map((p) => (
{p}
))}
);
}
function WhySection() {
const items = [
["users", "CA / CS professional support"],
["indian-rupee", "Transparent, fixed pricing"],
["lock", "Secure document handling"],
["zap", "Fast turnaround"],
["circle-check", "End-to-end assistance"],
["bell", "Compliance reminders"],
["user", "One dedicated expert"],
["globe", "100% online, pan-India"],
];
return (
{items.map(([icon, label]) => (
{label}
))}
);
}
function Testimonials() {
const data = window.CA_TESTIMONIALS || []; const [vis, setVis] = React.useState(typeof window !== "undefined" && window.innerWidth < 760 ? 1 : 3);
const [idx, setIdx] = React.useState(0);
React.useEffect(() => {
const onR = () => setVis(window.innerWidth < 760 ? 1 : 3);
window.addEventListener("resize", onR);
return () => window.removeEventListener("resize", onR);
}, []);
const maxIdx = Math.max(0, data.length - vis);
const clamped = Math.min(idx, maxIdx);
const gap = 16;
return (
setIdx(Math.max(0, clamped - 1))} style={{ padding: 12, borderRadius: "var(--rounded-pill)" }}>
= maxIdx} onClick={() => setIdx(Math.min(maxIdx, clamped + 1))} style={{ padding: 12, borderRadius: "var(--rounded-pill)" }}>
{data.map((t) => (
{t.svc}
“{t.text}”
))}
);
}
function ResourcesSection() {
const posts = window.CA_RESOURCES || [];
return (
{posts.map((p) => (
{p.tag}
{p.title}
{p.body}
Ask us about this
))}
);
}
function PromoBand() {
return (
Switch your compliance to us in one afternoon.
Talk to an expert
{window.CA_PHONE}
);
}
/* ── app ── */
const HOME_TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"headline": "sorted",
"heroWidget": "calendar"
}/*EDITMODE-END*/;
function HomeApp() {
const [t, setTweak] = useTweaks(HOME_TWEAK_DEFAULTS);
useReveal();
return (
setTweak("headline", v)} />
setTweak("heroWidget", v)} />
);
}
window.HomeApp = HomeApp;