About Services Consulting Workshop Events Work Blog Links Contact 🇵🇦 Español Book 10 free minutes →
← All resources Skill

How to build your own CRM for your business, step by step

Building an app with AI in an afternoon is easy. Keeping it from breaking on day 30, when the second salesperson joins, is not. Here is how to do it right.

How to build your own CRM for your business, step by step

Free, in exchange for knowing who you are

Download it free

You get the whole thing at no cost. I only ask for your email so I can write later and ask how it went: if something did not work for you, I want to know. No spam.

One confirmation email and that is it. You can leave whenever you want.

Why apps built in a rush break

Today anyone can build an app with AI in an afternoon, and in the demo it works. The trouble comes on day 30: when the second salesperson joins and sees the first one's entire pipeline, when someone deletes what they should not and there is no way back, or when the URL reaches someone it should not.

It is almost always the same things:

  • An API without authentication. The login exists on screen, but the routes answer anyone who knows the address.
  • Keys in the frontend. A service key ends up in the JavaScript the browser downloads, and someone uses it in your name.
  • SQL built by pasting text together. Someone types something odd into the search box and sees other people's data.
  • Roles that only hide buttons. The server answers everyone the same way.
  • No validation and no backups. The first odd piece of data throws an error, and the first mass delete cannot be undone.
  • Everything in one 2,000-line file where every change breaks something else, and no error handling: a blank screen and half-saved data.

The difference between "AI made me an app" and an app built the right way lies in those rules, not on the screen. This skill comes with them built in.

What the skill builds

Your CRM, shaped to your business: contacts, a kanban pipeline, notes, tasks and users with roles. All of it on a single Cloudflare Worker with the API at /api, a D1 database, a React app with Vite and Tailwind served by that same Worker and, later, R2 for files. One command to deploy, one URL and no server to maintain.

The path is an MVP in 90 minutes, in eight steps. Each one ends working, tested and saved with a git commit, plus a one-minute test script for you: "open this, tap that, you should see this other thing".

  1. Discovery. What it replaces, who uses it, the real stages of your pipeline and what you want to see every Monday. Out comes the CRM brief, saved in CLAUDE.md so any future Claude Code session knows what was decided.
  2. Data model, explained as connected spreadsheets. Money is stored in cents so totals never come out as 99.99, and nothing is truly deleted: it gets marked as deleted and can be recovered.
  3. Skeleton: the project, the local database and a layout that already works on a phone, with a sidebar on desktop and a bottom bar on mobile.
  4. Secure access: passwords stored as hashes, the session in a cookie no script on the page can read, a cap on login attempts and the admin and salesperson roles decided on the server.
  5. Contacts and notes: search that finds "José" even if you type "jose", filters, a timeline and delete with undo.
  6. Pipeline: one column per stage with count and total value. You move cards by dragging them or with a menu that works on a phone and with the keyboard.
  7. Tasks and search: overdue, today and upcoming, plus a global search.
  8. Review and deploy: the list of why apps break, point by point, the app verified in production and the first backup.

Design for something you open twenty times a day

A CRM gets opened twenty times a day, often from a phone and in a hurry. The goal is not to look pretty in a screenshot: it is that logging a call takes ten seconds and that you understand your pipeline at a glance.

The skill brings design tokens with dark mode, your brand color as the only accent, thought-out states (loading, empty, error, no permission), confirmation before deleting, accessible contrast and thumb-sized buttons. And it avoids what gives away a generic app: purple gradients, the default Tailwind palette, emojis as icons and cards inside cards.

So you do not start from a blank page, it also includes a reference dashboard built on the patterns of xytask.com, the operations platform we built on the same Cloudflare stack: navigation by module, tables with status, kanban, list and day views, and user management with roles.

Step 1. Install the skill

You need Node.js 22 LTS or newer, git (every step gets saved with a commit) and a Cloudflare account.

Download the file, unzip it and copy the folder into your skills:

~/.claude/skills/crm-propio/

On Windows it is C:\Users\YOUR-USERNAME\.claude\skills\, with SKILL.md directly inside the folder. The skill is written in Spanish; Claude reads it without trouble and works with you in English.

An honest note before you start: for a CRM with a login in production I recommend the Workers Paid plan (US$5 a month per account). The free plan caps CPU at 10 ms per request, and storing passwords safely takes about twice that, so the login can fail with error 1102. If you stay on the free plan for now, the skill has a temporary setup, for test data only, and explains what it costs you in security.

Step 2. Paste this first prompt

Open Claude Code in an empty folder and paste something like this, with your own business details:

Use the crm-propio skill. I want to build the CRM for my business.

My business: a real estate agency in Panama City, it is me and 3 agents.
What I use today: a spreadsheet with name, phone, property of interest, budget, status and notes.
What hurts the most: we forget to follow up and I do not know how much money is left to close.
Who uses it: me as the administrator and the agents, almost always from their phones.
What I want to see every Monday: the money in each stage and overdue tasks per agent.

Start with discovery: ask me whatever is missing, two or three questions at a time.
Then show me the CRM brief and the step by step plan. Do not write code until I say
"go ahead". Explain each decision in one simple sentence and ask my permission before
touching my Cloudflare account.

While you build, use invented test data. Never paste real client data into the chat.

What you get at the end

The MVP is ready when it passes this list, and the skill has you test it:

  • The app opens at your workers.dev URL and works on a phone without zooming.
  • Without a session, the API answers 401: nobody reads your client list just by knowing the address.
  • The admin and two salespeople can sign in, and one salesperson cannot see the other's records, not even by changing the number in the URL.
  • Every stage change shows up in the contact's timeline.
  • Search works with or without accents, and deleting asks for confirmation and can be undone.
  • There is an exported backup stored outside the project folder.

After the MVP, the skill includes ready-made prompts to keep going: CSV import, a WhatsApp button, message templates, reports, CSV export, attachments, a daily email summary and custom fields for your business. And when you want Claude to query your CRM directly, the next step is building an MCP server.

Common mistakes

  • "It works locally." Everything passes on your computer and the login fails in production: production rejects password hashing above 100,000 iterations while local does not, or the migration was applied locally and not remotely. That is why production gets verified after every deploy.
  • You open an API route and get the app back. The single page application setting catches everything; the API has to go first.
  • A big import blows up. D1 accepts 100 parameters per query and 50 queries per invocation on the free plan: you import in batches.
  • You deployed, it went down and the rollback does not fix it. wrangler rollback brings back the code, not the data. That is why migrations only add; old columns get cleaned up weeks later.
  • The CRM stops responding one day with nothing changed. Free daily quotas belong to the whole account, and another project can use them up. They reset at 00:00 UTC, which is 7:00 p.m. in Panama.

Who it is for

Business owners with a team that follows up with clients: a real estate agency, a clinic, an agency, a consulting firm. People tired of the shared spreadsheet everyone touches and nobody updates. And anyone who already built an app with AI and wants to check it against the fifteen reasons apps break: that list alone is worth the download.

It is not for someone who wants it to build itself. You decide, test and approve every step; Claude builds, explains and verifies. That is how it gets done right.

If you would rather do it with someone

The in-person workshop has a whole block for this: how an app is structured inside, why the ones built without thinking break, and you set up your own. If you need a CRM or an internal app for your company, book a conversation and we will look at it with your operation in hand.

Free, in exchange for knowing who you are

Download it free

You get the whole thing at no cost. I only ask for your email so I can write later and ask how it went: if something did not work for you, I want to know. No spam.

One confirmation email and that is it. You can leave whenever you want.

Stuck on a step?

Write me and we look at it

The resource takes you from zero to a hundred on its own, but some steps land better in a conversation. If you got that far and something is off, send me your site and I will tell you what is going on.

Book a call →

CRM · Internal app · Security · Cloudflare · Claude Code