BrickTracker/README.md

7.9 KiB

BrickTracker

A web application for organizing and tracking LEGO sets, parts, and minifigures. Uses the Rebrickable API to fetch LEGO data and allows users to track missing pieces and collection status.

Screenshots at the end of the readme!

Buy Me A Coffee

Features

  • Track multiple LEGO sets with their parts and minifigures
  • Mark sets as checked/collected
  • Track missing pieces
  • View parts inventory across sets
  • View minifigures across sets
  • Automatic updates for LEGO data (themes, colors, sets)
  • Wishlist to keep track of what to buy

Prerequisites

  • Docker
  • Docker Compose
  • Rebrickable API key (from Rebrickable)

Setup

  1. Clone the repository:
git clone https://gitea.baerentsen.space/FrederikBaerentsen/BrickTracker.git
cd BrickTracker
mkdir static/{sets,instructions,parts,minifigs}
  1. Create a .env file with your configuration:
REBRICKABLE_API_KEY=your_api_key_here
DOMAIN_NAME=https://your.domain.com
LINKS=True
RANDOM=True
  • If using locally, set DOMAIN_NAME to http://localhost:3333.

  • LINKS: Set to True in order for set numbers to be links to Rebrickable on the front page.

  • RANDOM: Set to True in order for the sets to shuffle on the frontpage each load.

  1. Deploy with Docker Compose:
docker compose up -d
  1. Access the web interface at http://localhost:3333

  2. The database is created, csv files are downloaded and you will be redirected to the /create page for inputting a set number.

Setup using pre-build Docker image

  1. Setup folders and files:
mkdir BrickTracker
cd BrickTracker
mkdir -p static/{sets,instructions,parts,minifigs}
touch app.db
  1. Create Docker Compose file:
services:
  bricktracker:
    container_name: BrickTracker
    restart: unless-stopped
    image: gitea.baerentsen.space/frederikbaerentsen/bricktracker:latest
    ports:
      - "3333:3333"
    volumes:
      - ./.env:/app/.env
      - ./static/parts:/app/static/parts
      - ./static/instructions:/app/static/instructions
      - ./static/sets:/app/static/sets
      - ./static/minifigs:/app/static/minifigs
      - ./app.db:/app/app.db
    environment:
      - REBRICKABLE_API_KEY=your_api_key_here
      - DOMAIN_NAME=https://your.domain.com
      - LINKS=True #optional, enables set numbers to be Rebrickable links on the front page
      - RANDOM=False #optional, set to True if you want your front page to be shuffled on load

If using locally, set DOMAIN_NAME to http://localhost:3333.

  1. Deploy with Docker Compose:
docker compose up -d
  1. Access the web interface at http://localhost:3333

  2. The database is created, csv files are downloaded and you will be redirected to the /create page for inputting a set number.

  3. csv files are downloaded inside the container. If you delete the container, go to /config and redownload them again.

Usage

Adding Sets

  1. Go to the Create page
  2. Enter a LEGO set number (e.g., "42115")
  3. Wait for the set to be downloaded and processed

Managing Sets

  • Mark sets as checked/collected using the checkboxes
  • Track missing pieces by entering quantities in the parts table
    • Note, the checkbox for missing pieces is updated automatically, if the set has missing pieces. It cannot be manually checked off.
  • View all missing pieces across sets in the Missing page
  • View complete parts inventory in the Parts page
  • View all minifigures in the Minifigures page

Instructions

Instructions can be added to the static/instructions folder. Instructions must be named:

  • SetNumber.pdf: 10312-1.pdf or 7001-1.pdf. Sets with multiple versions (eg. collectible minifigures use -1, -2 etc) like 71039-1.pdf and 71039-2.pdf.
  • SetNumber-pdf_number.pdf: 10294-1-1.pdf, 10294-1-2.pdf and 10294-1-3.pdf for all three PDFs of the 10294-1 set.

Instructions are not automatically downloaded!

Instructions can be uploaded from the webinterface (desktop-only) using the Upload button in the navbar.

Docker Configuration

The application uses two main configuration files:

docker-compose.yml

services:
  bricktracker:
    container_name: BrickTracker
    restart: unless-stopped
    build: .
    ports:
      - "3333:3333"
    volumes:
      - .:/app
    env_file:
      - .env

Dockerfile

FROM python:slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN bash lego.sh
CMD ["gunicorn","--bind","0.0.0.0:3333","app:app","--worker-class","eventlet"]

Development

The application is built with:

  • Flask (Python web framework)
  • SQLite (Database)
  • Socket.IO (Real-time updates)
  • Rebrickable API (LEGO data)

Key files:

  • app.py: Main application code
  • db.py: Database operations
  • downloadRB.py: Rebrickable data download utilities

Notes

  • The application stores images locally in the static directory
  • Database is stored in app.db (SQLite)
  • LEGO data is cached in CSV files from Rebrickable
  • Images are downloaded from Rebrickable when entering a set and then stored locally.
  • The code is AS-IS! I am not a professional programmer and this has been a hobby projects for a long time. Don't expect anything neat!

Screenshots

Front page

Search your inventory and sort by theme, year, parts, id, name or sort by missing pieces. If you download instructions as PDF, add them to a specific folder and they show up under each set

Inventory

Filter by color, quantity, name. Add if a piece is missing. Press images to show them. Filter by only missing pieces. Minifigures and their parts are listed at the end.

Missing pieces

List of all your missing pieces, with links to bricklink and rebrickable.

All parts

List of all parts in your inventory.

Minifigures

List of all minifigures in your inventory and quantity.

Multiple sets

Each set is given a unique ID, such that you can have multiple copies of a set with different pieces missing in each copy. Sets can also easily be deleted from the inventory.

Add set

Sets are added from rebrickable using your own API key. Set numbers are checked against sets.csv from rebrickable and can be updated from the config page. When a set is added, all images from rebrickable are downloaded and stored locally, so if multiple sets contains the same part/color, only one image is downloaded and stored. This also make no calls to rebrickable when just browsing and using the site. Only time rebrickable to used it when up adding a new set.

Wishlist

Sets are added from rebrickable and again checked against sets.csv. If you can't add a brand new set, consider updating your data from the /config page. Press the delete button to remove a set. Known Issue: If multiple sets of the same number is added, they will all be deleted.

Wishlist uses unofficial retirement data.

Each set number, links to bricklink for pricecheck.