Home › Research › Hands-on test

Hands-on test · run on 2026-09-26

One booking app. Three AI builders. Here is what actually worked.

Hands-on testEdition 2026-09-263 builders, 1 run eachCurrent edition
2 of 3

first versions let ten simultaneous bookings into an eight-spot class (check T05)

What it means

If people can book the last spots at the same moment, test that case yourself: the builders' own tests did not catch it.

Main limitation

One run per builder on one day: a case study, not a ranking of the tools.

Measured

26 September 2026

Last verified · next full re-check

26 September 2026 · re-test after a relevant product change; repeat runs are planned as a protocol series

On the morning of 26 September 2026 we gave Lovable, Replit and Emergent the same prompt for a small class-booking web app, on each one's free plan, and then tested what they built against 18 checks we wrote down before the first build. Where a check failed, the builder got up to three repair prompts, always in the same words. This is one run per builder: a case study, not a ranking.

When ten people tried to book the last spots of an eight-person class at the same moment, only Lovable's first version stopped at eight. Replit's and Emergent's first versions accepted all ten, and Replit's public schedule then went blank. Both were fixed after we described the failure, Replit in one repair prompt and Emergent in two.AIBuilder Marketplace, hands-on test, 2026-09-26. Free to quote with attribution.
3AI app builders, free plans, same prompt, same morning
18checks, fixed before the first build
2 of 3first versions let 10 people book 8 spots
1 of 3could publish and stay online on the free plan
The test in 68 seconds. Everything it says is in the tables below.
Who pays us. Replit, Emergent and Lovable run affiliate programmes we are part of: if you sign up through a link in our reviews of them, we may be paid. Lovable accepted us on 28 September 2026, two days after this test; we applied only after the builds were done, and the results have not changed since. There are no affiliate links on this page. Daan also uses Replit for a separate project of his own; this test used a new, empty free account so that his paid plan and history played no part.

The prompt

Sent as the first and only message to each builder, word for word:

Build a web app for a one-person yoga studio to take class bookings.

Requirements:
1. A public page shows the classes for the next 14 days: Monday to Friday at 07:00 and 18:30, Saturday at 09:00, no classes on Sunday. Each class has 8 spots and shows how many spots are left.
2. A visitor books a class by entering a name and an email address. The number of spots left goes down by one. A class with 0 spots left cannot be booked.
3. After booking, the visitor sees a confirmation with a unique link to manage the booking.
4. Through that link the visitor can move the booking to another class that still has spots, or cancel it. Cancelling frees the spot.
5. The same email address cannot book the same class twice.
6. An admin page protected by a password shows all bookings per class, lets the admin cancel any booking, and has a button that exports all bookings as a CSV file with the columns: class date, class time, name, email, status.
7. Bookings are stored in a database and are still there after a page reload and after the app is republished.
8. Publish the app at a public URL.

Do not add payments, email sending or user accounts.

Small enough for a free plan, but it contains the things that separate a demo from something a studio could use: a hard capacity limit, a private link, a protected admin page, an export, and data that has to survive a redeploy. Payments and email were left out on purpose, because they need accounts with third parties and would have made this a test of those services instead.

How we tested

Results, check by check

First version, and where it changed, the result after a repair prompt.

CheckLovableReplitEmergent
T01 Published at a public URLPassPartialmanual Publish click; free deployments expireFailDeploy needs a paid plan
T02 14-day schedule, 8 spotsPassPassPass
T03 Booking lowers the countPassPassPass
T04 Confirmation with private linkPassPassPass
T05 Full is full (10 at once)Pass8 accepted, 2 refusedFail10 of 10 accepted, schedule went blank → Pass after repair 1Fail10 of 10 accepted → still failed after repair 1 → Pass after repair 2
T06 No double bookingPassPassPass
T07 Move a bookingPassPassPass
T08 Cancel frees the spotPassPassPass
T09 Link cannot be guessedPassPassPass
T10 Admin needs the passwordPassPassPass
T11 Password not visible in the browserPassPassFailin the CSV export URL → Pass after repair 1
T12 Admin overview per classPassPassPass
T13 Admin can cancelPassPassPass
T14 CSV with the five columnsPassPassPass
T15 Rejects bad inputPassPartialname of only spaces saved → Pass after repair 1Partialname of only spaces saved → Pass after repair 1
T16 Data survives a republishPassPassNot testedcould not publish; see below on deleted data
T17 Usable at 390 pxPassPassPartialpage 494 px wide → Pass after repair 1
T18 Code and data exportPasscode built outside Lovable; needs your own database to runPasszip export ran outside Replit on our own database; admin password travels in the exportNot testedGitHub integration from Standard

T18 for Lovable was run on 26 September 2026. We connected GitHub with access limited to one empty repository; Lovable created its own repository with the full source and the database migrations, and committed no secret keys. Outside Lovable, on Node 22, the code installed and built without errors. It did not run on its own: the page loaded, but no classes did, because the database service key and the admin password stay inside Lovable. To move it you set up your own database from the migrations and take the bookings with you as the admin CSV (T14) or Lovable's full database export, which we did not trigger. T18 for Replit was run the same evening from the project's zip export on the free plan. It held the full source and its git history, but none of the data. Outside Replit the code installed and built with pnpm 10 (pnpm 12 refused) once two settings Replit normally supplies, PORT and BASE_PATH, were set, and it ran against a new, empty Postgres database of our own: the tables were created, a booking was accepted and counted, and the admin login refused a wrong password. One thing to know before you share or connect the code: the admin password the agent picked sits as a plain value in the project's .replit file and in its git history, so it goes wherever the export or a GitHub copy goes. Change it after exporting. For Emergent, T18 was checked in settings and documentation only.

What it took and what it cost

LovableReplitEmergent
Plan and modeFree, Build modeStarter (free), Free agent mode, Power and Max lockedFree, web app
First working versionabout 10 minutes8 minutes of agent work (Replit's own count)about 9 minutes to a preview
Repair prompts needed01 (2 minutes)2 (about 5 minutes each)
Credits4 of the 10 on a new accountnot shown on the free plan; daily allowance used up after repair 119.17 for the two repairs (34.66 to 15.49)
Publishing on the free planone click, stays online, “Edit with Lovable” badgemanual Publish click; “Free deployments are temporary and will expire”; “Made with Replit” badgenot possible: Deploy opens the plan chooser ($1 seven-day trial, then $20 a month)

Emergent's balance rose from 10.00 to 34.66 during the first build without any purchase, and the app does not show why, so the cost of its first build cannot be stated. Lovable's new account started with 10 credits (five daily plus five that expire on 26 September 2027), not the five a day its pricing page leads with.

What each builder did

Lovable

Asked two questions of its own: whether to create a project from the chat, and whether to publish. After that it built, published and tested its own flows (booking, double booking, moving, cancelling), deleted its test booking and told us what it had assumed: an invented studio name, a temporary admin password and Amsterdam time.

It was the only one whose first version held the capacity limit under simultaneous bookings. It also checked input on the server, not only in the form, and prefixed CSV values that start with = + - or @ so a spreadsheet does not run them as formulas. Nobody asked for that.

Replit

Built a separate API and web app on PostgreSQL, ran its own functional pass and reported everything green. It did not publish: “Replit requires the final Publish action”, so a person has to press the button.

Its self-test booked one at a time. Ten at once got all ten in, after which the class list endpoint returned an error and the public page said “No classes on the calendar yet” until two bookings were cancelled. Told exactly that, it added a database lock per class in two minutes and got it right. The free daily allowance was gone after that one repair.

Emergent

Asked five clarifying questions (we let it choose), used a separate design agent and a testing agent, and suggested extra features at the end. Its first version overbooked, put the admin password in the export URL, saved a blank name and did not fit a phone screen.

The first repair fixed three of the four, but while “clearing test data” it dropped the entire bookings collection, which deleted all our test bookings and also the index its capacity fix relied on. The second repair added a lock and passed. It deleted all bookings again while cleaning up. On the free plan the app could not be published at all.

Choose for your situation

One run per builder on one day does not support a winner, so this is what the run does support.

Check the evidence

Our full reviews: Lovable · Replit · Emergent. How we separate researched reviews from hands-on ones: how we review.

Data, editions and corrections

Download everything for edition 2026-09-26 (.zip)

Edition 2026-09-26. Every file below is the analysis input or output of this edition; the checksums let you confirm you have the same bytes we published. The manifest carries the population, period, definitions and counts. A rebuild of this page is not a new measurement: new rounds become new editions, and a changed edition carries a correction note.

FileSizeSHA-256
results.json11,865 bytes10aae28cb5803d8c…

Editions

EditionStatusHeadlineData
2026-09-26current2 of 3: first versions let ten simultaneous bookings into an eight-spot class (check T05)manifest

Archived on Zenodo with a DOI: 10.5281/zenodo.23345681 (always resolves to the newest edition). This edition: 10.5281/zenodo.23345682. The Zenodo copy holds the same data files; screenshots of vendor software stay on this page only.

Licence: CC BY 4.0. Our own data, analysis, tables and charts. Quoted vendor text and screenshots of vendor pages remain the vendor's; we reproduce them as evidence. Questions, corrections or a vendor response: daniel@aibuildermarketplace.com · press & data.

Citation

AIBuilder Marketplace, “One Booking App, Three AI Builders: What Actually Worked”, hands-on test run on 2026-09-26. Free to quote and reproduce with attribution (CC BY 4.0).