b59eebcddbd31a372a8cac5a54759dcb94a5a038
Enable translation of non-English chat messages to help users understand international communications. ## Changes ### Translation Detection - Added `mightNeedTranslation()` function to detect non-English text - Checks for Cyrillic, Chinese, Japanese, Korean, and Arabic characters - Uses Unicode range pattern matching for language detection ### Translation UI - Added Languages icon from lucide-svelte - Display translate button next to messages that contain non-English text - Button shows icon only on mobile, "Translate" text on desktop - Positioned using flexbox to prevent text wrapping issues ### Translation Functionality - `translateMessage()` opens Google Translate in new popup window - Auto-detects source language, translates to English - Uses Google Translate's free web interface (no API key required) - Opens in 800x600 popup for optimal translation viewing ## Implementation Details The feature works by: 1. Scanning each message for non-ASCII character ranges 2. Showing translate button only for messages likely in foreign languages 3. Opening Google Translate web UI in popup when clicked 4. Preserving original message while providing translation access **Why Google Translate Web Interface:** - No API keys or authentication required - Free and unlimited usage - Familiar translation interface for users - Supports all languages Google Translate offers - Popup window keeps context while showing translation This approach avoids the complexity and cost of translation APIs while providing full-featured translation capabilities to users. This completes Phase 2 Feature 4 and ALL Phase 2 features! 🎉 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
CS2.WTF
Statistics for CS2 matchmaking matches - A complete rewrite of CSGOW.TF with modern web technologies.
🚀 Quick Start
Prerequisites
- Node.js ≥ 18.0.0 (v20.11.0 recommended - see
.nvmrc) - npm or yarn
Installation
# Clone the repository
git clone https://somegit.dev/CSGOWTF/csgowtf.git
cd csgowtf
# Switch to the cs2-port branch
git checkout cs2-port
# Install dependencies
npm install
# Copy environment variables
cp .env.example .env
# Start development server
npm run dev
The app will be available at http://localhost:5173
📦 Tech Stack
Core Framework
- SvelteKit 2.0 - Full-stack framework with SSR/SSG
- Svelte 5 - Reactive UI framework
- TypeScript 5.3 - Type safety (strict mode)
- Vite 5 - Build tool and dev server
Styling
- Tailwind CSS 3.4 - Utility-first CSS framework
- DaisyUI 4.0 - Component library with CS2 custom themes
- PostCSS - CSS processing
Data & State
- Axios - HTTP client for API requests
- Zod - Runtime type validation and parsing
- Svelte Stores - State management
Testing
- Vitest - Unit and component testing
- Playwright - End-to-end testing
- Testing Library - Component testing utilities
- MSW - API mocking
Code Quality
- ESLint - Linting (TypeScript + Svelte)
- Prettier - Code formatting
- Stylelint - CSS linting
- Husky - Git hooks
- lint-staged - Pre-commit linting
🛠️ Development
Available Scripts
# Development
npm run dev # Start dev server
npm run dev -- --host # Expose to network
# Type Checking
npm run check # Run type check
npm run check:watch # Type check in watch mode
# Linting & Formatting
npm run lint # Run ESLint + Prettier check
npm run lint:fix # Auto-fix linting issues
npm run format # Format code with Prettier
# Testing
npm run test # Run unit tests
npm run test:watch # Run tests in watch mode
npm run test:coverage # Generate coverage report
npm run test:e2e # Run E2E tests (headless)
npm run test:e2e:ui # Run E2E tests with UI
npm run test:e2e:debug # Debug E2E tests
# Building
npm run build # Build for production
npm run preview # Preview production build
Project Structure
csgowtf/
├── src/
│ ├── lib/
│ │ ├── api/ # API client & endpoints
│ │ ├── components/ # Reusable Svelte components
│ │ │ ├── layout/ # Header, Footer, Nav
│ │ │ ├── ui/ # Base UI components
│ │ │ ├── charts/ # Data visualization
│ │ │ ├── match/ # Match-specific components
│ │ │ └── player/ # Player-specific components
│ │ ├── stores/ # Svelte stores (state)
│ │ ├── types/ # TypeScript types
│ │ ├── utils/ # Helper functions
│ │ └── i18n/ # Internationalization
│ ├── routes/ # SvelteKit routes (pages)
│ ├── mocks/ # MSW mock handlers
│ ├── tests/ # Test setup
│ ├── app.html # HTML shell
│ └── app.css # Global styles
├── tests/
│ ├── unit/ # Unit tests
│ ├── integration/ # Integration tests
│ └── e2e/ # E2E tests
├── docs/ # Documentation
│ ├── API.md # Backend API reference
│ └── TODO.md # Project roadmap
├── public/ # Static assets
└── static/ # Additional static files
🎨 Features
Current (Phase 1 - ✅ Complete)
- ✅ SvelteKit project scaffolded with TypeScript strict mode
- ✅ Tailwind CSS + DaisyUI with CS2-themed color palette
- ✅ Complete development tooling (ESLint, Prettier, Husky)
- ✅ Testing infrastructure (Vitest + Playwright)
- ✅ CI/CD pipeline (Woodpecker)
- ✅ Backend API documented
Planned (See docs/TODO.md for details)
- 🏠 Homepage with featured matches
- 📊 Match listing with advanced filters
- 👤 Player profiles with stats & charts
- 🎮 Match detail pages (overview, economy, flashes, damage, chat)
- 🌍 Multi-language support (i18n)
- 🌙 Dark/Light theme toggle (default: dark)
- 📱 Mobile-responsive design
- ♿ WCAG 2.1 AA accessibility
- 🎯 CS2-specific features (MR12, Premier rating, volumetric smokes)
🔗 Backend
This frontend connects to the csgowtfd backend.
- Language: Go
- Framework: Gin
- Database: PostgreSQL
- Cache: Redis
- API Docs: See
docs/API.md
Default API endpoint: http://localhost:8000
🧪 Testing
Unit & Component Tests
# Run all tests
npm run test
# Watch mode for TDD
npm run test:watch
# Generate coverage report
npm run test:coverage
End-to-End Tests
# Run E2E tests (headless)
npm run test:e2e
# Run with Playwright UI
npm run test:e2e:ui
# Debug mode
npm run test:e2e:debug
🚢 Deployment
Build for Production
npm run build
The built app will be in the build/ directory, ready to be deployed to any Node.js hosting platform.
Environment Variables
See .env.example for all available configuration options:
VITE_API_BASE_URL- Backend API URLVITE_API_TIMEOUT- API request timeoutVITE_ENABLE_LIVE_MATCHES- Feature flag for live matchesVITE_ENABLE_ANALYTICS- Feature flag for analytics
CI/CD
Woodpecker CI automatically builds and deploys:
masterbranch → Productiondevbranch → Development/Stagingcs2-portbranch → CS2 Preview (during rewrite)
🤝 Contributing
We welcome contributions! Please follow these guidelines:
Before You Start
- Check existing issues or create one describing your feature/fix
- Comment on the issue to avoid duplicate work
- Fork the repository and create a feature branch
Code Standards
- Follow TypeScript strict mode (no
anytypes) - Write tests for new features
- Follow existing code style (enforced by ESLint/Prettier)
- Keep components under 300 lines
- Write meaningful commit messages (Conventional Commits)
Pull Request Process
- Create a feature branch:
feature/your-feature-name - Make your changes and commit with clear messages
- Run linting and tests:
npm run lint && npm run test - Push to your fork and create a PR to the
cs2-portbranch - Ensure CI passes and address review feedback
Git Workflow
- Branch naming:
feature/,fix/,refactor/,docs/ - Commit messages:
feat:,fix:,docs:,test:,refactor: - Only one feature/fix per PR
- Squash commits before merging
📚 Documentation
- API Reference:
docs/API.md- Complete backend API documentation - Project Roadmap:
docs/TODO.md- Detailed implementation plan - SvelteKit Docs: kit.svelte.dev
- Tailwind CSS: tailwindcss.com
- DaisyUI: daisyui.com
📄 License
GPL-3.0 © CSGOW.TF Team
💖 Support
If you find this project helpful, consider supporting us:
🔗 Links
- Website: csgow.tf (legacy CS:GO version)
- Backend: csgowtfd
- Issues: Report a bug
Status: 🚧 Phase 1 Complete - Active rewrite for CS2 support
Description