Mari Luukkainen

Main

  • Home
  • Blog
  • Projects
  • About
  • Work with me
  • Resources
  • Now
  • Frameworks
  • GTM30
  • Strategic Growth Hacking

Account

XGitHubLinkedInEmail
  1. Home
  2. /Blog
  3. /How we replaced 3000 EUR of monthly SaaS with one custom platform for our nonprofit

How we replaced 3000 EUR of monthly SaaS with one custom platform for our nonprofit

April 4, 2026
Startups

At some point last year we looked at the monthly SaaS bill for Herizon, the talent matching program for immigrant women in Finland that I run, and realized we were paying close to 3,000 EUR a month just for basic operations. Not for anything fancy, just to send emails, manage contacts, run a community, collect applications, and automate a few workflows between all of those.

We had Customer.io for behavioral emails, Mailchimp for newsletters, Ghost for publishing, Mighty Networks for the community, Tally for intake forms, Zapier for gluing things together, Buffer for social media scheduling, and a CRM that didn't really fit but was the least bad option. Eight tools, eight logins, eight billing cycles, and none of them talked to each other properly.

So we built one platform that replaced all of them.


Why the multi-tool setup stopped working

3,000 EUR a month is a lot for a nonprofit, but honestly the money wasn't even the worst part. The worst part was that our data lived in eight different places. A contact existed in Customer.io AND Mailchimp AND Mighty Networks AND the CRM AND a Tally spreadsheet, and when someone changed their email or dropped out of the program, we had to update it everywhere. We didn't, obviously, so things broke constantly. People got emails they shouldn't have, other people didn't get emails they should have.

Zapier was supposed to fix this but it just added a ninth system with its own failure modes. Zaps would silently break and we'd find out weeks later when someone asked why they never got their onboarding email. Every tool had its own model of what a "contact" was, none of them matched, and we were spending more time managing tools than actually using them.


What we built

A monorepo with five services that replaced the entire stack:

1. CRM + Contact Management (replaces the old CRM)

The center of everything. One database, one contact record, and every interaction (emails sent, events attended, applications submitted, courses completed, messages sent) lives on the same contact without any syncing, duplicates, or Zapier glue in between. Contacts have skills, work experience, education, languages, and a profile completeness score, and the contact model was designed around what we actually need for talent matching rather than what some generic CRM thinks a "lead" should look like.

2. Communications platform (replaces Customer.io, Mailchimp, Ghost)

This was the big one. We built a full email communications system with templates that have variable placeholders per recipient, audience segments with filter rules (by tags, status, program enrollment), one-off campaigns and multi-step drip sequences, automation triggers that enroll people in campaigns when they get a tag or change status, newsletter editions with custom content blocks, delivery tracking for opens/clicks/bounces/complaints via Resend webhooks, and unsubscribe management with category-based preferences.

It does everything Customer.io did, everything Mailchimp did for newsletters, and everything Ghost did for publishing, but the difference is that it's all connected to the same contact database. When we send a newsletter, we're not exporting a CSV and importing it somewhere because the segment is live and the data is real-time.

3. Community portal (replaces Mighty Networks)

A React Native app (web + mobile via Expo) that gives community members chatrooms with threads and reactions, direct messaging, event listings and RSVPs, course access with progress tracking, profile management, and notifications. Mighty Networks was charging us enterprise prices for a community platform that felt like a Facebook group from 2015, while the custom portal actually fits our use case because it's integrated with the programs, the courses, and the CRM. When someone completes a course it shows up on their profile, when they RSVP to an event it's in their contact record, without any syncing needed.

4. Intake forms (replaces Tally)

Instead of a traditional form we built a chatbot-like intake experience where applicants go through a conversational flow: select their school, upload their CV (which gets parsed by AI), and fill in their profile. It feels more like talking to someone than filling out a 40-field form. The CV parsing alone was worth building because we get structured work history data extracted automatically including skill tagging, and that data goes straight into the CRM without any manual entry or copy-pasting from PDFs.

5. Automations (replaces Zapier, Buffer)

Instead of a separate automation layer, automations are built into the communications platform. A contact gets tagged "hip-approved" and they automatically get enrolled in the onboarding drip campaign, without an external service, without a webhook that might fail silently, and without a monthly Zapier bill that scales with usage. For social media scheduling we added a simple post scheduler to the comms module because we don't need Buffer's analytics or team collaboration features, we just need to schedule posts.


The tech stack

Next.js for the CRM, portal API, and matching platform. Expo (React Native) for the community portal. PostgreSQL with Knex.js for the database (145+ migrations and counting). Resend for email delivery. OpenAI for CV parsing and talent matching via embeddings. Stripe for payments. TypeScript everywhere. The whole thing runs as a monorepo with shared types and utilities, local dev is Docker Compose with Postgres, and production is on Render.


What it actually cost to build

A lot of time, and we won't pretend this was a weekend project. But the math that made it make sense is straightforward: at around 3,000 EUR/month those SaaS tools cost 36,000 EUR per year, while the custom platform costs about 50 EUR/month to run (database + hosting + email sending), which means a saving of roughly 35,400 EUR per year. For a nonprofit that's almost a full-time salary, that's program funding, and that's the kind of money that determines whether you can scale or have to shut things down.

And unlike SaaS the platform gets better over time without the bill going up. More contacts don't mean a higher Customer.io tier, more emails don't mean upgrading Mailchimp, and more community members don't mean Mighty Networks charging us more per seat.


What we'd do differently

We'd start with the CRM and comms because those two alone would have eliminated 70% of the pain, and the community portal and intake form could have waited. We also over-engineered a few things early on since the drip campaign system didn't need to be as flexible as it is from day one and a simpler version would have been fine for the first six months.

But the decision to build was correct. The duct-tape stack was actively causing problems with people falling through cracks, emails going to wrong segments, and manual work eating hours every week, and the custom platform fixed the root cause instead of adding another layer of duct tape on top.


When to build vs. buy

We're not saying everyone should build their own CRM because that would be insane advice. But if you're a nonprofit or an early-stage startup and you check these boxes, it might make sense:

  1. You have someone who can build it. This isn't a Bubble/no-code project, you need someone who can design a database, write APIs, and maintain a production system.
  2. Your tools don't talk to each other. If you're spending more time syncing data between systems than using the systems, you have a platform problem not a tool problem.
  3. Your use case doesn't fit generic SaaS. We're not a typical CRM customer or a typical email marketing customer, we're a talent matching program with a community, courses, internships, and company partnerships, and no single tool fits.
  4. The cost is material. 3,000 EUR/month matters to us. If you're a well-funded startup, just pay for the tools and focus on your product.

If all four are true, building makes sense. If not, keep buying.


What actually changed

The money savings are great but the real difference is that everything is connected now. When a company browses our talent pool they see profiles built from real data with parsed CVs, completed courses, assessment scores, and event participation rather than a manually updated spreadsheet. When someone joins the program they automatically get the right emails, access to the right courses, and show up in the right dashboards without anyone having to remember to add them to five different systems. When we need to know how many people completed the bootcamp and got employed within three months, we run one query instead of stitching together five exports in Google Sheets. Having one database as the single source of truth for everything is what makes all of this work, and it's the reason we'd make the same decision again.

Newsletter

Get posts like this delivered to your inbox.

My Account

Access books, resources, and your reading history.

Sign in or create account

Further reading on growth & product

More articles that explore similar topics, frameworks, and playbooks.

How to set up a Next.js marketing website with AI in one afternoon

March 11, 2026

You don't need a web developer to ship a fast, modern marketing site. Here's the exact setup I'd use today with Cursor, Claude, Vercel, and a few tools that handle the rest.

MarketingStartups

Why most AI startups have a distribution problem, not a tech problem

March 10, 2026

Everyone's building on the same foundation models. The ones who win won't have better AI. They'll have better distribution.

StartupsVenture CapitalMarketing

The generational shift that broke your go-to-market

March 9, 2026

By 2034, 80% of the workforce will be Millennials, Gen Z, and Gen Alpha. If your GTM still targets the people who bought from you in 2015, you're marketing to a shrinking audience.

MarketingStartups
Back to blog