Demo: HavenStay
HavenStay is a hotel booking marketplace built to demonstrate Lamina’s init → design → implement → verify loop. The same prompt produced two builds — one with Lamina, one without — both from scratch by Cursor Composer 2.5 with no human-written app code.
Quick path
- Clone the repo and run the with-Lamina demo
- Compare behavior against the without-Lamina build
- Inspect
.lamina/artifacts for the full contract
The prompt
Both builds used this prompt:
Design and build a complete hotel booking platform called HavenStay from scratch.
Create a production-ready product that enables travelers to discover, compare, book,
and manage hotel stays, while enabling hotels to manage their properties, rooms,
pricing, availability, reservations, and guest interactions.
The product should feel polished, cohesive, and ready for real-world use. Design every
aspect of the experience, including the end-to-end user journeys, information
architecture, navigation, search and discovery, booking lifecycle, account management,
payments, cancellations, reviews, notifications, hotel management, trust and safety,
customer support, accessibility, edge cases, and system behavior.With vs without Lamina
| With Lamina | Without Lamina | |
|---|---|---|
| Folder | demo/hotel-booking-with-lamina | demo/hotel-booking-without-lamina |
| Workflow | /lamina-init → /lamina-design → implement → /lamina-verify | Cursor Plan mode → implement |
Both apps cover traveler search/booking, a hotel partner surface, and an admin role. The gap is product behavior — marketplace integrity, ops depth, and edge cases — not whether a screen exists.
Run the demo
git clone https://github.com/aryaniyaps/lamina.git
cd lamina/demo/hotel-booking-with-lamina
npm install
npm run db:setup
npm run devOpen http://localhost:3000 .
Demo accounts
Password for all: demo1234
| Role | |
|---|---|
traveler@havenstay.demo | Traveler |
hotel@havenstay.demo | Hotel operator |
admin@havenstay.demo | Platform admin |
Verify the demo
With the dev server running:
/lamina-verify guest booking checkout at http://localhost:3000Behaviors Lamina covered
These are product behavior gaps the with-Lamina build handles and the without-Lamina build missed:
Inventory hold with countdown
15-minute checkout hold with hold-aware availability. A room cannot stay bookable while someone else is paying. Without hold logic, two guests can checkout the same room simultaneously.
Cancellation policy snapshot
Flexible / Moderate / Strict per property, snapshotted immutably at booking time. Without snapshots, cancellation rules can change retroactively.
Admin gate before go-live
Property goes live only after admin approve, reject, or request-changes — not on submit alone. Skipping approval gates lets incomplete listings reach guests.
Partner onboarding wizard
Multi-step setup with readiness checklist tracking what is still missing. Partners get stuck mid-flow without clear progress indicators.
Hotel cancel with reason and refund
Hotel can cancel a reservation with a required reason and automatic full guest refund. Without this path, hotels cannot handle guest-impacting issues.
Full platform admin console
Approvals, users, bookings, payments, trust reports, reviews, support tickets, and audit log. Plan mode produced a single KPI page.
Traveler edge cases
Email-verified booking gate, cancel flow with refund preview, review-window gating, and receipt on trip detail.
Search integrity
Search surfaces only live properties and excludes sold-out inventory for selected dates.
Rich booking lifecycle
States include PENDING_PAYMENT, CHECKED_IN, CANCELLED_BY_TRAVELER, CANCELLED_BY_HOTEL, PAYMENT_FAILED, plus user suspension that blocks booking.
Inspect the artifacts
The bundled with-Lamina demo ships an archived legacy artifact set from before Contract v2. The paths below are what actually exist in the repo — not the current canonical filenames.
| Artifact | Legacy path (bundled demo) |
|---|---|
| Business context | .lamina/business-context.md |
| Personas | .lamina/personas.yaml |
| Machine contract | .lamina/runs/havenstay-platform-2026-07-10/run.yaml |
| Implement brief | .lamina/runs/havenstay-platform-2026-07-10/implement.md |
| Design report | .lamina/runs/havenstay-platform-2026-07-10/report.md |
| Verify report | .lamina/runs/havenstay-platform-2026-07-10/verify-report.md |
| Fix brief | .lamina/runs/havenstay-platform-2026-07-10/fix.md |
| Walkthrough evidence | .lamina/runs/havenstay-platform-2026-07-10/walkthrough/ (optional) |
New Lamina runs use Contract v2 canonical names — personas.json, run.json, run.md, report.md, and optional walkthrough/ — as documented in Per-run artifacts and Global artifacts.
Advanced: The legacy run.yaml contract includes 18 entities, 23 workflows, 21 scenarios, and 15 invariants. Use it to see what a mature Lamina design looks like, but refer to the run.json schema for the current contract format.
What this proves
These are not UI polish issues. They are product behavior gaps that Lamina’s contract and verification loop catches before they reach users.
Next steps
- Personas — how verification walks work
- Quickstart — run your own cycle with Contract v2 artifacts
- Per-run artifacts — canonical artifact model for new runs