Thanks to visit codestin.com
Credit goes to github.com

Skip to content

diegnghtmr/roster-edge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

76 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

RosterEdge

A modern, full-stack sports team management platform

License: MIT React Spring Boot TypeScript Java

RosterEdge is a community-driven, open-source project designed to revolutionize sports team management. We believe in the power of collaboration to build exceptional tools. Whether you're a developer, a designer, or someone with a great idea, we invite you to be part of our journey.

Features β€’ Tech Stack β€’ Getting Started β€’ Architecture β€’ Contributing


πŸ“‹ Table of Contents

🎯 Overview

RosterEdge is a comprehensive sports team management platform that enables clubs, coaches, and administrators to efficiently manage teams, track matches, organize staff, and generate detailed reports. Built with modern web technologies and following industry best practices, RosterEdge provides a scalable, maintainable, and user-friendly solution for sports organizations of all sizes.

✨ Features

Team Management

  • Team Organization: Create and manage multiple teams with categories, genders, and seasons
  • Staff Management: Assign coaches, trainers, and support staff with role-based access
  • Roster Control: Build and maintain team rosters with detailed player information

Match Operations

  • Match Scheduling: Plan and organize matches with venues, dates, and opponent details
  • Matchday Management: Track matchdays and tournament schedules
  • Event Tracking: Record and monitor match events in real-time
  • Team Assignments: Assign teams and staff to specific matches

Analytics & Reports

  • Dashboard Analytics: Visualize team performance, streaks, and key metrics
  • Report Generation: Create detailed reports with PDF export capabilities
  • Performance Tracking: Monitor wins, losses, and team statistics over time

Administrative Features

  • Multi-language Support: Full internationalization with English and Spanish
  • Notification System: Real-time notifications for important events
  • User Management: Role-based access control and user administration
  • Geographic Data: Manage countries, cities, stadiums, and venues
  • Currency Support: Multi-currency support for financial tracking

Technical Features

  • Responsive Design: Mobile-first approach with adaptive layouts
  • Dark Mode: Built-in theme support for better user experience
  • Accessibility: WCAG-compliant interface with full keyboard navigation
  • Offline Support: Progressive Web App capabilities
  • Real-time Updates: Live data synchronization with React Query

πŸ›  Tech Stack

Frontend

Core

  • React 19.1.1 - Latest React with concurrent features
  • TypeScript 5.8.3 - Type-safe development
  • Vite 7.1.6 - Lightning-fast build tool and dev server

State Management & Data Fetching

  • TanStack Query 5.89.0 - Powerful async state management
  • Zustand 5.0.8 - Lightweight global state management
  • React Router DOM 7.9.1 - Client-side routing

UI & Styling

  • Material-UI 7.3.2 - Comprehensive component library
  • Radix UI - Unstyled, accessible components
  • Tailwind CSS 4.1.13 - Utility-first CSS framework
  • Emotion - CSS-in-JS styling solution
  • Lucide React - Beautiful icon set

Utilities

  • i18next & react-i18next - Internationalization framework
  • React PDF Renderer - PDF generation
  • Recharts - Data visualization
  • Sonner - Toast notifications
  • JWT Decode - Token management
  • React Cookie - Cookie handling

Development Tools

  • Vitest 4.0.8 - Unit testing framework
  • Testing Library - React component testing
  • ESLint 9.35.0 - Code linting
  • Prettier 3.6.2 - Code formatting
  • Husky 9.1.7 - Git hooks
  • lint-staged - Pre-commit linting

Backend

Core

  • Spring Boot 3.5.4 - Enterprise-grade Java framework
  • Java 21 - Latest LTS version with modern features

Data & Persistence

  • Spring Data JDBC - Simplified data access
  • PostgreSQL 42.7.4 - Robust relational database
  • Caffeine Cache - High-performance caching

Utilities

  • Lombok - Boilerplate code reduction
  • Spring Validation - Request validation
  • Spring Dotenv - Environment configuration

Development Tools

  • Maven - Dependency management and build
  • Spring Boot Test - Testing framework

Infrastructure

  • Docker Compose - Containerized development environment
  • Git - Version control
  • GitHub Actions - CI/CD pipelines (future)

πŸ— Architecture

RosterEdge follows the Scope Rule architectural pattern and Screaming Architecture principles, ensuring the codebase is maintainable, scalable, and immediately understandable.

Frontend Architecture Principles

The Scope Rule

"Code used by 2+ features MUST go in global/shared directories. Code used by 1 feature MUST stay local."

This strict rule ensures:

  • Clear component ownership and responsibility
  • Reduced coupling between features
  • Easy refactoring and maintenance
  • Intuitive code discovery

Screaming Architecture

The directory structure immediately communicates what the application does:

src/
β”œβ”€β”€ modules/              # Feature modules (business functionality)
β”‚   β”œβ”€β”€ dashboard/        # Analytics and overview
β”‚   β”œβ”€β”€ matches/          # Match management
β”‚   β”œβ”€β”€ teams/            # Team organization
β”‚   β”œβ”€β”€ staff/            # Staff management
β”‚   β”œβ”€β”€ reports/          # Report generation
β”‚   β”œβ”€β”€ notifications/    # Notification system
β”‚   └── ...
β”œβ”€β”€ shared/               # Cross-feature components (used by 2+ features)
β”‚   β”œβ”€β”€ components/       # Reusable UI components
β”‚   β”œβ”€β”€ hooks/            # Shared custom hooks
β”‚   β”œβ”€β”€ types/            # Shared TypeScript types
β”‚   └── utils/            # Shared utilities
└── infrastructure/       # Cross-cutting concerns
    └── config/           # App configuration

Container/Presentational Pattern

  • Containers: Handle business logic, state, and data fetching
  • Presentational: Pure UI components receiving props
  • Main containers match their feature names exactly

Backend Architecture

The backend follows a layered architecture with clear separation of concerns:

src/main/java/
└── co/edu/uniquindio/rosteredge/
    β”œβ”€β”€ controller/      # REST API endpoints
    β”œβ”€β”€ service/         # Business logic
    β”œβ”€β”€ repository/      # Data access layer
    β”œβ”€β”€ model/           # Domain entities
    β”œβ”€β”€ dto/             # Data transfer objects
    β”œβ”€β”€ exception/       # Custom exceptions
    └── config/          # Spring configuration

Design Patterns & Principles

  • SOLID Principles: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion
  • Repository Pattern: Data access abstraction
  • DTO Pattern: Clean data transfer between layers
  • Dependency Injection: Loose coupling via Spring IoC
  • Custom Hooks: React logic encapsulation
  • Composition over Inheritance: Flexible component design

πŸš€ Getting Started

Prerequisites

Frontend

  • Node.js 18.0.0 or higher
  • npm 9.0.0 or higher (or pnpm/yarn)

Backend

  • Java 21 or higher
  • Maven 3.8.0 or higher
  • PostgreSQL 14.0 or higher

Installation

1. Clone the repository

git clone https://github.com/diegnghtmr/roster-edge.git
cd roster-edge

2. Backend Setup

cd backend

# Configure environment variables
cp .env.example .env
# Edit .env with your database credentials

# Install dependencies and run
./mvnw clean install
./mvnw spring-boot:run

The backend API will be available at http://localhost:8080

3. Frontend Setup

cd frontend

# Install dependencies
npm install

# Start development server
npm run dev

The frontend will be available at http://localhost:5173

Environment Variables

Backend (.env)

# Database Configuration
DB_HOST=localhost
DB_PORT=5432
DB_NAME=rosteredge
DB_USERNAME=your_username
DB_PASSWORD=your_password

# Application Configuration
SERVER_PORT=8080
JWT_SECRET=your_jwt_secret
JWT_EXPIRATION=86400000

Frontend (.env)

VITE_API_URL=http://localhost:8080/api
VITE_APP_NAME=RosterEdge

Docker Setup (Alternative)

# Start all services with Docker Compose
docker-compose up -d

# Stop services
docker-compose down

πŸ“ Project Structure

Frontend Structure

frontend/
β”œβ”€β”€ public/                      # Static assets
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ api/                     # API client configuration
β”‚   β”œβ”€β”€ components/              # Global UI components
β”‚   β”‚   β”œβ”€β”€ ui/                  # Base UI components (shadcn/ui)
β”‚   β”‚   └── reports/             # Report-specific components
β”‚   β”œβ”€β”€ constants/               # Application constants
β”‚   β”œβ”€β”€ hooks/                   # Global custom hooks
β”‚   β”œβ”€β”€ i18n/                    # Internationalization
β”‚   β”‚   β”œβ”€β”€ locales/
β”‚   β”‚   β”‚   β”œβ”€β”€ en/             # English translations
β”‚   β”‚   β”‚   └── es/             # Spanish translations
β”‚   β”‚   └── index.ts
β”‚   β”œβ”€β”€ infrastructure/          # Cross-cutting concerns
β”‚   β”‚   └── config/             # App configuration
β”‚   β”œβ”€β”€ interface/               # TypeScript interfaces
β”‚   β”œβ”€β”€ lib/                     # Third-party library configs
β”‚   β”œβ”€β”€ modules/                 # Feature modules
β”‚   β”‚   β”œβ”€β”€ cities/
β”‚   β”‚   β”œβ”€β”€ contact/
β”‚   β”‚   β”œβ”€β”€ countries/
β”‚   β”‚   β”œβ”€β”€ currencies/
β”‚   β”‚   β”œβ”€β”€ dashboard/
β”‚   β”‚   β”œβ”€β”€ events/
β”‚   β”‚   β”œβ”€β”€ matchdays/
β”‚   β”‚   β”œβ”€β”€ matches/
β”‚   β”‚   β”œβ”€β”€ notifications/
β”‚   β”‚   β”œβ”€β”€ reports/
β”‚   β”‚   β”œβ”€β”€ seasons/
β”‚   β”‚   β”œβ”€β”€ stadiums/
β”‚   β”‚   β”œβ”€β”€ staff/
β”‚   β”‚   β”œβ”€β”€ staff-roles/
β”‚   β”‚   β”œβ”€β”€ support/
β”‚   β”‚   β”œβ”€β”€ team-categories/
β”‚   β”‚   β”œβ”€β”€ team-genders/
β”‚   β”‚   β”œβ”€β”€ teams/
β”‚   β”‚   β”œβ”€β”€ users/
β”‚   β”‚   └── venues/
β”‚   β”œβ”€β”€ page/                    # Page components
β”‚   β”‚   β”œβ”€β”€ login/
β”‚   β”‚   └── ErrorPage.tsx
β”‚   β”œβ”€β”€ router/                  # Routing configuration
β”‚   β”œβ”€β”€ shared/                  # Shared utilities (2+ features)
β”‚   β”‚   β”œβ”€β”€ components/         # Shared components
β”‚   β”‚   β”œβ”€β”€ hooks/              # Shared hooks
β”‚   β”‚   β”œβ”€β”€ types/              # Shared types
β”‚   β”‚   └── utils/              # Shared utilities
β”‚   β”œβ”€β”€ storage/                 # Local storage utilities
β”‚   β”œβ”€β”€ test/                    # Test utilities and setup
β”‚   β”œβ”€β”€ utils/                   # General utilities
β”‚   β”œβ”€β”€ App.tsx                  # Main App component
β”‚   β”œβ”€β”€ App.css                  # Global styles
β”‚   └── main.tsx                 # Application entry point
β”œβ”€β”€ .husky/                      # Git hooks
β”œβ”€β”€ eslint.config.js             # ESLint configuration
β”œβ”€β”€ prettier.config.js           # Prettier configuration
β”œβ”€β”€ tsconfig.json                # TypeScript configuration
β”œβ”€β”€ vite.config.ts               # Vite configuration
└── package.json                 # Dependencies and scripts

Backend Structure

backend/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ main/
β”‚   β”‚   β”œβ”€β”€ java/
β”‚   β”‚   β”‚   └── co/edu/uniquindio/rosteredge/
β”‚   β”‚   β”‚       β”œβ”€β”€ config/           # Configuration classes
β”‚   β”‚   β”‚       β”œβ”€β”€ controller/       # REST controllers
β”‚   β”‚   β”‚       β”œβ”€β”€ dto/              # Data transfer objects
β”‚   β”‚   β”‚       β”œβ”€β”€ exception/        # Exception handlers
β”‚   β”‚   β”‚       β”œβ”€β”€ model/            # Domain entities
β”‚   β”‚   β”‚       β”œβ”€β”€ repository/       # Data repositories
β”‚   β”‚   β”‚       β”œβ”€β”€ service/          # Business logic
β”‚   β”‚   β”‚       └── RosterEdgeApplication.java
β”‚   β”‚   └── resources/
β”‚   β”‚       β”œβ”€β”€ application.properties
β”‚   β”‚       └── schema.sql
β”‚   └── test/                         # Unit and integration tests
β”œβ”€β”€ .mvn/                             # Maven wrapper
β”œβ”€β”€ mvnw                              # Maven wrapper script (Unix)
β”œβ”€β”€ mvnw.cmd                          # Maven wrapper script (Windows)
β”œβ”€β”€ pom.xml                           # Maven configuration
└── compose.yml                       # Docker Compose config

πŸ’» Development

Available Scripts

Frontend

# Development
npm run dev              # Start dev server with hot reload
npm run preview          # Preview production build

# Build
npm run build            # Build for production
npm run type-check       # TypeScript type checking

# Code Quality
npm run lint             # Run ESLint
npm run lint:fix         # Fix ESLint errors
npm run format           # Format code with Prettier
npm run format:check     # Check code formatting

# Testing
npm run test             # Run tests in watch mode
npm run test:ui          # Run tests with UI
npm run test:coverage    # Generate coverage report

# Git Hooks
npm run lint-staged      # Run lint-staged (pre-commit)

Backend

# Development
./mvnw spring-boot:run              # Run application
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev  # Run with dev profile

# Build
./mvnw clean install                # Build and install
./mvnw clean package                # Build JAR

# Testing
./mvnw test                         # Run tests
./mvnw test -Dtest=ClassName        # Run specific test

# Code Quality
./mvnw checkstyle:check             # Check code style
./mvnw spotbugs:check               # Static analysis

Code Style Guidelines

TypeScript/React

  • Use functional components with hooks
  • Prefer const over let
  • Use named exports for components
  • Follow Container/Presentational pattern
  • Keep components small and focused
  • Use TypeScript interfaces for props
  • Apply SOLID principles

Java

  • Follow Spring Boot conventions
  • Use Lombok to reduce boilerplate
  • Implement proper exception handling
  • Write meaningful tests
  • Use constructor injection for dependencies
  • Keep services thin, repositories focused

Git Workflow

# Create feature branch
git checkout -b feature/your-feature-name

# Make changes and commit
git add .
git commit -m "feat: add new feature"

# Push and create PR
git push origin feature/your-feature-name

Commit Message Convention

Follow Conventional Commits:

feat: add new feature
fix: resolve bug
docs: update documentation
style: format code
refactor: restructure code
test: add tests
chore: update dependencies

Pre-commit Hooks

Husky automatically runs on commit:

  • lint-staged: Lints and formats staged files
  • type-check: Validates TypeScript types
  • Prevents commits with errors

πŸ§ͺ Testing

Frontend Testing

# Run all tests
npm run test

# Run with UI
npm run test:ui

# Generate coverage
npm run test:coverage

Testing Stack

  • Vitest: Fast unit testing
  • Testing Library: React component testing
  • jsdom: DOM environment simulation

Example Test

import { render, screen } from '@testing-library/react';
import { describe, it, expect } from 'vitest';
import { Dashboard } from './Dashboard';

describe('Dashboard', () => {
  it('renders dashboard title', () => {
    render(<Dashboard />);
    expect(screen.getByText(/dashboard/i)).toBeInTheDocument();
  });
});

Backend Testing

# Run all tests
./mvnw test

# Run specific test
./mvnw test -Dtest=TeamServiceTest

🌐 Internationalization

RosterEdge supports multiple languages using i18next:

Supported Languages

  • English (en) - Default
  • Spanish (es)

Adding Translations

  1. Add translation keys to locale files:
// frontend/src/i18n/locales/en/common.json
{
  "actions": {
    "create": "Create",
    "edit": "Edit"
  }
}
  1. Use in components:
import { useTranslation } from 'react-i18next';

function MyComponent() {
  const { t } = useTranslation();

  return <button>{t('actions.create')}</button>;
}

Adding New Language

  1. Create directory: frontend/src/i18n/locales/[lang-code]/
  2. Add translation files
  3. Register in frontend/src/i18n/index.ts

🀝 Contributing

We welcome contributions from the community! Here's how you can help:

Ways to Contribute

  • πŸ› Report bugs
  • πŸ’‘ Suggest new features
  • πŸ“ Improve documentation
  • πŸ”§ Submit pull requests
  • ⭐ Star the project

Contribution Process

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes following our guidelines
  4. Test your changes thoroughly
  5. Commit with conventional commit messages
  6. Push to your fork
  7. Open a Pull Request

Development Guidelines

  • Follow the Scope Rule for component placement
  • Write tests for new features
  • Update documentation as needed
  • Ensure code quality with linters
  • Follow architectural patterns
  • Consider accessibility and i18n

Code Review Process

All pull requests require:

  • βœ… Passing CI/CD checks
  • βœ… Code review approval
  • βœ… Up-to-date with main branch
  • βœ… No merge conflicts

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

MIT License

Copyright (c) 2025 Diego Alejandro Flores Quintero

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

πŸ™ Acknowledgments

  • Built with ❀️ by the RosterEdge community
  • Powered by React, Spring Boot, and amazing open-source libraries
  • Inspired by modern architectural patterns and best practices

πŸ“ž Contact & Support


Made with ❀️ by the RosterEdge Community

⬆ Back to Top

About

RosterEdge is an open-source application designed for intuitive and powerful team management. As an open-source project, its development is transparent and its code is freely available to all.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages