feat(dashboard): berth-heat widget + investor-default surfacing
Step 6 minimal-but-functional per PRE-DEPLOY-PLAN § 1.6. Berth Heat — new widget showing top 15 berths by active interest count via the interest_berths junction (non-primary links included so multi-berth deals warm every berth in their bundle). Investor-friendly demand-pressure view; the ranked-table shape exports cleanly to PDF/ CSV. Future heatmap viz reads the same shape via /api/v1/dashboard/ berth-heat. Defaults flipped for investor-friendliness: - kpi_pipeline_value → defaultVisible (currency-aware headline number). - source_conversion → defaultVisible (conversion funnel by source; reads the inquiry → client linkage from Step 3). - berth_heat → defaultVisible. Pipeline-velocity-over-time + true heatmap viz deferred. pipeline_funnel covers snapshot stage breakdowns; over-time velocity warrants its own design pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,6 +15,7 @@ import dynamic from 'next/dynamic';
|
||||
|
||||
import { ActiveDealsTile } from './active-deals-tile';
|
||||
import { ActivityFeed } from './activity-feed';
|
||||
import { BerthHeatWidget } from './berth-heat-widget';
|
||||
import { HotDealsCard } from './hot-deals-card';
|
||||
import { PipelineValueTile } from './pipeline-value-tile';
|
||||
import { WebsiteGlanceTile } from './website-glance-tile';
|
||||
@@ -122,10 +123,13 @@ export const DASHBOARD_WIDGETS: readonly DashboardWidget[] = [
|
||||
{
|
||||
id: 'kpi_pipeline_value',
|
||||
label: 'Pipeline Value',
|
||||
description: 'Compact tile: total berth value of active deals (USD).',
|
||||
description: 'Total berth value of active deals, converted to the port default currency.',
|
||||
render: () => <PipelineValueTile />,
|
||||
group: 'rail',
|
||||
defaultVisible: false,
|
||||
// Flipped on by default 2026-05-14 — the dashboard wave prioritized
|
||||
// investor-facing tiles, and this is the headline number leadership
|
||||
// looks at first.
|
||||
defaultVisible: true,
|
||||
},
|
||||
|
||||
// ── Charts (main area) ──────────────────────────────────────────────
|
||||
@@ -175,7 +179,18 @@ export const DASHBOARD_WIDGETS: readonly DashboardWidget[] = [
|
||||
description: 'Win rate per lead source — which channels deliver buyers, not just leads.',
|
||||
render: () => <SourceConversionChart />,
|
||||
group: 'chart',
|
||||
defaultVisible: false,
|
||||
// Flipped on 2026-05-14 — investor-facing conversion-funnel-by-source
|
||||
// surface (PRE-DEPLOY-PLAN § 1.6.23). Reads inquiry → client linkage
|
||||
// (clients.source_inquiry_id) added in migration 0065.
|
||||
defaultVisible: true,
|
||||
},
|
||||
{
|
||||
id: 'berth_heat',
|
||||
label: 'Berth Heat',
|
||||
description: 'Top 15 berths by active interest count. Investor-friendly demand pressure view.',
|
||||
render: () => <BerthHeatWidget />,
|
||||
group: 'chart',
|
||||
defaultVisible: true,
|
||||
},
|
||||
{
|
||||
id: 'website_analytics',
|
||||
|
||||
Reference in New Issue
Block a user