Blockchain-Based NGO Donation Tracking
Built a blockchain platform for transparent NGO donation and payout tracking, aimed at increasing trust in how charitable funds move.
On-chain donation/payout traceability
Core guarantee
Problem & Context
Donation transparency is a recurring trust problem for NGOs — donors often can’t verify that funds reached their intended use, and NGOs themselves may lack tooling to demonstrate transparent fund handling.
Solution & Architecture
flowchart LR
Donor -->|sends funds| SC[Smart Contract]
SC -->|records| Chain[(Ethereum ledger)]
SC -->|releases| Payout[NGO payout]
Payout --> Chain
Anyone -->|verifies| Chain The platform used Solidity smart contracts (developed/tested with Truffle) deployed to Ethereum, with Web3.js and MetaMask handling the client-side wallet interaction. Donation and payout events are recorded on-chain, making the flow of funds independently verifiable rather than dependent on an NGO’s internal bookkeeping alone.
Key Decisions & Tradeoffs
Putting donation and payout events directly on-chain — rather than keeping an off-chain ledger and only publishing periodic hashes or summaries — was the core design choice that makes “anyone can verify” actually true, instead of “anyone can verify that we say it’s true.” The cost of that choice is gas fees and transaction latency on every donation/payout event, which is a real tradeoff against a centralized database: a transparency guarantee that costs the NGO money per transaction is only worth it if donor trust is actually the bottleneck the NGO is trying to solve, not a general-purpose ledger replacement.
Using MetaMask and Web3.js for the client side rather than building a custodial wallet flow also pushed key management onto the donor/NGO rather than the platform — which keeps the platform from being a single point of custodial risk, at the cost of a less frictionless donation flow than a typical payment-gateway checkout.
Lessons Learned
On-chain transparency solves the “can anyone verify this happened” problem, but it doesn’t by itself solve “is the stated use of funds accurate” — that still depends on what data gets written to the chain in the first place, a limitation worth being upfront about when describing blockchain-based transparency tools.
This is described here at the architecture/pattern level — specific contract addresses, the deployed network (mainnet vs. testnet), and current live status aren’t claimed since they aren’t independently confirmed.
The more general lesson from building transparency tooling on a public ledger: the ledger guarantees the record is tamper-evident, but it says nothing about whether the record reflects reality at the point of entry. Any future iteration of this kind of system is better served by putting effort into making the donation/payout event itself hard to misrepresent at the source (e.g., tying it to an external attestation) rather than assuming on-chain storage alone delivers end-to-end trust.