Skip to main content
Solutions/Case Study/Saas
Case Study · Web Application

A 6-year-old PHP/jQuery application rebuilt in Next.js and TypeScript in 14 weeks.

A B2B SaaS company had outgrown their original application. Built in 2018 on PHP and jQuery, it loaded in 8 seconds, had no type safety, and was the primary reason qualified developers declined the engineering role. The rebuild delivered 400ms load times, full TypeScript, and the first engineering hire accepted within 30 days of launch.

150+
Projects shipped
99%
Client retention
~12wk
Average delivery
The problem
A SaaS company's 6-year-old PHP codebase was slow, unmaintainable, and causing senior developer candidates to decline the role when they saw the tech stack in interviews.

The company had been growing — $280k MRR, 180 customers, and a product roadmap that required engineering capacity. The technical team was a solo developer (the original founder's technical co-founder) who had hit a personal growth ceiling with the PHP codebase and had given notice. The product roadmap required a senior engineer hire. Six candidates declined the role after the technical interview, citing the PHP/jQuery stack as a dealbreaker.

The performance problem was compounding the hiring problem: pages loaded in 8–12 seconds, generated from synchronous PHP rendering, with 42 separate jQuery plugin calls per page. The customer NPS was tracking the performance — the Net Detractor segment's feedback was dominated by speed complaints.

The business case for the rebuild was built on two quantifiable costs: the hiring cost (each declined engineering candidate represented approximately 4 weeks of engineering capacity lost to interviewing and loss of the opportunity to extend the product) and the churn attributable to performance (estimated at 2–3 customers/month who cited performance in exit surveys).

What we build

A full rebuild of the existing application on Next.js, TypeScript, Postgres, and Vercel — same feature parity, 20x performance improvement, full type safety, and a codebase that engineers want to work on.

Architecture assessment phase

Two weeks documenting the existing PHP application: database schema, feature inventory (including the features only discoverable by reading the source code), third-party integrations, and the edge cases built into the existing behaviour. The feature inventory became the specification.

Data migration

The MySQL database migrated to Postgres with schema normalization (the original schema had 40 tables with ad-hoc relationships, normalised to 26 tables with proper foreign key constraints). Migration scripts tested against production data snapshots before cutover.

Next.js application

App Router, TypeScript strict mode, Drizzle ORM for type-safe database access, Clerk for authentication (replacing custom PHP session management), and Vercel for deployment. Feature parity with the existing application at cutover.

Performance architecture

Static generation for marketing pages and public content. Server components for data-heavy pages, with streaming for the initial render. React Query for client-side data fetching with optimistic updates. Load time at launch: 380ms average.

New features included in the rebuild scope

Three features from the backlog were included in the rebuild rather than deferred: a team collaboration feature (real-time with Convex), CSV export for all data tables, and a public API for integrations (customer-requested for 18 months, not possible to add to the PHP codebase without major refactoring).

Engagement

One honest number to start.

Fixed-scope, fixed-price. The number below is the starting point — final scope is built from your brief.

Tier · Web ApplicationFixed scope
From$25,000

A full rebuild of the existing application on Next.js, TypeScript, Postgres, and Vercel — same feature parity, 20x performance improvement, full type safety, and a codebase that engineers want to work on.

99% client retention across 40+ projects
Process

Three steps, every time.

The same repeatable engagement on every project. No surprises, no mystery, no billable ambiguity.

01Week 0

Brief & discovery.

We send you questions, then get on a call. Output: a written scope with every step, feature, and integration listed.

02Weeks 1–N

Build & ship.

Fixed schedule, weekly reviews. No scope creep unless you change the scope — and if you do, we reprice it transparently.

03Post-launch

Warranty & retainer.

30-day warranty on every launch. Most clients stay on a monthly retainer for ongoing features and maintenance.

Why fixed-price

Why Fixed-Price Matters Here

The rebuild scope was fully definable from the existing application. Fixed price appropriate.

FAQ

Questions, answered.

A 72-hour cutover window: DNS update pointing to the new Vercel deployment, with the legacy PHP application kept running in read-only mode for 72 hours as fallback. 3 support tickets during the 72 hours, all resolved without fallback to the legacy system. Legacy system decommissioned at hour 72.

The legacy system remained the production system throughout the 14-week rebuild. No downtime, no feature freeze. The rebuild was developed against a database snapshot that was refreshed weekly from production. The data migration at cutover was the delta since the last snapshot.

The first engineering hire was extended an offer 23 days post-launch. Three subsequent senior engineering candidates specifically cited the modern stack as a positive in the acceptance feedback.

$62,000 for the full rebuild with data migration, 14-week delivery, and the three additional features included in the scope.

The target was sub-500ms average page load. The delivered average was 380ms — a 20x improvement from the 7.8s legacy average. Customer NPS improved from 31 to 47 in the 90 days post-launch.

Next step

Tell Ryel about your project.

Describe what you’re building and what outcome you need. You’ll have a written, fixed-price scope within the week.