A tarefa
O SHIFT>_CRM é um sistema CRM para empresas de qualquer setor com uma instalação separada para cada cliente.
Os CRM universais servem um pouco a todos, mas a ninguém por completo. São pensados para uma empresa «média», por isso cada negócio tem de adaptar os seus processos a uma lógica alheia, aceitar funções de que não precisa e passar sem as que lhe fazem falta, enquanto os dados de todos os clientes ficam guardados num único fornecedor. O objetivo do projeto era criar um CRM que funcione exatamente como funciona o negócio de cada empresa. Cada empresa recebe a sua própria cópia independente num servidor separado, com a sua base de dados e o seu endereço, configurada em torno dos seus processos: colaboradores, permissões de acesso, etapas do trabalho com clientes, listas de referência, campos personalizados e até os termos a que a equipa está habituada. Assim, a empresa obtém um sistema com o qual nenhum grande CRM universal consegue competir, porque nenhum foi criado para ela.
No CRM faz-se todo o trabalho com clientes: uma ficha de cliente com vários contactos, comentários e ficheiros, a mudança de estado diretamente na ficha, pagamentos em diferentes moedas, um funil de vendas, lembretes e notificações. As estatísticas mostram o panorama tanto por clientes como por cada colaborador: negócios, conversão, pagamentos, chamadas e tarefas em atraso. Os pedidos do site e do Facebook Lead Ads transformam-se automaticamente em novos clientes, e os pedidos repetidos são reconhecidos. O telefone integrado permite fazer e receber chamadas diretamente no navegador, e todas as conversas ficam no histórico do cliente. Para a comunicação dentro da equipa existe um chat com conversas individuais, mensagens de voz, respostas a mensagens e entrega instantânea.
Uma parte própria do sistema é a inteligência artificial. O assistente de IA responde às perguntas dos comerciais sobre a base de dados, por exemplo a quem convém ligar hoje, vendo apenas os dados a que o colaborador tem acesso e sem alterar nada por conta própria. A empresa pode usar o seu próprio modelo Qwen no seu servidor ou ligar o ChatGPT, Claude, Gemini e DeepSeek com uma chave de API; o administrador escolhe o serviço principal e decide quem pode usar cada um. A descrição da empresa para a IA pode ser carregada a partir de um ficheiro Word ou PDF, e no modo de aprendizagem a IA vai reunindo sozinha notas gerais sobre a empresa, sem guardar dados pessoais dos clientes. Todas as noites a IA analisa as alterações nos clientes e, até às seis da manhã, prepara um plano do dia para cada colaborador. Os comentários podem ser ditados por voz e são convertidos automaticamente em texto.
Foi dada especial atenção à segurança. As palavras-passe são guardadas como hashes Argon2id, as sessões em cookies protegidos, e está disponível a autenticação de dois fatores através de uma aplicação de autenticação. As permissões são verificadas pelo servidor, os dados estão ainda protegidos por segurança ao nível das linhas na base de dados e todas as ações ficam registadas num registo de auditoria que não pode ser alterado. Há saída automática por inatividade e saída diária de todos os colaboradores a uma hora definida, as chaves dos serviços externos são encriptadas, as cópias de segurança são criadas automaticamente e também encriptadas, e o site funciona apenas por HTTPS. A interface está traduzida para 11 idiomas, com vários temas de cores e uma versão de demonstração com uma empresa fictícia para apresentações a clientes.
O projeto foi escrito inteiramente em TypeScript. A interface foi construída com React 19 e React Router sobre um sistema de design próprio, e o servidor com Node.js e Fastify sobre uma base de dados PostgreSQL, com consultas através do Kysely e validação de dados com Zod. As atualizações em tempo real chegam através de Server-Sent Events e do mecanismo de notificações do PostgreSQL, e a telefonia funciona com WebRTC e JsSIP e foi testada com Asterisk. Para a IA são usados a API da OpenAI, o SDK da Anthropic e o Ollama. O sistema é instalado num VPS com Ubuntu através do Docker Compose, e o Caddy emite automaticamente os certificados HTTPS. Os cenários principais estão cobertos por testes automáticos.
O resultado é um produto ao qual o cliente não tem de se adaptar: um CRM com telefonia, chat interno e assistente de IA, que funciona no próprio servidor do cliente e, desde o primeiro dia, está organizado como o seu negócio.








