Solutions · Workflows · Canarlo
Next.js 16, Supabase, TypeScript. For the workflows Zapier and n8n cannot hold — long-running, transactional, with a custom UI a non-technical operator can actually use. Idempotent by default, retried with backoff, audited per attempt.
Who this is for
The Zap that enriches leads now takes longer than thirty seconds. Half the records silently drop. The fix is not another Zapier seat — it is a Postgres-backed queue and a worker that runs for as long as the job needs.
The refund workflow created two refunds on a retry last week. Finance had to claw one back. We ship idempotency keys on every external call, an audit row per attempt, and the wrong thing cannot easily happen twice.
An onboarding workflow with a human-in-the-loop step. The reviewer needs a queue, the manager needs a dashboard, the auditor needs the trail. n8n cannot model the UI. We ship a real admin tool that does.
What we ship
Foundations
Operator accounts, reviewer accounts, admin accounts. Email, magic link, TOTP. Every login event logged. Roles enforced at the database, not in the dashboard.
A workflow run touches the rows it should touch and no others. Tenant boundary enforced in Postgres. A misrouted query returns nothing — never another customer's job.
Every step transition, retry, manual override captured with actor, target, before and after state. The trail your compliance team needs to settle a dispute.
Structured JSON logs with sensitive fields redacted. Sentry wired before launch. Per-step latency, retry count, dead-letter rate live on a dashboard from day one.
Every pull request gets a live URL. Tests gate merges. A new workflow runs on a preview environment against fixture data before it touches production.
Your Vercel team, your Supabase project, your domains, your keys. We deploy with your credentials and walk off at handover. No agency-held queue, no per-execution markup.
Recent build
Illustrative scope
A lead-enrichment workflow processing a thousand records a day. Triggered by webhook, enrichment from three providers, dedupe against Postgres, written back to HubSpot via signed call. Idempotent per record, observable per step, replaceable per provider. Eight weeks, fixed fee, audited.
Tech stack
Our process
Step 1
01
One scoping call. We map the workflow as it exists — the Zap, the spreadsheet, the shared inbox. Failure modes named. Output: written brief, one week.
Step 2
02
Data model, queue topology, retry policy, idempotency strategy on the page. Integration contracts named. One week. You sign off before code is written.
Step 3
03
Four to eight weeks. Weekly demo on a real preview URL. Every external call audited from day one. You can read the diff every Friday.
Step 4
04
Deploy to your cloud, cut over from the legacy Zap, watch the first week of real traffic together. Handover doc names the failure mode and the on-call step.
Step 5
05
Optional retainer — vendor API changes, dependency updates, continued workflow work. From £500 a month. Same engineer. Cancel any time.
Parent service: Automations
Pricing
Fixed fee, scope written down before billing starts. £15k buys one workflow with two integrations and an admin surface. £30k buys a workflow engine with queues, retries, and dead-letter handling. £50k buys multi-tenant runs, custom step UI, and a year of headroom for new flows.
Full pricing rationale and cost breakdown: How much does AI engineering cost?
Frequently asked
When steps get conditional, when one failure needs surgical retry rather than the whole run, when an auditor will want a replay log. Zapier and n8n cover two steps with stable shapes. Beyond that — typed inputs, idempotency keys, partial-failure recovery, version control on the logic — the off-the-shelf tools refuse, and you write more glue around them than the workflow itself.
Background jobs, not serverless timeouts. Postgres-backed queue or a managed worker — runs for hours if needed. Heartbeats, progress updates visible in the admin, hard cancel from the UI. Survives a deploy mid-run. The fifteen-minute ceiling that breaks Vercel Functions is a non-issue here.
Yes. Workflow state is persisted at every checkpoint — pause for human approval, resume from the same step, cancel without leaving partial writes. Long-running approvals can sleep for days waiting on an email reply. The state machine is in the database, not in memory, so a restart doesn't lose progress.
Retry with exponential backoff for transient failures — a 502 is not a 4xx. Idempotency keys on outbound calls so a replay doesn't double-charge or double-email. Dead-letter queue for steps that exhaust retries, surfaced in the admin with the payload and the error. Alert routed to a channel nobody mutes.
Your call. Take it in-house — plain TypeScript, the runbook names every cron and queue. Or retainer from fifteen-hundred a month for dependency updates, security patches, on-call response. Same engineer who built it. Or scoped follow-on engagements for new workflows. Mix is common.
Start here
Twenty-minute call to map your flow. Proposal in your inbox inside forty-eight hours.