Most nonprofits operate on razor-thin budgets. Every dollar spent on software is a dollar not going to the mission. Yet organizations still need websites, email campaigns, content management, and workflow tools to function.
The typical advice? “Just use Squarespace and Mailchimp.” But those costs add up fast. A modest email list on Mailchimp can run $50–200/month. Squarespace is another $15–40/month. Add in project management tools, and suddenly you’re looking at $300+/month in SaaS fees—over $3,600/year that could fund actual programs.
Here’s how I built a complete digital stack for KAC Chicago that costs almost nothing to run.
Table of Contents
The Stack
| Function | Tool | Cost |
|---|---|---|
| Website | Astro | Free (static hosting) |
| CMS | Directus | Free (self-hosted) |
| Email Campaigns | Sendy + AWS SES | $69 one-time + <$1/10k emails |
| Donations & Events | Zeffy (or Stripe) | Free (0% fees) |
| Email/Calendar | Google Workspace | $6–12/user/month |
| Single Sign-On | Keycloak | Free (self-hosted) |
| Workflow/Tasks | Kan.bn | Free (self-hosted) |
| Team Chat | Zulip | Free (self-hosted) |
Total recurring cost: Under $20/month for a small nonprofit (mostly Google Workspace), vs. $300–500/month for equivalent SaaS.
Why This Matters
Nonprofit technology is often an afterthought—either underfunded (WordPress + free plugins held together with hope) or overspent (enterprise SaaS that drains the budget).
This stack hits a sweet spot:
- Professional: Fast site, proper CMS, real email marketing, donation processing, SSO
- Affordable: ~$120/year vs. $3,000+/year for SaaS equivalents
- Maintainable: Open-source tools with active communities
- Integrated: Single login, connected systems, coherent experience
If you’re building for a nonprofit and want to maximize impact per dollar, consider going lean.
Putting It Together
The architecture looks like this:
┌───────────────────────────────────────────────────────────────┐
│ Keycloak (SSO) │
└───────────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────-┐ ┌──────────┐ ┌──────────┐
│ Directus │ │ Sendy │ │ Kan.bn │ │ Zulip │
│ (CMS) │ │(Campaigns)│ │ (Tasks) │ │ (Chat) │
└──────────┘ └──────────-┘ └──────────┘ └──────────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────────────────┐
│ Astro │ │ AWS SES │ │ Google Workspace │
│ (Build) │ │(Delivery)│ │ (Email/Calendar) │
└──────────┘ └──────────┘ └─────────────────────┘
│
▼ ┌─────────────────────┐
Static Site │ Zeffy / Stripe │
(Gitlab Pages) │ (Donations/Events) │
└─────────────────────┘
All the self-hosted components (Keycloak, Directus, Sendy, Kan.bn, Zulip) run on a single $10–20/month VPS. Ours is a $35/mo dedicated Hetzner instance but shared with other services donated by me. The Astro site deploys to free static hosting on GitLab Pages. Google Workspace is the one external SaaS dependency we’re still evaluating alternatives for.
The Tradeoffs
This stack isn’t for everyone. You need:
- Someone technical to set it up: A few hours of DevOps work upfront
- Basic server maintenance: Security updates, occasional restarts
- Comfort with self-hosting: No support hotline if something breaks
For organizations with zero technical capacity, managed SaaS may still be the right call. But if you have even one volunteer who can SSH into a server, the cost savings are substantial.
Deep Dive
Website: Astro
Astro is a static site generator that produces fast, SEO-optimized websites. For nonprofits, the key benefits are:
- Free hosting: Deploy to Netlify, Vercel, or Cloudflare Pages at zero cost
- Performance: Static HTML loads instantly, even on slow connections
- Accessibility: Easy to build accessible sites with semantic HTML
- Content flexibility: Supports Markdown, MDX, or pull from any headless CMS
For KAC Chicago, I designed the UI from scratch—no templates—ensuring it reflects the organization’s identity rather than looking like every other nonprofit site.
CMS: Directus
Non-technical staff need to update content without calling a developer. Directus is an open-source headless CMS that:
- Self-hosts easily: Runs on any VPS ($5–10/month on Hetzner, DigitalOcean, etc.)
- Provides a clean admin UI: Board members and volunteers can edit pages, add events, manage media
- Exposes a REST/GraphQL API: Astro fetches content at build time for static pages, or at runtime for dynamic content
- Handles permissions: Role-based access so different users see different capabilities
The managed Directus Cloud starts at $99/month. Self-hosting costs $5/month on a small VPS.
Email Campaigns: Sendy + AWS SES
Email is how nonprofits stay connected with supporters. Mailchimp’s free tier is increasingly restrictive, and paid plans get expensive fast.
Sendy is a self-hosted email marketing app paired with AWS SES for actual delivery:
- Sendy costs $69 once: No monthly fees for the software itself
- AWS SES for sending: $0.10 per 1,000 emails—that’s less than $1 to email 10,000 subscribers
- Full-featured: Lists, segments, automation, analytics, bounce handling
- Deliverability: AWS SES has excellent reputation and deliverability rates
For a nonprofit with 5,000 subscribers sending 4 campaigns/month, that’s roughly $2/month vs. $75+/month on Mailchimp. For smaller lists, you’re often under $1/month total.
The tradeoff: Initial SES setup requires domain verification and a sending limit increase request (takes 24-48 hours). But once running, it just works—and the savings compound every month.
Donations & Events: Zeffy (or Stripe)
Nonprofits live and die by donations. Most payment platforms take 2.9% + $0.30 per transaction—which adds up fast during fundraising campaigns.
Zeffy is a payment and event management platform built specifically for nonprofits with a radical pricing model: 0% platform fees.
- Completely free for nonprofits: No transaction fees, no monthly fees
- Donation pages: Branded, embeddable donation forms with recurring giving support
- Event ticketing: Sell tickets to galas, fundraisers, and community events
- Peer-to-peer fundraising: Supporters can create their own fundraising pages
- Tax receipts: Automatic receipt generation for donors
How do they make money? Donors are prompted (not required) to leave an optional tip to Zeffy at checkout. That’s it.
When to consider Stripe instead:
Stripe is the industry standard for payment processing. If you need:
- Custom integrations with your website or CRM
- More control over the checkout experience
- International payments with complex currency needs
- High-volume processing where you’re negotiating rates
Stripe charges 2.9% + $0.30 per transaction (with discounted rates for nonprofits upon application). For most small-to-medium nonprofits, Zeffy’s zero-fee model wins. But if you’re building custom donation flows or need deeper integration, Stripe’s developer tooling is unmatched.
Authentication: Keycloak
If you have multiple tools (CMS, email, task management), forcing users to maintain separate logins creates friction and security risks.
Keycloak provides enterprise-grade single sign-on (SSO) for free:
- One login for everything: Staff sign in once, access all tools
- Social login: Let users authenticate via Google, GitHub, etc.
- Role-based access: Admin, editor, volunteer roles across all systems
- Self-hosted: Runs alongside your other services
For KAC Chicago, Keycloak ties together Directus, Kan.bn, and internal tools. Volunteers get appropriate access without managing multiple credentials.
Workflow Management: Kan.bn
Nonprofits run on coordination—events, fundraising, volunteer management, board tasks. You need somewhere to track what’s happening.
Kan.bn is a lightweight, self-hosted Kanban board:
- Simple: Boards, columns, cards—no enterprise complexity
- Self-hosted: Runs on the same VPS as everything else
- Integrated: Sits behind Keycloak SSO
It’s not Asana or Monday.com, but for a small nonprofit coordinating volunteers and board activities, it’s more than enough.
Team Chat: Slack → Zulip
We started on Slack’s free tier, but hit its limitations quickly—90-day message history, limited integrations, and the constant upsell pressure.
Zulip is an open-source chat platform with a killer feature: threaded conversations by default. This matters for nonprofits where:
- Volunteers check in sporadically (threads keep context intact)
- Discussions span days or weeks (not everything is synchronous)
- You want searchable history forever (not 90 days)
Self-hosted Zulip is free. The managed Zulip Cloud has a generous free tier for small teams and discounts for nonprofits.
We’re currently migrating from Slack—considering both Zulip and Kakao depending on the team’s preferences.
Email & Calendar: Google Workspace (For Now)
This is the one area where we’re still on SaaS: Google Workspace at $6–12/user/month.
Why we haven’t self-hosted email:
- Email deliverability is hard—IP reputation, SPF/DKIM/DMARC, spam filtering
- Calendar sync with external parties expects Google/Outlook
- The reliability bar is high; email downtime is unacceptable
Alternatives we’re evaluating as we grow:
- Migadu — Simple, affordable email hosting ($19/month unlimited users)
- Mailcow — Self-hosted Docker mail server (free, but complex)
- Proton for Nonprofits — Privacy-focused, offers nonprofit discounts
For now, Google Workspace is the pragmatic choice. But it’s the largest line item in our recurring costs, so we’re actively exploring options.