CAPilot is TulsiX's flagship product — an integrated practice management SaaS platform for Indian Chartered Accountant firms. This is the engineering story behind it: the problem we set out to solve, the architectural decisions we made, the trade-offs we accepted, and what we'd do differently if we started today.
An Indian CA firm running 200+ clients typically operates across five disconnected tools: Tally for accounting, Excel for client tracking, WhatsApp for compliance reminders, Google Drive for documents, and a homemade Word template for invoices. Information lives in five places, gets out of sync within hours, and partners spend their first hour every day reconciling what their team did yesterday.
The existing software market mostly offers two extremes: Tally-class accounting software that doesn't manage compliance workflows, or generic project-management tools that don't speak the language of GST, ITR, audits, and statutory deadlines. There was no purpose-built operating system for how CA firms actually work.
So we built one.
"The goal wasn't to build another piece of software. It was to replace five tools with one — and have the firm forget which tool they used to use."
CAPilot is a multi-tenant SaaS platform deployed on Azure. The high-level shape:
React SPA hosted on Azure Static Web Apps. SPA routing via hash routes to keep CDN-served static assets simple. State managed locally per page; no global Redux store — most data is fetched fresh per route to keep behavior predictable..NET 8 Web API hosted on Azure App Service. Domain-driven service layer separating tenancy, identity, billing, compliance, and document contexts. Each context owns its own tables and service interfaces; cross-context calls go through explicit application services, not direct table access.SQL Server on Azure SQL. Single shared database, tenant ID on every row, row-level filtering enforced in the data access layer (not just at the API). This keeps operational cost low for early tenants while preserving the path to per-tenant DBs as customers grow.staging (auto-deploy on merge to main) and production (manual promotion from staging). Zero hand-edits in production.Starting with a per-tenant database would have been "cleaner" — better isolation, easier compliance answers, simpler backup-per-customer story. But it would also mean operational overhead per signup (new DB, new connection string, new backup pipeline) before we even knew if customers wanted to pay.
We chose a single shared SQL DB with strict tenant-scoping. Every query passes through a tenant guard. Every CRUD path enforces it. The cost: discipline. The benefit: we onboard a new firm in seconds, not minutes — and there's a clear migration path to per-tenant DBs for Enterprise plans when the contract demands it.
Server-rendered (Next.js, Razor Pages) would give us better SEO and initial-load performance. But CAPilot is a logged-in workflow tool — Google doesn't need to crawl the dashboard. SPA gives us a snappier post-login experience, simpler hosting (Azure Static Web Apps + a separate API), and easier offline-first capability later. We'd make the same call again.
The .NET ecosystem on Azure is unbeatable for production reliability — typed end-to-end, tooling that catches mistakes before they ship, mature ORM, deep Azure integration, and excellent perf characteristics out of the box. Most of the team's deepest experience is in this stack. The alternative — Node — would have moved us faster on weekends but slowed us down where it mattered: under load, in audits, and in regression-test confidence.
GST invoices need to render exactly the same on screen, in print, and as a PDF for email. We initially tried a templating library; we shipped HTML+CSS rendering through a headless browser. Result: WYSIWYG between the on-screen invoice and the PDF, full control over Indian-rupee formatting, HSN/SAC layouts, and signatures.
These are early-traction numbers — we're transparent about that. The platform is in production, paying customers are using it daily, and the architecture has held up under real-world load. Our growth bottleneck right now is not engineering — it's customer acquisition, which is exactly the position we wanted to be in.
Roadmap items we're working on or about to start:
Three things we'd tell anyone building a vertical SaaS for an Indian (or any developing-market) industry:
Want to see CAPilot in action? Read the full feature breakdown and pricing, or try the live app with a free trial. If you're a CA firm partner — talk to us about a guided onboarding session.
We build vertical SaaS platforms the same way we built CAPilot — production-grade, compliance-aware, designed for the realities of how your industry actually works.
Start a Conversation