Dashboard
Accepted appointments — last 14 days
Money this week
Agent output this week
Client delivery vs weekly target
Appointments by area this week
Acceptance rate — last 8 weeks
What needs attention
Dashboard
Weekly target
Accepted per day — last 14 days
Pay
Hours breakdown
Weekly Entry
Each agent's hours for the week — add them once, typically Friday after the shift ends. Booked, accepted and rejected come from their appointments automatically.
| Agent | Hours | Booked | Accepted | Rejected | Score |
|---|
How the score works
Agents
Everyone on the floor, at a glance. Click one for the full picture.
Agent Reports
A live dashboard for one agent at a time, plus black-and-white PNG scorecards to send straight to them.
Agent dashboard
Accepted per day — last 14 days
Pay
Hours breakdown
Leaderboard
Standings
| # | Agent | Hours | Booked | Accepted | Rejected | Pace | Score |
|---|
Accepted against pace
Target scaled to the week so far, not the whole week.
Score
Hours, output and quality, weighted 35 / 55 / 10.
Team accepted per day
Monday to Friday, against the team's daily target.
Rejection rate
Share of everything booked that came back rejected.
What this week is telling you
Shareable card
The standings, the pace and the headline insight in one image — sized to drop straight into a chat.
Payroll
Weekly pay built from the hours and accepted appointments you've already entered.
| Agent | Hours | Rate | Base | Accepted | Bonus ea. | Bonus | Total |
|---|
Rates save against the agent, so you only set them once. Bonus is paid per accepted appointment — rejected ones earn nothing. Mark someone terminated in Weekly Entry and they drop out of payroll and the dashboard's payroll and profit figures.
Payroll reports
Everything finance needs to cut checks — one row per agent, this week.
| Agent | Days | Hours | Ready | Break | Meeting | Calls | Booked | Accepted | Appt/day | Accept rate | Cost/appt | Revenue | Base pay | Bonus | Total pay |
|---|
Appointments
Everything pulled from your sheet. What you set here decides whether it reaches the client and how the agent's day counts.
| Booked | Appointment | Time | Homeowner | Area | Roof age | Agent | Client | Status | Outcome |
|---|
Accepted goes on the client report as Delivered and counts as an accepted appointment for the agent. Rejected counts against them and never reaches the client. Pending counts as booked while you decide. Follow up is for anything that needs another look before you can call it either way. Re-pulling the sheet never overrides a decision you've made here — and never changes who it's assigned to once you've picked a client.
Outcome is what actually happened once the client ran the appointment — set by them, or by you on their behalf. It shows up on their report, and only staff and the client themselves can set it.
Calendar
Dashboard
Outcome breakdown
Appointments by city
Delivered per week — last 8 weeks
Clients
Who you're delivering to, what they expect each week, and what it's worth.
Add a client
This week
Client Reports
The appointment list you send the client. No pricing and nothing about agents.
Log an appointment
Appointments this week
| Booked | Appointment | Time | Homeowner | Address | City | Zip | Status |
|---|
People
Who can sign in, and what each of them can see. Everyone shares the same data — the difference is how much of it reaches them.
Your business
Invite someone
Who's in
| Role | Signs in as | Joined |
|---|
Codes not used yet
| Code | Role | For | Expires |
|---|
What each role can see
| Owner | Manager | Agent | Client | |
|---|---|---|---|---|
| Their own daily numbers | Yes | Yes | Yes | No |
| Their own pay | Yes | No | Yes | No |
| Everyone's daily numbers | Yes | Yes | No | No |
| Their own appointments | Yes | Yes | Yes | No |
| Their own accepted appointments, and who booked them | Yes | Yes | No | Own only, agent hidden |
| Everyone's appointments and homeowner details | Yes | Yes | No | No |
| Set an appointment's outcome | Yes | Yes | No | Own only |
| Clients and client reports | Yes | Yes | No | No |
| Pay rates and payroll | Yes | No | No | No |
| Operating costs and profit | Yes | No | No | No |
These aren't hidden screens — the database refuses the data outright, so it holds even for someone poking at the page.
Operating Costs
Everything you pay for that isn't wages. Enter it once at its natural rhythm and the app keeps the weekly and monthly views in step.
Add a cost
The next 30 days. Paid one already? Mark it and the app moves the date on a cycle.
| Cost | Category | How often | Last paid | Next due | Amount | Per week |
|---|
Where the money goes
Cost of running a week
Settings
Targets, branding, and your data.
Scoring targets
Appearance
Branding
Property photos
With a Google Street View Static API key, an exported appointment card carries a photo of the property. The address on the appointment is looked up at export time; nothing is stored and no photo is fetched anywhere else in the app.
This key travels with the page and anyone opening the app can read it, which is how every browser-side Google key works. Restrict it in the Google Cloud console — Credentials → your key → Application restrictions → Websites, limited to your own address, and API restrictions limited to the Street View Static API. An unrestricted key can be used by anyone who finds it, and billed to you.
Appointment source
Point this at a Google Sheet and the app reads it on its own. In Sheets: File → Share → Publish to web, pick the sheet holding your requests, choose Comma-separated values (.csv), publish, and paste the link here.
Re-reading the same rows updates them rather than duplicating, so pulling often is safe. Anything you've edited by hand — a status, an agent's hours — is left alone.
Your data
Everything is stored in this browser. Export a backup regularly, and always before clearing browser data.
Erasing appointments clears the reviewed list and the raw import cache, so a re-pull starts clean — but pulling your sheet again brings back anything still sitting in it.
Sync
Sign out from the menu next to your name, top right.
Give the app to your team
By default the first thing a new person sees is a screen asking for the project URL and key — which you don't want to be handing out. This makes a copy of the app with those already filled in, so everyone else lands straight on the sign-in screen.
Database setup code
This is the code that has to be run once in Supabase before people can share the data. Press Copy, paste it into the Supabase SQL editor, and run it. Running it more than once does no harm.
Show the code