Skip to main content
All notable changes to this project are documented here. The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Version 1.0.2 February 4, 2026

Added

GET /api/kits/bulk - New endpoint for retrieving multiple kits in a single request
  • Accepts comma-separated slugs or full URLs
  • Minimum 2 kits, maximum 30 kits per request
  • Returns reduced schema for efficiency
  • Preserves input order in response
# Example usage
GET /api/kits/bulk?kits=arsenal-2024-home,chelsea-2024-away
User Collection Endpoints - Retrieve user kit collections from FootballKitArchive.com
  • GET /api/user-collection/{userid} - Get user collection with pagination
  • POST /api/user-collection/{userid}/scrape - Trigger collection scrape (cached 1 week or async via Celery)
  • Scraper includes filtering (skips entries with custom_* fields)
  • Proxy support for scraping
  • Data enrichment with brands, clubs, and user info from /api/user.php
  • IP Whitelist - Rate limiting whitelist support via .env configuration
  • Management Command - clean_double_slash_urls to fix double slashes in URL fields (Brand, Club, Competition, Kit)
  • HTML Sanitization - Safe tag whitelist for documentation rendering to mitigate XSS
  • SonarCloud Badges - Added to documentation README
  • Test Improvements - Cache clearing in setUp/tearDown for better isolation; improved Celery mock handling

Changed

  • Healthcheck Improvements - Now uses http.client.HTTPConnection and accepts 200 or 301 status codes (fixes failure when SECURE_SSL_REDIRECT redirects to HTTPS)
  • Environment Configuration - .env.example and docker-compose updated for DJANGO_SECRET_KEY; Celery script errors written to stderr
  • Cache Invalidation Refactor - cache_utils refactored around a dictionary of model invalidators
  • Scraper Enhancements:
    • HTML parser constant for consistency
    • Season slug normalization
    • ReDoS-safe slug parsing
    • Reduced cognitive complexity across multiple functions
  • API & Docs Views - Refactored to reduce cognitive complexity; docs restricted to GET with sanitized output
  • User Scraper - scrape_user management command now uses the new user collection API scraper
  • Documentation - API documentation updated for bulk and user-collection endpoints (endpoint catalog, usage examples, Postman collection)

Removed

  • Large Data File - Removed data.json from repository
  • Legacy Views and Routes - Removed:
    • Views: country-assignment, propagation, review, suggest-competition
    • Routes: clubs-without-country, competition-clubs, random-kits/clubs, top-clubs-by-country
    • Note: API and docs endpoints unchanged

Fixed

  • Healthcheck - No longer fails on production due to HTTPS redirect
  • Test Reliability - Fixed cache cross-contamination issues
  • Celery Utils - Better handling of mocks without __name__ attribute
  • Type_K Documentation - Corrected translation of “jacket” from Spanish to English

Security

Important security improvements in this release
  • Documentation Views - Restricted to GET requests only; rendered HTML sanitized to prevent XSS
  • HTTP Method Restrictions - Added to assign_countries and suggest_competition_countries views

Version 1.0.1 January 23, 2026

Added

Automatic Kit Type Categorization
  • New fields: category, category_order, order_priority, is_goalkeeper
  • Management command categorize_type_k for bulk categorization
  • Automatic categorization on kit creation during scraping
  • Enhanced Django Admin interface with new categorization fields
Categories include: Home, Away, Third, Goalkeeper, Training, Pre-Match, Special, and more.
Smart Team Prioritization
  • Prioritizes primary teams over secondary teams (B, C, youth, women’s teams)
  • Detects: II, III, B, C, Jong, Youth, U17-U23, Ladies, Women, Femenino, Féminas, Féminine, Lads, Frauen
  • delete_future_seasons - Delete seasons with incorrect future years and save kit slugs
  • rescrape_from_file - Rescrape kits from a JSON file containing slugs

Changed

  • API Response - Now includes Type_K categorization fields (category, category_order, order_priority, is_goalkeeper)
  • Kit Search - Orders results by Type_K category and priority
  • Season Search - Uses priority-based ordering for better relevance
  • Error Handling - Improved validation across the API

Fixed

  • Season Search - Ordering now prioritizes exact matches and relevant results
  • Type_K Categorization - Logic correctly distinguishes “training” from “jacket” types
  • Unicode Encoding - Fixed issues in management commands for Windows compatibility

Security

Security improvements from previous releases (headers, validation, etc.)

Testing

  • Comprehensive tests for Type_K categorization
  • Tests for season search priority ordering
  • Tests for secondary team filtering

Version 1.0.0 Initial Release

Initial Release

Core API

Full REST API functionality with Django Ninja

Data Models

Kit, Club, Season, Brand, Competition models

Search & Filter

Comprehensive search and filtering capabilities

Web Scraping

Ethical web scraping integration

Redis Caching

Performance optimization with Redis

Celery Support

Optional async task processing

Documentation

Complete API documentation

Admin Interface

Django admin for data management

Core Features

  • RESTful API - Clean, intuitive API design
  • Database Models - Well-structured relational database schema
  • Search Functionality - Powerful search across kits, clubs, and more
  • Web Scraping - Automated data collection with rate limiting
  • Caching Layer - Redis-based caching for performance
  • Async Tasks - Optional Celery integration for background jobs
  • API Documentation - Interactive API docs with Django Ninja
  • Admin Interface - Django admin for data management
  • Testing Suite - Comprehensive test coverage
  • Docker Support - Containerized deployment


For detailed commit history, see the GitHub repository.