When people ask what I built for Center X Equine Therapy, they often expect an answer like: HTML, CSS, Cloudflare Pages, Git.
That’s part of it. The other part is the tool chain that helps a real nonprofit actually run the site — donations that don’t quietly eat the budget, forms that feel professional, data that lands somewhere useful, and a clear line between public marketing and protected health information.
This is the full-stack work that doesn’t show up in a GitHub repo, but it does determine whether the site holds up once real people start using it.
”Free” can mean different things on different tools
Before the client demo, I pulled together recommendations by re-reading our own assessment docs and checking current pricing — keeping the reasoning in the repo, and verifying the numbers fresh.
Donations: Givebutter
Givebutter’s optional-donor-tip model can be genuinely free when tips are on: $0 platform fee + $0 processing (their guarantee covers the gap). With tips off, it shifts to a flat 3% plus card processing (~2.9% + 30¢). A free donor CRM is included.
For now, the site ships a high-fidelity donation mockup because the live embed is waiting on one thing: the client’s EIN for account setup. The UI is ready; the integration is waiting on paperwork, not code.
Forms: Fillout vs Jotform vs Google Forms
| Tool | Free tier reality |
|---|---|
| Fillout | 1,000 submissions/month, unlimited forms and users — workable for a small nonprofit |
| Jotform | 5 forms, 100 submissions/month, 1 user, branding — fine for a demo, tight for production |
| Google Forms | Free and fast, but can feel out of place on a polished nonprofit site |
The stack I recommended: Fillout as the polished public front-end → Airtable as the structured back-end/CRM. Google Sheets works as a simpler fallback.
The framing that seemed to help in conversation: forms and Airtable are back-ends, not the front-end you ship. Families see Fillout embedded in a page that matches the site’s typography and colors. Staff see structured records with source tags.
Google Forms vs Airtable — different kinds of tools
This comes up a lot. Google Forms is a form-to-Sheet builder. Airtable is a database with a basic form view. The choice depends on how you’ll follow up — not just which logo feels familiar.
The HIPAA line
Center X offers therapy services, so HIPAA questions came up early — as they should.
The architecture we landed on:
- Public website = marketing and fundraising. No PHI collection. Clear copy asking people not to submit medical details here.
- Waitlist form = swappable module. The current version collects non-clinical inquiry data. Future clinical intake would move to a HIPAA tool with a signed Business Associate Agreement (BAA).
- CRM data ≠ clinical records. Donor, sponsor, volunteer, and referral-partner relationships stay separate from treatment intake.
HIPAA-compliant form vendors (Jotform HIPAA, IntakeQ, and others) exist on paid tiers with BAAs. We don’t need them on day one if the public boundary stays clean.
This helps avoid a common nonprofit trap: building a heavy compliance portal before you have a site people actually want to visit.
Hosting, domain, and email
Site hosting: Cloudflare Pages — free for this static build (unlimited requests, free SSL, generous build minutes). The site deploys from Git; moving to GoDaddy Website Builder would have meant rebuilding from scratch.
Domain: GoDaddy registered, Cloudflare managed. Point nameservers at Cloudflare; Cloudflare handles DNS and CNAME to Pages. The permanent domain is centerxequinetherapy.org — parked at GoDaddy with no active MX records, so cutover felt low-risk.
Email options we talked through with the client:
- Cloudflare Email Routing — free forwarding to an existing inbox
- Google Workspace for Nonprofits — free for verified 501(c)(3)s
- Zoho Mail — free tier available
Forwarding is the simplest path if they just need info@ to land somewhere familiar.
Gotchas that only show up on a real phone
mailto: isn’t always a reliable primary CTA
The footer initially used mailto: for Program Edge contact. On my iPhone, tapping the email didn’t do anything — which makes sense in hindsight: mailto only opens a draft if a default mail client is registered. Webmail-only users and in-app browsers often get silence.
The pattern that worked better: primary CTA = real URL (https://program-edge.com/contact), with email as copy-able text and an optional mailto fallback.
Instagram feeds take a little more setup now
Instagram retired its Basic Display API in December 2024. A live feed on the site now needs a third-party widget (we looked at Behold, which has a free tier), an Instagram Business or Creator account, and a one-time authorization. Facebook and YouTube icon links are straightforward — just URLs. The IG feed is waiting on account access.
What full-stack meant on this project
For Center X, full-stack included:
- Hand-built pages with accessibility and mobile-first layout
- Third-party integrations chosen for total cost of ownership, not just feature lists
- CRM-ready form structure before the CRM exists
- A HIPAA boundary written into planning docs, rather than added after a compliance scare
- Domain, hosting, and email treated as separate decisions with clear tradeoffs
The code is what people see. The integrations are what help a small nonprofit keep the site running without calling a developer every time someone submits a waitlist form.
What I’d do differently
I’d write the one-page “Tools & integration — client questions” doc before the demo, not after. Clients tend to remember the questions you ask together more than the spreadsheet you built a few days earlier.
I’d also like to publish a reusable nonprofit tool-stack cheatsheet — Givebutter fee models, Fillout vs Jotform caps, HIPAA boundary patterns — so the next healthcare-adjacent site doesn’t start from a blank page.
The research and client story that led here: Research Before Pixels. The studio site that embeds this build live: Building Program Edge.