Open Source CRM
A modern, open-source CRM built for small businesses — leads, invoicing, follow-ups, quotations, client portal, and full team activity in one clean platform.
Overview
Open Source CRM is a modern, production-grade customer relationship platform built for small and medium businesses that have outgrown spreadsheets and messy WhatsApp chats. It combines everything you need to run daily operations — leads, quotations, invoices, follow-ups, client portal, expenses, team activity — in one clean, blazing-fast interface.
Built on the latest web stack (Next.js 16, React 19, PostgreSQL, TypeScript), it out-performs older PHP CRMs in speed, mobile responsiveness, and developer experience. You get the full source code, deploy it to your own server, and own your data forever. No monthly SaaS fees, no vendor lock-in.
Perfect for salons, real-estate agencies, garages, cleaning companies, restaurants, and any local business that wants a professional CRM without paying subscription fees for years.
What you get
- ✅ Complete source code — Next.js 16 + Prisma + PostgreSQL, fully TypeScript
- ✅ Self-hosted — deploy on your own VPS / server
- ✅ One-domain license — buy once, use on one production domain
- ✅ Free updates for 6 months — patches, new features, security fixes
- ✅ 30 days support included (WhatsApp + email)
- ✅ Installation guide with step-by-step commands
- ✅ Sample data seeder so you can demo before onboarding real clients
- ✅ Built-in license activation system (bind to your domain in one click)
Key modules
🎯 Lead management - Modern drag-and-drop Kanban pipeline with touch support (works on mobile) - Industry-specific starter stages: Salon, Real Estate, Garage, Cleaning, Restaurant, Retail - Lead priorities: Hot / Warm / Cold with visual pills - Tags, custom fields, expected value, probability %, expected close date - Interaction timeline — log calls, WhatsApp messages, meetings, notes, emails - Duplicate detection by phone/email on lead entry - Assignment to team members with proper role-based visibility
💰 Invoicing (built-in) - Full invoice module with line items (name, description, qty, unit price) - Auto-calculated subtotal, discount %, VAT %, total - Recurring invoices (weekly / monthly / yearly) — generate automatically - Stripe pay-link — customers pay online with card, receipt auto-sent - Multiple payment methods: Stripe, cash, bank transfer, cheque - PDF export with your branding (org name, logo, address) - Email invoice with PDF attached, one click - Public pay page — no login required for your customers - Status flow: Draft → Sent → Viewed → Paid (with events timeline)
📝 Quotations - Line-item quotes with catalog picker - PDF export + email - Convert quote → invoice with one click - Status tracking: Draft, Sent, Accepted, Rejected, Expired
📦 Service / Item catalog - Reusable library of your services and products - Price, description, SKU, taxable flag - Insert into quotes/invoices with one click
💸 Expenses - Track business expenses with categories and receipts - Categorize (rent, utilities, marketing, supplies, salaries — you define) - Attach receipt images/PDFs - Mark as billable → link to a customer's next invoice - Reports: expenses by category, cash flow (revenue - expenses)
👥 Team management - 3-tier role system: Admin, Manager, Agent - Admin — full access, team + billing + settings - Manager — sees all team leads + activity log, no user management - Agent — sees only own assigned leads (privacy for larger teams) - Team invites via email (7-day expiry, secure token) - Comprehensive activity log — every action tracked (created, updated, moved stage, sent quote, etc.)
🌐 Client portal - Your customers log in to their own dashboard - View all their invoices with status - Pay unpaid invoices online via Stripe - Download PDFs - Change their own contact details / password - Enable/disable per-customer from the admin
📊 Reports & analytics - Revenue by month (6-month rolling chart) - Expenses by category (this month with breakdown) - Cash flow = Revenue − Expenses this month - Leads by source (WhatsApp, Instagram, Facebook, referral, walk-in, website) - Conversion funnel (leads → contacted → quoted → won) - Sales by employee (admin/manager only) - Win rate %
📥 Web-to-lead forms - Create public embed forms for your website - One HTML snippet, paste anywhere - Submissions land directly as leads in your CRM - Configurable source, priority, and redirect URL
⚙️ Customization - Custom fields per entity (leads + customers) — text, number, date, select - Tags with color-coded chips - Pipeline editor — rename, reorder, recolor stages - Expense categories with custom colors - Email templates for invoices, receipts, portal invites
🔒 Security - JWT-based sessions (30-day expiry, httpOnly cookies) - bcrypt password hashing (10 rounds) - Multi-tenant data isolation (every query scoped by org) - Password reset flow with expiring tokens - HTTPS enforced
Tech stack
- Frontend: Next.js 16 (App Router, RSC, Turbopack), React 19, TypeScript, Tailwind CSS v4
- Backend: Next.js server actions, Node 20+
- Database: PostgreSQL 14+ via Prisma ORM
- Auth: JWT (jose) with bcrypt
- PDF: @react-pdf/renderer (branded quote/invoice output)
- Drag & drop: @dnd-kit (mouse + touch)
- Email: Nodemailer over SMTP / Postfix
- Payments: Stripe (checkout + webhook)
Requirements
- Node.js 20 or later
- PostgreSQL 14 or later
- Any SMTP server (Postfix works out of the box)
- A domain (used for license activation)
- Optional: Stripe account (for online payments — invoicing works without it)
Installation (5 minutes)
- Unzip the package to
/var/www/mycrm(or wherever) - Copy
.env.exampleto.envand fill in: npm installnpx prisma db push(creates all tables)npm run build && npm run start- Set up nginx reverse proxy + Let's Encrypt SSL
- Add the reminder cron:
/15 * cd /var/www/mycrm && node scripts/send-reminders.mjs
Full step-by-step guide included in the ZIP.
Live demo
Try it now — no signup required, sample data pre-loaded:
- URL: crm.hades.ae
- Admin login:
demo@hades.ae/demo2026 - Manager login:
manager@hades.ae/demo2026 - Agent login:
agent@hades.ae/demo2026
Each role shows a different view. Try Admin first to see everything.
Why choose us over other CRM solutions
- Modern stack — Next.js 16 + React 19 + PostgreSQL + Tailwind v4. Not another decade-old PHP + Bootstrap 3 CRM.
- Native mobile UX — Drawer sidebar, touch drag-and-drop Kanban, iOS-optimized inputs. Works one-handed on a phone.
- Multi-tenant by design — Sell to multiple businesses from one deployment, or run one team per install. Legacy CRMs are single-org.
- Full TypeScript — Every file strictly typed. Refactor with confidence. Legacy PHP CRMs have no type safety.
- 5-minute install — Extract ZIP → set env → prisma push → npm start. No complex config, no legacy dependencies.
- Modern payments — Built-in Stripe Connect (Express). Each merchant connects their own Stripe, gets paid directly to their bank. Not an afterthought.
- Client portal included — Customers log in, see invoices, pay online. No add-on modules to buy.
- Real-time interactive — Server-side rendered pages, no page reloads for drag/drop, no wait for AJAX spinners.
- You own the code — Full source, no obfuscation, no license servers checking every request. Modify freely.
- Priced fairly — One-time payment, one domain, 30 days support, 6 months of updates. No subscription trap.
License
- One purchase = one production domain
- Development / staging domains don't count against your license
- Use for your own business OR your client's business (agencies welcome)
- Reselling as-is is not allowed
- Full source code, no obfuscation
- Modify freely for your own project
Changelog
v2.0.0 (Aug 2026)
- Full invoicing module with recurring + Stripe pay-links
- Client portal (customers pay online)
- Expenses tracking
- Item/service catalog
- Web-to-lead forms
- Activity log
- Sales by employee report
v1.0.0 (Aug 2026)
- Initial release: leads, customers, quotations, tasks, teams, reports
Support
- 30 days of email + WhatsApp support included with every purchase
- 6 months of free updates
- Priority bug fixes via WhatsApp
- Full source access means you can modify anything
Features
- ✓Multi-tenant orgs (Admin / Manager / Agent roles)
- ✓Real-time drag-and-drop Kanban with touch support
- ✓Industry-tailored pipelines: Salon, Garage, Real Estate, Cleaning, Restaurant, Retail
- ✓Lead management: priorities (Hot/Warm/Cold), tags, custom fields
- ✓Customer database with interaction timeline
- ✓INVOICES with recurring billing + Stripe pay-links + PDF export
- ✓STRIPE CONNECT: connect your own Stripe, get paid directly to your bank
- ✓CLIENT PORTAL: customers log in, view invoices, pay online
- ✓Item / service catalog for reusable invoice line items
- ✓EXPENSES tracking with categories and receipts
- ✓Quotations with line items, VAT, PDF, email send
- ✓Task system with automatic email reminders (cron every 15 min)
- ✓Comprehensive activity log with role-based visibility
- ✓CSV import/export for leads and customers
- ✓Web-to-lead forms (embed on any website)
- ✓Reports: revenue by month, expenses by category, sales by employee
- ✓Password reset flow (email-based, secure token)
- ✓Team invites with role assignment
- ✓Duplicate detection on lead entry (by phone/email)
- ✓Custom fields per entity (text, number, date, select)
- ✓Fully mobile-optimized (drawer sidebar, touch drag)
- ✓Multi-tenant data isolation (JWT sessions, bcrypt)
- ✓SEO-ready (metadata, robots.txt, sitemap.xml, dofollow)
Tech stack
Install guide
Requirements
- Node.js 20 or later
- PostgreSQL 14 or later
- Any SMTP server (Postfix works out of the box)
- A domain (used for license activation)
- Optional: Stripe account (only if you want online payments — invoicing works fine without it)
Install steps
1. Extract the ZIP
Unzip the package to your server, e.g. /var/www/mycrm.
2. Configure environment
Copy the example file and fill it in:
```bash
cp .env.example .env
```
Then edit .env and set:
DATABASE_URL— your Postgres connection string, e.g.postgresql://user:pass@localhost:5432/mycrmSESSION_SECRET— a random 32-byte hex string (generate withopenssl rand -hex 32)PUBLIC_BASE_URL— your production domain, e.g.https://crm.example.comLICENSE_KEY— copy from your buyer account after purchaseSMTP_HOST,SMTP_PORT,EMAIL_FROM— your mail server settings
3. Install dependencies
```bash
npm install
```
4. Create the database schema
```bash
npx prisma db push
```
5. Build and start
```bash
npm run build
npm run start
```
By default the app listens on port 3192. Put nginx in front and add a Let's Encrypt SSL cert.
6. Set up the reminder cron
Add this crontab entry so task reminders send every 15 minutes:
```
/15 * cd /var/www/mycrm && node scripts/send-reminders.mjs >> /var/log/mycrm-reminders.log 2>&1
```
7. License activation
On the first request, the app POSTs your LICENSE_KEY + PUBLIC_BASE_URL to hades.ae to activate. From that point on, this license is bound to that domain.
For full details see LICENSE-README.md inside the ZIP.
---
Stuck? Get free installation help via WhatsApp or email — 30 days of support is included with every purchase.