Skip to content
DISPATCH BOARD 5 Star · Tower

Daily Meeting

One card per dispatcher: how many jobs, to whom, and why. Flagged assignments show in amber. Updates live as entries come in.
Sort by

Dashboard

DSR Breakdown · Technician Tier

DSR Breakdown · Technician Priority

Jobs by Region

Jobs by Day

Dispatch Job

Assignment volume and target tracking, counted from what is logged on the Board (jobs-weighted). Historical monitoring only — nothing on this tab forecasts.

Job Assignment KPI

How this number is worked out

How the target has moved this month

Everyone against the target

Everyone’s numbers, and anything needing attention

Needs attention

Monitoring flags

Monthly assignments

Assignments by DSR

Target vs actual

Dispatcher trends

History · dispatcher × month

One row per dispatcher per month in range. MoM compares with the calendar month before, whether or not it is displayed; the month in progress shows none, because a half-elapsed month against a whole one is not a comparison. Past months never change when a new one starts.
TECHNICIAN PAYMENTS

Prepare. Review. Hand off.

One request per half-month · review times in Los Angeles / Pacific

Payment queue

Your assigned requests
Dispatcher SOP · payment preparation

Scheduled → In Review → Approved → Archived. Archived confirms the accounting handoff. It does not confirm payment.

Your board shows your own dispatcher requests and the requests assigned to you for review. Assigned Team Lead+ accounts can edit or delete open requests. Delete keeps a recoverable record and allows a replacement when the half-month is otherwise available. Use the Deleted filter to restore a request; fresh approvals are required. Archived handoffs cannot be edited or deleted.

  1. Check eligibility. Select the technician from Tower’s roster. Check the current half-month: days 1–15 or 16–end. One request is available in each half. If already used, ask a Team Lead or admin to create an exception with a reason and assign it to you. Do not create a duplicate under another dispatcher.
  2. Prepare the payout spreadsheet. State every month and year checked, with a cutoff for partial months. Verify technician identity, job references, duplicates and prior payouts. Reconcile commissions, parts and adjustments under the existing payout rules. Record the job count and unresolved questions; make sure every reviewer can open the spreadsheet.
  3. Select the responsible Team Leads. Choose everyone who must approve this technician’s payment. Any configured or existing required co-leads stay included. Select at least one Team Lead; Luka can be selected when needed. Prior manager setup is not required. You cannot remove an existing required reviewer.
  4. Book the review directly. Find free time with the selected Team Leads; no separate scheduling permission is needed. Use 10, 15, 20 or 30 minutes according to the number and complexity of jobs. Invite the required reviewers. Title the event with the technician’s roster name. The description must contain the checked months and payout spreadsheet. Tower provides a copyable description. Record the Pacific review time; the event link is optional.
  5. Save as Scheduled. Recheck the packet on the booked day. Finish all five preparation checks, then choose Send for review. Team Leads receive an inbox notification.
  6. Resolve the review. Each assigned Team Lead approves in Tower. A shared technician stays In Review until every required approval is recorded. Corrections return it to Scheduled. Saving any packet edit resets the approvals; submit the corrected version again.
  7. Hand off to accounting. Once Approved, copy the accounting request, post it in #appliance_accounting1, paste that message’s link into Tower, then archive. Keep the approved spreadsheet accessible.

Review reminders appear in the payment inbox 15 minutes before the event. An open signed-in Tower page checks for updates every 30 seconds. This version does not send closed-browser push, book calendar events, send Slack messages or calculate payouts.

New payment request

my locker

Dispatcher dashboard

team view

Dispatcher dashboard

Dispatcher groups at a glance. Group performance covers the last 90 completed days; dispatch activity has its own date range.

Dispatch activity · Board, CRM and same-day responses

Automation

Adoption by DSR

Automated share by day

Correct assignment

A job counts as justified unless it is explicitly marked unjustified — the same arithmetic as the Meeting's Correct %. Marking happens in the Meeting report or the Database tab.

Correct assignment by DSR

Correct share by day

Who marked Unjustified

Reviewer activity by day

One line per reviewer, over the days in range. Height is unjustifications marked that day.

Daily Entry

One row per technician you assigned jobs to (aggregate the count). Tier, Priority and Region fill automatically from the roster. Rows save straight to the shared database.
The CRM reference is required. It is what lets a row here be matched to the CRM job — without it nothing can tell whether the job ran or was cancelled, and the two sets of numbers can never be reconciled.
Date
DSR
Ref #
Job Type
Technician
Tier
Priority
Region
Jobs
Reason
Notes

Database

Every submitted assignment row, live from Supabase.

Availability

Technicians are grouped under the DSR who owns them, straight from the roster sheet — a technician cannot drift to another DSR here. Mark who is working today; those marks are the only source for the monthly averages below.
—

Average technicians per DSR

Counted from WORKING TODAY marks. A DSR’s own approved days off, weekends and company holidays are excluded from their working days, so they are never penalised for not being there.
Period

Technicians

The roster the whole app runs on. Priorities come per job type: High End → HE priority, Low End → LE priority. Each technician exists once even if they appear in both priority tabs.

Sync priorities from Google Sheet

Runs automatically on app open (max once per hour). Pulls Priority HE and Priority LE, updates existing technicians and adds new names, deduplicated. Techs removed from a tab lose that tab's priority.

Add technician

Edit tier, region, and priorities inline — changes save on the spot. Deactivate instead of deleting to keep history intact.

Weekly performance import (paste from CRM)

Copy the technician performance table from the CRM (or your spreadsheet) and paste it below — tab-separated, exactly as copied. Re-pasting the same week overwrites it. Status is computed from the last 3 months: ADL < $250 → C · $250–300 → B · > $300 → A.

3-month status (rolling 90 days)

Dispatchers

Manage the DSR list that appears in Daily Entry, the Meeting board, and every filter. Renaming a dispatcher also updates their name across all historical records so their stats stay in one place.

Add dispatcher

Deactivate hides a dispatcher from dropdowns and the Meeting board but keeps all their history. Delete removes them from the list permanently — their historical assignment rows remain in the Database under their name. Anyone with dispatcher-group history cannot be deleted: deactivate them instead, which also ends their open group memberships today. Luka’s Team is a display grouping only — ticking it grants no access, it decides who the team filter shows on this tab, the Meeting, Automation and Correctness.

Sign-in and Slack identities

Each dispatcher is one roster row, and four keys hang off it: the sign-in email, the account behind that email (Luka creates accounts in Supabase → Authentication), the Slack id the same-day watch credits a response to, and a current dispatcher group (set on Dispatch Groups → Dispatcher groups). A row with all four shows ✓.

CRM names

The CRM records dispatchers by their full display name ("Mzia Gviniashvili"); this pairs each with the DSR name every stat and target uses. Names below were seen in the CRM's last 30 days of assignments. An unmapped name's jobs show as CRM: <name> on the Dispatch Job tab and belong to no report — never mapped by guesswork. Leave the select blank to remove a mapping. Not every CRM dispatcher is one of ours: mapping is opt-in.

Pre-Job Property Briefs

Build a Zillow-based brief for tomorrow's jobs and send it to the technician. Knowing the property's value before the visit helps position the right options and lifts average ticket.

Job details

Houses

Brief Outcomes & Insights

Every generated brief is logged here, one row per house. Enter what happened after the job — sold or not, final ticket — and the insights update. Export the table as CSV any time.

Tech Prep DSRs

The people who can appear in the "Prepared by" dropdown on Property Briefs. This list is the only source for that dropdown — the main dispatcher roster is not used there.
Coverage Finder

Find coverage

Search a ZIP or address to see which technicians cover it, and what each of them can actually take.
Dispatch tag
Tag details

Then choose the appliance type and HE / LE to find the responsible dispatcher group.

Copy the tag name, paste it into Slack and select the matching group suggestion before sending. Use the specific group instead of @ardsr.

OOSA and customer owned parts follow their existing directives.

Search a ZIP or address
Booking guidanceOOSA & same-day rules
Same-day only before 12 PM at the customer’s location, with confirmed technician availability.

15+ miles outside company coverage: check applicable OOSA state rules and send an OOSA request to your DSR. . Apply the appropriate OOSA tag. No SCF waiver and no same-day service.

Before 12 PM local time: same-day may be offered only with confirmed technician availability. At or after 12 PM: do not book or promise same-day; offer the next available appointment.

Before confirming: verify service scope, coverage area, OOSA eligibility and same-day rules. A ZIP tests its centre point; check the full address near a coverage or timezone boundary.

Read CSR SOP
Outbound · Appliance Repair

Dashboard

Calls, reach and bookings for the dedicated outbound team. Every figure counts call attempts on their LA date — an evening call belongs to the day it was made, not to tomorrow in UTC.
Calls made
Selected period — outcomes
By agent — selected period
The book
Why records are or are not being called. A growing stopped count is the database being consumed — it is the number that decides when a refresh is needed.
Outbound · Appliance Repair

Database

Your book, and the whole customer database behind it. Look in switches between them: my book is the day’s work, every customer searches all of them and lets you log an outcome on anyone’s. Ownership still decides who a customer is allocated to — reading or editing across books never moves them. Customers who asked not to be called are never called again, whoever finds them.
My book
Outbound · Appliance Repair

Bookings

Every booking an agent has made. Anyone in Outbound can correct one — the appointment, the amount, the CRM job number, the notes, or its status — and every change is logged with who made it. A cancelled booking stops counting as a booking and a sale in the Agent report.
Outbound · Appliance Repair

Agent report

Per agent, over a range you choose — for the daily meeting. The Dashboard answers “how is the department doing”; this answers “how is each person doing”, which is a different question and needs its own dates.
Calls and outcomes
Every outcome, per agent
One column per outcome actually used in the range. A blended “not reached” hides the difference between nobody picking up and being hung up on, and those call for different coaching.
Follow-ups, right now
Not a range — “overdue” is a fact about today. Asked is a customer who requested the date; due is the system’s cooldown coming round.
Each agent’s book
Owned, never called, and worked out. A large untouched number is a book sitting idle, which no call count will show you.
Outbound · Data

Upload

The call database is loaded by uploading a CSV. There is no live link to any spreadsheet — the book is a copy of whatever file was last uploaded, and no fresher. Two books, HE and Regular, because their loss patterns differ and they need different scripts.
! Wherever the file comes from, do not publish it. A CSV of this book carries customer names, phone numbers, emails and home addresses. Uploading it here keeps it behind a sign-in; a Google “publish to web” link, a shared Drive folder or an emailed copy does not, and would undo the entire reason these tables are locked.
Books
Upload a CSV admin
Choose a CSV and the book it belongs to. Columns are matched by header name, so a column inserted or moved in the file will not shift the others. Nothing is written until you press Upload — and an upload adds only: a record already in the book keeps its attempts, history and suppression.
How a row becomes a call
Derived at upload from Status, Invoice and Lose reason. The file’s own words are kept verbatim on every record, so a rule can be corrected and re-derived in place — no re-upload needed.
Outbound · Access

Agents

Who may open the Outbound workspace, and how many customers a day each one can take. Membership is checked by the database against the caller’s own session — this page cannot grant anything your account could not.
! The account has to exist first. Create it in Supabase → Authentication → Users → Add user, ticking Auto Confirm User, and let the person set their own password. This page never asks for or stores one. Then add them below.
Add an outbound user
Outbound users
Removing someone who has logged calls deactivates them instead of deleting — their call history is evidence and has to survive.
Outbound · Policy

Call rules

The thirteen outcomes and what each one means for allocation. These are data, not code: changing whether an outcome can be called again is a click here, not a deploy.
! Four of these are assumptions and need your ruling. The specification named only four never-call outcomes (DNC, OOSA/Wrong Number, OLD DNC, Wrong Number) and one explicitly callable (Hung Up). Not Interested is the one that carries real risk: as set, someone who declined can be called up to two more times. Untick Call again to make it final.
Outcomes
Limits
Access

Users

Admins change service fees, the Dispatchers tab, Dispatch Groups and settings, in three tiers. The Super admin adds and removes team leads and sets tiers. A Manager sees everything. A Team lead sees everything except Projects and Team Schedule. Every grant is checked by the database against your own session — this page cannot grant anything your account could not.
! The account has to exist first. Create it in Supabase → Authentication → Users → Add user, ticking Auto Confirm User, and let the person set their own password. This page never asks for or stores one. Then grant it below.
Add a team lead
Current admins

Luka’s Team

Team members see Office Sales, Team Schedule, Tech Prep and Projects, plus the Coverage Finder tabs they maintain themselves — Technician details, Technician links and Coverage strength. Everything else an admin can change stays admin-only, service fees included. Team members are dispatchers too: they see every dispatcher page listed under Dispatchers below, and their own numbers on the Dispatcher dashboard once their email is added there. Admins are on the team automatically, and any admin can add or remove a team member.
Add to the team
Current team

Dispatchers

Dispatchers sign in and see the Dispatch Board, their own Dispatcher dashboard, the Coverage Finder, Dispatch Groups and Updates. Adding someone links their sign-in email to their name on the dispatcher roster; removing them unlinks the email — their roster row, jobs and history stay. Team leads, the manager and the super admin can add dispatchers.
Add a dispatcher
Current dispatchers
Coverage Finder · Luka’s Team

Technician details

What each coverage area will and will not take, and when. One row per area, not per person — a technician drawn twice has two sets of rules on purpose.
i This page replaced the spreadsheet on 12 Aug 2026. The Technician Details tab is a stale snapshot now, and its Apps Script triggers were deleted — running its “Push now” by hand would delete every detail typed here that the sheet does not have.
Coverage areas are not editable here and never will be: they are polygons, drawn in Google My Maps. This page fills in the rules for the areas the map already has.
Areas
Coverage Finder · Luka’s Team

Technician links

Per-person settings: the Slack channel their avatar opens, and the name the CRM knows them by. Both belong to the person, not to a map area — a technician drawn twice has one of each. Clear a box to remove it.
i Only https://…slack.com/… and slack://… links are accepted, and the check runs again when the avatar is drawn — a link that arrived any other way still cannot become a redirect.
Technicians
Coverage Finder · admin

Service fees

Each region's fee comes from its folder name in Google My Maps — AR: Los Angeles - Area SCF: $69 — which is a single number. HE and LE are priced separately here. An empty box inherits the folder's fee, shown greyed as the placeholder; clear both and the override is removed entirely.
i Fees set here are permanent. They are stored outside the map and survive the nightly sync, indefinitely, until you change or clear them. The folder name is only the fallback for a region with no fee set here. Overridden rows are labelled edited in the results, so a fee that disagrees with its folder stays visible rather than mysterious.
A fee is attached to the region, not to the folder's exact name, so changing the price written into a folder name does not detach it — that rename is the one that actually happens. Renaming the region itself (Los Angeles to LA) is a genuinely different place as far as this is concerned; those are listed above to be re-pointed rather than silently reverted.
Regions

Technician time off

Days a technician is away. While a range covers the job date, they are hidden from Find coverage and from the map for those days only — everything else about them is untouched, and they come back on their own. Use on hold in Technician details for an open-ended stop instead.

Book time off

Report a departure

A technician who no longer works with us — not time off. Nothing changes until an admin reviews and confirms the report: until then they stay bookable and stay in Find coverage.

Coverage data quality

Problems found in the source map. These are surfaced rather than silently corrected, so the map itself gets fixed — it is the system of record.

How the notes are read

Exclusions are parsed from free text, so they are approximations. Every card shows the raw dispatch notes — check them before committing a job. A note like “no LG fridges” produces a brand exclusion and a type exclusion independently, which is stricter than intended: good enough for narrowing a list, not for automatic assignment.

Coverage strength

How strong the coverage actually is, per ZIP — how many technicians cover it, in which tier, taking which appliances, with how much capacity left. Scored through the same engine as Find coverage, so the drilldown always agrees with a search.

Where to hire next

Grouped by place, ranked by how much weak coverage and lost demand it carries. RECOMMEND means: 8+ fragile ZIPs, or 3+ searches we could not serve in 30 days, or 5+ ZIPs where the covering technicians are at capacity.
What to say on the call, and what not to promise.
Plumbing · Find → Check → Confirm
Technician Coverage Setup SOP — Google Earth → KMZ → My Maps → verify in Tower.
When a technician leaves: report it in Tower, post the reason in the channel, re-home the jobs, remove the placemark. SOP AR-DSR-002 · v1.0 · effective 15 Sep 2026.
What to send, and to whom, before a day off, on the day of an emergency, or when you have to leave mid-shift - and who covers the group.

Bookings

Log an OOSA booking and assign it to a partner technician. Confirm the applicable state rules, the $149 SCF and the 2–3-day lead time before logging it. OOSA applies across operating markets; no SCF waiver or same-day service.

All Bookings

Pending assignment

0 waiting
Jobs with no partner technician yet. The run date is the deadline — a technician must be secured before the appointment.
New booking

Partner Technicians

The OOSA partner network. Commission is negotiated per technician and cannot exceed 60% without management approval.

Add a partner technician

Technicians Payouts

Every non-cancelled OOSA booking. Commission = (job revenue − parts cost) × commission %. Cash owed to company = job revenue − parts cost − commission; the technician keeps reimbursement for parts they purchased.
Open a technician card to review their jobs and payments.

Sales & Performance

Set the outcome of each booking, then read the partner-technician breakdown below.
Period Show Job type

Bookings — set outcome

DSR booking bonus

$20 for every booking a DSR logs that is not cancelled. Pending bookings count — they are earned the moment they are logged, so a Pending job that later cancels stops being eligible.

Partner technician performance

A run is a booking the technician actually attended — SCF Only or Sold. Cancelled and Pending bookings are not runs.
The official OOSA DSR SOP, exactly as issued.

Parts Installation

Jobs where the customer supplied the part and we charge labour only. Quote the fixed labour price and say it plainly: we fit the part, we do not guarantee it will work. Log the job when you book it, then set the outcome once the technician has run it.
Period Show

Log a job

Every job starts as Booked. Set its outcome below once the technician has run it.

Jobs

0
We fit the customer's own part, we do not guarantee it · $149 service call, credited against the labour · SOP AR-LE-005 · v1.1 · active, in force from 17 Sep.

Emergency Service

Pilot 19 Sep – 31 Oct 2026: weekend and same-day appliance-repair calls at the $199 service call fee, $100 of it to the technician. Log every Emergency booking when you take it, then set the outcome after the run. Periods count the appointment date.
Log every Emergency job here; the SOP is what you say on the call.
Period Show

Log a job

Every job starts as Booked. Set the outcome below once the technician has run it — the $199 fee and the $100 payout are filled in for you and can be edited; type 0 for a waived fee.

Jobs

0
Comments are shared with everyone who can access Emergency Service. Click a comment box to edit; it saves when you leave the box.

Weekend appliance-repair jobs per week — from the CRM sync

Project Registry

Every project and how it ended. Mark a project Completed when it succeeded, or Failed when it was cancelled — the closing date is stamped automatically.

Add a project

Active

0

Completed projects

0 finished successfully

Failed projects

0 cancelled or abandoned
Your workspace

Projects

Every Appliance Repair project, in the seven fields the department head asked for.

Project DSRs

Who is on the OOSA project. This list is the only source for the “Logged by” dropdown on bookings — the main dispatch roster is not used here, because this project is separate from day-to-day operations.
Consolidated management package — internal / confidential. Admin only.

Daily Reports — Tracking & KPI

On-time vs late vs missed against the 9:00 AM LA deadline. Missed = no report submitted for a business day. Export for records.
Report Range

Monthly KPI reached

On time / Graced = 100% · Late = 50% · Missed = 0%. "KPI reached" is the average across business days.

Day-by-day (change a status if needed)

Use the dropdown to override any day — e.g. Missed → Graced when the reporter was excused. Overridden days show a ✎ mark.

Access & setup

You reach this workspace by signing in as an admin — your name at the bottom of the sidebar, with Show admin controls on — no separate code. Set a reporter code below and share it only with the person who files the report; they'll use it to unlock a submit-only view. Everyone else never sees this workspace. Leave a field blank to keep it unchanged.

Team Schedule

Day-off requests, company holidays, and the team calendar. Holiday work earns a swap credit that can be exchanged for a day off.

Request a day off

Requests

Team calendar

Day off Half shift (4h) Worked the holiday Company holiday 3+ away
Weekends are not working days and are excluded from every count. The badge on a date counts how many dispatchers are away; a half shift still counts as a person partly away.

Sales Dashboard

By Salesperson

Sold $ by Day

The day's work, counted four ways

Daily Metrics

One row per salesperson per day.

Sales Log

One row per sold job, with the CRM job reference, amount, and date of sale. These feed Sold #, Sold $, closing ratio, and ADL everywhere.

Log a sale

Enter what you closed — that is the amount the reduction applies to. Job type is required: it decides whether 3 points comes off the technician's rate (LE) or 1 point (HE), for this job only. Their rate is optional — the dollar saving is the same at any rate. Read the policy.

Commission cost share

What SOP AR-LE-001 has saved, by technician. When a salesperson closes a job the technician did not close, the technician's rate on that sale only drops 3 points on LE or 1 point on HE. Their standing rate never moves. Read the policy.
Month
Click a technician to see only their sales below.

The sales behind these numbers

One row per reduced sale in the period, with the CRM job reference the salesperson entered. Tech paid is the dispatcher's tick that the technician has been paid for that sale — it records who ticked it and when.
How follow-up sales are paid. SOP AR-LE-001 · v1.1 · effective 1 Sep 2026.

Salespersons

Manage who appears in Daily Metrics and the Sales Log. Renaming updates the name across all historical records.

Add salesperson

Deactivate hides a salesperson from entry screens but keeps history. Delete removes them from the list — historical rows keep their name.

Follow-ups

Every follow-up job, in one place. Press Log on a row to record a call — the row moves itself to where it belongs.

Rules

When the book takes over the numbers, who gets which jobs, what each status does, the words the book uses, and anything it could not recognise. Everyone can read this; admins can change it.

When the book takes over the numbers

Up to this day, Daily Metrics shows whatever was typed in by hand and can still be corrected. From it, the screen counts the follow-ups your agents log and nothing on it can be typed. Leave it empty until the agents are actually working in Tower — importing the old sheet backfills follow-up dates going back months, and those are a reconstruction of what happened, not a record of anybody working here. Setting this to a day before the team moved in would publish that reconstruction as their daily numbers.

Who gets which jobs

Distribution runs on the Import tab, after the morning export. A blank filter means any, the lowest priority number wins, and the first rule that matches is the only one that applies. Anything no rule matches is spread evenly across whoever can take that type — so an empty list still distributes, it just does not prefer anybody. A job that already has an agent always goes back to that agent, whatever the rules say.

What each status does

Closes takes the job out of the working book. Cooldown is how many days after a follow-up the job comes back — unless the agent pinned a date of their own, which always wins. Changing either takes effect on the next follow-up logged; nothing is rebuilt and nothing is deployed.

Anything the book could not recognise

Nothing is ever dropped or guessed at. A value the book does not know is kept exactly as it arrived, shown as it arrived, and listed here until somebody decides what it means. An empty table is the goal.

The words the book uses

Written out from the same lists the code runs on, so this cannot drift from what actually happens.

Import

The morning CRM export, and the one-off load of the old Follow UP AR tabs. Nothing is written until you have read the preview and pressed Import.
Choose a file to see what it holds.

Hand the jobs out

Once the morning export is in, distribution gives each agent their day using the rules on the Rules tab. Preview writes nothing. Running it again later tops up — it never hands the same job out twice, and a job that already has an agent always goes back to that agent.
Preview first to see what it would do.

Past imports

Did this morning's import run, and what did it do.
Updates

What's New

Sign in with your DSR account to see updates addressed to you. Breaking and behaviour changes require your acknowledgement; minor ones appear in history and interrupt nobody. Managers choose the audience of each update.

i Questions about a change go in the team channel, not a DM. An answer in the channel is read by everyone who was about to ask the same thing; the same answer in a DM is read once and then lost. If two people ask the same question, the release note was wrong — that is worth fixing at the source.
All changes
What the change notices are, what “Got it” records, and where questions go.
Dispatch Groups / Groups

Group Library

Your roster technicians, organized by dispatcher.

Technicians and skills come from the roster. Inactive or terminated technicians are excluded automatically.

Inactive / terminated

Roster status controls eligibility. Group assignment preserves the roster.

Dispatcher groups

Which dispatchers work in which group, and since when. A dispatcher is a member of one group at a time and may back up others; every change is dated, so the history stays. Managers and the super admin maintain groups, leads and memberships. Team leads see their assigned attendance on Team Schedule.

Manage discount rules

Choose a location, update its limits, then save.

Technician calendar

Los Angeles time · CRM jobs & Tower availability
⚠️
Name is missing
Pending requests

Find a workspace

Help

Your familiar workspaces, across every screen.

About Tower

One place for your people, coverage, and work.

Connecting…
Technical details
Version
build 2026-10-29a
Database
Supabase
Appliance priorities
No sync recorded on this device