Move money only when payroll is ready.
Payment is the last step, not the first. A run reaches it only after calculation, validation, an intelligence check and approval — and every instruction is idempotent, so a retry never pays twice.
- Approve
- Batch
- Provider
- Webhook
- Reconcile
- Payment
- Post-approval only
- enforced server-side
- Retries
- Idempotent
- never double-pays
- Providers
- Pluggable
- not hard-coded
What is built, and what is coming
Anything not yet shipped is labelled. A scaffold is never presented as a finished feature.
Approval gate
Enforced by a status machine, not by hiding a button. An unapproved run cannot reach payment.
Provider abstraction
Payment rails sit behind an interface, so payroll never hard-codes one provider.
Idempotent instructions
Each employee payment carries a stable key, so retries are safe.
Live provider integration
Real bank rails. Until one is integrated and verified, payments run against a sandbox provider.
Payment batches and retries
Batch lifecycle, failure handling and reconciliation.