External storefronts

Give an LLM the Rental storefront skill to adapt the built-in guest experience or create a separate client.

To create a custom Rental storefront, copy the skill and give it to your LLM. The skill will explain how features/storefront and the customer-facing app routes implement Rental's current experience.

After that source orientation, it will ask what you dislike, what should stay, what workflows and users matter, and what the replacement should look and feel like. It then traces the exact routes, feature slices, GraphQL calls, schema, access rules, sessions, and provider boundaries in the supplied Rental codebase before proposing work.

Skill file: /skills/openfront-rental-custom-storefront/SKILL.md

Current storefront routes

Route files live directly under app/ (the home page is app/(home)/page.tsx). Each one re-exports a screen from features/storefront/screens. Data loaders and server actions are in features/storefront/lib/data.

RouteWhat guests do thereScreen
/Landing page with store identity and featured stayslanding/StorefrontLandingPage
/searchSearch stays by destination, dates, guests, pets, property type, amenities, rooms, price, and instant booksearch/StaySearchPage
/stays/[slug]Listing detail, gallery, availability calendar, reviews, and the booking panel that asks for a quotestays/StayDetailPage
/collections, /collections/[slug]Browse stay collectionscollections/CollectionsPage
/compareCompare up to three homes side by sidecompare/ComparePage
/checkout/[quoteToken]Review the quote, enter guest details, accept terms, and reservecheckout/StayCheckoutPage
/tripsOpen a trip from a saved link, or recover one by confirmation code and emailtrips/TripEntryPage
/trips/[token]Private trip page: stay details, ledger, card payment (test mode), messages, change or cancellation request, review, and claim to accounttrips/TripPage
/agreements/[token]Read and sign the stay agreementagreements/StayAgreementPage
/messages/[token]Private guest conversation thread; reply to the hostmessages/GuestThreadPage
/accountGuest account: profile, password, trips, open a trip by confirmation code, sign outaccount/AccountPage
/account/sign-in, /account/register, /account/resetGuest sign-in, registration, and password resetaccount/AccountAuthPages
/helpHelp content and an inquiry formhelp/HelpPage
/policiesStore policy links from store settingshelp/PoliciesPage

Trip, agreement, and message pages are opened by 48-character hex tokens in the URL. No guest account is needed to book. A booking redirects to /trips/[token]?booked=1, with the agreement token added when one was issued.

Compare choices are kept in the URL and mirrored in the browser's session storage. The server never reads them.

How the pages talk to the server

The storefront calls named GraphQL documents through server actions and loaders in features/storefront/lib/data:

FileOperations
marketplace.tsPublicMarketplaceSettings
stays.tsSearchStays, PublicListing, PublicStayAvailability, PublicStayQuote, PublicTrip, PublicStayAgreement
stay-availability.tsCheckStayDates (a one-result searchStays call)
stay-actions.tsQuoteStay, CreateStayReservation, RequestStayCancellation, SignStayAgreement
checkout-receipt.tsRecoverStayCheckout
payment-actions.tsStartGuestStayPayment, CompleteGuestStayPayment
guest.tsMyGuestAccount, PublicGuestThread, GuestPasswordResetAvailable
guest-actions.tsSubmitGuestInquiry, ReplyToGuestThread, SendTripMessage, SubmitStayReview, RecoverStayTrip, ClaimStayTrip, OpenAccountTrip
account-actions.tsSignInGuest, RegisterGuestAccount, EndGuestSession, SendGuestPasswordReset, RedeemGuestPasswordReset, UpdateMyGuestProfile, ChangeGuestPassword

Guest sign-in uses the same Keystone session cookie (keystonejs-session) as the dashboard. See the overview for the server operations behind these documents.

features/storefront/middleware.ts is a no-op hook for the shared proxy. The storefront has no region, cart cookie, or redirect handling of its own.

Card payment on the trip page uses Stripe for test bookings. Currency, locale, and timezone come from store settings; routes have no locale prefix.

On this page