• v1.4.0 9caeebd82e

    FrederikBaerentsen released this 2026-04-15 14:29:16 +02:00 | 0 commits to master since this release

    Warning


    Database Migration Required

    Version 1.4 includes database migrations from version 20 to version 27. There is NO automatic rollback. Once you upgrade, you cannot downgrade without restoring a backup.

    Back up your database before upgrading:

    • Option 1: Go to Admin -> Database and use the download button to save a copy of your database
    • Option 2: Copy your data folder: cp -r /path/to/your/data ./bricktracker-backup/data

    See Migration Guide for detailed upgrade instructions.

    Breaking Changes

    BK_PARTS_DEFAULT_ORDER Column Names Changed

    The BK_PARTS_DEFAULT_ORDER environment variable now uses "combined" instead of "bricktracker_parts" for column references.

    Required updates if you have a custom value:

    • "bricktracker_parts"."spare" -> "combined"."spare"
    • "bricktracker_parts"."part" -> "combined"."part"
    • "bricktracker_parts"."quantity" -> "combined"."quantity"

    Or remove the custom setting entirely to use the new defaults. See .env.sample for the full list of available column names.

    New Features

    Read the full changelog here

    Individual Minifigures Tracking

    Track loose minifigures outside of sets with full part-level tracking.

    • Problem tracking (missing/damaged/checked states)
    • Complete metadata: owners, tags, statuses, storage, purchase info
    • Purchase tracking with date, location, and price

    Feature Flags:

    • BK_HIDE_INDIVIDUAL_MINIFIGURES: hides navbar menu item and links from minifigure detail pages; routes remain accessible
    • BK_DISABLE_INDIVIDUAL_MINIFIGURES: read-only mode; all pages accessible but editing fields disabled, delete buttons hidden, write operations blocked

    Individual Parts Tracking

    Track loose parts outside of sets and minifigures.

    • Quick-add directly from set parts tables
    • Complete metadata: owners, tags, statuses, storage, purchase info
    • Purchase tracking with date, location, and price
    • Bulk part addition interface

    Feature Flags:

    • BK_HIDE_INDIVIDUAL_PARTS: hides navbar menu item, "Add Parts" button, and links from part detail pages; routes remain accessible
    • BK_DISABLE_INDIVIDUAL_PARTS: read-only mode; all pages accessible but editing fields disabled, delete buttons hidden, "Add Parts" menu item removed, write operations blocked
    • BK_HIDE_QUICK_ADD_INDIVIDUAL_PARTS: hides the "Add to individual parts" option in set parts row menus only

    Part Lots System

    Organize individual parts into lots/collections:

    • Group related parts under a named lot (e.g. a bulk purchase, a project)
    • Shared metadata across the lot (storage, purchase info)
    • View and filter all parts within a lot
    • Lot-level metadata: name, description, created date

    Purchase Location Management

    • New purchase location management page at /purchase-locations/
    • View all items purchased from a given location

    Export Functionality

    New export section in the Admin panel with three categories:

    Export Sets:

    • Rebrickable CSV format for collection tracking

    Export All Parts:

    • Rebrickable CSV (Part, Color, Quantity)
    • LEGO Pick-a-Brick CSV (Element ID, Quantity)
    • BrickLink XML (Wanted List format)

    Export Missing/Damaged Parts:

    • Same three formats as All Parts

    All exports aggregate quantities automatically. BrickLink exports use proper BrickLink part numbers and color IDs when available (sourced from the Rebrickable color cache).

    NOT Filter Toggle Buttons

    Toggle any filter between "equals" and "not equals" mode:

    • Works with all filter types: Status, Theme, Owner, Storage, Purchase Location, Tag, Year
    • Visual feedback: button turns red with icon when in NOT mode
    • Supports both client-side and server-side pagination modes
    • Filter state persists in the URL (e.g. ?theme=-frozen&status=-has-missing)
    • Clear filters button resets all toggle states

    Notes / Comments Field

    Add text notes and comments to any set:

    • Accessible via Management -> Notes accordion on set detail pages
    • Auto-save functionality with visual feedback
    • Clear button to quickly remove notes
    • Supports multi-line text input

    Configuration:

    • BK_SHOW_NOTES_GRID (default: false): show notes on set cards in grid view
    • BK_SHOW_NOTES_DETAIL (default: true): show notes on set detail pages
    • Both settings can be toggled in Admin -> Live Settings without restart

    Bulk Set Refresh

    Batch refresh functionality for updating multiple sets at once:

    • New Bulk Refresh button on Admin -> Sets needing refresh
    • Pre-populates a comma-separated list of all sets needing refresh
    • Follows same pattern as bulk add with real-time progress tracking
    • Shows current set being processed; failed sets remain in input for easy retry

    Badge Order Customization

    Configurable badge ordering for set cards and detail pages:

    • BK_BADGE_ORDER_GRID: comma-separated badge keys for grid view (default: theme,year,parts,total_minifigures,owner)
    • BK_BADGE_ORDER_DETAIL: comma-separated badge keys for detail view (default: all 16 badges)
    • Both settings configurable via .env or Admin -> Live Settings without restart

    16 available badge types:
    theme, tag, year, parts, instance_count, total_minifigures, total_missing, total_damaged, owner, storage, purchase_date, purchase_location, purchase_price, instructions, rebrickable, bricklink

    Sortable Checked Column (Issue #137)

    • The "Checked" column in set inventory tables can now be sorted by clicking the header
    • Works in both the parts table and the part lots table

    Front Page Parts Display

    • Added latest/random parts section to the front page alongside sets and minifigures
    • Shows 6 parts with quantity badges and relevant information
    • Respects BK_RANDOM, BK_HIDE_SPARE_PARTS, and BK_HIDE_ALL_PARTS configuration

    Rebrickable Color Database

    • Caches color information from Rebrickable API locally
    • Provides BrickLink color ID mapping for exports
    • Reduces repeated API calls for color data

    Bug Fixes

    Parts & Sorting

    • Fixed client-side table sorting corruption (Issue #136, #145): Sort buttons now trigger actual table header clicks instead of using columns.sort() directly
      • Prevents misaligned images, colors, and links when mixing sort buttons with header clicks
      • Applies to /parts, /problems, and /minifigures pages

    Set Refresh

    • Fixed set refresh functionality: Resolved multiple issues with refreshing sets from Rebrickable
      • Reuses existing set IDs instead of generating new UUIDs, preventing foreign key errors
      • Uses UPDATE-then-INSERT pattern to properly update existing parts while preserving user tracking data (checked, missing, damaged)
      • Part quantities now correctly sync with Rebrickable during refresh
      • New parts from Rebrickable are added; orphaned parts (no longer in Rebrickable's inventory) are removed

    Networking

    • Fixed Socket.IO connections behind reverse proxies: Resolved WebSocket disconnection issues with Traefik, Nginx, and other reverse proxies
      • Root cause: setting BK_DOMAIN_NAME enables strict CORS checking that fails with reverse proxies
      • Solution: leave BK_DOMAIN_NAME empty for reverse proxy deployments (allows all origins by default)
      • Added debug logging for Socket.IO connections to help troubleshoot proxy issues

    Import & Bulk Operations

    • Fixed bulk import hanging on empty set numbers: Trailing commas in bulk import input (e.g. "10312, 21348, ") no longer cause infinite loops
      • Empty strings from trailing commas are now filtered out before processing
    • Fixed bulk parts redirect: Corrected endpoint reference after route function rename

    Admin & Storage

    • Fixed storage deletion error handling: Added proper validation when attempting to delete storage locations still in use
      • Shows detailed count of items using the storage (sets, individual minifigures, individual parts, part lots)
      • Provides clickable link to storage details page
    • Fixed purchase location templates: Created missing template files for purchase location pages

    Docker

    • Fixed permission denied when running as non-root user (Issue #138): Resolved container startup failure when using user: directive in docker-compose
      • Added chmod -R a+rX /app to Dockerfile so all files are readable regardless of build environment
      • Added commented user: example in compose.yaml to document non-root support

    Configuration Updates

    New Environment Variables

    Individual Features:

    • BK_HIDE_INDIVIDUAL_MINIFIGURES (default: false): hide individual minifigures UI elements
    • BK_DISABLE_INDIVIDUAL_MINIFIGURES (default: false): read-only mode for individual minifigures
    • BK_HIDE_INDIVIDUAL_PARTS (default: false): hide individual parts UI elements
    • BK_DISABLE_INDIVIDUAL_PARTS (default: false): read-only mode for individual parts
    • BK_HIDE_QUICK_ADD_INDIVIDUAL_PARTS (default: false): hide quick-add option in set parts tables

    Notes:

    • BK_SHOW_NOTES_GRID (default: false): show set notes on grid view cards
    • BK_SHOW_NOTES_DETAIL (default: true): show set notes on set detail pages

    Badge Order:

    • BK_BADGE_ORDER_GRID (default: theme,year,parts,total_minifigures,owner): badge order on set cards
    • BK_BADGE_ORDER_DETAIL (default: all 16 badges): badge order on set detail pages

    All new settings support live configuration updates via Admin -> Live Settings without a container restart.

    Database

    7 new migrations (v20 -> v27):

    • 0021: Individual minifigures and parts tables
    • 0022: Part lots system with proper foreign keys
    • 0023: Performance indexes for individual features
    • 0024: Rebrickable colors cache table
    • 0025: Additional composite indexes for query optimization
    • 0026: Standardized ON DELETE RESTRICT behavior across metadata tables
    • 0027: Consolidated metadata tables. Removes FK constraints to allow reuse across sets, individual minifigures, individual parts, and lots

    Upgrade Path

    From 1.3.x to 1.4

    1. Back up your database (see warning above)
    2. Update your image tag to 1.4.0
    3. Restart. The application will prompt you to run the database upgrade from the Admin page
    4. If you have a custom BK_PARTS_DEFAULT_ORDER, update it as described in Breaking Changes

    Update using latest tag:

    If your compose.yaml contains image: gitea.baerentsen.space/frederikbaerentsen/bricktracker:latest, update with:

    # Pull the new version
    docker compose pull
    
    # Restart the container with the new image
    docker compose down
    docker compose up -d
    

    Update using version tag:

    If your compose.yaml specifies a version, edit it and change the tag to 1.4.0:

    image: gitea.baerentsen.space/frederikbaerentsen/bricktracker:1.4.0
    
    # Pull the new version
    docker compose pull
    
    # Restart the container with the new image
    docker compose down
    docker compose up -d
    
    Downloads