Today's Snapshot
βοΈ Your morning brief
βΎπ‘ Insights
π₯ Top Performers
| # | Worker | Crew | Current Streak | Rank | This Month | Badges |
|---|---|---|---|---|---|---|
| Loading⦠| ||||||
π’ Currently On the Clock
| Worker | Job | Address | Clocked In | Hours So Far |
|---|---|---|---|---|
| Loading... | ||||
Today's Activity (All Workers)
| Worker | Hours | Cost | Jobs Worked |
|---|---|---|---|
| Loading... | |||
Jobs Marked "On Site"
| Job | Supervisor | Client | Stage |
|---|
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).
| Exported | Invoice # | Customer | Job | PO | Ex GST | GST | Inc GST | By / batch |
|---|
Quotes & Tenders
Quoting pipeline. Convert a winning quote straight into a job.
PDF only β if you have a Word file, save it as PDF first.
Schedule
Add shift
Shift
Contacts
Builders, clients, certifiers, suppliers, body corp managers.
| Name | Company | Type | Phone | Invoices to | Location | Notes |
|---|
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.
π 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.
π Ask activity
Every question, newest first. Refused counts lookups the database turned down (director-only data asked for by an office user). Click a question to open the conversation.
π§ What Ask knows
These notes go into every question: how money is defined, the data traps, house rules, client context. Notes the assistant proposes appear as pending until you approve 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
Open defects
βοΈ 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
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.
| Received | Builder | PO # | Site | Supervisor | Total | Confidence | Status | Rates |
|---|
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.
| Received | Supplier | Invoice # | Reference | Total | Match | Confidence | Status |
|---|
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
| Stage | To | When it fires | Message preview | Active | |
|---|---|---|---|---|---|
| Loading⦠| |||||
Upcoming auto-sends
| When | Stage | Job | To | Status |
|---|---|---|---|---|
| Loading... | ||||
Recent messages
| When | Dir | Who | Job | Body | Status |
|---|---|---|---|---|---|
| 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.
| Job | Supervisor | Site ready? | Answered | Their page |
|---|---|---|---|---|
| Loading⦠| ||||
Edit template
{recipient_name}
{job_code}
{address}
{start_date}
{end_date}
{date_range}
{client_name}
{supervisor_name}
{express_paint_contact}
β 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.
Edit Task
📅 Ambrose bookings sync
Upload Ambrose's "Current Bookings Report" PDF. Each PO No. is matched to a job and any changed start date is applied automatically (exact PO match only). These reports are also picked up automatically from email β this is for catching up manually or processing a one-off.
Unmatched bookings (PO not found)
‴ Sync schedule to TSheets
Pushes your dashboard schedule into TSheets as all-day shifts so the crew see them in the TSheets app. Each painter's day-on-a-job becomes one TSheets shift. Review below before it touches TSheets.
π My Day
π° My Bonus
Your bonus pool right now β based on current margins on your linked jobs.
π Progress
Log progress on jobs as you go. Tap a job to add notes, photos, and bump the % complete.
Add Progress Update
π² 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
| Date | Job | Client | Created By | Workers | Hours | Status | Signed By | |
|---|---|---|---|---|---|---|---|---|
| Loading⦠| ||||||||
New / Open Day Sheet
Day Sheet
π₯ 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
π· Crew Leaderboard
Crew = the supervisor pill colour each painter worked under most, last 30 days| Crew | Workers | Avg Streak | Gold+ | Monthly |
|---|---|---|---|---|
| Loading⦠| ||||
β‘ Hot Right Now
Last 7 daysLeaderboard
| # | Worker | Crew | Streak | Rank | Revenue 30d | Profit 30d | Hours 30d | Badges |
|---|---|---|---|---|---|---|---|---|
| Loading⦠| ||||||||
Badge Catalogue
π©Ί 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.
π· 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.
| Painter | Role | Base | Filled 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.π 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.β Reliability β last 8 weeks
Score = 65% showed up + 35% on time (start + 15 min). A sick day costs half a missed day.πΈ Plan vs actual
The board is saved at 5pm each evening; next day it is checked against TSheets.π² 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.π 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.
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.
| Name | Role | Active | Last 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.
| Name | Role | Rate $/hr | Cohort | Base | Active | Mobile | Bonus link | Profile |
|---|
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).
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).
| Pattern | Builder | Subject Must Contain | Subject Must NOT Contain | Active |
|---|
Supplier Sender Rules (Invoices)
Email patterns for supplier invoice emails (Dulux, Wattyl, Taubmans, Cairns Hardware etc). Subject filters cut promotional emails, newsletters, etc.
| Pattern | Supplier | Subject Must Contain | Subject Must NOT Contain | Active |
|---|
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.
π‘ 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.
| TSheets Jobcode | Match | Activity | Dashboard 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.
β’ 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
β Task Templates β auto-generate a checklist when a job is created
| Name | Items | Auto on new job | Job type | Active | |
|---|---|---|---|---|---|
| Loading⦠| |||||
New Template
π 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.
| Task | Variant | Unit | Rate (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.
π· 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.
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
| When | Who | What | Details |
|---|---|---|---|
| Loading⦠| |||