Dashboard · <%= current_project.name %>

Cosa devo fare oggi per trasformare i prospect in clienti?

<%= link_to "Apri pagina Oggi →", today_path, class: "#{btn_primary} w-full sm:w-auto" %>
<% if @goal %>
<%= @goal.name %>
<%= @goal.current_value.to_i %> / <%= @goal.target_value.to_i %>
<%= @goal.metric_label %> · <%= format_date(@goal.start_date) %> – <%= format_date(@goal.end_date) %>
<%= progress_bar(@goal.progress_percentage, color: "bg-emerald-400") %>
<% end %>

Cosa devo fare oggi

In ritardo (<%= @overdue_tasks.size %>)

<%= render "shared/task_list", tasks: @overdue_tasks %>

Da fare oggi (<%= @today_tasks.size %>)

<%= render "shared/task_list", tasks: @today_tasks %>

Prossimi (<%= @upcoming_tasks.size %>)

<%= render "shared/task_list", tasks: @upcoming_tasks %>

Conteggio per stage attuale: quante opportunità sono in quello stato ora.

<% [ ["Prospect totali", @metrics.prospect_count], ["Da contattare", @stage_counts["to_contact"]], ["Contattati", @stage_counts["contacted"]], ["Risposte", @stage_counts["replied"]], ["Interessati", @stage_counts["interested"]], ["Demo/Trial", @stage_counts["demo_trial"]], ["Primo utilizzo", @stage_counts["first_use"]], ["Proposte", @stage_counts["proposal"]], ["Clienti acquisiti", @stage_counts["won"]], ["Persi", @stage_counts["lost"]], ["Valore WON", format_money(@metrics.won_value)], ["Pipeline aperta", format_money(@metrics.open_pipeline_value)], ["Task scaduti", @metrics.overdue_tasks_count] ].each do |label, value| %>
<%= label %>
<%= value %>
<% end %>

Funnel commerciale

Numero grande: in questo stage ora. In piccolo: arrivati almeno a questo punto (stage attuale + successivi, esclusi i persi).

<% @funnel.each do |step| %> <% if step[:conversion_label] %>
<%= step[:conversion_label] %> (<%= step[:rate] %>%)
<% end %>
<%= step[:label].upcase %> <%= step[:current] %> <%= step[:reached] %> da qui in poi
<% end %>

KPI processo

Giorni medi contatto → WON
<%= @metrics.avg_days_to_won || "—" %>
Giorni medi dall'ultima attività
<%= @metrics.avg_days_since_last_activity || "—" %>
Senza attività in timeline da > 7 giorni
<%= @metrics.prospects_without_activity_over_7_days %>
In trattativa senza next action
<%= @metrics.opportunities_without_next_action %>
Demo/Trial → WON
<%= format_conversion_rate(@metrics.demo_to_won_conversion) %>
First Use → WON
<%= format_conversion_rate(@metrics.first_use_to_won_conversion) %>
ARPA (WON)
<%= format_money(@metrics.arpa) %>
Pipeline value
<%= format_money(@metrics.open_pipeline_value) %>

Cosa sbloccare adesso

Non è un errore. Sono i buchi che bloccano la vendita: un contatto da chiamare, un’email da mandare, un follow-up mancante. Se una lista è vuota, su quel punto sei a posto.

<% if @attention[:to_send_count].to_i.positive? %>

Campagna lancio · email da inviare (<%= @attention[:to_send_count] %>)

Le società sono censite e in stato Da contattare. Il passo successivo è mandare le email del test A/B (10–15 al giorno, A e B insieme). Non serve ancora mettere un prezzo o creare un follow-up: quelli arrivano dopo la risposta.

<%= link_to "Apri la lista da inviare →", organizations_path, class: "font-medium text-zinc-900 underline dark:text-amber-50" %>

<% end %>

Interessati senza follow-up (<%= @attention[:interested_without_followup][:total] %>)

Hanno detto sì in linea: manca la prossima chiamata/email in agenda.

<%= render "dashboard/attention_list", items: @attention[:interested_without_followup][:items], total: @attention[:interested_without_followup][:total], empty: "Nessuno: nessun interessato scoperto." %>

Opportunità ferme da oltre 7 giorni (<%= @attention[:stalled_opportunities][:total] %>)

Lo stage non si è mosso: va rilanciato o chiuso come perso.

<%= render "dashboard/attention_list", items: @attention[:stalled_opportunities][:items], total: @attention[:stalled_opportunities][:total], empty: "Nessuna: nessuna trattativa ferma." do |opp| %> <%= link_to "#{opp.organization.name} (#{opp.days_in_current_stage}gg)", opp.organization, class: "hover:underline" %> <% end %>

Task scaduti (<%= @attention[:overdue_tasks][:total] %>)

Promemoria già passati: completarli o ripianificarli.

<%= render "dashboard/attention_list", items: @attention[:overdue_tasks][:items], total: @attention[:overdue_tasks][:total], empty: "Nessuno: nessun task in ritardo." do |task| %> <%= link_to "#{task.organization.name}: #{task.title}", task.organization, class: "hover:underline" %> <% end %>

Senza contatto (<%= @attention[:organizations_without_contacts][:total] %>)

Manca una persona a cui scrivere o telefonare.

<%= render "dashboard/attention_list", items: @attention[:organizations_without_contacts][:items], total: @attention[:organizations_without_contacts][:total], empty: "Nessuna: tutte hanno un contatto." do |org| %> <%= link_to org.name, org, class: "hover:underline" %> <% end %>

Senza valore (già in trattativa) (<%= @attention[:opportunities_without_value][:total] %>)

Dopo il primo contatto serve un importo stimato (Light/Full…) per la pipeline.

<%= render "dashboard/attention_list", items: @attention[:opportunities_without_value][:items], total: @attention[:opportunities_without_value][:total], empty: "Nessuna in trattativa senza valore." %>

Senza prossima azione (già in trattativa) (<%= @attention[:opportunities_without_next_action][:total] %>)

Dopo l’invio o la risposta manca un task in agenda: la trattativa si ferma.

<%= render "dashboard/attention_list", items: @attention[:opportunities_without_next_action][:items], total: @attention[:opportunities_without_next_action][:total], empty: "Nessuna in trattativa senza next action." %>