- Home hub (/home) now shows only the day-to-day sections — Dashboard,
Clients, Documents, Reminders, Renewals, Pipeline, Tickets, SMS credits,
Modules — as a flat card grid; everything else stays in the sidebar.
- Sidebar section count badges (Layout.tsx): Reminders, Pipeline, Tickets,
Renewals and SMS now show a live count, fetched best-effort. Badges are
neutral by default, amber for SMS low balance, red for failed sends; the
reminder-queue badge moves from Dashboard to Reminders. Hidden when the
rail is collapsed.
- Neutral count-badge base + hub spacing (app.css).
Typecheck clean; web build + 410 tests green. The server.ts prod DB
password is intentionally left uncommitted.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
{to:'/pipeline',label:'Pipeline',desc:'Leads and quotes in flight, with next-action nudges.',icon: Filter,...(pipeStat!==undefined?{stat: pipeStat}:{})},
{to:'/renewals',label:'Renewals',desc:'AMC and module renewals — one-click renewal quotes.',icon: CalendarClock,...(renewStat!==undefined?{stat: renewStat}:{})},
{to:'/pipeline',label:'Pipeline',desc:'Leads and quotes in flight, with next-action nudges.',icon: Filter,...(pipeStat!==undefined?{stat: pipeStat}:{})},
{to:'/tickets',label:'Tickets',desc:'Support desk with SLA aging and overdue flags.',icon: Wrench,...(ticketStat!==undefined?{stat: ticketStat}:{})},
{to:'/sms-balances',label:'SMS credits',desc:'Client SMS balances and top-ups.',icon: MessageSquare,...(smsStat!==undefined?{stat: smsStat}:{})},
],
},
{
label:'Catalog & insight',
cards:[
{to:'/modules',label:'Modules',desc:'Sellable modules with the dated price book.',icon: Boxes},
{to:'/module-data',label:'Module data',desc:'Operational service data across all client modules.',icon: Table2},
{to:'/portals',label:'Portals',desc:'Client portal logins and credentials.',icon: KeyRound},