Modern travel booking template for Next.js & HTML
Stays, experiences, car rentals, flights and real estate in one template, with a booking that carries from search to checkout to confirmation. Both editions share the same pages and interactions.
Built with the tools you already use
New in 2.4.0
The same template, now in plain HTML
Version 2.4.0 adds an HTML edition to the download. Pick Next.js if your project runs on React, or the HTML files if it doesn't. Both get the booking, search and wishlist updates below.
HTML edition
No framework, no server
Every page layout of the Next.js version as a plain .html file, with the same dropdowns, date pickers and galleries, run by Alpine.js. Run npm run build and the finished site opens straight from the folder.
chisfis-2.4.0/
- template/Next.js 16 · React 19 · TypeScript
- html/NewTailwind CSS 4 · Alpine.js 3 · Vite
- documentation/A guide for each edition
- licensing/One sheet covers both
Lighter pages
0.8MB6.9 MB
of photographs on the home page
- 2.3.1
- 6.9 MB
- 2.4.0
- 0.8 MB
Each photo loads at the width it is drawn, resized by the CDN instead of your own image optimizer.
Shibuya loft · Nov 12 – 15 · 2 guests
A booking that holds together
Reserve carries the listing, dates and guests to checkout and on to the confirmation. All three quote one total, fees and tax included. Flights get a checkout of their own.
Stays in Tokyo
Nov 12 – 15 · 3 guests
Search that lives in the address
Every search form and filter writes to the URL. The results narrow by place and guests, and a filtered page survives a reload or a share.
One wishlist, six currencies
The heart saves to a single wishlist kept in the browser. The currency menu switches every price: cards, map pins, totals and the price slider.
Also in 2.4.0: viewings and a mortgage calculator for real estate, an add-listing draft that survives a reload, demo listings with their own photos and hosts, and focus rings and named dialogs for keyboard and screen reader users.
Read the full changelog45 page templates
Five home pages, results with and without a map, listing pages, checkout, a ten-step add-listing flow, account, blog and sign-in. In both editions.
What's included
Two editions of the same booking site, written to be read and changed. The README covers setup, customising and deploying, and a changelog tells you what moved in each release.
- Next.js 16 and React 19
- The App Router, with every page prerendered at build time. Demo content lives in plain TypeScript arrays under src/data, each behind an async getter you can swap for a real fetch.
- An HTML edition
- The same pages as static .html files, styled with Tailwind CSS 4, made interactive with Alpine.js 3 and built with Vite. For projects that have no place for React.
- Tailwind CSS 4 and TypeScript
- Colours and type are tokens in one @theme block. Change the primary scale there and every component follows; nothing hardcodes a hex value.
- Keyboard and screen readers
- Focus rings on every control, dialogs with names, fields that announce when they are invalid, and photos described by the listing they belong to.
- Static by default
- No backend and no database. Every dynamic route refuses unknown paths, so the site deploys as static files to Vercel, Netlify, Cloudflare Pages or Amplify.
- Search engines and sharing
- Each page names its own canonical address and share title, every page has a share image, and the sitemap and structured data are generated for you.
- Right-to-left and dark mode
- One environment variable mirrors the layout for right-to-left languages, and a toggle in the header switches every page to dark.
- Responsive, down to the booking bar
- On a phone, a bar along the bottom of every listing holds the price and the next step, and tables such as an itinerary turn into lists.





