Let me tell you about one of the dumbest-smartest decisions we’ve ever made.

We were three weeks out from launching multiple cohorts and community groups. We had people ready to join across different programs. And we decided to throw out our entire community platform and build our own from scratch.

We’d been using GoKollab (built on HighLevel) for our communities. If you’ve ever used HighLevel or any of its white-label variants, you know the pain. It’s a CRM pretending to be a community platform. The “community” features feel bolted on as an afterthought because, well, they are.

Sounds insane to build our own, right? Here’s why it wasn’t.

The Platform Problem

If you’ve ever run a cohort-based program, you know the pain. You need:

  • A place for discussions and community
  • Live session hosting or integration
  • Course content delivery
  • Member directories
  • Progress tracking
  • Notifications that actually work

So naturally, we did what everyone does. We tried all the platforms.

The Platforms We Evaluated

PlatformMonthly CostWhat We LikedWhat Killed It
GoKollab/HighLevel$97-497/moCRM features, white-labelCommunity is an afterthought, clunky UX
Circle$99-399/moClean UI, good community featuresNo native course progress, clunky integrations
Skool$99/moGamification, simpleToo “bro marketing” vibes, limited customization
Kajabi$149-399/moAll-in-oneBloated, slow, felt like 2015
Mighty Networks$99-399/moApp includedConfusing UX, members got lost
DiscordFree-ishReal-time, familiarToo chaotic for structured learning
Slack$8.75/userGreat for teamsNot built for courses, expensive at scale

Here’s the thing: none of them were bad. They just weren’t right.

Every platform forced us into their box. We’d spend hours trying to hack together workflows. “Just use Zapier!” they’d say. Cool, now I’m paying for three tools to do what should be one thing.

The Breaking Point

The final straw was real-time.

We run live workshops. People are coding together, asking questions, sharing screens. We need instant updates. When someone posts a question, everyone should see it immediately. When we drop a resource, it should just appear.

Most platforms? You refresh. You wait. You wonder if it posted.

That’s when I asked the question: “What if we just… built it?”

My team looked at me like I’d lost it. Maybe I had.

The Decision Framework

Before committing to this chaos, we did the math:

Build vs. Buy Analysis

Yearly Cost Comparison

GoKollab/HighLevel (Pro)$497/mo
$5,964/month
Circle/Skool (mid-tier)$199/mo
$2,388/month
Custom Build (infra only)
$840/month
Custom Build (with dev time)Amortized over 3 years
$700/month

The math worked. But more importantly, we’d own it. No more begging for features. No more worrying about price hikes. No more “sorry, that’s not on our roadmap.”

The Build: 3 Weeks, Start to Finish

Here’s where it gets interesting.

We had a secret weapon: AI-assisted development.

Our team structure for this build:

RoleHours/WeekTools Used
Lead Dev (me)25 hrsClaude Code, Cursor
Designer15 hrsFigma, v0

Total human hours: ~120 hours across 3 weeks.

But here’s the real story: Claude Code probably saved us 200+ hours. I’m not exaggerating.

Week 1: Foundation

Days 1-3 were all architecture. We chose our stack:

  • Frontend: Next.js 15 (App Router)
  • Backend: Convex (this was the game-changer)
  • Auth: Clerk
  • Styling: Tailwind + shadcn/ui
  • Hosting: Vercel

Why Convex? Because it gave us that real-time sync we desperately needed. When someone posts a message, it just appears for everyone. No WebSocket setup. No polling. No “pull to refresh” nonsense.

// This is literally all it takes for real-time updates
const messages = useQuery(api.messages.list, { channelId });

That’s it. One line. The data stays synced across all clients automatically.

Days 4-7 were core features:

  • User authentication and profiles
  • Channel-based discussions
  • Real-time message threading

Week 2: The Learning Layer

This is where we diverged from generic community platforms.

We built a custom curriculum system:

FeatureWhy It Matters
Module lockingContent unlocks based on progress, not dates
Inline discussionsComments live inside lessons, not in a separate forum
Progress persistencePick up exactly where you left off
Completion certificatesAuto-generated, branded PDFs

Claude Code was invaluable here. I’d describe a feature in plain English, and we’d iterate on the implementation together. Things that would’ve taken a day took hours.

Example prompt I used:

“Build a progress tracking system where each user has their own progress state per course, modules unlock sequentially, and we show a visual progress bar on the dashboard.”

20 minutes later, we had a working implementation.

Week 3: Polish and Launch

The final stretch:

  • Day 15-17: Notifications system (email + in-app)
  • Day 18-19: Admin dashboard for cohort management
  • Day 20: Mobile responsive pass
  • Day 21: Bug fixes, testing, soft launch

We shipped on day 21. Not perfect, but real.

The Tech Stack Deep Dive

For the nerds (my people), here’s the full breakdown:

Architecture Overview

System Architecture

Client
Next.js 15App Router + React 19
Tailwind+ shadcn/ui
ClerkAuth
Real-time Sync
Backend
ConvexServerless Backend
Functions
Database
Storage
Hosted on
Vercel

Why Convex Was the Right Choice

I’ve built with Firebase, Supabase, and traditional REST APIs. Convex is different.

The Good:

  • Real-time by default (not an afterthought)
  • TypeScript end-to-end (queries are fully typed)
  • No infrastructure to manage
  • Transactions just work
  • Built-in file storage

The Trade-offs:

  • Newer ecosystem (fewer tutorials)
  • Vendor lock-in (it’s their query language)
  • Learning curve if you’re used to SQL

For our use case (a real-time community platform) it was perfect.

Performance Numbers

After 3 weeks in production:

MetricResult
Average page load1.2s
Time to first message (real-time)Under 100ms
Concurrent users supported500+ tested
Monthly infrastructure cost~$70
Uptime99.9%

What We’d Do Differently

It wasn’t all smooth sailing. Here’s our honest retrospective:

What Worked

  • Starting with core features only (ruthless prioritization)
  • Using AI to accelerate, not replace, development
  • Choosing Convex for real-time (massive time saver)
  • Daily standups to stay aligned

What We’d Change

  • More time on mobile from day one (we retrofitted it)
  • Better error handling upfront (we shipped too fast here)
  • Load testing earlier (found some N+1 queries late)

The Results

Two weeks post-launch:

  • 82 active members across 3 cohorts and groups
  • 4.8/5 satisfaction score on platform experience
  • 67% daily active rate (industry average is ~30%)
  • Zero “how do I…” support tickets about navigation
  • Finally ditching Facebook Groups (the crowd rejoices)

We’re also migrating 100s of other members from our GoKollab system over the next 30 days. No more paying for a bloated CRM when all we needed was a focused community platform.

The zero support tickets surprised us most. When you build exactly what you need, turns out it’s intuitive for the people you build it for.

Should You Build Your Own?

Honest answer: probably not.

This made sense for us because:

  1. We have in-house development capability
  2. Our needs were specific (real-time cohort learning)
  3. We plan to run cohorts for years (long payback period)
  4. We wanted to own our platform completely

If you’re just starting out? Use Circle or Skool. They’re good enough. Spend your energy on content and community, not code.

But if you’re at scale, have specific needs, and the resources to invest? Building your own might be the best decision you make.

What’s Next

We’re not done. The roadmap is exciting:

Native iOS App: We’ve got a solid PWA right now, but we’re building a native iOS app for an even better mobile experience. Push notifications that actually work, offline support, and that native feel members expect.

More Migration Tools: Making it dead simple to import members from other platforms (looking at you, GoKollab and Circle).

AI Features: Using Claude to help with discussion summaries, personalized learning paths, and smart notifications.

The platform is already better than anything we could have bought. But now we get to make it exactly what our community needs, on our timeline, with zero feature request tickets to some PM who doesn’t understand our use case.

The Takeaway

Three weeks. 120 human hours. One AI coding assistant.

We went from “this is crazy” to “why didn’t we do this sooner.”

The tools exist now to build things that would’ve taken months just a few years ago. Claude Code isn’t replacing developers, it’s giving us superpowers. Convex isn’t replacing databases, it’s removing the boring parts so we can focus on features.

The barrier to building custom software has never been lower.

What are you going to build?


Want to see the platform in action? Our next cohort opens in March. Join the waitlist to get early access.