An auditable, event-driven, full-stack financial management and accounting system designed for societies, associations, and clubs.
FinFlow combines enterprise accounting principles with modern software engineering to manage financial activities with strict role-based governance, pre-event budgeting, real-time variance validation, transaction approval workflows, and financial intelligence dashboards.
- Event Planning & Categorized Budgeting: Authorized users define estimated revenues and categorized expense budgets (Food, Transport, Venue, Equipment, Printing, etc.).
- Budget Baseline Approval: Budgets undergo formal review and approval by the President before becoming the active tracking baseline.
- Transaction Submission: Income and expense requests are submitted by Treasurers or Committee Members with supporting receipts.
-
Variance & Impact Validation: During transaction review, the system calculates real-time budget impacts:
$$\text{Projected Spending} = \text{Previously Approved} + \text{New Expense}$$ $$\text{Budget Variance} = \text{Approved Budget} - \text{Projected Spending}$$ - President Approval Workflow: Pending transactions are reviewed with receipts and variance warnings. Over-budget expenses require explicit justification for override.
- Authoritative Accounting: Only approved/posted transactions affect balances, event profit/loss, and financial reports.
- Complete Audit Trail: Immutable logging of every critical action, state transition, and role change.
| Component | Technology | Description |
|---|---|---|
| Frontend | Next.js 15+ (App Router), React, TypeScript | Modern server/client architecture with typed components |
| Styling & UI | Tailwind CSS, Lucide Icons | Responsive modern design system and financial status badges |
| Visualizations | Recharts | Financial dashboards, budget utilization, planned vs. actual charts |
| Backend API | NestJS (Node.js), TypeScript | Enterprise modular architecture (Controllers, Services, DTOs, Guards) |
| Database | Microsoft SQL Server | Relational integrity, DECIMAL(18,2) monetary precision, atomic transactions |
| ORM | Prisma ORM | Type-safe data modeling and schema migrations |
| Auth & RBAC | JWT & Bcrypt | Role-Based Access Control (ADMIN, PRESIDENT, TREASURER, COMMITTEE_MEMBER) |
| Receipt Storage | Cloudinary | Cloud-hosted receipt image and PDF document management |
FinFlow/
├── backend/ # NestJS REST API + Prisma ORM
│ ├── src/
│ │ ├── app.module.ts # Root application module
│ │ └── main.ts # API entrypoint (port 5000, /api prefix, CORS, validation)
│ ├── .env.example # Backend environment template
│ ├── package.json
│ └── tsconfig.json
│
├── frontend/ # Next.js Web Application
│ ├── src/
│ │ ├── app/ # Next.js App Router (Layouts, Pages, Routes)
│ │ └── components/ # Reusable UI & Chart components
│ ├── .env.example # Frontend environment template
│ ├── package.json
│ └── tsconfig.json
│
├── .gitignore # Root gitignore excluding dependencies, build caches, and secrets
└── README.md # Project documentation
- Node.js:
v20.xor higher - npm:
v10.xor higher
# Navigate to backend directory
cd backend
# Copy environment template
cp .env.example .env
# Start the NestJS development server
npm run start:devThe backend REST API will be accessible at: http://localhost:5000/api
# In a new terminal window, navigate to frontend directory
cd frontend
# Copy environment template
cp .env.example .env.local
# Start the Next.js development server
npm run devThe frontend web application will be accessible at: http://localhost:3500 (or http://localhost:3000)
- ADMIN: User provisioning, role assignments, society configuration, audit log inspection.
- PRESIDENT: Financial review, budget approvals, transaction approvals/rejections, financial overview.
- TREASURER: Event creation, budget drafting/editing, income/expense submission, receipt uploads, financial reporting.
- COMMITTEE_MEMBER: Expense & income submission with receipts, event planning drafting, submission status tracking. (Strictly prohibited from self-approvals).
All feature work follows the feature-branching standard:
development: Main integration branchfeature/<phase-or-feature-name>: Isolated feature development