Build post-inspection revenue dashboard in Attik Admin

Objective

  • Give brand leaders a single admin place to see baseline post-inspection revenue adoption metrics—starting with repair-list adoption and Thumbtack adoption—so planning conversations start from shared numbers, not anecdotes.
  • Ship in time for the brand-leader readout called out in planning: before the May 21 brand leader meeting.

Background

  • May 15 feature sync (Chris): The team needs to know the actual metrics for the post-inspection revenue effort before steering initiatives.
  • Explicit starter metrics: repair-list adoption percentage and Thumbtack adoption percentage as the baseline leadership expects on the first cut.
  • Intent: dashboard live before May 21 brand leader meeting so everyone shares the same baseline, then uses the same views to judge whether later initiatives move the numbers.
  • Decision needed: precise definitions of “adoption” for each metric (e.g. % of eligible reports with a repair list opened vs completed vs quote requested; % of repair lists with ≥1 Thumbtack quoteSubmissions row vs ≥1 submission of any type)—product must lock numerators/denominators and cohort (all companies vs pilot brands).

Scope

Part 1. "ProPair" Adoption:

Need to show the funnel over time. The funnel being a 3 step process.

Core Inspection -> Repair List Created -> Quote Requested

  1. Core inspection is defined with the view. Just need to get this total count
  2. Repair list uses the repairlists collection. Match the _inspectionId to the inspections in the time frame. If one exists, then that would count towards this step.
  3. Finally the quote submission. This one includes some deprecated items that we need to account for.
  4. If the found repairlist contains a quoteRequests array that is not empty
  5. If the found repairlist contains a quoteSubmissions array that is not empty
  6. Both of those will count towards a "quote requested" count.

Using a group bar we should show the funnel adoption over time. This will help us understand whats happening trend wise.

We also need to be able to see the different types of submissions that occurred:

quoteSubmissions are the newer and future way to store the submissions.

{
  "submissionType": "thumbtack",
  "categoryId": "handyman",
  "submittedAt": {
    "$date": "2026-04-18T21:35:12.806Z"
  },
  "includedItemIds": [
    "56b91495-545a-55c6-ad21-bf9749ecaab9",
    "4f5e4b71-a254-5a8f-a713-fc3351be18f2",
    "9a95ef31-bfcb-4644-bb3e-2bde6fd8c3a7",
    "7f4b1fe6-4e4e-5ccf-bd92-18c672d698fe"
  ],
  "providerMetadata": {
    "thumbtackCategoryId": "109125193401647362",
    "businessId": "539556435931537425",
    "businessName": "Delwalt Home Improvement, LLC",
    "widgetUrl": "https://www.thumbtack.com/embed/request-flow?category_pk=109125193401647362&project_pk=577402428740059143&search_form_pk=524529961203294220&search_query=109125193401647362&service_pk=539556435931537425&utm_medium=partnership&utm_source=cma-launchpadhomegroup&utm_tt_session=d6cb79c38b1721378a81d3450e5b444b20cebdbddb0fc9aa9370469b5cd87fec&zip_code=30012",
    "thumbtackMode": "prod",
    "searchId": "577402428740059143",
    "locationMetadata": {
      "zipCode": "30012",
      "requestLocation": "Conyers, GA"
    }
  },
  "_id": {
    "$oid": "69e3f910d77068dbe02bf465"
  },
  "createdAt": {
    "$date": "2026-04-18T21:35:12.811Z"
  },
  "updatedAt": {
    "$date": "2026-04-18T21:35:12.811Z"
  }
},

quoteRequests are the deprecated values but still need to be added into the info.

{
  "_repairCompanyId": "68a74f44d92a8d0e2d54aaf7",
  "repairItemIds": [
    "7fd820b1-971a-5f33-ad43-c96335cf77b8"
  ],
  "requestedAt": {
    "$date": "2025-09-10T23:55:22.858Z"
  },
  "status": "pending",
  "emailJobId": "1701",
  "pdfUrl": "https://toolsv2.s3.us-west-1.amazonaws.com/repair-quotes/repair-quote-Pipeliners-2025-09-10-17-55-10.pdf",
  "pdfKey": "repair-quotes/repair-quote-Pipeliners-2025-09-10-17-55-10.pdf",
  "_id": {
    "$oid": "68c20fea77a8f716baece49a"
  },
  "createdAt": {
    "$date": "2025-09-10T23:55:22.864Z"
  },
  "updatedAt": {
    "$date": "2025-09-10T23:55:22.864Z"
  }
}

These are done by repair company which is a different collection. Ultimately, all we want to see is some kind of view that shows who is using what out of the actual quotes that are requested.

Part 2: "Concierge" Adoption

This is the statistics on our Home Binder integration. We get paid for every home binder submission. We need to know out of all inspections how the funnel is working here as well.

This should be a stacked bar chart the represents the submissions over time.

On this, the funnel is this: All Inspections -> % of Inspections that have a "Moving Eligible" service -> % where home binder was successfully sent.

Similar to above we should show some KPI boxes. This will be derived from the homebinderintegrations collection by linking it with the inspection IDs. This is likely a mongo view as well. Up to you.

  1. % of inspections eligible for home binder
  2. % of eligible jobs where it was sent
  3. % of errors

Then we need another chart https://ui.shadcn.com/charts/pie#charts

Where we outline what the reason for the errors was in homebinderintegrations

Some scope:

  1. Lets make sure that we can edit the time frame of the over time charts. So a dot could be weekly or daily.
  2. Brand select should act identical to the CC DB. Only allow for users to see what they have access to.
  3. One this that would be really nice would be the ability to click "See Data" on both of these charts that would drop down a paginated table to see the data that this is calculating off of. Could be a future feature if that increases the scope too far.

Backend

  • attik-backend/src/models/repairListSchema.ts — canonical fields for repair list lifecycle (status, categorizationStatus, categoryAssignments, quoteRequests, quoteSubmissions with submissionType including thumbtack). Aggregations for adoption likely group by _companyId, time windows on createdAt / updatedAt / submission timestamps—Decision needed which timestamp anchors “adoption in period.”
  • attik-backend/src/routes/repairList.ts — existing read/write API surface for repair lists; new admin analytics route(s) may live alongside other cross-company admin patterns (Decision needed: reuse an existing admin-only router vs add under e.g. inspection or a new admin-metrics module).
  • attik-backend/src/routes/thumbtack.ts — Thumbtack proxy behavior for client flows; dashboard metrics probably do not call Thumbtack directly but read persisted quoteSubmissions / metadata—confirm with implementer.

Frontend (Admin)

Reuse this header for all these dashboard tools. Make it a reusable component that accepts all necessary info. There will be more of these.

  • You can use shadcn charts (already installed) to display this info.
  • attik-frontend/src/app/admin/ today centers Client Care (client-care-dashboard) via adminNavPrimaryButtons in attik-frontend/src/util/data/adminNavButtons.tsxDecision needed whether this dashboard is a new admin route (with nav entry) or a tab/section inside an existing admin surface.
  • Visualization patterns may borrow from attik-frontend/src/app/tools/data-exports/ (saved reports, date filters) without coupling to the full Reports Hub product unless product wants that reuse.

Cross-cutting

  • Permissions: who may view cross-brand aggregates vs company-scoped views—Decision needed (likely Attik staff / super-admin only for v1).
  • Performance: pre-aggregated materialized rollups vs live Mongo aggregations—Decision needed based on data volume before the meeting.

References

  • attik-backend/src/models/repairListSchema.ts
  • attik-backend/src/routes/repairList.ts
  • attik-backend/src/routes/thumbtack.ts (integration context)
  • attik-frontend/src/util/data/adminNavButtons.tsx
  • attik-frontend/src/app/admin/client-care-dashboard/ (existing admin dashboard patterns)

Please authenticate to join the conversation.

Upvoters
Status

Completed

Board
🏠

Main App

Date

15 days ago

Author

Linear

Subscribe to post

Get notified by email when there are changes.