Blog/Artificial intelligence
Artificial intelligence·22 min read·September 20, 2026

How to build your own custom CRM with vibe coding (step-by-step guide)

A web CRM of your own (companies, contacts, deals, activities), installed on your phone, without knowing how to code: the 11 phases, the tools, the tables, the prompts for Claude, security and troubleshooting.

Mathieu Morin-Lamy

Co-founder, Oriana Solutions Inc.

Yes, you can build your own CRM without knowing how to code: with vibe coding (describing what you want in plain language and letting an AI like Claude write the code), you can build a complete web CRM (companies, contacts, deals, activities), put it online at your own address and install it on your phone: it is a progressive web app (PWA), so it is also easily accessible from a mobile phone, like a real app, with no App Store. According to the internal guide we use at Oriana Solutions, a working first version takes 2 to 4 evenings and $0 to start, thanks to the free plans of GitHub, Vercel and Supabase.

This article follows that 60-step guide: the tools, the 11 phases in order, the five tables, the prompts to give Claude, the security rules, troubleshooting and, above all, the cases where you are better off hiring a developer. Nothing is magic: vibe coding replaces typing the code, not rigor.

Architecture of a CRM built with vibe coding: VS Code and Claude write the code, GitHub keeps the history, Vercel hosts the site, Supabase stores the data, and the CRM opens in the browser or installs on the phone

Quick answer

To build a custom CRM with vibe coding: 1) open GitHub, Vercel, Supabase and Claude accounts; 2) create a Next.js project; 3) set up the five tables (companies, contacts, deals, activities, profiles) in Supabase; 4) ask Claude for the pages and features one by one; 5) protect access (login, middleware and RLS rules); 6) publish on Vercel, connect your domain and install the CRM on your mobile phone: it is a progressive web app (PWA), accessible anywhere with no App Store. Plan on 2 to 4 evenings for a first version.

Summary: the answers in 30 seconds

The answers to the most common questions about custom CRMs and vibe coding, before the details:

  • ✓Can you build a CRM without knowing how to code? Yes, for a first internal version: vibe coding replaces typing the code, not rigor.
  • ✓How long does it take? 2 to 4 evenings for a working first version, according to Oriana Solutions' internal guide.
  • ✓How much does it cost? $0 to start, thanks to the free plans of GitHub, Vercel and Supabase. Then plan for a paid Claude account (recommended), a domain name and, later, Supabase's paid plan.
  • ✓What tools do you need? Visual Studio Code, Next.js, Supabase, GitHub, Vercel and Claude.
  • ✓Which tables do you need? Five: companies, contacts, deals, activities and profiles.
  • ✓Is it accessible on a mobile phone? Yes: it is a progressive web app (PWA), which installs on iPhone and Android with no App Store.
  • ✓Is it secure? It can be, with mandatory login, middleware, Supabase's RLS rules, protected secret keys and backups.
  • ✓Custom, or Zoho, Odoo, Salesforce, Pipedrive, HubSpot? A subscription suits a standard process; custom pays off when your processes are specific, the team grows or you want to plug in AI. For 5 salespeople, a custom MVP CRM pays for itself in under a year against HubSpot Professional or Salesforce Pro Suite.
  • ✓When should you hire a developer? When the data is sensitive, integrations are needed, permissions are fine-grained, there are many users or nobody can maintain the tool.

What is vibe coding and why use it for a CRM?

Vibe coding means describing in natural language what you want to build and letting an AI generate the code, which you test, fix and improve by talking to it. The term became popular in 2025.

A CRM (Customer Relationship Management) is an ideal candidate, for three reasons. Its structure is simple and predictable: companies, contacts, deals (sales in progress) and activity notes. Its screens are classic: lists, forms, a dashboard and a pipeline. And its needs are specific to each business, which often makes off-the-shelf tools too heavy or poorly fitted.

For an overview of vibe coding tools and their limits, see our comparison Best vibe coding and no-code tools in 2026.

Can you really build a custom CRM without knowing how to code?

Yes, for a first internal version, as long as you follow the steps in order and check each result before moving on. The guide starts from a computer, an internet connection and an email address: no programming experience is required. The golden rule is to do one step at a time, without skipping any, even when it looks obvious.

What you get at the end: a web CRM protected by login, with lists and records for companies, contacts and deals, a pipeline by stage, a dashboard, an activity log and an app installable on your phone. What you do not get by default: advanced integrations (email, billing, calendar), fine-grained role management and technical support. More on that below.

Vibe-coded CRM (this guide)Off-the-shelf CRMCRM built by a firm
Starting cost$0 to start (free plans)Subscription, often per userDevelopment budget
Time to a first version2 to 4 eveningsConfiguring the toolDepends on project scope
Fit with how you sellTotal: you decide every fieldLimited to the tool's optionsTotal, designed with you
Ownership of code and dataYou own everythingWith the vendorYou own the code
Mobile accessProgressive web app (PWA): installs on the phone, no App StoreMobile app or browser, depending on the vendorDepends on the project
Effort and responsibilityHigh: you maintain and secure itLowHandled by the team
Best forSmall team, precise need, tight budgetStandard need, fast-growing teamComplex needs, integrations, compliance

Qualitative comparison. To choose between an off-the-shelf and a custom CRM, read [Salesforce or custom CRM](/blogue/salesforce-ou-crm-sur-mesure) and [Which CRM should a Quebec business choose](/blogue/quel-crm-choisir-entreprise-quebec).

What tools do you need to build a CRM with AI?

Six tools are enough, and all have a free plan or free version, except Claude, where a paid account is recommended if you want to use Claude Code directly in the editor, which avoids copy-pasting. Check each plan's current terms before you start, they change.

ToolIts role in the projectCost to start
ClaudeWrites most of the code from your requestsPaid account recommended for Claude Code
Visual Studio CodeThe editor where you see and edit filesFree
Next.js, TypeScript and TailwindThe site framework, code safety and stylingFree
SupabaseThe database, user login and security rulesFree plan enough for an internal CRM, according to the guide
GitHubKeeps the code history and lets you go backFree plan
VercelHosts the site online and redeploys on every code pushFree plan
Node.js and GitRun the site on your computer and save versionsFree

The domain name (for example crm.yourcompany.ca) is paid separately to your registrar.

How do you build your CRM in 11 phases?

The guide splits the project into 11 phases and 60 steps. Each phase ends with a verifiable result, so you know whether you can move on to the next.

  • ✓Phase 1: create the accounts and install the tools (steps 1 to 8).
  • ✓Phase 2: create the Next.js project in TypeScript (steps 9 to 17).
  • ✓Phase 3: save the code on GitHub (steps 18 to 23).
  • ✓Phase 4: set up the Supabase database (steps 24 to 28).
  • ✓Phase 5: connect the site to the database (steps 29 to 33).
  • ✓Phase 6: handle user login (steps 34 to 38).
  • ✓Phase 7: build the CRM features (steps 39 to 44).
  • ✓Phase 8: go live on Vercel (steps 45 to 49).
  • ✓Phase 9: connect your domain (steps 50 to 52).
  • ✓Phase 10: turn the site into an installable app (steps 53 to 57).
  • ✓Phase 11: maintain the CRM (steps 58 to 60).

Phase 1: how do you create the accounts and install the tools?

First create a GitHub account, then a Vercel account and a Supabase account by choosing 'Continue with GitHub': it saves you one more password and already links the services. Also open a Claude account.

Then install Visual Studio Code, Node.js (take the LTS version, the recommended one, not 'Current') and Git. Open the VS Code terminal (Terminal menu, then New Terminal) and type 'node -v', 'npm -v' and 'git --version': three version numbers should appear. If a command answers 'command not found', close and reopen VS Code, or reinstall the tool.

Phase 2: how do you create the Next.js project?

Create a working folder called Projects in your documents, avoiding the desktop and especially folders synced by OneDrive or iCloud, which cause hard-to-understand bugs. Point the terminal at that folder, then run a single command that creates the whole site skeleton: 'npx create-next-app@latest crm-oriana --typescript --tailwind --eslint --app'. Answer Yes to the questions.

Enter the project folder with 'cd crm-oriana' (forgetting this is one of the most common mistakes), start the site with 'npm run dev' and open http://localhost:3000. 'Local' means on your computer only. To stop the server, press Ctrl+C (Ctrl even on Mac). Finally edit a first line in app/page.tsx to live the full work loop: edit, save, see the result.

Phase 3: how do you save your code on GitHub?

First make sure the .gitignore file contains the line '.env*.local'. Without it, your secret keys end up public on GitHub: it is the number one beginner mistake, and it is costly.

Then make a first commit (a snapshot of your code at a precise moment) with 'git add .', 'git commit -m 'first commit'' and 'git branch -M main'. On GitHub, create a Private repository named crm-oriana without ticking 'Add a README', then link your project with 'git remote add origin' followed by the repository address and 'git push -u origin main'. Then get into the habit of saving after each block of work: 'git add . && git commit -m 'added deals page' && git push'.

Phase 4: how do you set up the Supabase database?

In Supabase, click New project, name it crm-oriana and pick the closest region (East US or Canada Central). Generate a database password and keep it in your password manager: it is never shown again.

Then open the SQL Editor, paste the SQL block that creates the five tables and enables security, and click Run. Check in the Table Editor that you see entreprises, contacts, affaires, activites and profils, then add a test company and a test deal by hand. Finally copy, in Project Settings then API, the Project URL and the anon public key. The service_role key gives full access to the database: it must never end up in code visible to the browser.

The full SQL for the five tables, with RLS security, is below: copy it all into the SQL Editor, then click Run.

SQL for the five tables (paste into Supabase's SQL Editor)
-- Entreprises
create table entreprises (
  id uuid primary key default gen_random_uuid(),
  nom text not null,
  secteur text,
  site_web text,
  cree_le timestamptz default now()
);

-- Contacts
create table contacts (
  id uuid primary key default gen_random_uuid(),
  entreprise_id uuid references entreprises(id) on delete set null,
  prenom text,
  nom text not null,
  courriel text,
  telephone text,
  poste text,
  cree_le timestamptz default now()
);

-- Affaires
create table affaires (
  id uuid primary key default gen_random_uuid(),
  titre text not null,
  entreprise_id uuid references entreprises(id) on delete set null,
  contact_id uuid references contacts(id) on delete set null,
  valeur numeric(12,2) default 0,
  etape text default 'Nouveau',
  probabilite int default 0,
  date_cloture_prevue date,
  cree_le timestamptz default now()
);

-- Activités
create table activites (
  id uuid primary key default gen_random_uuid(),
  affaire_id uuid references affaires(id) on delete cascade,
  contact_id uuid references contacts(id) on delete set null,
  type text,
  note text,
  date_activite timestamptz default now()
);

-- Profils des utilisateurs
create table profils (
  id uuid primary key references auth.users(id) on delete cascade,
  nom text,
  role text default 'membre'
);

-- Sécurité : personne ne lit la base sans être connecté
alter table entreprises enable row level security;
alter table contacts enable row level security;
alter table affaires enable row level security;
alter table activites enable row level security;
alter table profils enable row level security;

create policy "acces membres" on entreprises for all to authenticated using (true) with check (true);
create policy "acces membres" on contacts for all to authenticated using (true) with check (true);
create policy "acces membres" on affaires for all to authenticated using (true) with check (true);
create policy "acces membres" on activites for all to authenticated using (true) with check (true);
create policy "profil personnel" on profils for all to authenticated using (auth.uid() = id) with check (auth.uid() = id);

Phase 5: how do you connect the site to the database?

Stop the server, install the libraries with 'npm install @supabase/supabase-js @supabase/ssr', then create at the root a file named exactly .env.local (with the dot) that holds your URL and anon key. Next.js only reads this file at startup: after any change, stop and restart the server, or you will hunt for the problem for an hour.

Then ask Claude for the lib/supabase.ts file, the bridge between your site and the database, and then the app/affaires/page.tsx page. In Next.js, a folder inside app automatically becomes an address: the affaires folder gives /affaires. When the test deal shows up, it is the first real moment of satisfaction in the project.

Example contents of the .env.local file (no spaces around the equals sign, no quotes, one variable per line). Variables that start with NEXT_PUBLIC are visible in the browser: that is normal for these two, since security is ensured by the RLS rules in Supabase.

.env.local (example: replace with your real values)
NEXT_PUBLIC_SUPABASE_URL=https://abcdefgh.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6...

Phase 6: how do you handle user login?

In Supabase, check that the Email provider is active under Authentication, then create your administrator user (Authentication, Users, Add user). The guide suggests turning off 'Confirm email' during development so you do not have to confirm every test account.

Then ask Claude for the login page app/login/page.tsx, specifying that you use the App Router and @supabase/ssr, otherwise you may get code for an older structure. Add the middleware.ts file, which checks on every visit whether the person is logged in and sends them to /login otherwise: without it, anyone with the address sees your customer data. The test is simple: in a private window, /affaires must redirect to /login.

Phase 7: how do you build the CRM features?

Build in this order, testing each feature before the next: the contact list, a creation form (start with deals, the heart of a CRM), editing and deleting, the pipeline stages, the dashboard and the activity log.

The pipeline uses five stages: New, Contacted, Proposal, Won, Lost. Show them as kanban-style columns, or with a simple filter to start: the filter is faster to build and often enough. The dashboard shows the number of open deals, the total pipeline value and the deals won this month. The activity log, on a deal's record, lets you note a call, an email or a meeting: this is precisely what sets a CRM apart from a simple spreadsheet.

Mockup of the deals pipeline (fictional data) in columns: Qualified, Demo done, Proposal sent, Negotiation, Contract signed and Won deals

Phase 8: how do you put your CRM online on Vercel?

On Vercel, click Add New then Project, import the crm-oriana repository and, before clicking Deploy, add in Environment Variables the same variables as in .env.local. Your .env.local file is not on GitHub, so Vercel cannot see it: forgetting this is the number one cause of failed deployments.

After one to three minutes, a .vercel.app address works. Remember the difference: localhost:3000 runs on your computer, only while 'npm run dev' is active, and is for testing; the Vercel address runs on the internet 24 hours a day, and it is what your team sees. Both use the same Supabase database. Finally, every 'git push' to the main branch redeploys the site automatically.

Phase 9: how do you connect your own domain (crm.yourcompany.ca)?

In Vercel, open Settings then Domains and add your subdomain, for example crm.yourcompany.ca: Vercel shows the DNS record to create. At your registrar, in the DNS section, create a CNAME record with the name 'crm' and the value Vercel gives you (cname.vercel-dns.com). Depending on the registrar, the name field expects 'crm' alone or the full domain.

Propagation takes a few minutes to a few hours. Vercel moves the domain from Invalid Configuration to Valid by itself and installs the HTTPS certificate without you doing anything: the site then opens with the security padlock.

Phase 10: how do you turn your CRM into an installable app (PWA)?

A Progressive Web App (PWA) is a site that installs like an app: an icon on the phone or desktop, full-screen display, no address bar. There is no App Store, no approval and no separate version to maintain. That is what makes your CRM easily accessible from a mobile phone: your salespeople use it in meetings or on the road, like any app.

Create two square PNG images of your logo (192 and 512 pixels) in the public folder, then ask Claude for the app/manifest.ts file, which Next.js serves automatically. On iPhone, open the site in Safari, tap Share then 'Add to Home Screen'. On Android, Chrome offers Install app. Offline mode, optional, relies on a service worker (the Serwist library): only add it once everything else is stable, because caching complicates debugging.

Phase 11: how do you maintain your CRM?

Three habits are enough. Take backups: in Supabase (Database, then Backups), download a manual export every month on the free plan and keep it somewhere other than Supabase. Watch the free project: according to the guide, a free project pauses after a week without activity, and the Restore project button brings it back without losing data; move to the paid plan as soon as the CRM becomes essential to the business. Work in small improvements: one change at a time, test locally, commit, push. If a release breaks something, the Deployments tab in Vercel lets you go back to the previous version in one click with Rollback.

Which tables does a CRM need?

A basic CRM fits in five tables, created all at once in Supabase: companies, contacts, deals, activities and profiles. The relationships are simple: a company has several contacts and several deals, and a deal has several activities.

Diagram of a CRM's five tables: companies, contacts, deals, activities and profiles, with their main columns and relationships
TableWhat it holdsMain columns
entreprisesThe organizations you do business withnom, secteur, site_web, cree_le
contactsPeople, linked to a companyprenom, nom, courriel, telephone, poste
affairesSales in progress, linked to a company and a contacttitre, valeur, etape, probabilite, date_cloture_prevue
activitesThe log: calls, emails, meetingstype, note, date_activite
profilsThe CRM's users and their rolenom, role (member by default)

The SQL also enables RLS security on all five tables. Ask Claude to generate the SQL code matching this schema. The column names above are French because the guide's SQL uses them.

What prompts should you give Claude to write the CRM code?

A good prompt states your technology, asks for one file at a time and says where to paste it. Four habits change everything: always say you use Next.js with App Router, TypeScript, Tailwind and Supabase; ask for one file at a time and the exact place to paste it; when it does not work, paste the full error message instead of summarizing it; and once comfortable, use Claude Code in VS Code, which edits the files directly.

StepWhat to ask ClaudeWhat to check next
Supabase clientWrite me the lib/supabase.ts file for a Next.js project with App Router and TypeScript, using @supabase/ssr. I want separate browser and server clients. Explain where to paste each block.No red underline in VS Code
Deals pageCreate app/affaires/page.tsx in Next.js App Router and TypeScript. The page reads the affaires table in Supabase and shows title, company, value and stage in a clean Tailwind table. Handle the empty-list case.The /affaires page shows the test deal
Login pageCreate app/login/page.tsx with email, password and a button, using Supabase's signInWithPassword. Show the error if login fails and redirect to /affaires if it succeeds.A wrong combination shows a clear error
Page protectionWrite the middleware.ts file that protects all pages except /login, with @supabase/ssr for Next.js App Router. Explain it line by line.In a private window, /affaires redirects to /login
Creation formAdd a deal creation form: title, company chosen from a dropdown, value, stage and expected close date. Save to Supabase and refresh the list after adding.The created deal also appears in Supabase
DashboardCreate the CRM home page with three indicators: number of open deals, total pipeline value, deals won this month. Compute everything server-side.The numbers match the real data
PWA manifestCreate app/manifest.ts to turn my Next.js site into an installable PWA. Name CRM Oriana, standalone mode, 192 and 512 icons already in public./manifest.webmanifest returns JSON
TroubleshootingPaste the full terminal error message, then write: here is my error, explain in plain English what is wrong and how to fix it.Apply one fix at a time, then retest

Replace 'CRM Oriana' with the name of your CRM.

How do you secure a CRM built with AI?

A CRM holds customer data: security is not optional, even for an internal tool. Code written by an AI must be reviewed, tested and secured like any other. Here are the protections the guide requires, in the order they appear.

  • ✓Ignore .env.local in Git: the .env*.local line in .gitignore keeps your keys from ending up public on GitHub.
  • ✓Keep the service_role key secret: it gives full access to the database and must never end up in code visible to the browser.
  • ✓Require login: the middleware.ts file sends anyone not logged in to /login.
  • ✓Enable RLS rules (Row Level Security): the database itself refuses any request that does not come from a logged-in user. It is a second barrier, never to be disabled in production.
  • ✓Protect the database password: store it in a password manager, because it is never shown again.
  • ✓Back up every month: export the database outside Supabase.

If your keys end up on GitHub

If the .env*.local line was missing from .gitignore and you pushed your keys, regenerate them immediately in Supabase, fix .gitignore, then push the code again. Also keep Quebec's Law 25 in mind: a CRM holds personal information, which calls for clear privacy rules. Our Law 25 compliance scan lets you do a first pass.

What are the common errors and how do you fix them?

Most blockers in the project have a known cause and a quick fix. Here are the eight most frequent symptoms from the guide.

SymptomLikely causeFix
command not found: npmNode.js is not installed, or the terminal was opened before installationClose and reopen VS Code entirely; otherwise reinstall the Node.js LTS version
The site does not open on localhost:3000The server is not started, or the port is already takenCheck that npm run dev is running and look at the exact address shown (it may be port 3001)
EADDRINUSE errorAn old server is still running in the backgroundClose other terminals, or use the port Next.js displays
No data shows upRLS blocks the request because nobody is logged inLog in via /login; check the policies in Supabase, Authentication, Policies
Invalid API keyKey badly copied, extra space, or server not restartedCopy the key in full again, then Ctrl+C and npm run dev
Works locally but not on VercelThe environment variables were not added in VercelAdd them in Settings, Environment Variables, then Redeploy
Deployment fails (Build failed)A TypeScript error that does not show in development modeRun npm run build locally to see the same error, fix it, then push again
The domain stays Invalid ConfigurationThe CNAME has not propagated yet, or is misspelledWait a few hours; check whether your registrar expects 'crm' or the full domain

How much time and money should you plan for?

Plan on 2 to 4 evenings for a working first version and $0 to start, since GitHub, Vercel and Supabase each offer a free plan the guide considers enough for an internal CRM. That is a starting point, not a total cost.

Some expenses come later: a paid Claude account if you want to use Claude Code in the editor, the domain name at your registrar, and the move to Supabase's paid plan as soon as the CRM becomes essential (a free project pauses after a week without activity). You also need to count your maintenance time, which appears on no invoice. To compare with professional development, see How much does custom software cost.

What can you add to your CRM with AI? Two examples at Oriana

A custom CRM becomes really interesting once you plug AI into it. At Oriana Solutions, we use our own CRM, built with this guide's method, and we added two tools to it.

An integration with Claude's API that reads and creates our service offers. Writing a service offer used to take us about 1 hour. It now takes about 5 minutes.

An AI agent that gives us our 3 priorities of the day. Instead of hunting for what to handle first, we open the dashboard and the agent tells us the three actions for the day.

These two examples are only possible because we own the CRM: we decide its data and its features, without waiting for a vendor to offer them and without paying for a higher plan.

Mockup of a CRM dashboard (fictional data) with the month's signed contracts, open pipeline, win rate, projects in progress, the 3 priorities of the day given by an AI agent and recent activity

Mockups with fictional data

The screens in this article are recreated from our CRM with fictional data (invented names, companies and amounts), to protect our clients.

Custom, Zoho, Odoo, Salesforce, Pipedrive or HubSpot: which should you choose?

Custom is the only model where you own the code and the data, with no per-user license. Zoho, Odoo, Salesforce, Pipedrive and HubSpot are per-user subscriptions: they start fast and offer many ready-made integrations. The right choice depends on team size, how specific your processes are and how much maintenance you are willing to take on.

Custom (Oriana)Zoho CRMOdooSalesforcePipedriveHubSpot
Pricing modelOne-time investment, then hostingPer-user subscriptionPer-user subscription (all apps included)Per-user subscriptionPer-user subscriptionPer-seat subscription
Entry plan (per user per month, billed annually)MVP from CA$5,000, one timeUS$14 (Standard)*CA$44.20 (Standard)US$25 (Starter Suite)CA$19 (Lite)US$7 annual, US$20 monthly (Starter)
Typical mid-tier planModules added as you need themUS$23 (Professional)*CA$44.20 (same Standard plan)US$100 (Pro Suite)CA$49 (Growth)US$90 (Professional), plus US$1,500 onboarding
Advanced planFull CRM: CA$10,000 to CA$40,000, one timeUS$40 (Enterprise)*CA$68.50 (Custom)US$195 (Core)CA$79 (Premium)US$150 (Enterprise), plus US$3,500 onboarding
When the team growsNo per-user licenseThe bill grows with every userThe bill grows with every userThe bill grows with every userThe bill grows with every userThe bill grows with every seat
CustomizationTotal: fields, screens, rules and automations your wayHigh, depending on the planHigh, through modulesVery high, often with an administratorMediumMedium to high, depending on the plan
Ownership of code and dataYou own everything, hosted where you decide (for example in Canada)With the vendorWith the vendor, or self-hosted with the Community editionWith the vendorWith the vendorWith the vendor
AI integrationDirect: Claude or your own agents (service offers, daily priorities)Vendor AI features, depending on the planVendor AI features, depending on the planVendor AI features (Agentforce 1 Sales listed at $550)Vendor AI features, depending on the planVendor AI features, depending on the plan
Time to get startedMVP in 14 days, full CRM in 4 to 12 weeksA few days of setupA few days to a few weeksOften several weeksA few hours to a few daysA few days, more with Professional onboarding
Mobile accessPWA installable on iPhone and Android, no App StoreVendor's mobile appVendor's mobile appVendor's mobile appVendor's mobile appVendor's mobile app
Ready-made integrationsBuilt as you need themManyMany modules and connectorsVery wide ecosystemWide catalogWide catalog
MaintenanceYours, or handled by OrianaHandled by the vendorHandled by the vendor (online)Handled by the vendorHandled by the vendorHandled by the vendor
Main limitNeeds initial development and follow-upPer-user costPer-user cost, module complexityHigh cost on advanced plansAdvanced features depend on the planHigh cost of the Professional plan
Best forSpecific sales process, growing team, sensitive dataSmall teams on a tight budgetBusinesses that want a CRM and an ERP togetherLarge teams with a dedicated administratorSales teams centered on the pipelineTeams that combine marketing and sales

Public prices collected in September 2026 from Salesforce, HubSpot, Odoo and Pipedrive's official pages, in the currency displayed (US$ or CA$). *Zoho: prices consistent across several third-party comparisons (billed annually); the official page shows prices based on the visitor's location. Prices change often and exclude taxes and options. The qualitative ratings (customization, time to get started, ecosystem) are Oriana Solutions' own.

How much can a team of 5 salespeople save with a custom CRM?

It depends on the plan you compare with. For a team of 5 salespeople, a subscription costs US$1,380 to US$11,700 per year depending on the tool and plan, while a custom MVP CRM costs CA$5,000 once, plus hosting estimated at $30 a month, with no per-user license.

The calculation below uses public prices from September 2026, in the currency each vendor displays (US$ or CA$), and custom in Canadian dollars. Since the US dollar is usually worth more than the Canadian dollar, comparing the numbers as they are is cautious for US-dollar subscriptions. To adapt it to your team, multiply the number of salespeople by the per-user price, then by 12: that is your annual cost, to compare with a custom build's initial investment and hosting.

Option for 5 salespeopleCost per yearTotal over 3 yearsTotal over 5 years
Zoho CRM Professional (US$23 per user, billed annually)US$1,380US$4,140US$6,900
Odoo Standard (CA$44.20 per user)CA$2,652CA$7,956CA$13,260
Pipedrive Growth (CA$49 per user)CA$2,940CA$8,820CA$14,700
HubSpot Sales Hub Professional (US$90 per seat, plus US$1,500 onboarding)US$5,400US$17,700US$28,500
Salesforce Pro Suite (US$100 per user)US$6,000US$18,000US$30,000
Salesforce Core (US$195 per user)US$11,700US$35,100US$58,500
Custom MVP CRM (CA$5,000 once, plus CA$30 a month hosting)CA$360 after the first yearCA$6,080CA$6,800

Assumptions: 5 users, annual billing, no added users or modules, taxes, exchange rate and options excluded. Hosting is estimated at $30 a month (Oriana's offer says a few dozen dollars). Enhancements to the custom CRM are extra.

How to read these numbers

Against HubSpot Professional or Salesforce (Pro Suite or Core), a custom MVP CRM pays for itself in under a year, and the gap reaches about $11,600 to $29,000 over 3 years. Against Odoo Standard or Pipedrive Growth, it becomes cheaper after 3 years (a gap of about $1,900 to $2,700). Against Zoho Professional (US$23 per user), the subscription stays cheaper: custom then wins less on price than on fit with your processes and on ownership. And every salesperson you add raises a subscription's bill, not a custom CRM's.

What are the advantages of a custom CRM that you own?

A custom CRM belongs to you, and it adapts to your business rather than the other way around. Here is what that changes in practice.

  • ✓You own it: the code and the database are yours. No vendor can change its terms or raise its prices.
  • ✓It adapts to your business: your fields, your sales stages, your rules and your reports, not those of a generic tool.
  • ✓No per-user license: hiring a salesperson does not raise the software bill.
  • ✓It opens anywhere, including on a mobile phone: it is a progressive web app (PWA), which your salespeople install on their phone like an app, without going through an App Store.
  • ✓Your data stays where you decide, for example in Canada, which helps with Law 25 compliance.
  • ✓AI plugs straight in: service offers generated in minutes, daily priorities, and whatever you dream up next.
  • ✓It evolves in small steps, at the pace of your needs, without switching software.

How can Oriana Solutions help with your CRM?

You can follow this guide yourself, or hand us all or part of the project. We adapt the CRM to your business and your needs, whether you start from scratch or from a prototype.

  • ✓An MVP in 14 days at a fixed price, from $5,000: your pipeline, your client records and your process, ready to use.
  • ✓A full CRM, generally $10,000 to $40,000 depending on scope: automations, integrations and dashboards.
  • ✓Taking over your prototype built with vibe coding, to secure it and make it reliable.
  • ✓AI integration: service-offer generation, a daily-priorities agent and other automations.
  • ✓Hosting in Canada and attention to Law 25.

When is vibe coding enough for your CRM?

Vibe coding is enough when the need is precise, the team small and the data not very sensitive, and you accept maintaining the tool yourself.

  • ✓A small team tracking its sales and contacts.
  • ✓A well-defined need: companies, contacts, deals, notes.
  • ✓A tight budget or a need to validate an idea before investing.
  • ✓Someone with the time to learn, test and maintain.
  • ✓A prototype that professionals can take over later.

When should you hire a developer instead?

Hire a developer as soon as the CRM becomes critical to the business or more complex than its five tables. Vibe coding produces quickly, but it replaces neither architecture, nor testing, nor responsibility for security.

  • ✕Sensitive or regulated data (health, finance, personal information in volume), where a mistake is costly.
  • ✕Integrations with billing, email, calendar or other software.
  • ✕Fine-grained roles and permissions: who sees what, by team or by client.
  • ✕Many users or a need for reliability and round-the-clock support.
  • ✕Nobody to maintain the tool when it breaks or when needs change.

The right reflex

Use vibe coding to prototype and validate how you sell, then have professionals take the project over when it becomes essential. To choose the right person, read How to choose a custom software developer.

Action plan: your CRM in four evenings

This split is a suggestion from Oriana Solutions to fit the guide's 2 to 4 evening range. Adapt it to your pace.

  • ✓Evening 1: the foundations. Phases 1 to 3: accounts, tools, Next.js project, first commit on GitHub.
  • ✓Evening 2: the data. Phases 4 to 6: Supabase, five tables, user login, middleware and RLS.
  • ✓Evening 3: the features. Phases 7 and 8: contacts, deals, pipeline, dashboard, log, going live on Vercel.
  • ✓Evening 4: the finishing touches. Phases 9 to 11: domain, installable app, backups and work method.

Frequently asked questions about custom CRMs and vibe coding

01

What is vibe coding?

Vibe coding means describing in natural language what you want to build and letting an AI, like Claude, write the code. You then test the result, fix it and improve it by talking to the AI.

02

Can you build a CRM without knowing how to code?

Yes, for a first internal version. The guide starts from a computer, an internet connection and an email address, with no programming experience, as long as you follow the 60 steps in order and check each result.

03

How long does it take to build your CRM with AI?

According to the guide, a working first version takes 2 to 4 evenings if you follow the steps in order.

04

How much does building a CRM with vibe coding cost?

The starting point is $0, because GitHub, Vercel and Supabase each have a free plan enough for an internal CRM. Then plan for a paid Claude account (recommended), a domain name and, later, Supabase's paid plan.

05

What tools do you need to build a custom CRM?

Visual Studio Code to write, Next.js for the site, Supabase for the data, GitHub for the history, Vercel for hosting and Claude to write the code, with Node.js and Git installed on your computer.

06

Which tables does a CRM need?

Five tables are enough for a basic CRM: companies, contacts, deals, activities and profiles. A company has several contacts and several deals, and a deal has several activities.

07

Is a CRM built with AI secure?

It can be if you apply the guide's protections: ignore .env.local in Git, keep the service_role key secret, require login with middleware, enable RLS rules in Supabase and back up regularly. AI-generated code must always be reviewed and tested.

08

What is a progressive web app (PWA) and why is it useful for a CRM?

A progressive web app (PWA) is a site that installs like an app: an icon on the phone or desktop, full-screen display, no address bar. For a CRM, it means your team can easily use it from a mobile phone, in meetings or on the road, with no App Store, no approval and no separate version to maintain.

09

Can you install your CRM on a phone?

Yes, by turning it into a Progressive Web App (PWA). On iPhone, open the site in Safari and choose Share then 'Add to Home Screen'; on Android, Chrome offers Install app. No App Store is needed.

10

What happens if my free Supabase project pauses?

According to the guide, a free project pauses after a week without activity. Just click Restore project in the dashboard: the data is kept. Move to the paid plan as soon as the CRM becomes essential.

11

When is it better to hand your CRM to a developer?

When the data is sensitive, integrations are needed, permissions are fine-grained, the number of users is high or nobody can maintain the tool. Vibe coding works well for prototyping, then professionals can take the project over.

12

How much can a team of 5 salespeople save with a custom CRM?

Against HubSpot Sales Hub Professional or Salesforce Pro Suite, the gap reaches about $11,600 to $12,000 over 3 years for 5 salespeople, and a $5,000 custom MVP CRM pays for itself in under a year. Against Odoo Standard or Pipedrive Growth, custom becomes cheaper after 3 years; against Zoho Professional (US$23 per user), the subscription stays cheaper, and custom then wins on fit and ownership. Subscription prices change: check the official sites.

13

Custom CRM or Zoho, Odoo, Salesforce, Pipedrive, HubSpot: which should you choose?

Choose a subscription for a standard sales process, a fast start and ready-made integrations. Choose custom when your processes are specific, when the team is growing (no per-user license), when your data is sensitive or when you want to plug in AI directly.

Custom CRM

Would you rather have us build your CRM for you?

You have the prototype or only the idea: our team designs a custom CRM, secure and fitted to how you sell, without you having to maintain it.

  • ✓A CRM tailored to your sales process
  • ✓Security, backups and compliance handled for you
  • ✓Your existing prototype can be taken over

Sources and references

  1. 1.Salesforce official pricing (Canada) — Starter Suite US$25, Pro Suite US$100, Core US$195 per user per month (billed annually).
  2. 2.HubSpot Sales Hub official pricing — Starter US$7 (annual), Professional US$90 (annual) plus US$1,500 onboarding, Enterprise US$150 plus US$3,500 onboarding.
  3. 3.Odoo official pricing (Canada) — Standard CA$44.20 and Custom CA$68.50 per user per month, all apps included (billed annually).
  4. 4.Pipedrive official pricing (Canada) — Lite CA$19, Growth CA$49, Premium CA$79, Ultimate CA$109 per user per month (billed annually).
  5. 5.Zoho CRM pricing — US-dollar prices, billed annually, consistent across several third-party comparisons (Standard $14, Professional $23, Enterprise $40). The official page shows prices based on the visitor's location.
  6. 6.Oriana Solutions custom CRM offer — MVP in 14 days from $5,000, full CRM $10,000 to $40,000, hosting of a few dozen dollars a month.
  7. 7.Oriana Solutions internal guide — Building a CRM from A to Z: 60 steps, SQL annexes, variables, prompts and troubleshooting.
  8. 8.Next.js documentation — App Router, middleware.ts and manifest.ts.
  9. 9.Supabase documentation — Postgres, authentication, row-level security (RLS) and backups.
  10. 10.Vercel documentation — Deployment, environment variables, domains and rollback.
  11. 11.GitHub documentation — Private repositories and code history.
SPECIAL OFFERS

Your website in 7 days, your MVP in 14 days

Fixed price, all included. Only 3 new projects accepted per month.