All posts 3 min read

We Fired Notion. It Took Two Weeks to Replace It.

We were paying $960/year for Notion and fighting it every day. So we built our own CRM. It took two weeks, runs on hardware we already own, and our AI agent can query it directly.

We were paying for Notion, barely using it, and fighting its data model constantly.

The breaking point was our sales pipeline. Notion databases can technically handle it — relations, rollups, filtered views. But every update took three clicks and a mental reset. People kept logging deals in Slack instead of the actual CRM. Which kind of defeats the purpose.

So we stopped looking for a better SaaS tool. We built our own.

What We Were Using Notion For

Notion wasn't bad at being Notion. The problem is we needed it to be three other things:

  1. CRM — clients, prospects, the whole sales pipeline
  2. Task management — project work, who's on what, what's blocked
  3. Content board — blog post ideas from raw concept to published

For a small, fast team, Notion's flexibility is actually the problem. Every schema change is a project. Every view is a negotiation. We were spending more time maintaining our Notion setup than actually using it to run the business.

The Build Decision

We didn't want to build a CRM. But the cost of not building it was getting hard to ignore.

Here's what we needed:

  • Fast queries. No API lag, no loading spinners.
  • A CLI. We're developers — we wanted pnpm query crm tasks, not a mouse-click workflow.
  • Had to run on hardware we already own.
  • AI-readable. Bernard (our ops agent) needs to read and write this data too, not just humans.

Nothing on the market hit all four at our scale. So we built it.

What We Built

azlabs-crm is a Next.js app backed by Postgres. It covers everything Notion was doing:

  • Sales: Intake → Meeting Booked → Proposal Sent → Nurture → Closed Won/Lost
  • Clients: active, one-time vs. recurring, onboarding status, follow-up dates
  • Tasks: standard statuses, plus priority flags for today / this week / blocking
  • Content board: ideas, scoring, status from raw topic to live post

Runs on our Mac Mini — same box that runs Bernard, Postgres, and everything else. No cloud hosting. No per-seat pricing. No rate limits.

The AI Shortcut

When people hear "we built our own CRM in two weeks," they assume we were heads-down coding the whole time. We weren't.

We wrote four spec documents — one per phase. Then dispatched each one to Archon, our AI coding agent, which opened a branch, implemented the spec, and put up a PR. We reviewed and merged.

Our actual engineering time was maybe four or five hours total. The agent built the rest.

That's what's changed. Writing clean specs and reviewing PRs is a lot cheaper than writing code from scratch. When you have AI agents that can turn a spec into a working PR in a few hours, the math on building internal tools shifts completely.

What It Actually Cost

Money: Zero in new tools. We already had the Mac Mini, Postgres, and the agent setup.

Time: Roughly 10 engineering hours — mostly spec writing and review, not code.

Migration: Still ongoing. Updating all our internal docs and automations to point at azlabs-crm instead of Notion. Tedious, but one-time.

The Notion subscription was around $80/month. Call it $960/year. For a tool we were actively working around.

What's Actually Better

A few things caught me off guard.

It's fast. Genuinely instant. Postgres queries on local hardware don't have a "loading" state. After months of Notion's latency, this alone was worth it.

Bernard uses it the same way we do. Before, our AI agent was parsing Notion API responses. Now it queries the same tables we use. Same CLI, same data, no translation layer.

We own the schema. Client needs a custom field? Add a column. Want to rename a status? Just rename it. No plan upgrade required.

We're actually logging things now. This is the one I didn't see coming. When the friction's gone, people use the tool. More client notes, more task updates, more content ideas moving forward — not because we changed our habits, but because we removed the reason to avoid it.

The Real Lesson

We didn't build our own CRM because we're anti-SaaS. We built it because our constraints — CLI-first, AI-readable, no latency, runs local — didn't match anything available at our size.

Most small teams are running enterprise software at 10% capacity, fighting it daily, and paying for the privilege. The answer isn't always "find a better SaaS." Sometimes it's "build the exact right tool and stop paying for the wrong one."

The reason that wasn't practical before was developer time. That cost has changed. When an AI agent can take a spec and ship a working PR in a few hours, building internal tools stops being a luxury.

It starts being the smarter move.