Case Study

Tauri Builders

Payroll & Workforce CMS · 2024

Overview

Architecting a zero-friction payroll engine from paper to payload.

A highly relational, custom CMS built for Tauri Builders Inc. — managing 500+ workers across three provinces. This platform digitizes unstructured paper timesheets via AI to automate a fragile, error-prone, two-week payroll cycle into a reliable, verifiable workflow.

Role

Software Architect & UI/UX

Timeline

2024

Employees

500+

Provinces

3

Timesheets/cycle

~100

AI Model

Claude

Before vs After

Before

  • ~100 paper timesheets transcribed manually every cycle
  • Staff relied on memory for worker hourly rates
  • Overtime and billing rules tracked in disconnected contracts
  • High risk of human error causing delayed or inaccurate pay

After — Shipped

LIVE
  • Upload timesheets and process via AI in minutes
  • Rates, overtime limits, and billing splits resolve instantly
  • A digital twin interface lets staff verify OCR output before commit
  • Automated, on-demand reporting and PDF invoicing

Platform

Eight screens. One unified system.

This is a comprehensive operational ERP, not just a timesheet app. Every screen is purposefully designed to query and mutate a central, highly relational data model securely.

Banner
Dashboard
KPIs

Dashboard

Billing Calendar

Billing Calendar

Timesheet List

Timesheet List

Digital Twin
AI

Digital Twin

Worker Reports

Worker Reports

Billing Reports

Billing Reports

PDF Invoice

PDF Invoice

Records / Admin

Records / Admin

Dashboard

The payroll command centre

The dashboard delivers instant observability over active payroll cycles. Management can monitor active jobsites, worker counts, gross revenue, and projected profit margins in real-time. A data grid below allows staff to filter, select, and generate batched jobsite PDF invoices in a single click.

Real-time cycle overview with actionable data grids

Before this, assessing the health of a payroll cycle required manually aggregating spreadsheets. This view democratizes operational visibility based on live, verified database states.

Billing Calendar

Context-aware navigation

A custom date picker synced directly to Tauri's biweekly billing logic. Clicking any date instantly selects the correct 14-day operational window, ensuring all downstream queries fetch the right payload without manual date-math.

Billing cycle calendar — hardcoded to the business rhythm

This completely eliminated off-by-one date entry errors, saving staff the mental overhead of constantly referencing physical calendars.

01

The Problem

Every two weeks, an operational bottleneck occurred. Hundreds of handwritten timesheets poured in from foremen. Admin staff had to transcribe these into Excel, manually recall base rates, apply localized overtime rules (which varied depending on the jobsite owner), and calculate precise payroll figures under strict deadlines.

The system was fragile by design. A misread rate or forgotten overtime clause directly impacted worker livelihoods or damaged client trust via overbilling. To complicate matters, worker wages and jobsite billing rates are distinct metrics. Managing this dual-ledger logic manually was unsustainable for a scaling business.

The chaotic input: highly variable handwritten timesheets

Processing this raw unstructured data was the primary workflow bottleneck. The architectural challenge was building a reliable bridge from sloppy ink to structured JSON.

"We were scrambling every two weeks. There was no room to get it wrong — these are people's paycheques — but the process made it very easy to get it wrong."

Tauri Builders · Requirements Discovery
02

Insight

The core issue wasn't the spreadsheet software itself; it was the lack of relational data architecture. The staff were functioning as human database routers.

Architectural Realization

Every parameter required to execute payroll (wages, roles, site locations, overtime thresholds) already existed as a business rule. By modeling this relational integrity into a PostgreSQL database, we could offload the cognitive load. Staff only needed to verify hours, not calculate business logic.

Assumed

Better spreadsheet templates or macros would fix the errors.

Reality

Spreadsheets were just symptoms of a siloed data model. Business logic had to be encoded in a unified backend.

Hypothesis

Automate the relational joins. If the system knows who is where, it knows what they earn and what to bill.

03

Solution

A secure, full-stack CMS engineered to consume unstructured paper inputs via AI, map them to a strict relational database, and export verifiable, split-ledger financials.

Timesheet Processing

End to end

From paper to verified payload

Watch the full workflow
Watch the full workflow

Upload → AI Extraction → Human Verification → Commit

The system orchestrates Claude OCR asynchronously. Once extraction completes, the UI hydrates a validation grid where staff can audit the data before executing the final database transaction.

1

Context Initialization via Jobsite Select

Uploading a document and assigning a jobsite acts as the root node. This single action triggers the backend to resolve the entire rate context — fetching active workers, site-specific overtime thresholds, and corresponding billing data.

The only required manual classification

By shifting the cognitive load to the system schema, users are prevented from making downstream calculation errors.

2

Asynchronous AI Parsing

Claude analyzes the image geometry and handwriting, returning structured JSON. A fuzzy-matching algorithm resolves handwritten names against the PostgreSQL worker records. Extracted time strings are converted to computable decimals, and the UI table populates instantly.

Data normalization output

{

"workers": [

{

"name": "John Smith",

"monday": "9:00 - 18:00",

...

}

]

}

3

The Digital Twin Verification

The parsed data is projected into a "Digital Twin" interface mirroring the physical sheet. Staff use this high-contrast, data-dense view to spot-check AI discrepancies. All edits instantly trigger re-calculations for state totals before committing to the database.

Power-user ergonomics

Operational UIs need to be fast. I implemented global keyboard listeners to allow staff to blast repetitive time patterns across rows without touching a mouse.

C
Copy time & expenses
V
Paste time & expenses
E
Paste expenses only
D
Paste time only

The Digital Twin — designed for auditability

Adopting a 1:1 mapping with the physical artifact reduced training time to zero. The mental model remains identical, only the speed changes.

Granular day-level data mutation

Travel costs are highly variable per day based on jobsite distance. Binding expenses at the day-level instead of the week-level ensured perfect accounting accuracy.

Data Architecture

Foundation

Domain-driven schema design

The schema accurately models the business reality: workers possess multiple role assignments over time, jobsite contracts dictate unique overtime parameters, and the ledger requires strict separation between overhead cost (wages) and revenue (billing).

Relational mapping

Worker Role Base Wage

Client Jobsite Billing Rate

Jobsite Overtime Policy

Selection Instant validation across all axes

Reporting

Output

Dual ledgers from a single source of truth

Once timesheets are committed, the API generates isolated data views: one satisfying payroll liabilities, and another formatting accounts receivable for external client invoicing.

Liabilities View — optimized for accounting batch runs

Groups datasets by payout method (Interac, Cheque, Wire), allowing accounting teams to process funds efficiently without data mangling.

Receivables View — transparent client billing

Filters by client, breaking down complex multi-trade overtime hours into readable client invoices.

Automated PDF rendering for immediate dispatch

Generates professional, contract-compliant PDFs directly from the browser, entirely bypassing legacy spreadsheet formatting steps.

Security

Auth

RBAC and financial data masking

To unblock operational velocity, junior staff needed to perform OCR verification without being exposed to sensitive corporate margins. I implemented strict Role-Based Access Control spanning both UI rendering logic and API endpoints.

Administrator

  • Unrestricted CRUD on base rates & billing margins
  • Full financial analytics visibility

Payroll Officer

  • Timesheet ingestion, verification, commit
  • Export capabilities for client billing

Data Entry

  • Document ingestion & OCR verification

API and UI block payload transmission of financial rates or revenue

04

My Role

End-to-end architecture & execution. I owned the entire project lifecycle from initial requirements gathering and schema design through to full-stack AWS deployment and user handoff.

Systems Design

  • Mapped complex organizational logic into a normalized PostgreSQL schema
  • Designed a multi-role data model to solve the issue of workers carrying concurrent billing classifications
  • Architected secure RBAC layers preventing API data-leaks for lower-tier roles

Product & UX

  • Conducted field interviews with admin staff to understand the true operational bottlenecks
  • Designed the 'Digital Twin' UI paradigm to minimize friction for non-technical users
  • Built high-productivity features like bulk keyboard shortcuts for rapid data entry

Engineering

  • Developed the React/Material UI frontend and FeathersJS/Node backend
  • Integrated Claude AI for complex OCR parsing, migrating from AWS Textract for higher handwriting accuracy
  • Engineered fuzzy-logic SQL matching to handle inconsistent foreman name spelling
  • Deployed and managed the infrastructure pipeline on AWS (EC2, Elastic Beanstalk, S3, RDS)
05

Impact

500+Employees Managed
100%Calculation AccuracyZero manual arithmetic required
100sAdmin Hours ReclaimedROI realized immediately post-launch
0Data Security LeaksSecure role delegation achieved

The core business victory was operational decentralization. By moving the complex rate logic out of an individual's head and into the codebase, Tauri Builders can now scale their operations and delegate timesheet processing without risking catastrophic payroll errors.

Furthermore, migrating from Amazon Textract to Claude AI proved vital. Construction handwriting is inherently chaotic. Claude's superior context-window analysis drastically reduced silent failures, minimizing the manual edits required in the Digital Twin interface.

06

Challenges & Tradeoffs

Decoupling Overtime from the Worker

A standard assumption is that overtime rules apply to a worker. At Tauri, overtime rules are negotiated into specific client contracts—the same worker might trigger overtime differently depending on the site.

Decision

Architected the schema to nest overtime policies at the Jobsite level, not the User profile. Selecting the site dynamically overrides base calculation thresholds, keeping the logic perfectly aligned with contractual reality.

The Multi-Role Dilemma

A single worker could act as a general labourer on Monday and a skilled carpenter on Thursday, each requiring different pay and billing rates. Splitting them into two user accounts would break historic tax reporting.

Decision

Built a polymorphic 'Roles' bridge table. Staff assign hours strictly via Role IDs rather than Worker IDs, preserving a single identity while allowing infinite rate variations over time.

Masking Payload Data

Delegating task-work to junior staff meant they needed access to view hours, but absolutely could not see wage rates or revenue totals over the wire in DevTools.

Decision

Applied rigorous conditional filtering at the API hook level based on the authenticated JWT scope. If the role isn't 'Admin', the backend strips all financial nodes from the JSON response before dispatching.

07

Learnings

Domain discovery is archaeology

I learned quickly that business rules rarely exist documented in a folder. They exist implicitly in the minds of veteran staff. Translating 'that's just how we do it' into strict schema constraints was the hardest, most valuable part of the build.

UI prototyping earlier in the cycle

I heavily prioritized the backend data modeling—which was necessary—but waiting to present the 'Digital Twin' interface meant iterating on the table UX later than I'd prefer. Next time, I would test dummy-data layouts with the end-users concurrently while building the API.

AI as a feature, not a gimmick

Using AI to parse unstructured handwriting isn't a parlor trick here; it is the core data-entry mechanism. Recognizing the limitations of OCR and deliberately building a fast, keyboard-friendly human validation step (the Digital Twin) is what made the feature actually usable in production.

08

Stack

The architecture prioritized operational stability, relational data integrity, and rapid deployment. I chose a mature, battle-tested full-stack approach capable of handling complex business logic securely.

Frontend Application

ReactMaterial UITypeScript

Backend & Data

FeathersJSNode.jsMySQLREST API

Infrastructure & Integrations

AWS EC2AWS Elastic BeanstalkAWS S3Claude AI