Date
Decided by
What we need it for
Team size and users
| Product | Plan | Price per month, billing |
|---|---|---|
Mark each check as a must-have, a nice-to-have or not needed, then write down what you saw. Our column shows what we saw after repairs on 2026-09-26, one run per product on the free plan. Your plan and settings can give a different result.
| ID | Check | Needed? | Your result | Our result |
|---|---|---|---|---|
| T01 | App published Loads at a public URL without logging in to the builder. | Our result: Emergent: failed; Lovable: passed; Replit: partly | ||
| T02 | Schedule Next 14 days; Mon-Fri 07:00 and 18:30, Sat 09:00, no Sunday; 8 spots each. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T03 | Booking Name and email; spots left drops by one, also after a reload. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T04 | Confirmation Confirmation shows a unique manage link. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T05 | Full is full Ten simultaneous booking requests on an empty 8-spot class: 8 accepted, 2 refused. One manual double click is not this test; use simultaneous-bookings.js. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T06 | No double booking The same email cannot book the same class twice, also typed in capitals. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T07 | Move The manage link moves a booking: old class +1, new class -1. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T08 | Cancel The manage link cancels a booking and frees the spot. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T09 | Manage link not guessable The link contains a long random code, not a sequence number. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T10 | Admin page protected No access without or with a wrong password, in the page and through the app's own API. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T11 | Password not exposed The admin password is not in the page source, the JavaScript or any URL. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T12 | Overview The admin page lists all bookings per class, consistent with T03-T08. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T13 | Admin cancels The admin cancels a booking; the spot is freed and the status visible. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T14 | CSV export Download with exactly: class date, class time, name, email, status; rows match what you booked. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T15 | Input checks An empty name, a name of only spaces and an invalid email are refused by the server. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T16 | Data survives Bookings are still there after a reload and after republishing. | Our result: Emergent: not tested; Lovable: passed; Replit: passed | ||
| T17 | Usable on a phone At 390 px wide, schedule, booking and manage link work without sideways scrolling. | Our result: Emergent: passed; Lovable: passed; Replit: passed | ||
| T18 | Take it with you Export the code (GitHub or zip) and the data; try to run it outside the builder and note what does not come along. | Our result: Emergent: not tested; Lovable: passed; Replit: passed |
A must-have you could not test is unknown, not passed. Write it down here and ask the vendor before you sign.
Yearly cost of the plan we need
One-off switching costs
Months paying for two tools
Work out switching costs, overlap and payback in Before You Renew (https://aibuildermarketplace.com/tools/renewal-check/). Leave a cost you do not know as unknown instead of guessing.
Product and plan
Main reason
Check again on (date)
What would change this decision