Harmonia CRM — The Complete Business Platform
A full-featured CRM that combines the best of GoHighLevel and HubSpot into a single, multi-tenant platform. 26 integrated modules covering every aspect of customer lifecycle management.
What Harmonia Does
Harmonia is a unified platform that replaces the need for separate tools for CRM, email marketing, SMS, phone, calendars, funnels, payments, reputation management, and more. Every module shares the same database, authentication, and design language.
Live at: atlas-harmonia-crm.vercel.app
Built For
Primary client: LI Solutions (Legacy Insurance) with 800+ contacts imported from HubSpot.
Design philosophy: Multi-tenant from day one. Every table has org_id. White-label ready. Agency-grade.
Org ID: da13ce77-090c-485b-bfd8-932fd55f6b6d
Technology Stack
26-Module Platform Map
Every module Harmonia offers, organized by category. Active modules are live. Pending modules are architected and queued for build.
Core CRM & Sales
Communication
Marketing & Growth
Automation & Intelligence
Revenue & Operations
Platform & Admin
CRM & Pipelines
Contact management, deal pipelines, and opportunity tracking. The foundation everything else builds on.
Contact Management
| Contact Record Fields | ||
|---|---|---|
| Identity | First name, last name, email, phone, company, job title, avatar | Core |
| Custom Fields | Unlimited custom fields per org. Text, number, date, dropdown, multi-select, URL | Flexible |
| Tags | Color-coded tags for segmentation. Auto-applied via workflows. | Organize |
| Activity Timeline | Every interaction: emails, calls, meetings, notes, deals. Chronological history. | Auto |
| Lead Scoring | Configurable scoring rules. Points for engagement, demographics, behavior. | Smart |
| Lifecycle Stage | Lead → MQL → SQL → Opportunity → Customer → Evangelist | Stage |
Pipeline System
Fully customizable stages, colors, and win probabilities per pipeline
Pipeline Features
- Multiple pipelines per org (Sales, Onboarding, Renewals)
- Drag-and-drop Kanban board view
- Deal values with currency and probability
- Stage automation — trigger workflows on stage change
- Weighted pipeline — forecast revenue by win probability
- Stale deal alerts — flag deals sitting too long in a stage
Data Patterns
Key architectural patterns used across the CRM:
mapRow<T>()— snake_case → camelCase for single recordsmapRows<T>()— same transform for arrayscreateAdminClient()from@/lib/supabase/admin- Every table has
org_idfor multi-tenancy - RLS policies enforce org-level isolation
- Drizzle ORM for type-safe queries
Conversations — Email, SMS & Phone
A unified inbox for all customer communication. Every channel flows into one conversation thread per contact, giving your team complete context.
Unified Inbox Architecture
- SMTP/IMAP integration
- Custom sending domains
- Email templates with variables
- Open/click tracking
- Signature management
- Bulk email with throttling
- Reply detection and threading
💬 SMS / MMS
- Twilio integration
- Two-way messaging
- MMS (images, files)
- SMS templates
- Auto-reply keywords
- Opt-out management
- Delivery receipts
📞 Phone / VoIP
- Twilio Voice integration
- Click-to-call from CRM
- Call recording
- IVR menu builder
- Voicemail transcription
- Call logging to timeline
- Power dialer mode
Conversation Features
| Unified Inbox Capabilities | |
|---|---|
| Thread Merging | Email, SMS, and phone interactions with the same contact merge into a single chronological thread |
| Assignee Routing | Round-robin, skills-based, or manual assignment. Each conversation has an owner. |
| Internal Notes | Team members can leave private notes on any conversation (not visible to contacts) |
| Canned Responses | Pre-built reply templates with variable substitution ({{first_name}}, {{company}}, etc.) |
| Status Tracking | Open → Pending → Resolved. SLA timers for response time monitoring. |
| AI Suggestions | AI Assistant suggests replies based on conversation context and contact history |
Calendars & Campaigns
Scheduling that books meetings while you sleep, and multi-channel campaigns that nurture leads automatically.
📅 Calendar System
- Booking pages — Public scheduling links (like Calendly)
- Availability rules — Business hours, buffer time, date overrides
- Round-robin booking — Distribute meetings across team
- Google Calendar sync — Two-way sync prevents double-booking
- Confirmation + reminders — Auto email/SMS before meetings
- Reschedule/cancel — Self-service links in confirmation emails
- Custom intake forms — Collect info before the meeting
- Timezone detection — Shows slots in booker's local time
🚀 Campaign System
- Multi-channel sequences — Email + SMS + wait + condition
- Visual builder — Drag-and-drop campaign steps
- Enrollment triggers — Tag added, form submitted, stage changed
- Goal-based exit — Remove from campaign when goal is met
- A/B testing — Split test subject lines and content
- Send time optimization — AI picks the best delivery window
- Engagement tracking — Opens, clicks, replies per step
- Compliance — CAN-SPAM, opt-out handling, suppression lists
Campaign Flow Example
Contact exits campaign if they reply, book a call, or unsubscribe
Workflows & Automation
The automation engine that powers everything. Visual workflow builder with triggers, conditions, actions, and branching logic. If something should happen automatically, it goes here.
Workflow Components
| Building Blocks | ||
|---|---|---|
| Triggers | What starts the workflow: form submission, tag added/removed, deal stage changed, date-based, webhook received, contact created, email opened, link clicked | Start |
| Conditions | If/else branching: field value, tag present, email opened, time-based, contact property, deal value, custom field match | Branch |
| Actions | What to do: send email/SMS, add/remove tag, update field, create deal, assign owner, add to campaign, create task, webhook call, wait, notify team | Execute |
| Wait Steps | Delay execution: fixed duration (hours/days), until a specific date, until a condition is met | Delay |
| Goals | Exit conditions: when a contact achieves the workflow's goal, they're removed regardless of where they are in the sequence | Exit |
Common Automation Patterns
-
Lead Scoring Automation Trigger: contact engages (email open, page visit, form submit). Action: increment lead score, notify sales rep when threshold met, move to pipeline stage.
-
Onboarding Sequence Trigger: deal stage = "Won". Action: send welcome email, create onboarding tasks, assign CSM, start Day 1/7/14/30 check-in campaign.
-
Stale Deal Alert Trigger: deal has been in same stage > 14 days. Action: send internal notification, create follow-up task, optionally send re-engagement email to contact.
-
Review Request Trigger: 30 days after deal close. Condition: satisfaction score > 8. Action: send review request via email + SMS. Follow up in 3 days if no response.
-
Re-engagement Trigger: no activity from contact in 90 days. Action: add "At Risk" tag, send win-back email series, notify account owner.
AI Assistant
An embedded AI that understands your CRM data and helps with drafting, analysis, recommendations, and automation. Powered by GPT-4o with full context of your contacts, deals, and communication history.
What the AI Assistant Can Do
Context Sources
The AI Assistant has access to:
- Contact records — All fields, tags, custom properties
- Communication history — Emails, SMS, call transcripts
- Deal data — Pipeline stage, value, activities
- Engagement metrics — Email opens, clicks, responses
- Team context — Who owns what, recent activity
- Industry knowledge — Insurance domain expertise (LI Solutions)
Example Prompts
-
"Draft a follow-up email to John Smith about his renewal"
→ Uses contact history + deal context to write a personalized email
-
"Which deals are at risk of closing this month?"
→ Analyzes pipeline, activity recency, and engagement patterns
-
"Summarize all interactions with Acme Corp"
→ Pulls full thread history, meetings, and deal progression
-
"Create a re-engagement campaign for inactive leads"
→ Generates multi-step email sequence with personalization tokens
Architecture
Multi-tenant, scalable, and built on modern infrastructure. Here's how all 26 modules work together under the hood.
System Overview
Multi-Tenant Data Model
CREATE TABLE contacts (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
org_id UUID NOT NULL REFERENCES organizations(id),
first_name TEXT,
last_name TEXT,
email TEXT,
...
created_at TIMESTAMPTZ DEFAULT now()
);
-- Row Level Security enforces isolation:
CREATE POLICY "org_isolation" ON contacts
USING (org_id = auth.jwt() ->> 'org_id');
Key Patterns
- mapRow<T>() / mapRows<T>() — Transform snake_case DB columns to camelCase TypeScript
- createAdminClient() — Bypasses RLS for server-side operations
- org_id on every table — No data exists outside an org context
- JWT auth via Supabase — Token includes org_id claim
- Server Components — Data fetching at the server layer
- shadcn/ui — Consistent component library throughout
Database Migrations
- 34 migration files (0001 through 0034)
- 0001-0030: Applied and live
- 0031-0034: Written, pending application
- Run via Supabase SQL editor in order
- Each migration is idempotent
- Includes indexes, RLS policies, and triggers
6-Agent Build Architecture
| Specialist Build Agents | ||
|---|---|---|
| Agent 1: CRM | Contacts, pipelines, deals, tasks, activities, lead scoring | Core |
| Agent 2: Comms | Email, SMS, phone, conversations, unified inbox, templates | Comms |
| Agent 3: Calendar | Booking pages, availability, Google Calendar sync, reminders | Schedule |
| Agent 4: Workflows | Automation engine, triggers, conditions, actions, campaigns | Auto |
| Agent 5: Revenue | Payments, invoicing, Stripe, subscriptions, reputation | Revenue |
| Agent 6: AI | AI Assistant, GPT integration, suggestions, content generation | AI |
Each agent worked in parallel on their domain, sharing the same database schema and authentication layer. This enabled building 26 modules at 6x speed.
Architecture Strengths
- True multi-tenancy from day one
- Type-safe end-to-end (TypeScript + Drizzle)
- Edge-deployed (Vercel) for global performance
- Supabase RLS = security at the database layer
- Modular: each feature is independently deployable
- White-label ready: branding per org
Known Constraints
- Supabase DB URL needed in .env.local (currently empty)
- 4 pending migrations must be applied in order
- 3 modules still pending build (Affiliate, Docs, Blogging)
- Supabase MCP not linked (only AutoAgency project connected)
- Rate limiting not yet implemented on all endpoints