# 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]