Skip to main content

Outcome Engine

The Outcome Engine page in web/outcome.html now calls:

GET /api/outcome?q=<query>

The API uses Supabase project data when configured.

Current Inputs

The current slice uses:

  • Client and project names.
  • Project descriptor/status.
  • Start and end dates.
  • hours_logged.
  • hours_30d.
  • project_category.
  • budget_hours and budget_amount.
  • actual_revenue and actual_cost.

Current Outputs

The response includes:

  • typical_hours
  • range_hours
  • duration_weeks
  • category
  • budget_variance_hours
  • financials.average_margin_percent
  • confidence
  • comparables
  • scope_signals.completed_after_hours
  • scope_signals.recent_burn_hours

If there are no projects with mapped Toggl hours, the API returns no_data: true and the UI shows an insufficient-data state rather than presenting fictional fallback estimates as live.

POST /api/estimate-cases persists an estimate snapshot so proposed scopes can later be compared with actual hours, margin, duration, and scope-change events.

Next Metrics

The next outcome-pricing slice should add:

  • Automated SOW extraction into structured budget_lines.
  • Estimate variance by project category and service template.
  • Unscoped meeting asks from Fathom sources/promises.
  • Completed-project after-hours burn.
  • Scope-change causes from scope_events.