Today's Snapshot
💡 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 |
|---|
Jobs
Live tracker. Click a job to edit.
Quotes & Tenders
Quoting pipeline. Convert a winning quote straight into a job.
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.
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.
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
📋 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
Daily score = on-time arrivals + hours logged + photos + fast SMS replies − callbacks − missed shifts − defects. Hit ≥5 points/day to keep the streak alive.
💰 Money Talks — who's bringing in the dollars (last 30 days)
💵 Top Revenue
| # | Worker | Revenue |
|---|---|---|
| Loading… | ||
💎 Top Profit
| # | Worker | Profit |
|---|---|---|
| Loading… | ||
⚡ Profit / Hour
| # | Worker | $/h |
|---|---|---|
| Loading… | ||
🏛️ Wall of Records
All-time bests across the team👷 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
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 | 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.
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… | |||