Case study
Schoolfundr.
Zero-commission fundraising for schools, built from line one.
- Role
- Head of Engineering
- Type
- SaaS platform
- Timeline
- 2022 to now
- Stack
- Next.js, React, TypeScript, Node.js, MongoDB Atlas, Stripe Connect, Google Cloud Run, Vercel, Salesforce, Twilio, Playwright
- Live
- Visit site ↗

Schoolfundr helps schools, teams and classrooms raise money and keep 100% of it. I wrote its first line of code and lead engineering for the whole platform: fundraiser pages, dashboards for leaders, students, districts and staff, payments and payouts, and the infrastructure underneath. Today it is part of Hometown Ticketing following a merger.
Zero commission, by design
Every gift goes to the school. Donors can add an optional tip, and that tip is the platform's only revenue. It is built into the payment itself: the gift and the tip are split at the source by Stripe, not reconciled later in a spreadsheet.
Pages that turn visits into gifts
Each fundraiser gets a public page, and every student gets a personal one, with progress, story, video, a live donations feed and milestones. Sharing is one tap away: text, email, WhatsApp, social or a QR code. Donors can give once, pledge per lap and be charged automatically after the event, or claim dates on a fundraising calendar that never lets two donors take the same day.
A dashboard for every role
Leaders run their fundraiser: analytics, donations, participants, teams, sharing tools, invitation and reminder email cadences, and payouts. Students and parents follow their own page and progress. Staff support every account from the admin dashboard, including cash and check gifts.
SF+ for districts
SF+ gives districts and organizations one view over every fundraiser in their schools, with configurable approval forms and approvers, payouts, contacts and analytics. A new fundraiser can't go live until the right people have signed off.
Money out, safely
Schools and organizations onboard to Stripe Connect. Payouts move through an approval step before funds are transferred, mailed checks are available as an alternative, and refunds flow back through Stripe webhooks so the numbers always match.
Built to scale
The API runs in containers on Google Cloud Run behind a load balancer, scaling out for launch days and game nights and back down after. Scheduled jobs close fundraisers, charge pledges and send reminders. MongoDB Atlas holds the data, Salesforce stays in sync for the sales team, and Twilio handles SMS and phone sign-in.
Shipping every day
More than 12,000 commits since the first one. Every pull request runs linting, unit tests and hundreds of end-to-end API tests, then Playwright tests against a live preview, and is reviewed by a human and an AI reviewer. Releases move from test to demo to production, each with notes and error tracking attached.




