{
  "_note": "Synthetic dataset. No real client, no real values, no live keys. Field shapes for the Make execution records under 'under_the_hood' mirror Make's real REST API responses (GET /scenarios/{id}/executions, GET /executions/{id}); the values are invented. This file is the single source of truth the page is generated from (build_page.py).",
  "client": {
    "name": "Brightwood Kitchens & Baths",
    "industry": "Kitchen and bath remodeling",
    "note": "A made-up example client of a Make agency, used only to show the shape of the report."
  },
  "period": {
    "label": "Week of Mon 13 to Sun 19 July 2026"
  },
  "connected_tools": ["Make", "HubSpot", "Gmail", "Stripe"],
  "headline": {
    "total_actions": 60,
    "clean": 55,
    "resolved": 4,
    "waiting": 1,
    "sentence": "This week your automations handled 60 things across your four connected tools. 55 went through cleanly, 4 needed a human eye and were sorted out, and 1 is waiting on you: a deposit that could not be matched to a project."
  },
  "automations": [
    {
      "client_name": "New enquiry intake",
      "what_it_is": "Every enquiry from your website or Facebook form becomes a contact and a deal in HubSpot, and your estimators get a Slack ping.",
      "runs": 22,
      "did": "Captured 22 enquiries. 20 were new people. 2 were repeat enquiries from people already in HubSpot, so they were added to the existing record instead of creating a second one.",
      "tools": ["Website form", "HubSpot", "Slack"],
      "exceptions_line": "Nothing needed a person.",
      "scenario_meta": {"scenarioId": 4821771, "make_name": "brightwood_intake"}
    },
    {
      "client_name": "Enquiry triage (with an AI step)",
      "what_it_is": "An AI model reads each new enquiry and sets the project type, a rough budget band, how urgent it looks, and which estimator it should go to.",
      "runs": 22,
      "did": "Read all 22 enquiries. 19 were confident enough to route on their own. 3 did not give the AI enough to go on, so it flagged them for a person rather than guessing. Every decision it made, and the reason behind it, is listed in the next section.",
      "tools": ["AI model", "HubSpot"],
      "exceptions_line": "The 3 it flagged are the flow working as intended, not errors. All 3 were replied to and routed by the end of the week.",
      "scenario_meta": {"scenarioId": 4821779, "make_name": "brightwood_triage"}
    },
    {
      "client_name": "Quote follow-ups",
      "what_it_is": "When a quote has been sitting without a reply, this sends a friendly nudge on day 3 and again on day 7.",
      "runs": 11,
      "did": "Sent 9 follow-ups. 2 were skipped because the client had already replied, so no unnecessary nudge went out.",
      "tools": ["HubSpot", "Gmail"],
      "exceptions_line": "1 follow-up bounced and was flagged for a person. It was resent to an alternate address on Tuesday.",
      "scenario_meta": {"scenarioId": 4821786, "make_name": "brightwood_followups"}
    },
    {
      "client_name": "Deposit and review flow",
      "what_it_is": "When a deposit is paid, this sends a thank-you and a review request, and marks the deal as Won.",
      "runs": 5,
      "did": "Processed 5 deposits. Sent 5 thank-yous and 5 review requests, and marked 5 deals Won.",
      "tools": ["Stripe", "Gmail", "HubSpot"],
      "exceptions_line": "1 more deposit came in that could not be matched to a deal. It is held for you, in the Needs your attention section below.",
      "scenario_meta": {"scenarioId": 4821791, "make_name": "brightwood_deposits"}
    }
  ],
  "ai_decisions": {
    "intro": "This is the part that is usually hardest to explain. The AI step made a call on each enquiry, and here is exactly what it decided and why. Where it was not sure enough, it says so and left the enquiry for a person.",
    "confidence_bar": 70,
    "rows": [
      {
        "enquiry": "We are gutting our kitchen, hoping to start before the holidays. Budget is around 40 to 60k. Can someone come out and measure?",
        "decided": {"Project type": "Full kitchen remodel", "Budget band": "40 to 60k", "Urgency": "High", "Routed to": "Senior estimator (Dana)"},
        "why": "Gutting the whole kitchen, a firm budget range, and a request for a site measurement are all strong-intent signals. The wish to start before the holidays set the urgency to high.",
        "confidence": 93,
        "outcome": "routed"
      },
      {
        "enquiry": "Looking to update the tile in our guest bathroom, nothing major.",
        "decided": {"Project type": "Bathroom refresh", "Budget band": "Under 15k", "Urgency": "Low", "Routed to": "Junior estimator (Marco)"},
        "why": "A single-surface tile update, described as nothing major, points to a small job with no time pressure.",
        "confidence": 88,
        "outcome": "routed"
      },
      {
        "enquiry": "Do you do commercial work? We manage three restaurants.",
        "decided": {"Project type": "Commercial (outside usual scope)", "Budget band": "Not enough to say", "Urgency": "Medium", "Routed to": "Owner, for a scope decision"},
        "why": "Commercial multi-site work sits outside the residential remodel focus, so it went to the owner to decide rather than to an estimator.",
        "confidence": 90,
        "outcome": "routed"
      },
      {
        "enquiry": "Following up on the quote from last month for the primary bath, we are ready to move.",
        "decided": {"Project type": "Bathroom remodel (existing lead)", "Budget band": "25 to 35k, from the earlier quote", "Urgency": "High", "Routed to": "Back to the open deal, Dana notified"},
        "why": "This matched an existing contact and an open deal from last month, so instead of creating a new lead it was reconnected to that deal and the estimator was told it is ready to move.",
        "confidence": 95,
        "outcome": "routed"
      },
      {
        "enquiry": "hi price?",
        "decided": {"Project type": "Not clear", "Budget band": "Not clear", "Urgency": "Not clear", "Routed to": "Flagged for a person"},
        "why": "There was not enough here to tell what the project is or how urgent it is. Rather than guess a project type and a budget and route it to the wrong estimator, the AI left it for someone to reply and ask.",
        "confidence": 41,
        "outcome": "flagged"
      }
    ]
  },
  "timeline": {
    "intro": "The same week, laid out in one place across all four tools. This is the view that answers what happened and when, without you having to open four different dashboards.",
    "events": [
      {"day": "Mon", "time": "09:12", "tool": "Website form", "line": "New enquiry from Sarah M. came in through the website"},
      {"day": "Mon", "time": "09:12", "tool": "AI model", "line": "Read as a full kitchen remodel, high urgency, routed to Dana (93% confident)"},
      {"day": "Mon", "time": "09:13", "tool": "HubSpot", "line": "Contact and deal created, deal owner set to Dana"},
      {"day": "Mon", "time": "09:13", "tool": "Slack", "line": "Dana pinged: new high-intent kitchen enquiry"},
      {"day": "Tue", "time": "14:40", "tool": "HubSpot", "line": "Deal Guest bath tile moved to Quote Sent"},
      {"day": "Wed", "time": "11:02", "tool": "AI model", "line": "Enquiry hi price? left for a person, too little to route on (41% confident)"},
      {"day": "Fri", "time": "08:00", "tool": "Gmail", "line": "Day-3 follow-up sent for Primary bath remodel"},
      {"day": "Fri", "time": "08:00", "tool": "Gmail", "line": "Day-3 follow-up skipped for Kitchen island, the client had already replied"},
      {"day": "Thu", "time": "16:22", "tool": "Stripe", "line": "Deposit received for Riverside kitchen"},
      {"day": "Thu", "time": "16:22", "tool": "HubSpot", "line": "Riverside kitchen deal marked Won, thank-you and review request sent"},
      {"day": "Sat", "time": "11:05", "tool": "Stripe", "line": "Deposit received from someone not yet in HubSpot, held for you to confirm"}
    ]
  },
  "attention": [
    {
      "status": "waiting",
      "title": "A deposit came in that could not be matched to a project",
      "plain": "On Saturday a deposit was paid by a customer who is not in HubSpot yet, for what looks like a kitchen job. The automation held it instead of guessing which deal it belongs to.",
      "why": "The Stripe payment did not carry a deal reference it could match on, and the paying email was not on any open deal. Rather than attach the payment to the wrong project, it parked it for you.",
      "what_to_do": "Tell it which deal this belongs to, and it will finish sending the thank-you and marking the deal Won."
    },
    {
      "status": "resolved",
      "title": "One follow-up email bounced",
      "plain": "The day-3 nudge for one contact bounced back. The automation caught it and flagged it, rather than quietly recording it as sent.",
      "why": "Gmail returned a hard bounce, so the message was recorded as not delivered.",
      "what_to_do": "Already handled. It was resent to the contact's alternate address on Tuesday and went through."
    },
    {
      "status": "resolved",
      "title": "Three enquiries were too vague for the AI to route",
      "plain": "Three short messages, like hi price?, did not say enough for the AI to pick a project type, so it flagged them for a person instead of guessing.",
      "why": "Each one scored below the 70% confidence bar. This is the triage working the way it is meant to, not a failure.",
      "what_to_do": "Already handled. All three were replied to and routed by the end of the week."
    }
  ],
  "under_the_hood": {
    "intro": "This part is for you, not the client. The report is not a mockup. It is built from the real execution data your scenarios already produce, plus the recent events in the connected tools. Here is one run, as Make records it, and the plain line it turns into.",
    "raw_execution": {
      "id": 30184417726042,
      "scenarioId": 4821771,
      "status": 1,
      "operations": 7,
      "transfer": 4213,
      "duration": 1840,
      "type": "auto",
      "executedAt": "2026-07-13T09:12:04.510Z"
    },
    "raw_execution_note": "status 1 is a clean run, 3 is an error. operations is what it costs, transfer is bytes moved, duration is in milliseconds. This is exactly what GET /scenarios/{id}/executions returns.",
    "raw_ai_module": {
      "module": "anthropic-claude:CreateChatCompletion",
      "status": "ok",
      "operations": 1,
      "output": {
        "project_type": "Full kitchen remodel",
        "budget_band": "40-60k",
        "urgency": "high",
        "route": "senior_estimator",
        "confidence": 0.93,
        "reason": "Whole-kitchen gut, firm budget range, and a request for a site measurement are strong-intent signals; pre-holiday start set urgency high."
      }
    },
    "raw_ai_note": "Because your AI step returns a structured result with a reason and a confidence, the report can show the client the why in plain English. Nothing new is asked of the model, it just surfaces what it already returned in the run.",
    "raw_incomplete": {
      "id": 30184901120067,
      "scenarioId": 4821791,
      "status": 3,
      "reason": "No matching HubSpot deal for the paid Stripe session; parked as an incomplete execution rather than guessing.",
      "storedAt": "2026-07-18T11:05:39.220Z"
    },
    "raw_incomplete_note": "With store incomplete executions turned on, a run like this is held and is readable and resumable through the API. That is what becomes the one waiting-on-you item, instead of a silent gap.",
    "plain_line": "Execution 30184417726042 ran the intake scenario in 1.8 seconds, used 7 operations, and created one HubSpot contact and deal. In the report that becomes: New enquiry from Sarah M. captured and routed to Dana."
  },
  "how_its_built": {
    "intro": "How this would run for real, without touching your existing scenarios:",
    "points": [
      "A scheduled job reads each client's Make executions through the API (GET /scenarios/{id}/executions and GET /executions/{id}), so it works off the runs your scenarios already produce.",
      "It pulls the recent events from the connected tools the same way, the HubSpot timeline, the Gmail sends, the Stripe payments, so the report is the one place that spans Make plus the other tools.",
      "It groups everything by client, turns each run into a plain line, and summarises the AI-step decisions from the structured output they already return.",
      "It publishes one link per client each week, or sends it as an email. Your scenarios are not changed, so there is nothing new to maintain inside them."
    ]
  },
  "footer": {
    "scope": "Built from the question you posted publicly on Make's Hire a Pro board, with invented sample data for a made-up client. The report shape is complete and the execution records use Make's real API shapes. No real client data is used and no prior build is claimed.",
    "hygiene": "Sample data only  .  no login  .  no tracking  .  no live keys  .  this page auto-expires about 30 days after sending"
  }
}
