By 09:17, the queue of dropped transactions had passed £42K. By 10:00 it was £280K. 47 minutes of downtime at the worst possible 47 minutes of his year.
Web application development for the Tuesday spike. not the brochure.
A web app isn’t a website. It has to stay up under load, render in 800ms, hold customer data without leaking, and ship without a Friday outage. We build edge-rendered, observable web apps on Next.js + MongoDB + Node.js + AWS.
Web apps that hold under the spike. Sixty-two shipped. Zero Black Friday outages in 2025.
A web app is a system that has to operate, not a brochure that has to convert. We build for the Tuesday your marketing team finally got the campaign right.
0
<800ms
0
Tom’s Black Friday email went out at 09:00. By 09:13 the site was down.
The web app worked perfectly, for 200 concurrent users. The database connection pool was set to 20. The Stripe checkout call ran synchronously. Nobody had tested at 4,000 concurrent. Why would they? They’d never had 4,000 concurrent.
The marketing team had spent four months earning that hour. The engineering had been built for the brochure version of the business, not the actual version. This page is for founders who’d like to skip the post-mortem.
A marketing site is not a web app.
The difference is the cost of getting it wrong.
Designed to convertmostly static
- Mostly static content, low write volume
- Lives behind a CDN almost entirely
- One CMS, one webform, maybe a search
- Failure mode: a 404, a missing image
- Stack: Framer, Webflow, Astro, Next static
- Right scope: a 6-page launch site
Designed to operatestateful
- Stateful, authenticated, per-user data
- Hot path goes through DB + queue + worker
- Per-action audit, error budget, P99 target
- Failure mode: a dropped transaction at £280K
- Stack: Next.js + MERN + AWS + Stripe + queues
- Right scope: products where users do things
The edge ladder
Edge isn’t a religion. It’s an economics question. What to push to the edge, in what order. Each rung halves median latency or cuts cost.
Static assets & images
Day-one CDN. Cloudflare + S3 + CloudFront. 95% cache hit. Zero infra to manage.
Public read pages
Marketing pages, public dashboards, blog. ISR + edge cache. Sub-100ms TTFB globally.
Authenticated read paths
Per-user data with short TTL at the edge. Personalisation without a DB hit.
API rate limits + auth at the edge
Reject unauthorised requests before they touch your origin. Cuts attack surface dramatically.
Edge functions for light compute
Form validation, A/B routing, geo redirects. Faster than origin, cheaper than a Lambda.
Stop, the rest is origin
Writes, complex queries, anything with state. Edge for reads, origin for writes.
The web-app pain. The day-1 answer.
Each one is a single architectural decision made on day one of our build.
- 01
“We broke at 4,000 concurrent users on Black Friday.”
Edge + serverless + idempotent writes. Vercel + Cloudflare edge for reads, AWS Lambda for spike, idempotent writes through a queue. Load-tested to 5× peak. Capacity number in the runbook.
- 02
“Lighthouse score is 62. Bounce rate is 54%.”
JS budget < 120KB, LCP < 800ms enforced in CI. Performance is a build-gate. JS bundle checked on every PR. Lighthouse perf above 94 is the standard.
- 03
“A customer says something broke and the engineer can’t reproduce it in dev.”
Trace ID through every request, Sentry + Datadog. Every error gets a user, tenant, build, trace ID. On-call reads the trace and knows what happened in 60 seconds.
- 04
“Every Friday deploy ends with a rollback. The team won’t ship before a weekend.”
Atomic deploys, instant rollback, feature flags. A bad deploy rolls back in 60 seconds. Features flip behind flags without a deploy. Friday becomes ship day again.
- 05
“Postgres pool maxed at 200 users. We can’t add a connection without breaking.”
MongoDB Atlas or Neon serverless Postgres. A connection pool that scales itself with traffic. Tom’s pool-max outage is architecturally impossible.
- 06
“Enterprise customer wants a penetration test result and we have nothing to send.”
Threat model + CSP + rate limits + audit log on day one. Security is part of the spec. Penetration test reports become a one-pager, not a project.
- 07
“Our app is on a stack nobody knows and the next hire takes six months to ramp.”
MERN + AWS, hireable on day one. The biggest engineer market in 2026. London has 14,000+ Node engineers. Your senior hire interviews fluent on day one.
- 08
“The mobile experience is broken and the desktop experience is fine.”
Mobile-first, design tokens, container queries. Mobile is the design floor. We don’t “adapt for mobile”, we ship mobile and grow up. Same codebase, same pipeline.
What we engineer into every web app
Five things that separate a web app that operates from a website that converts. Built in, not bolted on.
6.9x
Year-on-year revenue, Tom’s Black Friday
0x
Peak-load outages in 2025
“Year-two Black Friday hit 7,400 concurrent. The site didn’t flinch. Revenue was up 6.9×. The team had a quiet evening.”
Edge + serverless resilience
Reads at the edge, spike capacity on Lambda, idempotent writes through a queue. Load-tested to 5× expected peak with a documented capacity number.
Sub-800ms performance budget
JS budget under 120KB, LCP under 800ms, enforced as a build-gate on every PR. Lighthouse perf above 94 is the standard, not the aspiration.
Observability before features
Sentry, Datadog, Mixpanel wired in week one. Trace ID on every request. On-call knows what fired and why in 60 seconds.
Security as part of the spec
Threat model, CSP, rate limits, audit log on day one. Penetration test reports become a one-pager, not a 6-week project.
A hireable MERN + AWS stack
The biggest engineer market in 2026. Your next senior hire interviews fluent on day one. No six-month ramp on a clever stack nobody knows.
The stack we ship every web app on.
Server components cut JS by 60-80% on hot pages without losing interactivity. MERN handles 99% of the behaviour we need on day one.
What we build every web app on
MERNWhen your web app brief calls for it
reach when neededThe infrastructure layer
AWS-defaultTom’s Black Friday,
version two, in numbers
We rebuilt the hot path on Next.js + MongoDB Atlas + AWS Lambda, cached read paths at the edge. P99 latency dropped from 2.4s to 280ms. Year-two peak hit 7,400 concurrent. The site stayed up.
Year-two Black Friday
Latency
Track record
Three ways to start. Pricing in the email back.
Pick the shape that fits and Mohit will send your real number inside 24 hours.
Audit week + scope
5 days. We strip the brief, pick the stack, write the architecture, hand you a signed scope.
- 5-day senior audit
- Edge strategy + capacity target
- Signed scope, line-item GBP
- No commitment to build
Web app build sprint
8 to 14 weeks of fixed-scope shipping. MERN + AWS, edge-rendered, observability built in.
- Next.js + MERN + AWS
- Two senior engineers
- 30-day walk-away both ways
- IP assigns on every commit
Scale rescue + rebuild
Existing slow / fragile app. We rebuild the hot paths for the spike. Old app stays live until cutover.
- Hot-path rebuild
- Load-tested to 5× peak
- Behind-feature-flag cutover
- Fixed 9-14 week scope
“Year-two Black Friday hit 7,400 concurrent. The site didn’t flinch. Revenue was up 6.9×. The team had a quiet evening.”
— Tom W., CTO, UK FinTechWhat CTOs actually ask before signing
Pain-first, soft-second.
Because the next engineer you hire knows it. Because server components let us cut JS by 60-80% on hot pages without losing interactivity. Because MongoDB + Express + React + Node.js + AWS handles 99% of the web application development behaviour we need on day one. We’ll work in SvelteKit, Remix, Astro if you have a strong reason. Default is MERN + Next.js because that’s where we land most often.
k6 or Grafana k6 Cloud running the user journey at 5× expected peak. We hold every web app to a documented capacity number measured on real traffic-shaped load, not just “requests per second”. Capacity number ships in the runbook with what breaks first and how to scale it.
Yes. We’ll deploy to your cloud if that’s the requirement. AWS is the default because it’s 10× faster to ship and most teams don’t need a custom cloud. When you have a defensible reason (data residency, existing SOC-2, enterprise compliance), we deploy to your VPC instead. Comfortable on GCP, Azure, Cloudflare, DigitalOcean, Vercel, Fly.io.
30-day walk-away both ways. Milestone billing 25/25/25/25. UK VAT registered, listed on Companies House, shipping since 2019. You’re never more than four weeks at risk of paying for nothing.
Every web app build has two senior engineers paired, not one. Every decision goes into an ADR the same day. Mohit reviews every PR. If one engineer leaves, the other has full context the next morning. In seven years, two engineers have left mid-project. Both handovers were inside 48 hours.
We default to React because the hiring market is biggest. Vue if you already have a Vue team. SvelteKit if you’re ship-speed obsessed and the team is small. We’ll have the discussion in audit week. The honest answer is “React 70% of the time, Vue 20%, Svelte 10%”.
Yes, with 14 days’ notice. Engineers move to other projects. Spend pauses. Resume with 14 days’ notice. No cancellation fee. No restart fee.
Yes, with mutual agreement. Several of our engineers have moved in-house to client teams over the years. The contract has a clean intro fee built to make the transition friction-free, not punitive.
Fast, accessible web apps.
Sub-second loads, keyboard-complete, WCAG-aware. The web surface your users never have to think about.

One paragraph. That’s it.
Tell us what the app does, who uses it, and the worst Tuesday you can imagine. Mohit replies inside 24 hours: a clear yes, a clear no, or the one question that decides it.
- < 24h
A personal reply.
Yes, no, or the deciding question. Straight to your inbox.
- Week 1
Audit week begins.
Edge strategy, capacity target, observability plan, signed scope.
- Launch
Holds on Tuesday.
Load-tested to 5× peak. Capacity number in the runbook.