← Back to resume
2026 — Present · Ontario, Canada · Contract

Senior Software Developer, Tri-Phase Group

Tri-Phase Group is a demolition and environmental contractor. Their crews come from staffing agencies, move between job sites daily, and the office was scheduling them through emails, texts and phone calls. I designed and built ScheduleStation, the platform that now runs crew scheduling, dispatch and time tracking. It was delivered with full source ownership to the company, and I stay on for maintenance and new features.

station.triphasegroup.ca ↗ Also for Tri-Phase: Tri-Phase Inventory →
ScheduleStation — developer docs hub (details redacted)

One codebase, four surfaces

A single Django 6 / PostgreSQL + PostGIS / Celery backend serves everyone involved in a working day. Each group gets its own domain and only the permissions it needs, and everyone signs in with one credential.

Office

Office portal

Where schedules are built, published and dispatched to agencies and workers.

Site kiosk

Punch Station

Clock in and out on managed iPhones at the job site.

Supervisors

Field Hub

Mobile app with the day's schedule, hours, field reports and job drawings.

Staffing partners

Agency portal

Agencies see their requests and confirm or decline crew for each day.

Dispatch that only sends what changed

Before, publishing a schedule fanned out one message per job. An agency covering three jobs would get three emails, then three more after every edit, with no way to tell v1 from v3. The new dispatch compares first: each agency and each worker receives one versioned email or SMS per day, showing exactly what changed since the last one.

  • React schedule builder with autosave, publish, and revert to the last sent version.
  • Agencies accept or decline by magic link, no account needed. Hourly reminders for unanswered requests, and declines escalate to the office.
  • SMS runs on carrier-compliant consent: double opt-in and STOP handling, delivered over SMTP2GO and Twilio. Email goes through Microsoft 365 OAuth2 SMTP.

Time tracking and the field

  • Punch Station runs on MDM-managed iPhones. Workers clock in and out with a QR card, supervisors can punch for their whole crew, and every punch is GPS-stamped and flagged if it falls outside the site geofence. Hours reports come out already rounded to payroll rules.
  • Field Hub renders the day's schedule from the same code that produces the email and SMS, so a supervisor never sees a different version than the agency did. It also handles hours and end-of-day field reports.
  • Job drawings and permits are rendered with libvips into Deep Zoom tiles and viewed in OpenSeadragon. Tiles stream through NGINX X-Accel behind a mutual-TLS device-certificate gate, so plans are viewable on site but never leave as a downloadable PDF.

Operations and handover

  • Audit logging, login lockout, and an hourly operations report covering failed renders, bounced mail, stuck jobs and disk growth.
  • Docker Compose deployment fronted by Cloudflare: NGINX, Celery workers and beat.
  • 1,400+ automated tests, browser-verified flows, and 20 design documents delivered with the source.
Django 6 · PostgreSQL · PostGIS · Celery · React · libvips · OpenSeadragon · NGINX · Docker Compose · Cloudflare · Twilio · SMTP2GO · Microsoft 365
← Back to resume Previous role: FounderTherapy →