Alumni association, Ghana · 2026
Live in productionGroupFund
Double-entry finance platform for an alumni association
- Next.js 15
- TypeScript
- tRPC
- Prisma
- Neon Postgres
- Clerk
- Hubtel
- Tailwind CSS
- Zod
- Recharts
- Resend
- Sentry
- Vitest
- Vercel

21
double-entry ledger accounts; reports agree to the bank
73
automated tests on the accounting rules
9
committee roles with least-privilege access
144
server procedures, each checking its own permissions
Overview
What this is
A finance platform for an alumni association that collects dues, runs merchandise and event ventures, and answers to its members for every cedi. Payments arrive by bank transfer, mobile money and online checkout through Hubtel; the committee records and verifies them, and the system posts each one into a real double-entry general ledger. Treasurers get a trial balance, balance sheet and income statement that agree, instead of a spreadsheet nobody can reconcile.
The problem
What needed solving
- Money arrived through four separate channels and was tracked in spreadsheets that never agreed with the bank statement.
- The group collects money it does not own — merchandise paid for in advance, funds raised to pass on to another year group — and counting that as income overstated what the association actually had.
- Committee roles change every year, so access had to be narrow and auditable rather than one shared login.
- Members wanted to see where their contributions went without the committee hand-building reports.
The solution
What I built
- Every payment posts a matching journal entry, so the cash view and the accounting view can never drift apart.
- Money held on behalf of someone else posts to a liability account instead of income, and only becomes revenue when the obligation is discharged.
- Nine committee roles with least-privilege access, segregation of duties on every payment, and an audit log on sensitive actions.
- Reports generated from the ledger itself: trial balance, balance sheet, income statement, debtors and creditors ageing, budget versus actual.
Features
Key features
Double-entry general ledger
21 accounts across assets, liabilities, equity, income and expenses. Every payment, charge and payout posts a balanced journal entry.
Payment drives
Seven kinds of collection — dues, pledges, merchandise, donations, event fees — each with its own target, deadline and posting rules.
Three-step payment approval
Recorded, verified, then acknowledged by three different people. The same person cannot do two of the three.
Bank reconciliation
Payment alerts are parsed from bank emails into a queue, matched to a member and drive, or dismissed with a reason.
Funds held in trust
Money collected to pass on is held as a liability per venture, so the dashboard separates what the group owns from what it holds.
Member ledger and standings
What each member has given and still owes, plus house and class leaderboards generated from the same figures as the reports.
Investor ventures
Members can back a venture; capital and profit share are tracked separately and settled in cash or offset against what they owe.
Reports and exports
Trial balance, balance sheet, income statement, ageing and cash-flow forecast, exportable to CSV, Excel and PDF.
Announcements
Email and SMS to filtered member groups, with personal payment links generated per recipient.
Screens
Inside the product




