# Xtablo Monorepo

This is a Turborepo-based monorepo for the Xtablo project, containing multiple apps and shared packages.

## Project Structure

```
xtablo-source/
├── apps/
│   ├── main/           # Main UI application
│   └── external/       # External booking widget microfrontend
├── packages/
│   ├── ui/             # Shared UI components (buttons, inputs, etc.)
│   └── shared/         # Shared utilities, hooks, contexts, and types
├── api/                # TypeScript/Node.js API
├── backend/            # Python backend
├── go_backend/         # Go backend
└── xtablo-expo/        # React Native Expo app
```

## Getting Started

### Prerequisites

- Node.js 18+ and pnpm 10.19.0+
- For other services: Python 3.11+, Go 1.21+

### Quick Start

```bash
# Install dependencies
pnpm install

# Start development (packages are source-only, no build needed)
pnpm dev
```

For detailed development workflows, see [DEVELOPMENT.md](./DEVELOPMENT.md).

### Common Commands

```bash
# Development
pnpm dev              # Run all apps
pnpm dev:main         # Run main app only
pnpm dev:external     # Run external app only

# Building
pnpm build            # Build all apps
pnpm build:apps       # Build apps only
pnpm build:staging    # Build main app for staging
pnpm build:prod       # Build main app for production

# Testing & Quality
pnpm test             # Run all tests
pnpm lint             # Check all packages
pnpm lint:fix         # Fix linting issues
pnpm typecheck        # Type check everything

# Cleaning
pnpm clean            # Clean all build artifacts
```

## Packages

### @xtablo/ui

Shared UI components library used across the main and external apps. Contains all base UI components like buttons, inputs, dialogs, etc.

**Usage:**

```typescript
import { Button } from "@xtablo/ui/components/button";
import { Input } from "@xtablo/ui/components/input";
```

### @xtablo/shared

Shared utilities, hooks, contexts, and types used across apps.

**Usage:**

```typescript
import { useSession } from "@xtablo/shared/contexts/SessionContext";
import { api } from "@xtablo/shared/lib/api";
import { Tables } from "@xtablo/shared/types/database.types";
```

## Apps

### Main (@xtablo/main)

The main Xtablo application with full dashboard, planning, chat, and administrative features.

**Local URL:** http://localhost:5173

### External (@xtablo/external)

Embeddable booking widget that can be integrated into external websites. Supports both embedded and floating widget modes.

**Local URL:** http://localhost:5174

**Usage:**

- Embedded mode: `?mode=embed&eventTypeId=...`
- Floating widget: `?mode=widget&eventTypeId=...`

## Turborepo Features

This monorepo uses Turborepo for:

- **Fast builds**: Parallel task execution and intelligent caching
- **Dependency management**: Automatic build ordering based on package dependencies
- **Code sharing**: Easy sharing of components and utilities between apps

## Development Workflow

For comprehensive development documentation including:

- Package development workflow
- Testing strategies
- Troubleshooting guide
- CI/CD setup

See [DEVELOPMENT.md](./DEVELOPMENT.md)

## Adding a New Package

See the "Adding a New Package" section in [DEVELOPMENT.md](./DEVELOPMENT.md) for detailed instructions.

## Migration Notes

This project was migrated from a single UI app to a Turborepo monorepo with the following changes:

- **Before**: Single `ui/` directory with all code
- **After**:
  - `apps/main/` - Main application
  - `apps/external/` - Separate microfrontend for booking widgets
  - `packages/ui/` - Shared UI components
  - `packages/shared/` - Shared utilities and logic

All import paths have been updated to use workspace packages (`@xtablo/ui`, `@xtablo/shared`).

## Contributing

When adding new shared code:

1. Add to the appropriate package (`ui` for UI components, `shared` for logic/utils)
2. Export from the package's appropriate entry point
3. Use the workspace import in your apps

For more details, see [DEVELOPMENT.md](./DEVELOPMENT.md)

## License

[Your License Here]
