1. In Supabase run schema.sql (SQL Editor → New query → Run).
2. Seed history with assignments_seed.sql and import technicians.csv.
3. Paste the Project URL and anon public key from Settings → API. They are saved in this browser only.
Can’t reach the database
The connection dropped. Nothing is wrong with your computer — this retries on its own when you are back online.
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
Cumulative assignments vs target
Everyone’s numbers, and anything needing attention
Needs attention
Set up the KPI admin
KPI eligibility admin
This list is the whole KPI population, and it should be every active dispatcher. The target is one floor-wide number that everybody is measured against — teams are not scored separately, so a list covering only part of the floor produces a target that is wrong for everyone. Ranges are effective-dated for joiners, leavers and extended leave; a dispatcher may have several and still counts as one seat.
KPI thresholds admin
Status bands read as a descending cascade. Above > On track > Below is enforced by the database — an inverted pair would empty a band instead of erroring.
Fix the assignment rows first, then recalculate: the month’s frozen rows are deleted and re-frozen from the data as it stands now.
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.
Month plan admin
Two numbers for the whole month: how many dispatchers it is planned for, and the KPI each should reach. Everything else is arithmetic — required jobs, what is still needed, and the pace that needs. Leave a box empty to accept the greyed suggestion; it stays provisional and dashed on every screen until you save it.
TECHNICIAN PAYMENTS
Prepare. Review. Hand off.
One request per half-month · review times in Los Angeles / Pacific
Your payment notifications
Assignments, approvals and review reminders
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.
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.
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.
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.
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.
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.
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.
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.
Admin setup · reviewer roster and ClickUp cutover
my locker
Dispatcher dashboard
Shared group evidence
Delayed and unattended evidenceHow this report works
Job efficiency is your individual Board KPI: only explicitly unjustified jobs fail; unmarked jobs count as justified. Target: 98%.
Group requests use the same evidence as Dispatcher groups and KPI Progression: all human messages carrying a registered dispatcher subgroup tag in Appliance General and Appliance Same Day. A reply or emoji from a verified dispatcher in the tagged Slack group must arrive within 2 minutes, including exactly 120 working seconds. Counted only Monday–Friday, 8 am–5 pm Pacific. Requests sent outside that window are skipped; timers pause overnight and on weekends.
Late and unattended cases are shared group outcomes, not a claim that you personally skipped a request. Only confirmed failures appear below; pending evidence is never counted as a failure.
Calendar months use Los Angeles time. Scores remain provisional until monthly review. Incomplete or changed member-group dates need review before a shared report can be attributed.
What’s next
Your private manual to-dos
Completed
Visible only to you · Los Angeles time (PT)
Keep Tower open for reminders. Chrome notifications are optional; browser or device sleep can delay them.
My technicians
Your active roster, with the evidence behind each figure.
Performance · Last 90 completed days Load · This week, Pacific time
Technician roster
ADL rounded · Bands use exact revenue / jobsOwnership from Group Library
Group performance · Calm GridHow these numbers work
Group numbers cover the technicians on your Dispatch Groups column who are linked to a CRM name; unlinked technicians are listed but not counted. ADL is total revenue divided by jobs run over the last 90 days, Appliance Repair Regular and High End only. LE and HE are calculated separately; band (evidence) uses blended ADL. A: above $300. B: $250–$300. C: below $250. Fewer than 15 jobs or no valid snapshot: ungraded. These bands do not change dispatch tiers. Displayed ADL is rounded; bands use the unrounded revenue / jobs ratio.
Closing is jobs sold divided by jobs run. Jobs per technician uses technicians with valid performance data. Weekly load uses observed technician-days, Monday through today (Friday on weekends), in Pacific time; missing cache rows are unknown. Days above 3 jobs means days when any group technician had more than 3 jobs. Floor comparisons use assigned active technicians without conflicting dispatcher ownership.
Technicians needing data
Attendance
Private to you, your primary Dispatch Group lead and managers. Half shifts use 0.5 Personal day. Approved future leave is included.
How your KPI earnings work
Each KPI pays its full budget share only at its target, capped at that share. Revenue 35%, group response reliability 25%, job efficiency 20%, group ADP 20%. Current results are provisional. Monthly results are reviewed from the 15th of the following month; Tower does not transfer payments.
Job efficiency = (Board jobs − explicitly unjustified jobs) ÷ Board jobs × 100. Unmarked jobs count as justified. Jobs are weighted by the Board’s Jobs field and counted on their entry date, through today, in Los Angeles time.
Reliability = (eligible assessed requests − confirmed late or unattended failures) ÷ eligible assessed requests × 100. All human messages with a registered dispatcher subgroup tag in Appliance General and Appliance Same Day count. A reply or reaction from a verified dispatcher in the tagged Slack group must arrive within 120 working seconds, counted Monday–Friday, 8 am–5 pm Pacific. Requests sent outside that window are skipped; timers pause overnight and on weekends. Missing or uncertain evidence stays pending.
Shared scores use your dated member group, never your backup groups. A membership gap or a move between groups needs a payout policy before shared earnings can be calculated. Zero jobs or requests means no score. USD allocations sum to your budget; any rounding cent goes to ADP.
Manager controls
Monthly KPI plan
Individual plan
Revenue pays its full 35% share at 85% of the entered goal.
Shared group ADP
Monthly review
team view
Dispatcher dashboard
Dispatcher groups at a glance. Group performance covers the last 90 completed days; dispatch activity has its own date range.
Group comparison
Performance · Last 90 completed daysLoad · Observed days this week (PT)
Acceptance · Data pending · Reliable offered / accepted job events are not available yet.
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.
—
The browser could not read the sheet directly (Google blocks cross-site reads). Open the published CSV link in a new tab, select all, copy, and paste it here instead — same result.
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.
Departure reports
Filed by dispatchers on Coverage Finder → Time off. Confirming deactivates every roster spelling and stamps who/when/why; it does not delete the map placemark (Google My Maps) and does not touch the Dispatch Groups board.
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
Copies a clean text version the technician can read on any phone.
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.
Performance by price band
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
Tier
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.
Use this when the job already has an OOSA tag or dispatch confirms the OOSA workflow. It prevents a regional waiver from being shown.
Confirm with the customer when their local time differs from the location estimate.
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.
Allocation admin
Tops up each agent’s book for the chosen date. A customer already owned by an agent only ever goes back to that agent — if they are at their cap the record waits rather than moving to somebody else. Unowned customers are claimed on allocation and stay claimed. Preview first; it changes nothing.
My book
The book admin
Every uploaded record, whether or not it is queued today. This is the database itself — the queue above is only what was allocated for one date. Records that are stopped are shown with the reason, and are never allocated.
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.
iRead only. Only the super admin can add a team lead, change a tier or remove an admin. Luka’s Team and Dispatchers below are open to every admin.
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.
iThis 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. CRM name is how job counts find this person. Without it the card shows no count rather than a zero, because "we do not know" and "no jobs" are different answers.
Channels that no longer match anyone
Set against a technician the map no longer has — usually a rename, sometimes someone who left. Nobody sees these.
Technicians
Cannot take a channel yet
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.
iFees 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.
Overrides that no longer apply
These fees are set against a map folder that no longer exists — almost always because the folder was renamed.
Nothing is charging them. Point each one at its new folder, or remove it.
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.
PeriodShowJob 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.
PeriodShow
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.
PeriodShow
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
$199 on a weekend or same-day appointment, $100 of it to the technician, credited against the repair · SOP AR-LE-006 · v1.0 · awaiting approval · pilot 19 Sep – 31 Oct.
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
0finished successfully
Failed projects
0cancelled or abandoned
Your workspace
Projects
Every Appliance Repair project, in the seven fields the department head asked for.
Links open as they are. Files go to a private bucket only Portfolio members can read; an attachment is saved the moment it is added and logged like any other change.
Pending decision
Shown at the top of the department head's Manager view, in the decision queue and in the Slack digest. A project can be in progress while a decision waits; approving records the decision and leaves the status to the PM.
Next action
Milestones
proposedagreeddonepilotA milestone with a date is drawn here. One with only words ("mid-September") is listed below and never placed at an invented day.
Proposed = the PM's plan, not yet agreed by the department head · Agreed = confirmed · Done = shipped.
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.
This area is private. Enter your access code to continue.
Daily Reports
LA time now
—
Enter today's rows
Submitted report
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.
ReportRange
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
Half Shift = 4 hours off, not a full day. It won’t count as a full absence.
Requests
Team calendar
Day offHalf shift (4h)Worked the holidayCompany holiday3+ 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.
Manager toolsYour team’s tools. Company holidays are managed centrally.
Company holidays
DSR month summary
Pick a DSR and month.
Sales Dashboard
By Salesperson
Sold $ by Day
The day's work, counted four ways
Daily Metrics
One row per salesperson per day.
Edits save automatically as you type (on blur).
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.
What is not being counted
Every row here is a number that is wrong or missing, not a warning to live with. A sale in scope with no job type is a saving nobody is counting.
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.
What is in the file
What the book does not recognise
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.
✓ You’re up to date
iQuestions 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.
Who has acknowledged what
Each A/B notice lists its active recipients. Existing notices are addressed to Everyone. Test is excluded. Confirmations record the dispatcher’s name and time.
Publish a release noteadmin
Choose the audience and tier. The audience decides who receives this update;
the tier decides how it appears, based on what it costs the reader to miss it. Editing a published note is for
typos only: if the substance changes, publish a new one, or the acknowledgements
already against it will attest to words nobody read.
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.
Group request response reliability · 2 minutes · target 99%
Every human message tagging a registered dispatcher subgroup in Appliance general or Appliance same-day. The score is shared within the tagged group. Replies and emoji reactions qualify only from verified dispatcher members of that Slack group; team leads do not count.
Job card
Partner technicians have no CRM access — fill these in and send them the card. Your internal comment is never included.
Card preview
Copying also saves.
Sign in
What you can change is checked by the database, not this page. Sign in with your own account.
Set your password
You are signed in through the email link — it only works once. Choose the password you will use from now on.
⚠️
Name is missing
Log an attempt
Every attempt gets an outcome before the next one. An un-dispositioned attempt burns the record and teaches the system nothing. A call, an email and a text all count the same against the attempt cap.
!
Booking
!
Changes
Correct a call
Admin only. Change what a call recorded, when it was logged wrong. The call keeps its agent and its date, and every correction is kept with your name and your reason.