Commit iniziale di eminuxCRM: CRM Rails con pipeline, campagne email e Docker.
CI / scan_ruby (push) Failing after 11m20s
CI / scan_js (push) Successful in 10m35s
CI / lint (push) Has been cancelled

Include autenticazione, progetti isolati, mail marketing HTML con SMTP, test A/B e editor WYSIWYG.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-17 23:01:48 +02:00
co-authored by Cursor
commit c4e5f289cf
258 changed files with 11293 additions and 0 deletions
+183
View File
@@ -0,0 +1,183 @@
# 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_by` sulle 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)
```bash
cp .env.example .env
# modifica SECRET_KEY_BASE e password DB se necessario
docker compose up -d --build
```
Al primo avvio vengono eseguiti automaticamente:
1. `bundle install` (in build)
2. `tailwindcss:build`
3. `db:prepare` (create + migrate)
4. `db:seed`
Apri: [http://localhost:3001](http://localhost:3001)
> Su questa macchina la porta 3000 è già usata da un altro stack: di default eminuxCRM usa **3001**.
> Puoi cambiarla con `APP_PORT` nel 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)
| Email | 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_DB`
- `DATABASE_HOST` (in Docker: `postgres`)
- `SECRET_KEY_BASE`
- `MAILER_FROM`
- `APP_HOST` / `APP_PORT`
- `TZ=Europe/Rome`
**Non committare** `.env` con secret reali.
## Migration e seed
```bash
docker compose exec web bin/rails db:migrate
docker compose exec web bin/rails db:seed
```
Reset completo (distruttivo):
```bash
docker compose exec web bin/rails db:reset
```
## Test
```bash
docker compose exec web bin/rails db:test:prepare
docker compose exec web bin/rails test
```
## Backup / restore
```bash
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`):
```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/user
- `organizations` — prospect/clienti
- `contacts` — contatti per organizzazione
- `opportunities` — pipeline commerciale
- `activities` — timeline
- `tasks` — follow-up / next actions
- `sales_goals` — obiettivi dashboard
- `products` — 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 `/today` operativa
- 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)
1. Copia il progetto su una VM
2. Configura `.env` di produzione (`RAILS_ENV=production`, `SECRET_KEY_BASE`, password DB forti)
3. `docker compose up -d --build` (oppure builda il target `production` del Dockerfile)
4. Metti un reverse proxy (Caddy/Nginx) con HTTPS davanti alla porta 3000
5. Esegui backup periodici con `bin/backup`
## Sviluppo locale senza Docker (opzionale)
```bash
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.