Skip to main content

Faith organisation (delivered via Fiverr)

Donation & Withdrawal Ledger

An internal ledger for a faith organisation: per-member donation and withdrawal entries, a running balance, and reports that can be sliced by year, month, member and type.

Status
Completed
Industry
Non-profit & Community
Year
2021
Categories
Web Applications, Business Systems
Report builder with year, month, member, type, report type and format selectors above a generated balance summary table.

A small internal tool, built to the shape the client described

A custom PHP donation and withdrawal ledger with per-member balances and a flexible report builder, built to a client-specified layout for internal use by a faith organisation.

Our earliest engagement in this portfolio, and a useful one to keep visible: a custom PHP application built for one of the executives of a church, to manage the donations and withdrawals the congregation's fund handles.

It is an internal tool. There is no public side, no marketing surface, and no ambition beyond being correct and quick to operate — which is exactly what the client asked for.

What it does

An operator picks a member or guest from the register, or creates a new one, and records a donation or a withdrawal against them. The header carries the day's running totals — donated, withdrawn, balance — and each member's record shows their last transaction in plain language.

The reporting side is the part that earns the tool. Any combination of year, month, member or guest, and entry type can be reported as a summary or in detail, displayed as a table or exported, with per-member totals, maxima, minima and averages.

Administrators are managed in the application with roles, so the executive controls who can see the ledger.

Balances
Computed from entries
Reporting
Period, member and type
Access
Permission levels

The problem

The fund's records were manual, and manual records of money have a predictable set of problems: a balance nobody can state with confidence, no way to answer "what did this member give last year" without paging through a book, and no separation between who may record an entry and who may read the whole ledger.

The client came to us having already thought it through. He described the problems he was facing and how he intended them to be solved, including how the screens should be laid out.

Requirements

  • Register members and guests, capturing name, date of birth and phone number
  • Record donations and withdrawals against a member or guest
  • Show a running balance per member and a running total for the day
  • Report across year, month, member or guest, and entry type
  • Offer summary and detailed report modes
  • Display reports as a table or export them
  • Manage administrators with permission levels
  • Follow the client's own layout and workflow

The solution

The entry workflow was built around a single screen, because the work happens in a queue of people. The member register sits on the left, the entry form on the right, and the day's totals stay pinned above both. Selecting a member loads their record in place; creating a new one happens in the same panel. Nobody navigates away mid-queue.

Each member's record states its last transaction as a sentence — Last transaction was on July 29th, 2021 12:39 PM, $21.00 was Deposited — rather than as a row in a grid. When an operator is confirming something with the person standing in front of them, a sentence is faster to read aloud than a table.

Reporting is a small query builder rather than a fixed set of reports. Six selectors — year, month, member or guest, type, summary or detail, table or export — cover the questions the executive actually asks, and the summary mode computes totals, maxima, minima and averages per member so that comparison is possible without exporting anything.

Administrators are records in the system with a permission level, which is what makes the ledger delegable at all.

Architecture

A custom PHP application on MySQL — no framework, which was appropriate to the size, the budget and the year.

The interface is server-rendered with jQuery handling the in-page interactions: the member list, the inline forms, the report tables with their search, pagination, column visibility and export.

Entries are stored as individual immutable transactions against a member rather than as a mutable balance field. The balance is computed, so the history is the record and a correction is a new entry.

Implementation

The layout was the client's. He described how he wanted each screen to work, and we built to that description — the colour scheme, the entry-and-report tab split, the pinned daily totals.

That is a legitimate way to work, and it is worth being explicit about: the design credit here is his. What we brought was the judgement underneath it — computing balances from immutable entries rather than storing a mutable total, separating administrator permission levels, validating and parameterising every input, and making the report builder general enough to answer questions he had not asked yet.

All the data visible in these screenshots is demonstration data.

Results

Delivered and put into internal use by the organisation. The fund's donations and withdrawals are recorded per member with a computed balance, and the executive can report across any combination of period, member and entry type.

No public figures exist for this one — it is an internal tool for a private organisation, and its transaction volumes are not ours to publish.

What we learned

A client who has thought carefully about their own workflow is an asset, not an obstacle. The job here was to implement his design well and to apply the engineering judgement he was not in a position to supply — not to redesign what he had already worked out.

Storing transactions and computing balances, rather than storing a balance, is the decision that keeps a small ledger honest. It costs nothing at this size and it makes every figure reconstructible.

Building the report as a small query builder rather than as three fixed reports meant the tool kept answering new questions without us.

Gallery

Entry screen listing members and guests beside a panel prompting to select a member or create a new entry, with the day’s donation, withdrawal and balance totals above.
The entry screen opens on the day’s totals and the member register — the two things an operator needs before anything else.
New entry form capturing name, date of birth, phone number and donation amount.
A new member or guest is created inline, from the same screen as the entry — there is no separate registration step to interrupt the queue.
Member record showing name, date of birth and phone number, with a plain-language summary of the last transaction.
Each record states its last transaction in a sentence, which is faster to verify aloud than a table of rows.
Administrator management table with an edit dialog for name, email, phone, permission level and default password.
Administrators are managed in-app with permission levels, export and column visibility. Demonstration data throughout.

Have something you want built?

Tell us what you are trying to ship. We will come back with an approach, a plan and an honest view of what it takes.