Finance company · Legacy migration · 2026
Zoho Migration — a financial calculator in 8 days instead of 4-6 months
How we replaced the expensive Zoho Creator with an in-house solution on Cloudflare Workers + Postgres, with native PDF generation and unlimited scaling.
// Context
The client is a finance company serving corporate clients. A team of 25, 30+ corporate clients, complex multi-currency calculations.
The heart of operations is a financial calculator: input (terms, rates, payment schedules), output — structured PDF reports for the client. The calculator was built on Zoho Creator 4 years ago — fast, no-code, it worked.
// What hurt
- Expensive: a per-user model — every user on a 25+ team meant a separate license, plus an external PDF service (~50€/міс) once the 1000 PDF/міс limit ran out.
- Slow: at 1000+ calculations a month the UI «spun forever», and PDF export took 8-15 seconds.
- Scaling was non-trivial: to add 5 new users — another license + approval. The platform always became the bottleneck.
- Vendor lock-in: Deluge scripts did not port over. You could export the data, but not the logic.
// Why not a «regular dev team»
The client ran a tender. Two teams estimated the project at 4-6 місяців and ~25-30K€. While the tender was running, I proposed an alternative approach: one engineer + Claude Code.
The logic: a migration is a well-documented task (legacy scripts, data types, expected behavior). This is an ideal case for AI coding, where much of the work is rewriting formulas and UI with known inputs and outputs.
The result — many times faster and three times cheaper than the tender estimates.
// Solution — what we did
1. Reverse engineering the legacy
We exported every Zoho Deluge script (their proprietary scripting language). Interviews with the finance director — an hour for each of the 8 calculation types. We built regression tests: 240 scenarios with expected outputs.
2. Backend on Cloudflare Workers
Hono.js framework, TypeScript. Each formula is a separate function with a typed contract. Postgres on Supabase to store contracts and calculation history. Row-Level Security provides multi-tenancy.
3. Native PDF generation
Cloudflare Browser Rendering API — it renders the PDF from HTML/CSS inside the Worker. Free up to 100K calls/міс. Speed — <2 seconds per PDF instead of 8-15 in Zoho.
4. Frontend on Astro
Pages with static SSR (fast, SEO-friendly), reactive forms via React islands. The design accounts for frequent users — keyboard shortcuts, autosave, history.
5. Auth & SSO
Clerk for user management, SSO integration with the corporate Microsoft 365. The user signs in through their corporate account — no extra passwords.
6. Stack
| Layer | Tools |
|---|---|
| Backend | Cloudflare Workers + Hono + TypeScript |
| Database | Supabase (Postgres) + Row-Level Security |
| Frontend | Astro 6 + React islands + Tailwind v4 |
| PDF generation | Cloudflare Browser Rendering API (native) |
| Auth | Clerk + Microsoft 365 SSO |
| AI assist | Claude Code (Sonnet 4.6) for all the coding |
// Timeline
Export of Zoho Deluge scripts, interview with the finance director, formula mapping, a set of regression tests (240 scenarios)
Cloudflare Worker with the core APIs, Postgres schema, Supabase connection, first 50 tests passing
Native PDF generation, implementation of all financial-calculator formulas, 240/240 tests green
Astro frontend with reactive forms, Clerk auth, SSO with Microsoft 365, production deploy on Cloudflare
// Result — the numbers
| Metric | Zoho (before) | Cloudflare (after) |
|---|---|---|
| Monthly cost | per-user licenses + PDF service | ~30 € of infrastructure |
| PDF generation | 8-15 sec | <2 sec |
| Scaling | Per-user pricing | Unlimited |
| Migration time | 4-6 міс (estimate) | 8 робочих днів |
| Regression tests | 0 | 240/240 ✓ |
// What went wrong — lessons learned
Legacy edge cases. 18 of 240 tests «went red» at first — the Zoho formulas had undocumented behavior at extreme values (zero rates, negative penalties). Reverse engineering took 1 day longer than I planned.
SSO setup with Microsoft 365. Clerk itself is simple, but the corporate AD has its quirks. We spent half a day on a conditional access policy.
Postgres connection pooling. Cloudflare Workers runs at the edge, while Supabase is in us-east. The first tests showed +200ms latency. We switched to Hyperdrive (Cloudflare service for caching connections) — latency dropped to 30ms.
// FAQ
Why did the client want to leave Zoho Creator? +
Three reasons. First — per-user pricing: every new user on a 25+ team meant another license, and the model kept getting less worthwhile. Second — PDF-generation limits: the free quota of 1000 PDF/міс was running out, beyond which an external service cost another ~50€/міс. Third — a slow UI: an «endless loading» when working with large calculation tables.
Why Claude Code instead of a regular dev team? +
A team (3 developers + lead) estimated the migration at 4-6 місяців and ~25-30K€ on a fixed rate. With Claude Code, one engineer did the migration in 8 робочих днів — because the AI generated code, tests, and documentation in parallel. The client paid 9K€ instead of 25K€ for the same functionality.
How did you preserve the legacy formula logic? +
Reverse engineering. We exported every Zoho Deluge script and documented each formula in an interview with the finance director (who remembered the edge cases). We generated a set of regression tests — 240 scenarios with expected outputs. The new implementation had to pass all 240 before the feature was accepted.
What if the legacy logic isn't documented? +
If there are no tests and no documentation — the risk is maximal. My advice is not to migrate «head-on», but first to wrap the legacy in regression tests (via UI automation or the API), and only then rewrite. Here it paid off fully: the days invested in auditing the formulas saved weeks of debugging.
What does it cost to maintain the new solution? +
Cloudflare Workers: ~5€/міс for a basic workload. Postgres on Supabase: 25€/міс. Total infra cost — ~30€/міс for all 25 users, with no per-user licenses and no external PDF service. The infrastructure now costs less than a single license used to.
Case author
Andrew Maryasov
AI consultant, founder of Auspex (CRM automation) and Grow2.ai (AI agents + community). 25+ years in business automation: accounting → CRM → AI. I build AI and automation strategy for owners and teams; delivery runs through my own brands.
// Other cases
// Conclusion
The key decision here was strategic, not technical: to see that a migration is a well-documented task (legacy scripts + known inputs/outputs), and that is exactly why it is an ideal case for AI coding. The speed and the savings came from framing the task correctly — not from the tool itself.
Delivered through Auspex — CRM automation and business-process migration. I build the strategy personally; the delivery itself is run by the Auspex team.
Got legacy of your own that you should be leaving?
Let's start with a conversation: whether to migrate at all, where the risks are and where the leverage is. We build the strategy together, delivery is through Auspex.
Personal advisory →