Today's Snapshot
☀️ Your morning brief
▾💡 Insights
🔥 Top Performers
| # | Worker | Foreman | 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 | Foreman | 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 | Location | Notes |
|---|
Scope Templates
Coming in next build iteration.
Defects
Coming in next build iteration.
✉️ 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.
📋 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
By foreman, last 30 days| Crew | Workers | Avg Streak | Gold+ | Monthly |
|---|---|---|---|---|
| Loading… | ||||
⚡ Hot Right Now
Last 7 daysLeaderboard
| # | Worker | Foreman | 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.
📈 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 |
|---|
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.
| Name | Foreman? | Rate $/hr | Cohort | Active | Bonus 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).
| 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… | |||