import { Icon } from '../shared/Icon'; const PHASES = [ { phase: 'Phase 1 — Foundation', status: 'completed', color: '#22c55e', items: [ 'booking_status field added to Trip schema', 'TRIP_STATUS_TO_BOOKING_STATUS mapping (12 entries)', 'fnUpdateBookingStatus middleware on internal trip updates', 'Rider booking status endpoint (confirm/unconfirm/cancel)', 'Driver booking status endpoint (accept/cancel)', ], }, { phase: 'Phase 2 — Scheduled Jobs', status: 'in-staging', color: '#f59e0b', items: [ 'BullMQ job scheduling for pre-trip confirmations', 'Rider confirmation timeout chain (24h → 30min → 15min)', 'Ops intervention window for unconfirmed bookings', 'Job cleanup on cancellation/completion', ], }, { phase: 'Phase 3 — Driver Confirmation', status: 'planned', color: '#8b5cf6', items: [ 'ENABLE_DRIVER_CONFIRMATION flag activation', 'Driver confirmation timeout chain (40min → 5min → 10min)', 'Fast-track auto-confirmation for imminent rides', 'handleBookAssigned decision tree (time threshold logic)', ], }, { phase: 'Phase 4 — Enhancements', status: 'planned', color: '#64748b', items: [ 'Ops dashboard for booking status monitoring', 'Analytics events for booking funnel tracking', 'Rider/driver app booking status history view', 'Automated reporting for cancellation patterns', ], }, ]; const STATUS_COLORS: Record = { completed: { color: '#22c55e', bg: 'rgba(34,197,94,0.1)', label: 'Completed' }, 'in-staging': { color: '#f59e0b', bg: 'rgba(245,158,11,0.1)', label: 'In Staging' }, planned: { color: '#8b5cf6', bg: 'rgba(139,92,246,0.1)', label: 'Planned' }, }; const RISKS = [ { risk: 'Redis downtime blocks all BullMQ jobs', mitigation: 'Redis HA setup + fallback to manual ops processing', level: 'high' }, { risk: 'Mobile app not handling new booking statuses', mitigation: 'Graceful degradation — unknown statuses treated as pending', level: 'medium' }, { risk: 'Notification service rate limiting', mitigation: 'Fire-and-forget pattern prevents blocking; add retry queue later', level: 'low' }, ]; export function PMRoadmapSection() { return (
{PHASES.map((phase) => { const sc = STATUS_COLORS[phase.status]; return (
{phase.phase}
{sc.label}
    {phase.items.map((item, i) => (
  • {item}
  • ))}
); })}

Risk Register

{RISKS.map((r, i) => (
{r.level}
{r.risk}
Mitigation: {r.mitigation}
))}
); }