Skip to content

From no-code to production code, without the rewrite tax.

</>FullCodeby Yo! No Code
Marketplace · LATAM · 120,000 listings, 18 countries

Search latency hit 6+ seconds and Bubble's database row limits were forcing painful workarounds.

Bubble.ioNext.js + NestJS + PostgreSQL
180ms
search response time
concurrent users handled
$132k
saved per year
The situation

What they were actually dealing with.

A marketplace operating 120,000 listings across 18 Latin American countries had built the entire platform on Bubble. Search was the product; a marketplace is only as good as how fast someone can find what they're looking for, and Bubble's database was no longer keeping up with that job.

The binding constraint

Search latency had climbed past six seconds, and Bubble's database row-limit behaviour was forcing the team into workarounds that made the product worse to maintain every time they touched it. The workarounds were themselves becoming the bottleneck on shipping anything new.

What we did

The decisions that actually mattered.

Not a task list. The four calls that determined whether this worked.

01

NestJS chosen for a search service that could be scaled independently

Rather than treat search as one feature among many, it was architected as its own service, so the part of the product under the most load could be scaled and optimised without touching everything else.

02

Schema redesigned around query patterns, not just data shape

The Postgres schema was built around how listings are actually searched and filtered in production traffic, with indexes matched to real query patterns rather than a generic normalised structure carried over from Bubble's data model.

03

Concurrency tested against real regional traffic patterns

With users across 18 countries, load doesn't arrive evenly. The new backend was tested against the concurrent-user patterns this specific marketplace actually produces, not a synthetic uniform-load benchmark.

04

Real-time filters shipped as proof the constraint was gone

The team's own test of whether the migration had worked was shipping a feature, real-time search filters, that the old row-limit workarounds had made impractical to build at all.

For calibration

Is this outcome remarkable or ordinary?

For calibration: sub-200ms search response time is generally considered the threshold at which search feels instantaneous to users rather than perceptibly loading. Moving from 6+ seconds to 180ms is not an incremental improvement on the same experience, it changes what kind of product search is capable of being.

Source: General web performance research on perceived instantaneity thresholds

Search was our product, and it was dying. After migration we shipped real-time filters in a week.
Founding engineer, Marketplace
The takeaway

If you're in the same position.

When workarounds for a platform's structural limits start being the thing that slows down every new feature, the workarounds are the signal, not the platform's underlying suitability for your original use case. That signal usually appears well before the search bar visibly breaks.

See all case studies
Ready when you are

You shipped fast on no-code.
Now ship faster, on code.

30-minute scoping call · pixel-faithful migration plan · fixed-price quote within 48 hours. No NDA gymnastics.

Or join the Codify Yo! beta
✓ No NDA upfront✓ Free 1-page architecture audit✓ Fixed-price quote in 48 hours