Zostel
Start Introduction

Introduction

The product kit. React components on the brand tokens, drawing the brand’s own files — so what you ship looks like Zostel without anyone checking.

What is in it

49
UI primitives

Button, Dialog, Tabs, Select, Toast and the rest — on Radix, so keyboards and screen readers just work.

42
Travel components

Hostel cards, booking summaries, trips, itineraries, heroes, headers and footers.

9
Brand components

The logo, the icons, LIVE IT. NOW, the verbs and the Indian patterns — from the brand’s own files.

544
Icons, in 4 dialects

Roundel, line, UI and duotone — plus an icon for each of the 84 places Zostel is live.

23
Patterns

Points and lines from India, Nepal and Thailand, tone on tone, behind anything.

7
Motion and hooks

Lottie, CSS and framer-motion moves that honour reduced motion; useIsMobile, useToast, useTheme.

How it is built

It draws nothing of its own. Logos, icons, place icons, illustrations, patterns and Lotties are the files brand/tools generates into /brand. Change a drawing there and every component follows.

Flat colour, brand tokens only. Warm Orange, Steel Grey, Beige and the five landscapes — no gradients, glows or bevels. Prices are grouped the Indian way (₹1,23,456).

Everyone can use it. Radix primitives for keyboards and screen readers; every moving part stops for people who ask their device for reduced motion.

Stack: React 19 · Radix UI · Tailwind CSS v4 (@theme) · class-variance-authority · cmdk · vaul · react-day-picker 9 · react-hook-form · framer-motion · lottie-web.

A first screen

LIVE IT. NOW

A friend in every corner.

Zostel Manali
4.6

Manali, Himachal Pradesh

Wi-Fi
Café
Treks
₹1,234 /night

The rating and the amount are samples. The code below is this screen’s own file.

tsx
// A first screen of a Zostel app: the hero on a landscape, then a stay on an Indian pattern. The Introduction
// (/docs/components/introduction) draws it live from this very file and shows this file as its code, so the two can't
// drift apart. The rating and the amount are samples.
import React from "react";
import { Button, HeroSection, HostelCard, PatternBackground } from "zostel-ui";

export function Home() {
  return (
    <>
      <HeroSection title="LIVE IT. NOW" subtitle="A friend in every corner." backgroundImage="/brand/scenes/valleys.svg">
        <Button>Find a bed</Button>
      </HeroSection>
      <PatternBackground pattern="kolam" className="bg-zostel-beige p-8 text-zostel-grey">
        <HostelCard
          name="Zostel Manali"
          location="Manali, Himachal Pradesh"
          imageUrl="/brand/covers/wide/png/manali.png"
          rating={4.6}
          pricePerNight={1234}
          tags={["Wi-Fi", "Café", "Treks"]}
          onBook={() => {}}
          className="mx-auto max-w-sm"
        />
      </PatternBackground>
    </>
  );
}

Next