Webledger — Cloud Accounting SaaS, Led from Architecture to Production
Led all engineering decisions for a cloud accounting platform serving businesses across India and abroad. Responsible for architecture, feature delivery, AWS infrastructure, and a small team.
My Contribution
- Led all architecture and data model decisions for the platform
- Designed the API structure and service layer patterns
- Built multi-firm invoicing, RBAC, Razorpay billing, dashboards, reporting, WhatsApp integration, and document pipelines
- Automated GST lookup via AWS Lambda + third-party API caching
- Rewrote PDF and Excel generation from scratch (memory issues under load)
- Authored all CI/CD deployment scripts for EC2/ECS
- Coordinated junior developers on feature delivery
Feature Deep-Dives
Multi-Firm Invoicing Engine
Supports SGST, CGST, IGST for Indian multi-state transactions and international VAT for global clients. A single invoice can span multiple firms within one org. Tax rules applied per line item based on GST category and transaction state.
RBAC at Module Level
Role-based access at the module level — each module (invoicing, payroll, reports, clients, settings) has independent permission gates. Roles are org-specific and composable.
GST Automation via Lambda
AWS Lambda function polls third-party GSTIN verification APIs on demand, caches results in Redis with configurable TTL. Accounting teams no longer manually look up GSTIN details mid-workflow. Cache invalidated on GSTIN update.
Document Pipeline Rewrite
Rebuilt PDF generation (invoices, statements, reports) and Excel export from scratch using Node.js streaming. Previous system had memory leaks under concurrent load — rewrote to use streaming buffers, materially improving throughput and stability.
Razorpay Integration
Subscription plan management, webhook handling for payment events (payment.captured, subscription.charged, payment.failed), trial → paid conversion flows, plan upgrade/downgrade logic.
WhatsApp Integration
Third-party API bridge for sending invoices, payment reminders, and broadcast messages to client contact lists directly from the web app. Contact-based routing — messages thread per contact, not per phone number.
Draggable Dashboard
User-configurable widget layout using drag-and-drop. KPI cards, task summaries, invoice status widgets. Layout saved per user to database — persists across sessions.