The task
SHIFT>_CRM is a CRM system for businesses of any kind with a separate installation for every client.
Universal CRMs fit everyone a little and no one completely. They are designed for an "average" company, so businesses have to bend their processes to someone else's logic, put up with features they don't need and do without the ones they do, while the data of every client sits with a single provider. The goal of the project was to build a CRM that works exactly the way a particular company's business works. Each company gets its own independent copy on a separate server, with its own database and its own address, configured around its processes: employees, access rights, stages of client work, reference lists, custom fields and even the terms the team is used to. As a result, the company gets a system that no large universal CRM can match, because those were never built for it.
All client work happens in the CRM: a client card with multiple contact persons, comments and files, status changes right in the card, payments in different currencies, a sales pipeline, reminders and notifications. Analytics show the picture both for clients and for each employee: deals, conversion, payments, calls and overdue tasks. Leads from the website and from Facebook Lead Ads automatically become new clients, and repeat inquiries are recognized. The built-in phone lets employees make and take calls right in the browser, and every conversation is added to the client's history. For communication within the team there is a messenger with one-to-one chats, voice messages, replies and instant delivery.
A separate part of the system is artificial intelligence. The AI assistant answers managers' questions about the database, such as who they should call today, while seeing only the data the employee has access to and never changing anything on its own. A company can run its own Qwen model on its server or connect ChatGPT, Claude, Gemini and DeepSeek with an API key; the administrator chooses the main service and decides who can use which one. A company description for the AI can be uploaded from a Word or PDF file, and in learning mode the AI gradually collects general notes about the company without storing clients' personal data. Every night the AI reviews changes across clients and by six in the morning prepares a daily plan for every employee. Comments can be dictated by voice and are turned into text automatically.
Security received special attention. Passwords are stored as Argon2id hashes, sessions live in secure cookies, and two-factor authentication via an authenticator app is available. Permissions are enforced on the server, data is additionally protected with row-level security in the database, and every action is written to an append-only audit log. There is automatic logout after inactivity and a daily logout of all employees at a set time, keys for external services are encrypted, backups are created automatically and encrypted as well, and the site runs over HTTPS only. The interface is translated into 11 languages, with several color themes and a demo version with a fictional company for client presentations.
The project is written entirely in TypeScript. The interface is built with React 19 and React Router on a custom design system, and the server with Node.js and Fastify on a PostgreSQL database, with queries via Kysely and data validation via Zod. Live updates are delivered through Server-Sent Events and PostgreSQL notifications, and telephony runs on WebRTC and JsSIP and has been tested with Asterisk. The AI features use the OpenAI API, the Anthropic SDK and Ollama. The system is deployed on an Ubuntu VPS with Docker Compose, and Caddy issues HTTPS certificates automatically. Key scenarios are covered by automated tests.
The result is a product the client never has to bend to: a CRM with telephony, a messenger and an AI assistant that runs on the client's own server and, from day one, works the way their business works.








