Roomly — an entire Reserving.com-style resort market, as supply code
Roomly is a multi-vendor resort reserving market (OTA) you deploy and
function.
Inns listing room sorts, charges, and availability; travellers search, ebook, and
pay; you earn a fee on each confirmed reserving. It ships as
4 polished surfaces constructed on
one shared backend: a Flutter visitor app (iOS + Android), an
website positioning reserving web site, a resort dashboard, and an admin panel.
What makes it totally different: nearly each resort merchandise on this
class is a browse-and-book UI wrapped round a pretend availability mannequin.
Roomly ships a actual ARI engine (Availability / Charges /
Stock) — per-date allotments, price plans, stop-sell, min-stay guidelines, and
transaction-safe, row-locked double-booking prevention. Two
individuals racing for the final room? One is confirmed, the opposite will get a clear “no
longer obtainable”. That, plus a working entrance desk and fee payouts, is
the depth consumers uncover is lacking after they purchase one thing cheaper.
Before you purchase — sincere v1 scope (please learn). The
reserving engine, funds, fee, entrance desk, and all 4 surfaces are
totally working. A couple of integrations are intentionally
scaffolded, not completed, so nothing surprises you after
buy:
- Picture / media add is URL-based. The Cloudflare
R2 / S3 env floor is reserved, however no in-app add movement ships in v1 —
the demo makes use of public picture URLs.- Cell push notifications are usually not bundled. The Flutter
app has in-app notification preferences, however no push supplier (FCM/APNs)
is wired in.- Transactional e mail is scaffolded. SMTP settings and a
standing badge are in place; join a nodemailer transport to ship reserving
emails.The total listing — together with AI rate-limiting, guide payouts, and i18n — is in
️ Roadmap & sincere limitations additional down. None of
these block the core sell-rooms-and-collect-commission movement.
Strive the demo
-
Stay net demo:
https://roomly.devsnack.dev -
Android visitor app (APK):
https://drive.google.com/file/d/1Z0oYyiNwAk-bhF_IcGbAolerZP5KEK5-/view?usp=sharing
Demo logins (all share the password
Password123!) — every lands by itself floor:
- Admin panel:
[email protected] - Lodge proprietor:
[email protected] - Entrance-desk workers:
[email protected] -
Visitor:
[email protected](or faucet “Proceed as
visitor” within the app)
✨ 4 surfaces, one codebase
-
Visitor app (Flutter): search + map, live-priced property
element, room/price choice, Stripe / PayPal / Pay-at-Lodge checkout,
reserving affirmation with QR, my-bookings with refund-preview cancel,
post-stay opinions, darkish mode. -
Lodge dashboard: onboarding wizard, occupancy/ADR/RevPAR
KPIs, a real price & availability calendar with
inline and bulk edits, a full entrance desk (check-in with
room task, check-out, walk-ins), housekeeping board, opinions, earnings
& payouts. -
️ Admin panel: resort approvals, per-property fee
overrides, world bookings, overview moderation, payout batches, and
market settings. -
Public reserving web site: server-rendered for website positioning with
schema.org JSON-LD, vacation spot and property pages, full net checkout, and
visitor reserving lookup by reference — no account required.
⚙️ Constructed on an actual engine
-
Every day-granularity ARI — stock and price rows per
date, availability as a single listed question (no N+1), a rolling ~24-month
horizon maintained by a background job. -
Double-booking prevention — stock decremented inside
the reserving transaction with row locks and re-verification beneath lock. -
Cash finished proper — integer cents all over the place; fee
snapshotted at affirmation so later price modifications by no means rewrite historical past. -
Fee & payouts — world price + per-property
overrides, pay as you go vs pay-at-hotel dealt with appropriately (pay-at-hotel raises a
“fee due” bill netted towards the following payout). -
♻️ Cancellations — evaluated towards the coverage snapshot
saved on the reserving, with an correct refund preview. -
Pluggable funds — one interface, Stripe + PayPal
totally applied, Pay-at-Lodge inbuilt, Razorpay adapter able to key in;
idempotent, signature-verified webhooks. -
Elective AI — natural-language search and
suggestions over OpenAI or Gemini, server-side, that conceal
themselves cleanly when no secret is set (the product is 100% purposeful with
zero AI keys).
AI options & disclosure
AI-usage disclosure (per Envato coverage). Roomly can
optionally use a third-party AI service —
OpenAI or Google Gemini, your selection
— to energy two options: natural-language search (e.g. “a quiet
beachfront resort beneath $150 with a pool”) and
property suggestions. That’s the solely place AI is utilized in
the product.
-
Elective and off by default. No AI secret is included with the
merchandise. With no key set, the natural-language search field hides itself and
Roomly falls again to key phrase search + recognition suggestions — the
product is 100% purposeful with zero AI. -
Server-side solely. The AI request runs in your server; the
mannequin ID comes from env (OPENAI_MODEL/
GEMINI_MODEL), and no AI secret is ever shipped within the cell app
bundle or uncovered to the browser. -
You provide the important thing and pay the supplier. When you allow it,
OpenAI or Google payments you immediately for utilization (see ” Third-party service
prices” under). The mannequin solely returns a validated search-filter object — it
by no means has direct entry to your database.
Tech stack
-
Internet: Subsequent.js 16 (App Router), React 19, TypeScript,
Tailwind CSS v4, shadcn/ui -
Database: PostgreSQL 16 + pgvector · Drizzle ORM (Neon
serverless or self-hosted Postgres) -
Auth: Auth.js v5, e mail/password, 4 roles (visitor, resort
proprietor, front-desk workers, admin) -
Jobs: Inngest · Funds: Stripe, PayPal,
Pay-at-Lodge, Razorpay adapter -
Cell: Flutter 3.35+ · Riverpod · GoRouter · freezed · dio ·
google_maps_flutter · flutter_stripe -
Deploy: Vercel or any Node host; convey your individual Postgres —
no proprietary infrastructure
What’s included
- Full supply for all 4 surfaces + the shared REST API
-
Typed Drizzle schema — 21 tables, utilized to a recent database with one
command - The “Hospitality Trendy” design system, shared throughout net and cell
- A branding pipeline (one-command launcher-icon regenerate for the app)
-
A wealthy demo seed — 20 properties throughout 5 cities, ~24 months of stock +
charges, 262 bookings throughout each standing, ~140 opinions, actual payout batches -
An offline Flutter check suite and full purchaser documentation in a single
documentation/folder on the root of the obtain — full
guide, quick-start, and a non-technical (no command line) deploy information - 6 months of Merchandise Help
️ Roadmap & sincere limitations
So you understand precisely what you’re shopping for, these are intentional v1 scope decisions
quite than bugs — every one can also be flagged at its name web site within the code and in
the manufacturing guidelines in documentation/index.html:
-
Picture / media add is URL-based. The Cloudflare R2 / S3
env floor is reserved however no in-app add movement ships in v1; the demo makes use of
public picture URLs. -
Cell push notifications are usually not included — the app has
in-app notification preferences, however no push supplier (FCM / APNs) is
bundled. -
Transactional e mail is scaffolded, not wired. SMTP settings
and a standing badge are in place; join a nodemailer transport to ship
reserving emails. -
AI endpoints don’t have any price limiter but — add per-user / IP
throttling earlier than exposing natural-language search publicly with actual keys. -
Payouts are guide in v1 (admin runs and marks batches);
automated disbursement is a future improve. -
i18n ships as a scaffold (English in place); full
multi-locale / RTL is an extension level.
Setup in minutes
cd net && pnpm set up-
cp .env.instance .env— setDATABASE_URLand
AUTH_SECRET pnpm db:push && pnpm db:seedpnpm dev→ openhttp://localhost:3000
Favor to not contact a terminal? The bundled
documentation/easy-deploy.html walks you from ZIP to a stay web site
utilizing solely the Neon and Vercel dashboards.
With no third-party keys in any respect, {the marketplace} nonetheless runs end-to-end
(browse, ebook with Pay-at-Lodge, discover each floor). Add Stripe, PayPal,
AI, or Maps keys any time to modify options on — every prompts solely when its
keys are current.
✅ Necessities
- Node.js 20+ and pnpm
-
PostgreSQL 16 with the pgvector extension (a free Neon challenge works out of
the field) - Flutter 3.35 or newer (Dart 3.9+) provided that you construct the cell app
-
Your personal supplier accounts for any non-obligatory integration you allow (Stripe,
PayPal, OpenAI/Gemini, Google Maps, SMTP)
Third-party service prices (please learn)
Roomly is offered as supply code. The one-time merchandise value covers the code and 6
months of assist — it does not embody any third-party
service. Each non-obligatory integration is billed immediately by that
supplier beneath their very own pricing, not by us:
-
OpenAI / Google Gemini (non-obligatory AI search &
suggestions) — you pay the supplier per token/request. -
Stripe / PayPal / Razorpay (non-obligatory on-line funds) —
every costs its personal transaction & processing charges. -
Google Maps (non-obligatory map view) — billed beneath Google’s
Maps Platform pricing. -
SMTP e mail, internet hosting (Vercel/Node), and the PostgreSQL database
(e.g. Neon) — billed by whichever supplier you select.
All of those are non-obligatory: with no keys set, Roomly nonetheless
runs end-to-end on Pay-at-Lodge, so you possibly can consider the total product earlier than
signing up for something paid.
❓ Often requested questions
Do I want Stripe or PayPal to run Roomly? No. Pay-at-Lodge is
inbuilt and all the time enabled, so company can ebook end-to-end with zero fee
keys. Add Stripe and/or PayPal everytime you need on-line prepayment — every reveals
up at checkout solely as soon as its keys are set.
Is the AI required, and does it value cash? AI is totally
non-obligatory. With no OpenAI/Gemini key, the natural-language search field hides itself
and Roomly falls again to key phrase search + recognition suggestions — an entire
product with zero AI spend. When you allow it, OpenAI/Gemini invoice you immediately for
utilization.
How does the platform generate income? You set a fee price
(world, with non-obligatory per-property overrides). On each confirmed reserving the
fee is snapshotted onto the reserving in integer cents, so later price
modifications by no means rewrite previous earnings. Admin runs payout batches to inns.
What’s “pay-at-hotel fee”? When a visitor pays the
resort immediately at check-in, the resort collects the total quantity — so the platform
is owed its fee. Roomly raises a “fee due” bill and
nets it towards that resort’s subsequent payout, as an alternative of dropping the fee.
How are double-bookings prevented? Stock is decremented
inside the identical database transaction that creates the reserving, with row locks on
the affected dates and a re-check beneath lock. Two company racing for the final room
→ one is confirmed, the opposite will get a clear “now not obtainable”.
Can company cancel themselves? Sure. Cancellation is evaluated
towards the cancellation coverage that was snapshotted onto the reserving at buy
(not the resort’s present coverage), and the visitor sees an correct refund preview
earlier than confirming.
Can I alter the foreign money, colors, emblem, and app identify? Sure —
the platform runs on a single configurable foreign money, and the documentation has a
“White-label & branding” part that maps each emblem, color, app identify, and
bundle ID to the precise file to edit.
How do I again up my knowledge? All the things lives in your individual
PostgreSQL database, so a typical pg_dump is a full backup and
pg_restore is a full restore — no managed service required. The
documentation offers the precise instructions, a scheduled nightly instance with
retention, and a plain-language model for non-technical homeowners.
How do I replace the database when a brand new model ships? Again
up first, then convey your present database as much as the brand new schema with out dropping
knowledge — both pnpm db:push (applies solely the delta and prompts
earlier than something damaging) or versioned migrations
(pnpm db:generate → pnpm db:migrate) for an auditable
manufacturing historical past. The documentation’s “Upgrading to a future model” part
walks each paths and when to make use of every; the demo seed is rarely run on actual
knowledge.
Do you host it for me? No — it ships as supply code you personal
and deploy. Internet hosting, the database, domains, and supplier accounts are yours. The
6 months of assist covers setup assist and bug fixes (see the non-technical
documentation/easy-deploy.html for a no-command-line path).
License & assist
Bought beneath the usual Envato Common and
Prolonged license. Contains
6 months of Merchandise Help — set up assist, bug fixes, and
setup steerage. You provide your individual internet hosting, database, and supplier accounts;
we offer the walkthroughs, not the accounts.
-
Electronic mail:
[email protected] -
WhatsApp:
+855 96 741 3911
Changelog
1.0.0 — Preliminary launch — 4 surfaces, actual ARI
reserving engine, fee & guide payouts, pluggable funds with
idempotent webhooks, non-obligatory dual-provider AI, and a wealthy demo seed.

