Project Structure
Last updated on 2026-08-26
The Booking Kit follows a three-tier component architecture with domain-specific route groups and a centralized data layer.
Directory Overview
booking-kit/
├── app/
│ ├── (app)/ # Admin pages (sidebar layout)
│ │ ├── bookings/
│ │ │ ├── page.tsx # Bookings dashboard
│ │ │ ├── [id]/page.tsx # Booking detail
│ │ │ ├── calendar/page.tsx # Calendar week view
│ │ │ ├── recurring/page.tsx # Recurring bookings
│ │ │ └── links/page.tsx # Booking links
│ │ ├── event-types/
│ │ │ ├── page.tsx # Event types list
│ │ │ └── [id]/page.tsx # Event type detail
│ │ ├── availability/
│ │ │ ├── page.tsx # Weekly hours editor
│ │ │ └── policies/page.tsx # Booking policies
│ │ ├── contacts/
│ │ │ ├── page.tsx # Contacts list
│ │ │ └── [id]/page.tsx # Contact detail
│ │ ├── team/
│ │ │ ├── page.tsx # Team members
│ │ │ └── availability/page.tsx # Team availability
│ │ ├── workflows/
│ │ │ ├── page.tsx # Workflows list
│ │ │ └── [id]/page.tsx # Workflow detail
│ │ ├── analytics/
│ │ │ ├── page.tsx # Bookings analytics
│ │ │ ├── revenue/page.tsx # Revenue analytics
│ │ │ └── team/page.tsx # Team performance
│ │ ├── settings/
│ │ │ ├── integrations/page.tsx # Calendar sync, video, payments, CRM
│ │ │ ├── branding/page.tsx # Logo, colors, booking page
│ │ │ ├── payments/page.tsx # Payment provider config
│ │ │ ├── notifications/page.tsx# Email/SMS notification prefs
│ │ │ ├── organization/page.tsx # Org name, timezone, defaults
│ │ │ ├── roles/page.tsx # Roles & permissions matrix
│ │ │ └── account/page.tsx # Profile, password, danger zone
│ │ └── layout.tsx # Sidebar + header shell
│ ├── (public)/ # Public booking flow
│ │ └── book/
│ │ ├── page.tsx # Service landing / event selection
│ │ ├── slots/page.tsx # Calendar + slot picker
│ │ ├── details/page.tsx # Attendee details form
│ │ ├── payment/page.tsx # Payment summary + card input
│ │ ├── confirmation/page.tsx # Booking confirmed
│ │ ├── reschedule/page.tsx # Reschedule picker
│ │ ├── cancel/page.tsx # Cancellation form
│ │ └── unavailable/page.tsx # No availability fallback
│ ├── (auth)/ # Authentication
│ │ ├── login/page.tsx
│ │ ├── register/page.tsx
│ │ └── forgot-password/page.tsx
│ ├── page.tsx # Root redirect to /bookings
│ ├── layout.tsx # Root layout (fonts, theme, skip-link)
│ └── globals.css # Design tokens + Tailwind config
├── components/
│ ├── ui/ # Tier 1: shadcn/ui primitives (28)
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── calendar.tsx
│ │ ├── dialog.tsx
│ │ ├── table.tsx
│ │ ├── tabs.tsx
│ │ ├── select.tsx
│ │ ├── input.tsx
│ │ └── ... (28 total)
│ ├── booking/ # Tier 2: Booking flow composites
│ │ ├── booking-stepper.tsx
│ │ ├── host-card.tsx
│ │ ├── mini-calendar.tsx
│ │ └── slot-picker.tsx
│ ├── dashboard/ # Tier 2: Dashboard composites
│ │ ├── stat-card.tsx
│ │ └── booking-status-badge.tsx
│ ├── layout/ # Tier 2: App shell
│ │ ├── app-sidebar.tsx
│ │ ├── app-header.tsx
│ │ ├── mobile-sidebar.tsx
│ │ ├── skip-link.tsx
│ │ └── theme-toggle.tsx
│ ├── a11y/ # Accessibility utilities
│ │ ├── live-region.tsx
│ │ └── visually-hidden.tsx
│ ├── analytics/ # Analytics chart wrappers
│ ├── availability/ # Availability editor components
│ ├── calendar/ # Calendar view components
│ ├── contacts/ # Contact management components
│ ├── events/ # Event type components
│ ├── settings/ # Settings form components
│ ├── team/ # Team management components
│ └── workflows/ # Workflow builder components
├── data/
│ └── seed.ts # All mock data (bookings, events, contacts, etc.)
├── types/
│ └── index.ts # TypeScript interfaces for all domains
├── lib/
│ ├── format.ts # Date, currency, number formatters
│ └── utils.ts # cn() class utility
├── public/ # Static assets
├── components.json # shadcn/ui configuration
├── next.config.ts # Next.js config
├── package.json
└── tsconfig.json
Route Groups
The app uses three Next.js route groups:
| Group | Layout | Purpose |
|---|---|---|
(app) |
Sidebar + Header | Admin pages for managing bookings, events, availability, team, analytics, and settings |
(public) |
Minimal | Public-facing booking flow that clients/attendees use to schedule |
(auth) |
Centered card | Login, register, and forgot password |
Key Files
| File | Purpose |
|---|---|
app/layout.tsx |
Root layout: fonts (Figtree, Mulish, IBM Plex Mono), ThemeProvider, TooltipProvider, SkipLink, Toaster |
app/globals.css |
oklch design tokens, Tailwind theme, animations, accessibility utilities |
data/seed.ts |
All mock data: bookings, event types, contacts, team members, analytics, workflows |
types/index.ts |
TypeScript interfaces for every domain: Booking, EventType, Contact, TeamMember, Workflow, CalendarEvent, etc. |
lib/format.ts |
Shared formatters: formatCurrency(), formatDate(), formatTime(), formatDuration(), formatPercent(), formatRelativeDate() |
lib/utils.ts |
cn() class name merge utility |
components.json |
shadcn/ui config (new-york style) |
Next Steps
- Screens -- browse all 39 screens with routes and descriptions
- Components -- understand the three-tier component hierarchy
- Design Tokens -- customize the oklch color system