# BSC Score - Pool Scoring Application A modern, responsive pool/billiards scoring application built with **Astro** and **Preact**, following best practices for maintainability, performance, and reusability. ## โœจ Features - **Multi-game Support**: 8-Ball, 9-Ball, 10-Ball, and 14/1 Endlos - **Real-time Scoring**: Live score tracking with undo functionality - **Player Management**: Automatic player name history and suggestions - **Game Management**: Create, track, and manage multiple games - **Responsive Design**: Optimized for mobile and desktop - **Progressive Web App**: Offline support and app-like experience - **TypeScript**: Full type safety for better development experience ## ๐Ÿ—๏ธ Architecture Everything reusable now lives under `src/lib`, allowing you to embed the core experience inside another React/Preact host without the Astro shell. - **`@lib/domain`** โ€“ Pure TypeScript domain model (types, constants, validation, helpers). - **`@lib/data`** โ€“ Persistence adapters and repositories (IndexedDB, migrations). - **`@lib/state`** โ€“ Composable hooks that orchestrate domain + data. - **`@lib/ui`** โ€“ Stateless UI primitives with co-located CSS modules. - **`@lib/features/*`** โ€“ Feature bundles composing UI + state (game list, detail, lifecycle modals, new-game wizard). The Astro `src/components` folder is now a thin host layer (screens + island bootstrap) that consumes the library. Detailed module docs live in `src/lib/docs/architecture.md` and the individual `README.md` files under each package. ## ๐Ÿš€ Getting Started ### Prerequisites - Node.js 18+ - npm or yarn ### Installation ```bash # Clone the repository git clone cd bscscore # Install dependencies npm install # Start development server npm run dev ``` ### Available Scripts ```bash npm run dev # Start development server npm run build # Build for production npm run preview # Preview production build npm run test:record # Record browser interactions with Playwright npm run test:e2e # Run all recorded browser automation scripts ``` ### Building with Docker ```bash # Build for production using Docker docker run -it -v $(pwd):/app -w /app --rm node:latest npx astro build ``` ## ๐Ÿงช Testing The project uses **Playwright** for browser automation and recording. This allows you to record interactions once and replay them anytime, making it easy to test repetitive workflows. ### Quick Start **Recording interactions:** ```bash # Terminal 1: Start dev server npm run dev # Terminal 2: Start recording npm run test:record ``` **Running recordings:** ```bash npm run test:e2e ``` ### Features - **Record interactions**: Use Playwright codegen to capture clicks, form fills, and navigation - **Replay scripts**: Run recorded scripts automatically - **Duplicate & modify**: Copy any script and modify it (e.g., change the last step from clicking 'z' to clicking 'a') - **Full scripting power**: Edit generated TypeScript files directly for custom automation ### Documentation For detailed instructions on recording, modifying, and running scripts, see: - **[tests/recordings/README.md](tests/recordings/README.md)** - Complete workflow documentation ## ๐Ÿ“ Project Structure ### **Core Components** - `src/components/App.tsx` - Astro-bound shell orchestrating library modules - `src/components/screens/` - Screen containers consuming `@lib/features` - `src/lib/` - Reusable application spine (domain/data/state/ui/features) ### **State Management** - `@lib/state/useGameState` - Game CRUD operations and persistence - `@lib/state/useNavigation` - Application routing and screen state - `@lib/state/useModal` - Modal state management helpers ### **Business Logic** - `@lib/data/gameService` - Game creation, updates, and persistence orchestration - `@lib/domain/gameUtils` - Game-related utility functions - `@lib/domain/validation` - Input validation and sanitisation ### **Type Definitions** - `@lib/domain/types` - Game domain types - `@lib/ui/types` - UI component types - `types/css-modules.d.ts` - CSS modules type support ## ๐ŸŽฏ Key Improvements ### **From Monolithic to Modular** - **Before**: 360-line App component handling everything - **After**: Separated concerns with focused, single-responsibility components ### **Type Safety** - **Before**: JavaScript with PropTypes comments - **After**: Full TypeScript with comprehensive type definitions ### **State Management** - **Before**: All state in one component with prop drilling - **After**: Custom hooks with proper encapsulation and reusability ### **Reusability** - **Before**: Tightly coupled, single-use components - **After**: Reusable UI components with variant support ### **Performance** - **Before**: Client-side only rendering - **After**: Astro's islands architecture with optimal hydration ### **Developer Experience** - **Before**: No structure, mixed concerns - **After**: Clear architecture, proper tooling, and documentation ## ๐Ÿ› ๏ธ Technology Stack - **Framework**: [Astro](https://astro.build/) - Islands architecture for optimal performance - **UI Library**: [Preact](https://preactjs.com/) - Lightweight React alternative - **Language**: [TypeScript](https://www.typescriptlang.org/) - Type safety and better DX - **Styling**: CSS Modules with design tokens - **Build Tool**: Vite (integrated with Astro) ## ๐Ÿ“ฑ Progressive Web App The application includes PWA features: - Offline support with service worker - App manifest for "Add to Home Screen" - Optimized for mobile devices - Fast loading with proper caching strategies ## ๐ŸŽจ Design System ### **Design Tokens** - Consistent color palette - Standardized spacing and sizing - Responsive breakpoints - Accessibility-compliant contrast ratios ### **Component Variants** - Button: `primary`, `secondary`, `danger` - Card: `default`, `elevated`, `outlined` - Sizes: `small`, `medium`, `large` ## ๐Ÿงช Best Practices Implemented ### **Code Quality** - โœ… SOLID principles - โœ… DRY (Don't Repeat Yourself) - โœ… Single Responsibility Principle - โœ… Proper separation of concerns - โœ… TypeScript strict mode ### **Performance** - โœ… Code splitting with Astro islands - โœ… Optimized bundle size - โœ… Efficient re-rendering with proper hooks - โœ… CSS Modules for optimized styling ### **Accessibility** - โœ… ARIA labels and roles - โœ… Keyboard navigation support - โœ… Screen reader compatibility - โœ… High contrast support ### **Maintainability** - โœ… Clear file structure - โœ… Comprehensive documentation - โœ… Type safety throughout - โœ… Modular, testable components ## ๐Ÿ”ง Configuration ### **Astro Configuration** - Preact integration with React compatibility - TypeScript strict mode - Optimized build settings - Development server configuration ### **TypeScript Configuration** - Strict type checking - Modern ES2020+ features - CSS Modules support - Astro-specific types ## ๐Ÿ“ˆ Future Improvements - Unit and integration testing (if needed) - Internationalization (i18n) support - Advanced game statistics and analytics - Real-time multiplayer support - Game export/import functionality ## ๐Ÿค Contributing This codebase follows strict development principles: 1. Every feature must be type-safe 2. Components must be reusable and well-documented 3. Business logic must be separated from UI logic 4. All changes must follow the established architecture patterns ## ๐Ÿ“„ License [Include your license information here]