---
applyTo: "{apps/scandic-web/**/*,apps/partner-sas/**/*,apps/scandic-redirect/**/*,packages/**/*}"
---

# Monorepo and Project Overview

**OVERVIEW:** This is a monorepository managed by **[Turborepo]** containing Next.js applications and several shared internal packages.

**PROJECT STRUCTURE:**

- `/apps/*`: Where public-facing applications live.
    - `/apps/scandic-web`: The public-facing site for Scandic Hotels. Displaing cms content from Contentstack, a hotel room booking flow, and user profile management. Hosted on Netlify.
    - `/apps/partner-sas`: A whitelabel version of the Scandic site for SAS customers that mostly relates to booking a hotel room. Hosted on Netlify
    - `/apps/scandic-redirect`: A service for handling redirects when a url doesn'
      t match any static content or a page in Contentstack. Hosted on Netlify
    - `/apps/redis-api`: An api that acts as a http front to Redis due to serveless constraints. Hosted as a container app in Azure.
- `/packages/*`: Where shared code and utilities are stored. They are built with `transpilePackages` so they do not have their own build pipeline
    - `/packages/design-system`: Shared React/UI components hosted as a Storybook.
    - `/packages/trpc`: Shared trpc routers and logic.
    - `/packages/tracking`: Shared tracking utilities and analytics.
    - `/packages/booking-flow`: The main revenue-generating part where you find booking flow logic and related components.

**INSTRUCTIONS FOR GENERATION:**

1.  **Shared Code:** When generating code that could be reusable (components, hooks, utility functions, types), check the `/packages` directory for existing files. If a new, shared piece of logic is needed, generate it within the appropriate `/packages` subdirectory.
2.  **Imports:** All imports from shared packages must use the configured package name (e.g., `import { Button } from '@repo/ui'`). **Do not use relative paths** to import code between apps and packages.
3.  **Dependency Manager:** All package installations, script commands, and documentation examples must use **Yarn**.
4.  **Testing:** All unit testing must use **Vitest**.

## Next.js & React Best Practices

**FRAMEWORK:** Next.js (Use **App Router**) and React.
**LANGUAGE:** TypeScript with strict mode enabled.

**COMPONENTS:**

1.  **Default to Server Components:** All components in the `/app` directory are **Server Components** by default. Only use `'use client'` when necessary for interactivity (hooks, event handlers, etc.).
2.  **Styling:** Use **Css Modules**.
3.  **Immutability:** Never mutate props or state directly. Always return new objects or arrays for updates.
4.  **Data Fetching** All client-side and server-side data fetching logic should use types and procedures defined in the shared /packages/trpc

**FILE NAMING:**

- Components: `PascalCase` (`ProductCard.tsx`).
- Hooks: `camelCase` and start with `use` (`useUser.ts`).
