# 🏹 FletchIQ - Archery Scoring Application A modern, secure, and extensible archery tournament scoring system built with React, TypeScript, Node.js, and PostgreSQL. ## Quick Start ### Prerequisites - Ubuntu/Linux - Docker and Docker Compose - Git ### Setup 1. **Navigate to project** ```bash cd fletchiq ``` 2. **Start all services** ```bash docker-compose up ``` 3. **Access the application** - Frontend: http://localhost:3000 - Backend API: http://localhost:5000/api - PostgreSQL: localhost:5432 - Redis: localhost:6379 ### Development Commands ```bash # View logs docker-compose logs -f backend docker-compose logs -f frontend # Stop all services docker-compose down # Rebuild containers docker-compose build --no-cache # Reset database docker-compose down -v docker-compose up ``` ## Project Structure ``` fletchiq/ ├── backend/ # Node.js/Express API │ ├── src/ │ │ ├── routes/ # API endpoints │ │ ├── controllers/ # Request handlers │ │ ├── services/ # Business logic │ │ ├── middleware/ # Express middleware │ │ ├── models/ # TypeORM entities │ │ └── utils/ # Helper functions │ ├── database/ # SQL migrations │ └── tests/ # Unit & integration tests ├── frontend/ # React application │ ├── src/ │ │ ├── components/ # React components │ │ ├── pages/ # Page components │ │ ├── hooks/ # Custom React hooks │ │ ├── services/ # API client │ │ └── types/ # TypeScript types │ └── public/ # Static assets └── docker-compose.yml # Service orchestration ``` ## Next Steps 1. Implement authentication routes 2. Create tournament CRUD endpoints 3. Build scoring input UI 4. Add real-time leaderboard with WebSockets 5. Implement analytics dashboard ## Security - JWT token-based authentication - Bcrypt password hashing - CORS and rate limiting - Input validation with Zod - Row-level security in database ## Contributing Follow the architecture guide and ensure all code is: - Type-safe (TypeScript) - Well-tested - Documented - Following the existing patterns