Um CRM profissional para gestão de leads com multi-tenancy estrito. Desenvolvido com foco em clean code, escalabilidade, documentação e padrões enterprise.
- 🏢 CRUD de Empresas com isolamento total de dados
- 👥 Sistema de Usuários com roles (Admin/Operador)
- 🔐 Autenticação via Laravel Sanctum (Bearer Token)
- 📊 Kanban de Leads com stages customizáveis
- 📝 Activity Logs para rastreamento de movimentações
- 🔒 Multi-tenancy estrito (padrão enterprise CRM/ERP)
- 📚 Documentação Swagger completa com autenticação
- 🧪 30 testes automatizados com 100% de cobertura
- Laravel 12 (PHP 8.2+)
- SQLite (dev) / MySQL (produção)
- Laravel Sanctum (autenticação API)
- Swagger/OpenAPI (documentação)
- PHPUnit (testes automatizados)
- Futuramente: Vue.js 3 + Vite (front-end) e Python (automações)
Este projeto é distribuído sob uma licença personalizada de uso exclusivamente educacional e pessoal. É proibido qualquer uso comercial, revenda, SaaS ou qualquer forma de monetização.
Leia os detalhes no arquivo LICENSE.
git clone https://github.com/tiagoluvizotoneves/mini-crm-lead-tracker.git
cd mini-crm-lead-tracker
# Instale as dependências
composer install
# Copie o arquivo de ambiente
cp .env.example .env
# Gere a key do projeto
php artisan key:generate
# Rode as migrations
php artisan migrate:fresh --seed
# Inicie o servidor
php artisan serveEste projeto utiliza Laravel Sanctum para autenticação via token Bearer.
POST /api/v1/login
Exemplo de payload:
{
"email": "admin@crm.com",
"password": "123456"
}Resposta:
{
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOi..."
}Utilize esse token nas rotas protegidas, incluindo no cabeçalho:
Authorization: Bearer {accessToken}As rotas protegidas requerem:
Token de autenticação válido via auth:sanctum
Validação de vínculo com empresa (company.valid)
Resposta:
GET /api/v1/usuario-logado
Authorization: Bearer {accessToken}Após autenticar:
- Acesse o Swagger em http://localhost:8000/api/documentation
- Clique em Authorize
- Insira o token no formato:
Bearer {accessToken}# Rodar todos os testes
php artisan test
# Rodar testes específicos
php artisan test --filter=Company
# Rodar com coverage
php artisan test --coverageEste projeto segue padrões enterprise de CRM/ERP com:
- ✅ Multi-tenancy estrito - todo usuário pertence a uma empresa
- ✅ Defense in Depth - segurança em 3 camadas (Middleware + Policy + Service)
- ✅ Isolamento total - impossível acessar dados de outra empresa
- ✅ Padrões da indústria - seguindo Salesforce, HubSpot, Zoho
Leia mais: docs/ARCHITECTURE.md
POST /api/v1/login- Login e geração de token
GET /api/v1/companies- Listar empresasGET /api/v1/companies/{id}- Detalhes da empresaPOST /api/v1/companies- Criar empresa (admin only)PUT /api/v1/companies/{id}- Atualizar empresa (admin only)DELETE /api/v1/companies/{id}- Deletar empresa (admin only)
GET /api/v1/kanban-stages- Listar estágios do KanbanPOST /api/v1/kanban-stages- Criar estágioPUT /api/v1/kanban-stages/{id}- Atualizar estágioDELETE /api/v1/kanban-stages/{id}- Deletar estágioPUT /api/v1/leads/{id}/move- Mover lead entre estágiosGET /api/v1/leads/{id}/logs- Histórico de movimentações