Refactor BSC Score to Astro, TypeScript, and modular architecture
This commit is contained in:
259
README.md
259
README.md
@@ -1,80 +1,219 @@
|
||||
# BSC Score
|
||||
# BSC Score - Pool Scoring Application
|
||||
|
||||
A modern, responsive web application for tracking billiards scores. Built with vanilla JavaScript and designed for mobile-first usage.
|
||||
A modern, responsive pool/billiards scoring application built with **Astro** and **Preact**, following best practices for maintainability, performance, and reusability.
|
||||
|
||||
## Features
|
||||
## ✨ Features
|
||||
|
||||
- Track scores for different billiards game types (8-Ball, 9-Ball, 10-Ball, 14/1)
|
||||
- Support for "Race to X" games
|
||||
- Real-time score tracking
|
||||
- Game history with active and completed games
|
||||
- Player name history and quick selection
|
||||
- Mobile-optimized touch interface
|
||||
- Offline support with local storage
|
||||
- Dark theme design
|
||||
- **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
|
||||
|
||||
## Usage
|
||||
## 🏗️ Architecture
|
||||
|
||||
1. Open `index.html` in your web browser
|
||||
2. Create a new game by clicking "Neues Spiel"
|
||||
3. Select or enter player names
|
||||
4. Choose game type and optional "Race to X" setting
|
||||
5. Use the score buttons to track points during the game
|
||||
6. Complete the game when finished
|
||||
7. View game history and filter by status
|
||||
This project has been refactored following modern software development best practices:
|
||||
|
||||
## Development
|
||||
### **Separation of Concerns**
|
||||
- **Services Layer**: Game data management and localStorage operations
|
||||
- **Custom Hooks**: Reusable state management logic
|
||||
- **Components**: UI components with single responsibilities
|
||||
- **Utils**: Pure utility functions for common operations
|
||||
|
||||
The application is built using:
|
||||
- Vanilla JavaScript (ES6+)
|
||||
- HTML5
|
||||
- CSS3
|
||||
- LocalStorage for data persistence
|
||||
### **Type Safety**
|
||||
- Full TypeScript implementation
|
||||
- Comprehensive type definitions for game domain
|
||||
- Type-safe component props and state management
|
||||
|
||||
No build process or dependencies required. Simply clone the repository and open `index.html` in a web browser.
|
||||
### **Component Architecture**
|
||||
```
|
||||
src/
|
||||
├── components/
|
||||
│ ├── ui/ # Reusable UI components (Button, Card, Layout)
|
||||
│ ├── screens/ # Screen-level components
|
||||
│ └── ... # Feature-specific components
|
||||
├── hooks/ # Custom React/Preact hooks
|
||||
├── services/ # Business logic and data management
|
||||
├── types/ # TypeScript type definitions
|
||||
├── utils/ # Pure utility functions
|
||||
└── styles/ # Global styles and CSS modules
|
||||
```
|
||||
|
||||
## Project Structure
|
||||
### **State Management**
|
||||
- **useGameState**: Centralized game data management
|
||||
- **useNavigation**: Screen and routing state
|
||||
- **useModal**: Modal state management
|
||||
- **Custom hooks**: Encapsulated, reusable state logic
|
||||
|
||||
The project consists of the following key files:
|
||||
- `index.html`: Main application file containing HTML, CSS, and JavaScript
|
||||
- `README.md`: Project documentation and setup instructions
|
||||
- `LICENSE`: GNU GPLv3 license text
|
||||
- `TODO.md`: Roadmap and planned features
|
||||
### **Design System**
|
||||
- Consistent design tokens and CSS custom properties
|
||||
- Reusable UI components with variant support
|
||||
- Responsive design patterns
|
||||
- Accessibility-first approach
|
||||
|
||||
## Features in Detail
|
||||
## 🚀 Getting Started
|
||||
|
||||
### Core Features
|
||||
- Score tracking for multiple billiards game types
|
||||
- Player name history with quick selection
|
||||
- Game status management (active/completed)
|
||||
- Local storage for offline functionality
|
||||
- Mobile-optimized interface
|
||||
### Prerequisites
|
||||
- Node.js 18+
|
||||
- npm or yarn
|
||||
|
||||
### User Interface
|
||||
- Dark theme design
|
||||
- Touch-friendly controls
|
||||
- Responsive layout
|
||||
- Game type selection
|
||||
- Player name management
|
||||
### Installation
|
||||
```bash
|
||||
# Clone the repository
|
||||
git clone <repository-url>
|
||||
cd bscscore
|
||||
|
||||
### Data Management
|
||||
- Local storage persistence
|
||||
- Game history tracking
|
||||
- Player name history
|
||||
- Status filtering
|
||||
# Install dependencies
|
||||
npm install
|
||||
|
||||
## Contributing
|
||||
# Start development server
|
||||
npm run dev
|
||||
```
|
||||
|
||||
1. Fork the repository
|
||||
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
||||
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
||||
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
||||
5. Open a Pull Request
|
||||
### Available Scripts
|
||||
```bash
|
||||
npm run dev # Start development server
|
||||
npm run build # Build for production
|
||||
npm run preview # Preview production build
|
||||
```
|
||||
|
||||
## Roadmap
|
||||
## 📁 Project Structure
|
||||
|
||||
See [TODO.md](TODO.md) for a list of proposed features and known issues.
|
||||
### **Core Components**
|
||||
- `App.tsx` - Main application component with orchestrated state management
|
||||
- `screens/` - Screen-level components (GameList, NewGame, GameDetail)
|
||||
- `ui/` - Reusable UI components following design system
|
||||
|
||||
## License
|
||||
### **State Management**
|
||||
- `hooks/useGameState.ts` - Game CRUD operations and persistence
|
||||
- `hooks/useNavigation.ts` - Application routing and screen state
|
||||
- `hooks/useModal.ts` - Modal state management
|
||||
|
||||
This project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE) file for details.
|
||||
### **Business Logic**
|
||||
- `services/gameService.ts` - Game creation, updates, and business rules
|
||||
- `utils/gameUtils.ts` - Game-related utility functions
|
||||
- `utils/validation.ts` - Input validation and sanitization
|
||||
|
||||
### **Type Definitions**
|
||||
- `types/game.ts` - Game domain types
|
||||
- `types/ui.ts` - 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 with Vitest
|
||||
- E2E testing with Playwright
|
||||
- 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]
|
||||
Reference in New Issue
Block a user