X-Pay
AI payroll reconciliation and driver outreach for delivery companies.
- 7+
- Companies
- 1,200+
- Drivers reconciled daily
- 1,000+
- Calls & messages a day
The short version
X-Pay reconciles payroll for last-mile delivery companies. It reads the handwritten sign-in sheets drivers sign each day, compares them against ADP timecards, flags every mismatch, and follows up with drivers through AI voice calls and messages, with a human approving before anything goes out.
The problem
Drivers are paid from ADP timecards, but the real record of the day is a handwritten sign-in and sign-out sheet. Payroll teams checked these by hand, line by line, then phoned drivers about missing punches or wrong hours. It was slow, error-prone and a source of disputes.
What it does
Reads handwritten sheets
A photo or PDF of the paper sheet becomes structured rows: driver, start, end, last delivery and signature.
Reconciles against ADP
Stitches split shifts, compares against the signed sheet as the source of truth, and flags missing punches, late or early clocks, over or under hours and break issues.
Human in the loop
Operators see a dry-run preview and confirm before anything reaches the discrepancy list or a driver.
Automatic driver follow-up
Conversational AI voice calls and emails, retried on a schedule and escalated to a manager when disputed or unreachable.
Reports
Template-driven daily and weekly Excel and PDF reports, plus per-call summaries.
How it’s built
The AI writes, code decides
The LLM reads handwriting and turns plain-English rules into validated conditions. Every payroll-affecting decision runs in deterministic, auditable code.
Two-stage OCR
Geometric table detection with Azure Document Intelligence, then LLM adjudication for messy handwriting, measured with an evaluation harness against real scans.
Split-shift stitching
ADP records breaks as split shifts, so segments are stitched and the clock-out taken from the final one. A missing last punch shows as 'Missing Clock-Out', not a false 'Early Out'.
Durable workflows
Each driver's outreach is a long-running Temporal workflow that survives restarts and deploys, with waits, retries and escalation.
Tenant isolation
Every query is scoped to its company at the ORM layer, with per-tenant rules, timezone, SMTP account and voice assistant.
Driver identity matching
Drivers are matched across ADP position IDs, handwritten names and roster aliases, with fuzzy and AI-assisted reconciliation.
Tools
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
- Radix UI
- Next.js API routes
- Node.js
- Prisma
- PostgreSQL
- Temporal
- node-cron
- Azure OpenAI
- Azure Document Intelligence
- Vapi voice calls
- Nodemailer (per-tenant SMTP)
- ExcelJS
- PapaParse
- pdf-to-img
- iron-session
- bcrypt
- Role-based access
- Audit log
- Docker
- Docker Compose
- Nginx
- Linux VPS
What changed
- 7+ delivery companies running on one platform
- 1,200+ drivers reconciled every day
- 1,000+ automated calls and messages a day
- Hours of manual payroll auditing removed for each client
