I shipped a full multi-tenant CRM in 60 days. Solo. No co-founder, no contractors, no design agency. Just me, Claude Code, and an unhealthy amount of coffee. VIBE CRM is live on Vercel right now serving real estate teams, and I'm going to break down every decision, every mistake, and every shortcut that got it there.
Why Build a CRM at All
Real estate teams need CRM software. That's not news. What is news is how badly the existing options serve small to mid-size teams:
- HubSpot starts free but the features you actually need — sequences, automation, custom pipelines — are locked behind $800+/month tiers
- Salesforce requires a consultant just to set up, costs $150+/user/month for anything useful, and the UI looks like it was designed in 2008 because it was
- Follow Up Boss and the real-estate-specific CRMs charge $69-$139/user/month and still don't let you customize the pipeline stages
The teams I talked to wanted three things: a kanban pipeline they could customize, SMS that actually works, and a dashboard that tells them if they're making money. That's it. They don't need 400 features. They need 15 features that work perfectly.
The Architecture
Here's what's under the hood:
- Next.js App Router — server components for the heavy data pages (analytics, contact lists), client components for the interactive stuff (kanban drag-and-drop, inline editing)
- Prisma + PostgreSQL — 40+ models covering contacts, deals, activities, sequences, templates, team members, billing, and audit logs. Prisma gives me type safety from the database all the way to the component. Zero runtime type errors in production so far.
- Clerk — authentication and team management. This was the single best "buy vs build" decision I made. Custom auth with multi-tenant team invites, role-based access, and SSO would have taken 3-4 weeks minimum. Clerk gave me all of it in an afternoon.
- Twilio — SMS and voice. Two-way texting with contacts, automated sequence messages, delivery receipts, and opt-out handling. The Twilio integration took about a week including all the webhook handling and error recovery.
- Stripe — subscription billing with per-seat pricing, trial periods, and usage-based overages for SMS. Stripe Checkout + webhooks for the full lifecycle.
- Vercel — deployment, edge functions, cron jobs for sequence scheduling. Zero-config deploys from the main branch.
Multi-Tenant Data Isolation: The Hard Part
This is the part that almost broke me. In a multi-tenant SaaS, every single database query needs to be scoped to the current tenant. Every. Single. One. Miss one and you've got a data leak where Team A sees Team B's contacts.
My approach: a Prisma middleware that automatically injects the tenant ID into every query. Every model that contains tenant-specific data has an organizationId field. The middleware reads the current user's org from the Clerk session and adds a WHERE clause before the query executes.
Sounds simple. It was not. Edge cases that bit me:
- Aggregate queries (COUNT, SUM) that don't go through the normal find path
- Nested creates where the parent has the org ID but the child relation doesn't inherit it automatically
- Cron jobs and background tasks that run outside a user session and need the org ID passed explicitly
- Prisma transactions where the middleware needs to apply consistently across every operation in the batch
I wrote 200+ tests just for tenant isolation. Every model, every query type, every edge case. If a query ever returns data from the wrong tenant, the test suite catches it before it gets anywhere near production.
The 60-Day Timeline
Here's how it actually broke down:
- Week 1-2: Database schema design and auth integration. 40+ Prisma models, Clerk setup, role-based access control, team invitations. This is the foundation — get it wrong and everything built on top is unstable.
- Week 3-4: Pipeline and contacts. Kanban board with drag-and-drop deal stages, contact detail pages, activity timeline, note system, file attachments. The kanban alone took a full week to get right — optimistic updates, reorder persistence, and stage-change automations.
- Week 5-6: SMS and email sequences. Twilio integration, two-way messaging, automated drip sequences with configurable delays and conditions, email template builder, delivery tracking. The sequence engine is basically a mini workflow automation system.
- Week 7-8: Analytics dashboard and mobile responsiveness. CFO-level metrics — revenue by pipeline stage, conversion rates, team member performance, SMS ROI, projected close amounts. Then making every single page work on mobile, because real estate agents live on their phones.
Solo Dev Decisions That Saved Me
Clerk over custom auth. Saved 3-4 weeks. Multi-tenant auth is a rabbit hole that never ends — password reset flows, email verification, team invites, role management, SSO. Clerk handles all of it. The monthly cost is nothing compared to the engineering time saved.
Prisma over raw SQL. With 40+ models and hundreds of queries, type safety is not optional. Prisma catches schema mismatches at build time. I can refactor a model and immediately see every query that needs to change. In raw SQL, those bugs show up in production at 2am.
Vercel over self-hosted. Zero DevOps overhead. Push to main, it deploys. Preview URLs for every PR. Edge functions for the API routes that need to be fast. Cron jobs for sequence scheduling. The alternative — managing a VPS, configuring nginx, setting up CI/CD — would have eaten an entire week of the timeline.
Ship features, not perfection. The first version of the kanban board didn't animate. The first version of the analytics dashboard refreshed the whole page instead of using real-time updates. The first version of SMS didn't support MMS. All of those got polished later. But the core product was in users' hands at day 60, not day 120.
The Numbers
- 56 API routes
- 40+ Prisma models
- Full kanban pipeline with drag-and-drop
- Two-way SMS via Twilio
- Automated email and SMS sequences
- CFO analytics dashboard with exportable reports
- Mobile-responsive across every page
- Multi-tenant with full data isolation
- Stripe billing with per-seat pricing
- Live on Vercel, serving real teams
60 days. One developer. A full CRM that competes with products built by teams of 20.
The takeaway isn't that I'm fast. It's that the modern stack — Next.js, Prisma, Clerk, Vercel, Claude Code — makes solo development at this scale actually possible. The tools have caught up to the ambition. You don't need a team to ship a SaaS. You need the right stack and the discipline to ship before it's perfect.