Include autenticazione, progetti isolati, mail marketing HTML con SMTP, test A/B e editor WYSIWYG. Co-authored-by: Cursor <cursoragent@cursor.com>
184 lines
5.1 KiB
Markdown
184 lines
5.1 KiB
Markdown
# 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.
|