Work / Lead generation Stato portal
Case study · Operations platformsLead generation Stato portal.
The system Lead Generation runs on. Clients, campaigns, lead delivery, buyer caps and pricing, ad spend, invoices, creatives, agreements and team tasks, in one place.

What needed solving.
Running lead generation for many buyers meant juggling LeadByte, ad accounts, Xero and spreadsheets. Nobody could see revenue, ad spend and profit side by side, or which buyer was near their cap.
- The owner, who watches revenue, spend and profit
- Finance, who raise and chase invoices and reconcile the bank feed
- Operations, who manage campaigns, buyers, rejections, creatives and tasks
The software, screen by screen.
Every screen here is the real software, run on its own throwaway local database with made-up demo records (Demo Buyer Ltd, Demo Skips Ltd, Test Lead 01 and so on, example.com emails, ZZ postcodes and reserved 07700 900 test numbers). All outside services were blocked. Every figure is demo data, not a real price, spend or invoice.
















Workflows, integrations and stack.
Workflows & automations
- Leads from LeadByte are recorded against buyers and campaigns, with delivery prices and price history
- Buyer caps and pinned deliveries per client
- Ad spend synced daily from Meta and Google and matched to clients
- Profit and margin worked out from revenue and spend
- Auto-invoice runs and overdue chasing through Xero, plus a bank feed
- Agreements built from templates and sent for signature
- Workflows, tasks and SOPs for the team
- Background jobs on a queue, so slow work never blocks the screen
Integrations
- LeadByte
- Xero
- Meta and Google Ads
- Resend (email)
- Companies House and credit checks
Tech stack
- React 19, Vite and Tailwind CSS
- Express 5 REST API in TypeScript
- PostgreSQL with Drizzle ORM
- BullMQ and Redis for background jobs
- JWT with role-based access (owner, finance, operations, client)
How it was built and tested
- Built in reviewed pull requests, with staging before production
- Automated tests with Vitest
- Every change gets a UX check at 390px and 1440px in Chromium and WebKit, with synthetic test data
- A backup and rollback plan before every database change
Outcomes
Results for this project will be published once the figures have been checked against our own data.
Client portal
Got a project in mind?
Tell us what you need to run better. We'll come back with how we'd build it.