Express Paint
Operations Dashboard - Cairns / FNQ

Today's Snapshot

💡 Insights

Loading…

🔥 Top Performers

View full leaderboard →
#WorkerForemanCurrent StreakRankThis MonthBadges
Loading…

🟢 Currently On the Clock

WorkerJobAddressClocked InHours So Far
Loading...

Today's Activity (All Workers)

WorkerHoursCostJobs Worked
Loading...

Jobs Marked "On Site"

JobForemanClientStage

Jobs

Live tracker. Click a job to edit.

Quotes & Tenders

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

Schedule

Contacts

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

NameCompanyTypePhoneEmailLocationNotes

Scope Templates

Coming in next build iteration.

Defects

Coming in next build iteration.

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.

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…

📋 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

Daily score = on-time arrivals + hours logged + photos + fast SMS replies − callbacks − missed shifts − defects. Hit ≥5 points/day to keep the streak alive.

💰
Team Revenue · Last 30 Days
📈
Team Profit · Last 30 Days
🏆
Today's MVP
💪
Hours Leader (week)
🔥
Active Streaks
🏅
Badges This Week

💰 Money Talks — who's bringing in the dollars (last 30 days)

Only invoiced / paid jobs count toward these figures. Until a job is finalised, the total hours figure is still growing, so any early worker would look artificially profitable. Once the job reaches Invoiced or Paid, the quote is spread across whoever actually did the labour. Hours on in-progress or unquoted jobs are invisible to the $ calc on both sides — no revenue and no labour cost.

💵 Top Revenue

Quote-value attributed by hours worked
#WorkerRevenue
Loading…

💎 Top Profit

After labour cost + materials share
#WorkerProfit
Loading…

⚡ Profit / Hour

Best efficiency (min 20 hrs)
#Worker$/h
Loading…

🏛️ Wall of Records

All-time bests across the team
Loading…

👷 Crew Leaderboard

By foreman, last 30 days
CrewWorkersAvg StreakGold+Monthly
Loading…

⚡ Hot Right Now

Last 7 days
Loading…

Leaderboard

#WorkerForemanStreakRankRevenue 30dProfit 30dHours 30dBadges
Loading…

Badge Catalogue

Loading…

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

Foremen

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. Foreman link auto-matches by first name.

NameForeman?Rate $/hrActiveBonus link

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.

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…