Digitizing a Non-Profit's Financial Operations from Paper to Production
Solo Full-Stack Developer
A Mumbai-based religious trust was drowning in paper — handwritten receipts, physical ledgers, spreadsheet chaos. I built their entire digital backbone solo, from receipt generation to financial reporting. Three years later, it's still running in production, processing thousands of transactions, and has become the operational nerve center for their entire financial workflow.
Paper Chaos in a Growing Organization
The trust managed all financial records manually — paper receipts, physical ledgers, scattered spreadsheets. With growing membership and increasing donation volumes, this approach was crumbling. Audits took weeks, receipts got lost, and there was zero visibility into financial health without manually tallying numbers.
Paper receipts were getting lost, making audit trails unreliable
End-of-year financial reporting took weeks of manual number crunching
No centralized member database — duplicate entries were common
Multiple operators needed access but with different permission levels
Bilingual receipts (English + Marathi) required manual formatting each time
Building for Non-Technical Users
The key constraint was the users — trust administrators who were comfortable with paper but not with complex software. Every design decision prioritized simplicity and reliability over technical sophistication. I chose a single-page dashboard pattern so everything felt like one familiar workspace.
Single-Page Dashboard Architecture
Built an authenticated home page with a sidebar that swaps between modules as tab content. No page navigation confusion — just click and work. Shared Recoil state means data flows instantly between modules.
Indian Financial Year-Aware Logic
All queries default to Indian FY (April–March). Voucher IDs auto-reset per FY, Excel reports order April→March, and the system auto-detects the active financial year.
Custom Hooks for Business Logic
Each module has a dedicated useHandle* hook (useHandleReceipts, useHandleMembers, useHandleVouchers) separating CRUD operations from UI — making the codebase maintainable as a solo developer.
Soft Delete Pattern
All models use an isActive boolean flag instead of hard deletes. This has literally saved the client from data loss multiple times when operators accidentally deleted records.
System Architecture
Interactive architecture map — click any node to trace its connections.
Data Flows (click a node to filter)
From First Commit to Daily Operations
This project evolved organically based on real needs. Each feature was added when the trust's operations demanded it, not from a pre-planned roadmap.
Month 1-2: Member & Receipt Core
Built the member database with bulk Excel upload, receipt generation with auto-incrementing numbers per FY, and bilingual PDF output using react-to-print.
Month 3-4: Financial Modules
Added voucher/expense accounting with double-entry bookkeeping principles, account head hierarchies, and the membership module with period tracking.
Month 5-6: Reporting Engine
Built the Excel report generation — multi-sheet exports with merged cells, monthly breakups, head-wise analysis. This alone saved the trust weeks of manual work each quarter.
Ongoing: Maintenance & Evolution
151 commits over 3 years. Regular feature additions based on trust operations needs — bank-wise breakdowns, role refinements, backup automation with ZIP streaming.
A Complete Digital Operations Platform
The final system handles the trust's entire financial workflow — from member onboarding to receipt generation to year-end reporting — all through a simple, approachable interface.
Bilingual receipt PDFs (English + Marathi) generated instantly with react-to-print and emailed via ReactDOMServer.renderToString() for visual consistency
Multi-sheet Excel reports with merged cells, monthly breakups, and head-wise financial analysis via ExcelJS
Role-based access control (3 roles) ensuring operators only see data relevant to their responsibilities
Automated receipt numbering per financial year with zero manual tracking required
Database backup automation using archiver for ZIP streaming — one-click data protection
Real Impact Over Three Years
The real measure of this project isn't technical metrics — it's that a non-profit trust has been running their entire financial operations on this system for 3+ years without a single data incident.
What I Took Away
“Build for the user, not the resume”
A Pages Router with SWR and Recoil might not be the trendiest stack, but it's dead simple to maintain solo and the non-technical users never struggle with it. The boring choice was the right choice.
“Soft deletes save real relationships”
The isActive pattern has saved my client relationship multiple times. When an operator accidentally deletes something, a 30-second database update brings it back. Hard deletes would have meant lost trust — literally and figuratively.
“Financial year logic is deceptively complex”
Indian FY (April-March) touches everything: receipt numbering, report ordering, voucher ID resets, query defaults. Building it into the architecture from day one was critical.
Tech Stack
Framework
State & Data
Auth
Database
Reporting
File Management
Re-Engineering a Legacy PHP Monolith into a Modern CMS-Powered Platform
Vivekanand Seva Mandal (vsmandal.org) • 2023 – Present