Built with React, TypeScript, Vite, Tailwind, AirJam, and Stripe
react-hospitality-site-starter — Vite Starter Template
By airjam-co
A serverless accommodation booking website template built with React, TypeScript, Vite, Tailwind, AirJam, and Stripe, mainly for bookable services such as B&Bs and inns, with PWA and responsive layout support.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 2
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Fully serverless architecture, deployable to Vercel, Netlify, a Node server, or run locally as a static website
Booking functionality is provided by AirJam's Appointment component, supporting booking review, localization, and email notifications
Payments are handled through Stripe; the demo environment uses test mode and can verify the payment flow with test card numbers
Designed as a PWA and uses Tailwind to control responsive settings, tested in a variety of web and mobile browsers
The look and feel are controlled by React, Tailwind, and CSS, and can be adjusted as needed
Template Details
This template is a free serverless accommodation and hotel booking website starter built with React, TypeScript, Vite, Tailwind, AirJam, and Stripe. The README states that it runs in a fully serverless manner and can be deployed on Vercel, Netlify, a Node server, or run as a static website on a local machine. The template is mainly aimed at private accommodations such as B&Bs and inns, and can also be adapted to bookable services such as spas, salons, car rentals, and kayak rentals.
Booking functionality is provided by AirJam's Appointment component, supporting booking review, localization, and email notifications; the related management, email design customization, and internationalization operations are done in the AirJam Appointment component dashboard. Payments are handled through Stripe, and the demo environment uses Stripe test mode, where Stripe test card numbers can be used to test the payment flow; if you do not want to collect payments, you can ignore the Stripe setup and mark resources as free in AirJam to disable payment collection.
The template uses TypeScript and SWC, is powered by Vite, and triggers the Vite compiler build via npm run build. The look and feel are fully controlled by React, Tailwind, and CSS. The README does not provide specific framework version numbers, performance data, or production-readiness statements.
Is it right for your project?
Use Cases
- Build a bookable website for a B&B, B&B, or inn
- Create booking pages for bookable services such as spas and salons
- Provide a booking interface for daily-rate rental services such as car rentals and kayak rentals
- Deploy an accommodation booking website under a serverless architecture, avoiding backend server maintenance
- Use Stripe test mode to verify the payment processing flow
Suitable For
- Front-end developers who need a serverless accommodation booking website template
- Developers who want to use the React, TypeScript, Vite, and Tailwind stack
- Teams planning to manage bookings and email notifications through the AirJam Appointment component
- Accommodation service providers who need to integrate Stripe payments or choose a free-resource mode
- Developers who want to adapt the template to bookable services such as spas, salons, and rentals
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
After cloning the repository, run npm install, then run npm run build to build the project
- 2
Before running, rename .env.example to .env, then run npm run dev
- 3
Custom use requires registering AirJam and Stripe accounts and obtaining Stripe's secret and publishable keys
- 4
When creating an Appointment component in AirJam, set the booking duration to Daily, and set the minimum and maximum booking durations and the booking increment
- 5
Configure VITE_AIRJAM_APPOINTMENT_ID and VITE_STRIPE_PUBLISHABLE_CLIENT_KEY in .env, and in the AirJam Appointment component select Stripe as the payment processor and paste the Stripe secret key; for production, it is recommended to use environment variables rather than a .env file
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in a public repository; the free scope is the code of this version and does not mean that external services or third-party assets are free.
Must comply with when using
- Free use, modification, commercial use, and distribution of this version's code are permitted.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the complete MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The README mentions Firebase integration; before enabling related dynamic features, you need to configure it yourself and check Firebase's quotas and charges.
- Demo images, fonts, icons, and other third-party assets need to be checked against their respective licenses and cannot be judged solely by the code's MIT license.
- External services such as domains, hosting, databases, payments, or AI may incur additional charges.
- Customizing the template requires registering AirJam and Stripe accounts yourself; if you need to process payments, you must obtain Stripe's secret and publishable keys.
- Using the booking functionality requires registering AirJam and creating an Appointment component, and completing configuration according to the official guide.
- When creating an Appointment component in AirJam, you must set the booking duration to Daily, and set the minimum/maximum booking durations and the booking increment, otherwise the template will not work properly.
- Each resource price must be set to $0 (free) or above $0.50 USD/increment, because Stripe does not support transactions with smaller amounts.
- You need to configure VITE_AIRJAM_APPOINTMENT_ID and VITE_STRIPE_PUBLISHABLE_CLIENT_KEY in .env, and in the AirJam component select Stripe and paste the secret key to complete the binding.
- For production, it is recommended to use environment variables rather than a .env file to manage configuration.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
To customize the template for your own use, you will need your own [AirJam](https://airjam.co/) and [Stripe](https://stripe.com/) account to begin. First. sign up and configure your [Stripe](https://stripe.com/) account and grab Stripe's secret and publishable keys for use. Please refer to this [doc](https://docs.stripe.com/keys) to learn how to retrieve the keys from Stripe's dashboard. If you're not interested in processing payments, you can skip the Stripe configuration altogether.
Original README
The, sign up to [AirJam](https://airjam.co/) and create a new Appointment component by following following [this guide](https://airjam.co/appointment/how). As you are following the guide, please make sure you do the following:
Original README
* You can add as many resources (ie. individual rentable units) as you need, however, make sure to **set booking duration as Daily**, set minimum and maximum booking duration, and set booking increments, since this template is using Daily booking interface to let users to book resource in daily increments.
Original README
* For each resources, make sure to either set the price as $0 for free resources, or prices higher than **$0.50 USD per increment**, as Stripe does not process transactions smaller than that.
Original README
Once you are all configured with Stripe and AirJam, have Stripe's secret and publishable keys, and have an ID for your AirJam's Appointment component, then you can add those values to the .env files to configure your account to the template. Open `.env` file and change `VITE_AIRJAM_APPOINTMENT_ID` and `VITE_STRIPE_PUBLISHABLE_CLIENT_KEY` to your Appointment component ID and Stripe's publishable key, respectively, then goto your AirJam's Appointment component, choose Stripe as the payment processor, then past Stripe's secret key to the text box below the dropdown to wire your AirJam account with your Stripe account.
Original README
https://github.com/airjam-co/react-hospitality-site-starter/blob/main/LICENSEhttps://github.com/airjam-co/react-hospitality-site-starter/blob/main/README.mdIf you're not familiar with how to work with `.env` files, [refer to following guide](https://vite.dev/guide/env-and-mode#env-files) on how to work with `env` files in different environments. In production, it's highly recommended that you use [environment variables](https://vite.dev/guide/env-and-mode#env-variables) instead of `.env` files.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-16. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 79 / 100
- Technologies
- Vite · React
- Website type
- Starter
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2025-01-17
- Screenshot last checked
- 2026-10-16
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Vite as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: codex-user-requested-batch-review-20261017 · 2026-10-16
Inspect the recorded source material
SHA-256: d2300f3e0892db77eec890d60687d5afeb9b1768e8a833e775916f4c1a8e9ca1
2026-10-16T01:25:05.016Z
Source file / repository# Free React Serverless Hotel Booking Website Template 🛏️ 🏨  Look, ma, no servers! This free template is designed for accommodation and hospitality websites and is built with React, Typescript, Vite, Tailwind, AirJam, and Stripe. This template is built in a full serverless manner, so you can easily get started by hosting on platforms such as Vercel, Netlify, a Node server, or even on your own local machine as a static website, and you don't have to worry about bringing up a server to back it up. Although this template is designed primarily as a website for private accommodations like B&Bs and lodges, the template can easily be adapted for various bookable hospitality services, including spas, salons, car rentals, kayak rentals, etc. ## Demo A hosted demo of this template is available at https://free-react-serverless-booking-template.vercel.app/ The demo is wired up with Stripe under test mode, so feel free to use Stripe's [test card numbers](https://docs.stripe.com/testing#cards) to test payment processing flows.      ## Features * Designed as a full PWA (Progressive Web App) using Tailwind and the template is tested with various web and mobile browsers for responsiveness. All responsive settings are controllable using Tailwind classes. * Developed with TypeScript and SWC (Speedy Web Compiler), powered by Vite. To compile your project with SWC efficiency, use the `npm build` command to build your project, which triggers the Vite compiler. * Uses Stripe to process payments. Use Stripe's dashboard to enable and support various payment processing options and workflows. If you're not interested in taking payments, you can simply ignore Stripe settings and mark your resources as free on AirJam to disable payment collection features. * Booking functions are provided by AirJam's Appointment component, and it supports things like booking moderation, localization, and email notifications. Manage bookings, customize email designs, and handle internationalization via the AirJam Appointment component dashboard. * You can obviously take advantage of the flexibility of React and Javascript to add whatever features you'd like to the template. You can keep your project serverless with tools like Firebase (for database) and Clerk (for auth), or connect to [Xano](https://www.xano.com/) or custom servers for building your own custom server-based features. * The look and feel are entirely controlled by React, Tailwind, and CSS. Use these tools in any shape and form as you wish to mold the template to your specific design and functionality needs. ## Running the template ### tl;dr To build, do: ``` git clone https://github.com/airjam-co/react-hospitality-site-starter npm install npm run build ``` Then, to run: ``` mv .env.example .env npm run dev ``` ### In detail Run the steps above to clone, install, build, and run the template as-is. The template should work out-of-the-box. To customize the template for your own use, you will need your own [AirJam](https://airjam.co/) and [Stripe](https://stripe.com/) account to begin. First. sign up and configure your [Stripe](https://stripe.com/) account and grab Stripe's secret and publishable keys for use. Please refer to this [doc](https://docs.stripe.com/keys) to learn how to retrieve the keys from Stripe's dashboard. If you're not interested in processing payments, you can skip the Stripe configuration altogether. The, sign up to [AirJam](https://airjam.co/) and create a new Appointment component by following following [this guide](https://airjam.co/appointment/how). As you are following the guide, please make sure you do the following: * You can add as many resources (ie. individual rentable units) as you need, however, make sure to **set booking duration as Daily**, set minimum and maximum booking duration, and set booking increments, since this template is using Daily booking interface to let users to book resource in daily increments. * For each resources, make sure to either set the price as $0 for free resources, or prices higher than **$0.50 USD per increment**, as Stripe does not process transactions smaller than that. Once you are all configured with Stripe and AirJam, have Stripe's secret and publishable keys, and have an ID for your AirJam's Appointment component, then you can add those values to the .env files to configure your account to the template. Open `.env` file and change `VITE_AIRJAM_APPOINTMENT_ID` and `VITE_STRIPE_PUBLISHABLE_CLIENT_KEY` to your Appointment component ID and Stripe's publishable key, respectively, then goto your AirJam's Appointment component, choose Stripe as the payment processor, then past Stripe's secret key to the text box below the dropdown to wire your AirJam account with your Stripe account. If you're not familiar with how to work with `.env` files, [refer to following guide](https://vite.dev/guide/env-and-mode#env-files) on how to work with `env` files in different environments. In production, it's highly recommended that you use [environment variables](https://vite.dev/guide/env-and-mode#env-variables) instead of `.env` files. ## Learn more To learn more about specific technology used for this template, check out following resources: * [How to create new Appointment component with AirJam](https://airjam.co/appointment/how) * [Next.js Documentation](https://nextjs.org/docs) * [Tailwind Documentation](https://tailwindui.com/documentation) ## About AirJam AirJam offers a variety of serverless components that enable frontend engineers to easily add complex features to their projects without the need for server-side coding. This template leverages AirJam's Appointment component to add booking functionality. ## Support AirJam 😃 Everything in this template, including its features, is provided free of charge, sponsored by AirJam. If you like this template, you can help us out for a [couple of beers](https://donorbox.org/support-airjam) 🍺 or give it a star ⭐
Explore similar templates
Compare previews and descriptions within the same stack and category.

cove
Cove is a minimal TanStack Start starter template maintained by mugnavo, integrating React, TanStack Router/Query, Tailwind CSS, shadcn/ui, Drizzle ORM with PostgreSQL, Better Auth, Vite Plus, and Nitro.
Vite · SaaS

vite-react-boilerplate
A production-ready Vite + React starter template with TypeScript, Tailwind CSS, TanStack Router/Query/Table, Storybook, React Hook Form + Zod, Vitest and Playwright testing, plus Husky/Commitizen/Commitlint commit conventions.
Vite · Starter

vital
Vital is a Vite-based React starter template using TypeScript and Tailwind CSS, with an Atomic Design component directory, path aliases and Hero Icons.
Vite · Starter

react-vite-admin
A backend management starter built on Vite and React, integrating Recoil, React Query, TypeScript, and Axios, with Ant Design-style interface screenshots. Suitable as a starting point for management-side projects, licensed under MIT, with Chinese documentation and common scripts.
Vite · Admin dashboard

typescript-react_best_practices-vite_template
A Vite + React + TypeScript starter template by CodelyTV, preconfigured with Jest and React Testing Library unit tests, Cypress end-to-end tests, ESLint and Prettier using Codely's shared configuration, GitHub Actions workflows, a Makefile, and Sass.
Vite · Starter

cloudflare-starter-kit
A Cloudflare Workers project scaffolding template maintained by kriasoft, using Vite and TypeScript, with three built-in workspaces: api, app, and edge, and preconfigured local testing, multiple environments, and a GitHub Actions deployment workflow.
Vite · Starter
