La scelta della lista passa da un wizard a tre passi, con anteprima del conteggio e lista congelata solo dopo la conferma. Co-authored-by: Cursor <cursoragent@cursor.com>
eminuxCRM
CRM commerciale standalone focalizzato su una domanda:
Cosa devo fare oggi per trasformare i miei prospect in clienti?
Applicazione Rails tradizionale (Hotwire / Turbo / Stimulus + Tailwind), pensata per poche persone, veloce da usare e semplice da mantenere. Completamente indipendente da MatchLiveTV.
Architettura
- Ruby on Rails 8 + PostgreSQL 16
- Hotwire (Turbo + Stimulus) — nessuna SPA
- Tailwind CSS
- Autenticazione locale con
has_secure_password(bcrypt) - Audit base
created_by/updated_bysulle entità principali - Timezone:
Europe/Rome· UI: italiano
Servizi Docker
| Servizio | Ruolo |
|---|---|
web |
Applicazione Rails (porta 3000) |
postgres |
Database PostgreSQL 16 |
Requisiti
- Docker + Docker Compose
- (Opzionale) Ruby 3.3+ per sviluppo fuori da Docker
Avvio rapido (Docker)
cp .env.example .env
# modifica SECRET_KEY_BASE e password DB se necessario
docker compose up -d --build
Al primo avvio vengono eseguiti automaticamente:
bundle install(in build)tailwindcss:builddb:prepare(create + migrate)db:seed
Apri: http://localhost:3001
Su questa macchina la porta 3000 è già usata da un altro stack: di default eminuxCRM usa 3001. Puoi cambiarla con
APP_PORTnel file.env.
Progetti = istanze CRM separate
Ogni progetto ha un URL dedicato:
- Launcher:
/ - MatchLiveTV:
/p/matchlivetv - RiskMeter:
/p/riskmeter - Cardoo:
/p/cardoo
Dentro ogni istanza trovi dashboard, organizzazioni, pipeline, task, report e impostazioni del solo quel progetto.
- Gli admin vedono tutti i progetti
- Gli utenti solo i progetti abilitati
- In sidebar: “Tutti i progetti” + switch rapido tra istanze
Credenziali development (solo seed)
| Password | Ruolo | Progetti | |
|---|---|---|---|
admin@simplecrm.local |
password123 |
Admin | Tutti |
marco@simplecrm.local |
password123 |
Utente | MatchLiveTV, RiskMeter |
lucia@simplecrm.local |
password123 |
Utente | MatchLiveTV, Cardoo |
Configurazione .env
Copia .env.example → .env. Variabili principali:
POSTGRES_USER/POSTGRES_PASSWORD/POSTGRES_DBDATABASE_HOST(in Docker:postgres)SECRET_KEY_BASEMAILER_FROMAPP_HOST/APP_PORTTZ=Europe/Rome
Non committare .env con secret reali.
Migration e seed
docker compose exec web bin/rails db:migrate
docker compose exec web bin/rails db:seed
Reset completo (distruttivo):
docker compose exec web bin/rails db:reset
Test
docker compose exec web bin/rails db:test:prepare
docker compose exec web bin/rails test
Backup / restore
bin/backup
# crea tmp/backups/simplecrm_YYYYMMDD_HHMMSS.sql.gz
bin/restore tmp/backups/simplecrm_YYYYMMDD_HHMMSS.sql.gz
Con Docker Compose attivo gli script usano pg_dump / psql sul container postgres.
Import CSV
Pagina: Impostazioni → Import CSV oppure /imports/new.
Formato standard (file esempio: examples/organizations_import_sample.csv):
organization_name,organization_type,sport,country,region,province,city,website,organization_email,contact_first_name,contact_last_name,contact_role,contact_email,contact_phone,lead_source,notes
Duplicati evitati confrontando nome organizzazione, email e sito.
Export CSV
Disponibile da liste Organizzazioni, Contatti e Opportunità (rispetta i filtri attivi dove applicabile).
Struttura database (principale)
users— autenticazione, ruolo admin/userorganizations— prospect/clienticontacts— contatti per organizzazioneopportunities— pipeline commercialeactivities— timelinetasks— follow-up / next actionssales_goals— obiettivi dashboardproducts— catalogo prodotti (Light, Full, …)
Pipeline stages: Da contattare → Contattato → Ha risposto → Interessato → Demo/Trial → Primo utilizzo → Proposta → Cliente / Perso.
Funzionalità principali
- Dashboard con obiettivo, KPI, funnel, “Cosa fare oggi”, indicatori di attenzione
- Pagina
/todayoperativa - Scheda Organization come centro operativo + quick actions
- Kanban pipeline con drag & drop (Stimulus) e cambio stage da menu
- Task con evidenziazione scaduti / oggi / futuri
- Report: funnel, lead source, won/lost, lost reasons, sales owner, revenue
- Import/export CSV
Deploy (suggerimento semplice)
- Copia il progetto su una VM
- Configura
.envdi produzione (RAILS_ENV=production,SECRET_KEY_BASE, password DB forti) docker compose up -d --build(oppure builda il targetproductiondel Dockerfile)- Metti un reverse proxy (Caddy/Nginx) con HTTPS davanti alla porta 3000
- Esegui backup periodici con
bin/backup
Sviluppo locale senza Docker (opzionale)
bundle install
bin/rails db:prepare db:seed
bin/dev # server + tailwind watch
Volutamente fuori scope (fase successiva)
- Integrazioni Gmail/SMTP avanzate, sync email, calendario
- Stripe, webhook, API REST pubblica
- Multi-tenant / multi-progetto
- Dark mode, BI avanzata, microservizi
Licenza
Uso interno / progetto privato.