Express Paint
Operations Dashboard - Cairns / FNQ

Today's Snapshot

β˜€οΈ Your morning brief

β–Ύ
Loading…

πŸ’‘ Insights

Loading…

πŸ”₯ Top Performers

View full leaderboard β†’
#WorkerCrewCurrent StreakRankThis MonthBadges
Loading…

🟒 Currently On the Clock

WorkerJobAddressClocked InHours So Far
Loading...

Today's Activity (All Workers)

WorkerHoursCostJobs Worked
Loading...

Jobs Marked "On Site"

JobSupervisorClientStage

Jobs

Invoicing

🧾 Invoices sent to MYOB

Every invoice built in the dashboard lands here automatically the moment its MYOB file is downloaded β€” what was invoiced, when, and by whom. ⬇ re-downloads an invoice's import file; × removes the ledger record only (never touches MYOB).

ExportedInvoice #CustomerJobPO Ex GSTGSTInc GST By / batch

Quotes & Tenders

Quoting pipeline. Convert a winning quote straight into a job.

πŸ“₯
Drop a quote PDF here β€” a Draft quote is created automatically
Works for a builder's request (client, site, scope, due date) or a finished priced quote β€” priced line items and the total come across too. 10–30 seconds Β· ~$0.01 each Β· single or multiple files.
PDF only β€” if you have a Word file, save it as PDF first.

Schedule

Contacts

Builders, clients, certifiers, suppliers, body corp managers.

NameCompanyTypePhoneEmailInvoices toLocationNotes

Scope Templates

Drop a builder's PO or a quote, get a site-ready scope, send it to the crew. Prices are stripped automatically β€” the crew never see money.

Loading…

πŸ“ Address β†’ Quote

Type an address, measure the roof off aerial imagery, and get a draft take-off. open in its own tab β†—

πŸ’¬ Ask

Ask about jobs, hours, margins, invoices, crews β€” it looks the numbers up the way the job card does, and shows its working. What it can look up depends on your access level; questions and the lookups behind them are logged and directors can review them.

πŸ”§ Defects

Builder defect lists, tracked to done with photos. Paste their email and Claude splits it up β€” it also works out which items are ours, since these emails go to every trade on the job.

Paste a defects email

Nothing is saved until you tick the items and choose a job.

Open defects

Loading…

βœ‰οΈ Email Helper

Paste an email you've received β€” get a drafted reply or advice on what to do. Nothing is sent automatically; copy the result into your own email.

πŸ“Έ Photos

Completion photos uploaded to jobs β€” newest first. Click a photo to enlarge, or a job name to open its card.

📤 Push photos to Ambrose — one-time bookmark setup
Once: drag this button onto your bookmarks bar → 📤 EP → Ambrose
Then per job: click 📤 Photos → Ambrose on a job card (or 📤 Ambrose below) — it opens Tradies Admin with the PO number copied. Search it under Show All PO's, open the PO, click the bookmark: it finds the "Upload Here" box, shows you how many photos it's about to send, and uploads on your OK. It never touches COMPLETE or Submit Invoice.

PO Intake

Drop a builder Purchase Order PDF and Claude extracts the data into a job. Review and approve below.

πŸ“„
Drop a PO PDF here, or click to browse
Claude parses it in 10-30 seconds Β· ~$0.01 per PO Β· Single PDF or multiple at once
% confidence
ReceivedBuilderPO #SiteSupervisorTotalConfidenceStatusRates

Invoice Intake

Drop supplier invoices (Dulux, Wattyl, Taubmans, Cairns Hardware). Claude extracts items + matches to a job by the customer reference field. Materials cost lands against the job.

🧾
Drop a supplier invoice PDF here, or click to browse
Multi-file supported Β· Auto-matches to job by customer reference (job address) Β· ~$0.01 per invoice
% confidence + must be auto-matched
ReceivedSupplierInvoice #ReferenceTotalMatchConfidenceStatus

Messaging

Outbound + inbound SMS for jobs. Twilio integration in Settings. Phase 1: manual send and history. Auto-workflow comes in Phase 2.

πŸ”— Builder site-ready links β€” one link per supervisor; their page shows ALL their live jobs (site ready / change date / pause)

SMS sending mode

Message templates & timing β€” wording + when each SMS fires

StageToWhen it firesMessage previewActive
Loading…

Upcoming auto-sends

WhenStageJobToStatus
Loading...

Recent messages

WhenDirWhoJobBodyStatus
Loading...

Supervisor confirmations

Every "site ready?" link we've sent supervisors, and what they tapped. Click Open page to see exactly what the supervisor sees.

JobSupervisorSite ready?AnsweredTheir page
Loading…

βœ… Tasks

Your to-do list. Add a task with just a title β€” assign it, set a due date and priority, or link it to a job.

Loading…

πŸ“… My Day

Loading…

πŸ’° My Bonus

Your bonus pool right now β€” based on current margins on your linked jobs.

Loading…

πŸ“ˆ Progress

Log progress on jobs as you go. Tap a job to add notes, photos, and bump the % complete.

Loading…

πŸ’² Quote Approvals

Every job whose money isn't settled: rate quotes emailed to the builder and still awaiting approval, plus under-paid POs that need a re-quote sent. Same data as the βœ“ / βœ• / βˆ’ marks on the schedule pills.

πŸ’΅ Pay Export

TSheets hours β†’ MYOB payroll import. Each hour lands in exactly ONE pay item: Base Hourly, the shared Working away T'ville, or that worker's own "Working away $X" item (set once per worker below) β€” judged off each shift's job and the painter's base. Meal allowances (per-worker item) on multi-day away stints. Building the preview pulls the latest from TSheets first. Review, tweak, download, import into MYOB.

Pick the pay period and click Build preview. Hours come straight from the TSheets sync β€” no TSheets export needed.

πŸ’³ Debts

Money the company paid up front for a worker β€” an advance, tools, a fine, uniform β€” and is taking back out of their pay a bit each week. Each pay run, the Pay Export page shows what to deduct and logs it here with one click; cash or bank repayments go in by hand.

Loading…

πŸ… Bonus Tracker

Supervisor bonuses worked out in the background from finished jobs. Job margin: a tiered slice of a job's profit once its true margin (after overhead) clears the bar. New client: a slice of the profit on every job from a builder a supervisor brought in, for the first month, capped. Rows appear when a job is marked Complete, become payable when it's invoiced, and are logged paid from the Pay Export page.

Loading…

πŸ“‹ Day Sheets

Digital replacement for the paper day sheet. EP foreman fills it in on site during the day; builder's foreman / client signs at the end.

Recent Day Sheets

DateJobClientCreated ByWorkersHoursStatusSigned By
Loading…

πŸ”₯ Performance Streaks

A week is won by showing up every rostered day and logging the hours β€” rain days and approved leave don't count against you. Win weeks back-to-back to build your streak.

πŸ“… This Week

Loading…
πŸ’°
Invoiced Β· Last 30 Days
β€”
🏁
Jobs Completed Β· Last 30 Days
β€”
πŸ†
Latest MVP
β€”
πŸ’ͺ
Hours Leader (week)
β€”
πŸ”₯
Active Streaks
β€”
πŸ…
Badges This Week
β€”

πŸ‘· Crew Leaderboard

Crew = the supervisor pill colour each painter worked under most, last 30 days
CrewWorkersAvg StreakGold+Monthly
Loading…

⚑ Hot Right Now

Last 7 days
Loading…

Leaderboard

Revenue and profit come from jobs FINISHED in the last 30 days, split across everyone who worked on each job by their share of its hours. Add the column up and you get the value of the work we finished. Hours are what was actually logged in the last 30 days, so a worker can have plenty of hours and little revenue if their jobs aren't finished yet.
#WorkerCrewStreakRankRevenue 30dProfit 30dHours 30dBadges
Loading…

Badge Catalogue

Loading…

🩺 Data Health

Automated audit of the things that quietly break reports: work with no dollar value, finished jobs never invoiced, missing rates, unlinked hours. Every item links straight to the job so it can be fixed.

Running checks…

πŸ‘· Team

What each painter is good at, when they like to start, whether they'll work away, who they work well with and who to keep apart. πŸ€– Build crew and the πŸ’¬ Schedule helper read all of it β€” the more you fill in, the better they schedule. Saved as you go.

PainterRoleBaseFilled in
Loading…

⚾ Crew Stats

The numbers that actually predict a good day β€” who turns up, who's on time, how often the plan survives, and how much of our labour we can put a dollar figure on. The scheduling AI learns from all of it, so the better this is kept, the better it schedules.

πŸŒ… Morning crew check

Each supervisor gets one text at the set time: their jobs for the next working day β€” same crew / change / done / move. Answers book straight onto the board; clashes come to the office.
Loading…

πŸ™‹ Absences to explain

Rostered, site ran, never clocked on β€” last 14 days. One tap each. Sick, leave, rain and approved don't count against them.
Loading…

βœ… Reliability β€” last 8 weeks

Score = 65% showed up + 35% on time (start + 15 min). A sick day costs half a missed day.
Loading…

πŸ“Έ Plan vs actual

The board is saved at 5pm each evening; next day it is checked against TSheets.
Loading…

πŸ’² Scoreboard β€” labour we can put a dollar on

Old jobs from before the dashboard have hours but no revenue. Link their MYOB invoices so output-per-hour can be measured.
Loading…

πŸ“ˆ Money Map

Where the revenue comes from — and whether it's good money. Revenue is quote value plus approved variations, counted in the month the job finished.

Building the money map…
Loading the handbook…

Quick Hub

Settings

Users

Manage who can log into the dashboard. Director = full access including this Settings page. Office = full access except Settings (no API keys, no integrations). Foreman = sees only their own jobs.

NameEmailRoleActiveLast Login

Supervisors (pill colours)

Workers (from TSheets)

Hourly rates pull from TSheets. You can override per-worker here - changes auto-save when you tab out of the field or press Enter.

Role: 👷 Painter — on shifts, 🤖 Build crew can pick them · ★ Lead hand — top of the Schedule’s painter list in orange, still a painter · 🧭 Supervisor — runs jobs: top of the list too, but Build crew and the Schedule helper never use them as a spare pair of hands (you can still tick them onto a shift) · 🏢 Office — not on the tools: off the painter list unless they’re booked, never picked for crews. 📋 Profile = skills, who they work well with and who to keep apart — the scheduling AI reads all of it.

NameRoleRate $/hrCohortBaseActiveMobileBonus linkProfile

MYOB AccountRight

Live link to the company ledger β€” invoices, supplier bills and the overheads build all hang off this. Paste the Client ID and Secret from your app at developer.myob.com, make sure the Redirect URI below is registered on that app exactly, then Connect (you'll sign in with your my.MYOB login once).

πŸ”— Connect to MYOB
Loading status…

Domain API (Address β†’ Quote)

Fills in bedrooms, bathrooms, floor area, year built and pulls the listing photos on the πŸ“ Address β†’ Quote page, instead of typing or pasting them. Free tier at developer.domain.com.au β€” create a project, then copy its Client ID and Client Secret here.

Anthropic API (PO Parsing)

Used by PO Intake and supplier invoice extraction. Get a key from console.anthropic.com. Cost ~$0.01 per PO parsed.

Gmail Integration (Auto-import POs)

Polls office@expresspaint.com.au every 10 minutes. New PDFs from known builder senders auto-flow into the PO Intake queue. Setup guide: GMAIL_SETUP.md

TSheets (Schedule Sync)

Push the painter schedule into TSheets as all-day shifts. Worker hourly rates and the crew list also sync from TSheets (see People β†’ Workers). This area is a work in progress.

Work Order β€” Site Rules

A brief block of standard site rules automatically added to the bottom of every work order sent to TSheets (under a β€” SITE RULES β€” heading). Keep it short. A completion-photo upload link is also appended automatically.

Address Search (Google Places)

Paste a Google Maps API key with the Places API (New) enabled to power the Location address search (Add shift β†’ Location). The key is stored server-side and never shown in the page. Leave blank to use the free OpenStreetMap search instead.

Get a key: Google Cloud Console β†’ enable Places API (New) β†’ Credentials β†’ Create API key β†’ enable billing. Restrict the key to the Places API (New) for safety.

Builder Sender Rules (POs)

Email patterns for builder PO emails. *@domain.com matches any email from that domain. Subject filters cut false positives (e.g. repair schedules, statements).

PatternBuilderSubject Must ContainSubject Must NOT ContainActive

Supplier Sender Rules (Invoices)

Email patterns for supplier invoice emails (Dulux, Wattyl, Taubmans, Cairns Hardware etc). Subject filters cut promotional emails, newsletters, etc.

PatternSupplierSubject Must ContainSubject Must NOT ContainActive

Recent Poll Activity

No polls yet.

TSheets / QuickBooks Time (Live Labour Costs)

Pulls timesheets from TSheets every 10 minutes. Auto-matches jobcodes to dashboard jobs by address. Calculates labour cost from worker hourly rates Γ— hours.

How far back to pull when you reset the sync. 90=3mo, 180=6mo, 365=1yr, 730=2yr.
-
Runs every 10 min as part of the TSheets cron.
Only unmatched jobcodes with at least this many logged hours get auto-created. Default 0.5.

πŸ“‘ Schedule β†’ TSheets β€” Live Sync Log

Everything the dashboard sends to TSheets when the schedule changes β€” each auto-sync or manual push, which shifts it created / updated / removed, and any errors. Click any row to open it up for the full detail (crew, customer, colour, notes sent to TSheets). Tick Watch live to see new pushes appear as they happen. Read-only β€” nothing here changes anything.

TSheets Jobcode Mapping

TSheets jobcodes auto-match to dashboard jobs by address. For unmatched jobcodes (work that isn't in the dashboard), either link to an existing job OR click "Create Job" to make a new one - timesheets backfill automatically.

min hours threshold
TSheets JobcodeMatchActivityDashboard Job

Recent TSheets Polls

No polls yet.

Twilio (SMS)

Sends booking confirmations, supervisor checks, and client notifications via SMS. Get credentials from console.twilio.com.

Twilio console URLs to set:
β€’ Phone number β†’ "A message comes in" (POST): https://dashboard.expresspaint.com.au/api/sms_webhook.php
β€’ Status callback (auto-set on every send, no manual config needed): https://dashboard.expresspaint.com.au/api/sms_status_webhook.php


Auto-SMS workflow

When ON: cron auto-sends booking confirmations, supervisor checks (2 days before start) and client notifications (1 day before) for every eligible job. Send window 7am-7pm. Stale schedules (>24h old) auto-skip to prevent backdated spam.


AI auto-reply (experimental)

When ON: inbound replies are analysed by Claude. If AI confidence β‰₯80% and intent is one of confirm / access info / reschedule / question, the top suggested reply is auto-sent. Decline / other intents always leave for human follow-up. 30-min loop guard prevents bot-talking-to-itself. Cost ~$0.005 (AI) + ~$0.08 (Twilio SMS) per auto-reply.

Other integrations - coming soon

OneDrive (folder linking), MYOB (invoice push) added in next phases.

πŸ’° Bonus Plans

Configure bonus formulas + link them to specific workers (and optionally specific jobs). Each plan defines the max bonus, the floor, the qualifying margin range, and the step shape. When a linked worker opens the Progress tab on a linked job, their bonus tracker uses these settings.

Name Max Min Margin Range Shape Workers Jobs Active
Loading…

πŸ“‘ Bonuses In Effect Right Now β€” live calc based on current job margins

What this shows: for every active bonus plan Γ— linked worker Γ— in-flight job, this is the $ the bonus would pay out today based on each job's current margin (quote βˆ’ cost so far, including approved variations). Numbers move as costs come in β€” treat as a rolling indicator, not a final figure.
Loading…

βœ… Task Templates β€” auto-generate a checklist when a job is created

NameItemsAuto on new jobJob typeActive
Loading…

πŸ“‹ Painting Rate Card

Your expected ex-GST rate per task. The PO rate-check applies these to a PO's quantities to work out what the job should be worth vs what the builder is paying. Rates are guidelines ("approx β€” depends on size & access"). Edit a cell and hit Save on that row.

TaskVariantUnitRate (ex GST)Match keywords
Loading…

πŸ—„οΈ Database Updates

Applies any pending database structure updates (new columns/tables for features like bonus plans, day sheets, user permissions, streak flat-rate, template timing). Safe to run anytime β€” it only adds what's missing and never touches your data.

πŸ“‹ Day Sheet β€” guest access

Lets a sub / foreman submit a new day sheet from their phone with no login β€” behind a shared password. They can only create, never view existing sheets. Guest sheets land as Drafts in Day Sheets for you to review.

Checking…
Guest link: /daysheet.html

πŸ‘· Timesheet Cost Sweep

Walks every active worker and recomputes the stored hourly_rate + cost_total columns on every one of their timesheet rows to match the current rate in Settings β†’ People. Useful when historical timesheets show $0/hr or stale rates in the labour-entries modal because they were imported before a worker's rate was set. Safe to re-run β€” idempotent.

SMS Incident Recovery

Use this if SMS have gone out unexpectedly. Shows every recipient that received a real SMS recently, so you can see if any were real supervisors/clients (rather than test numbers). One-tap kill switch stops all further automation.

Disables auto-send + auto-reply AND cancels every pending schedule row

Revert schedule auto-applies

Roll back jobs whose start_date was changed by the schedule_intake auto-apply (e.g. when the Gmail backfill processed old emails). Restores from the audit log's old_start_date.


Send correction / apology SMS

Send a one-off correction to the recipients you tick above. Tagged as template_key='correction' for audit.

Utilities

One-off operations - safe to re-run.

Walks every job in stage Approved with a start date, classifies it (Townsville β†’ Kerrod Townsville, else Ambrose β†’ Karl, else Kerrod Cleall) and creates a single schedule entry on each job's start date. Idempotent - re-running won't duplicate. Undo deletes only the entries the bulk import created (tagged with a specific note) and reverts those jobs back to Approved.

SMS Cycle Tester

Walks you through the full SMS workflow on a test job so you can run as many full cycles as you want, end-to-end, without affecting real jobs. Each "Fire" button resets that stage and sends immediately (bypasses the 7am-7pm window + auto-send toggle). Reply YES to the Supervisor Check from your phone to unlock the Client Notification stage. NO blocks it.

Recent Activity

WhenWhoWhatDetails
Loading…