Skip to content

ell249/boxmaster4000

Repository files navigation

Boxmaster 4000

A web application for cataloguing the contents of packing boxes before a house move. Create labelled boxes, record what's inside, attach photos, print QR code labels, and search across all boxes to find where any item is packed.

Features

  • Create boxes with a name, description, location, and type
  • Record contents — free-text inventory list per box, full-text searchable
  • Photo attachments — select multiple photos at once; stored on disk with auto-generated thumbnails
  • QR code labels — generated automatically on box creation; print directly to a Brother QL thermal label printer
  • Full-text search — find which box contains any item by name, description, contents, type, or location; natural sort order (Box 2 before Box 10)
  • Box types — define reusable categories (e.g. Bedroom, Kitchen) and assign them to boxes; managed via a modal in the UI without leaving the page
  • Geolocation logging — records GPS coordinates when a box's QR code is scanned; the last 50 scans are shown on the box page with timestamps and locations. Requires HTTPS — browsers block geolocation on plain http:// addresses (see INSTALL.md)
  • Named locations — map GPS coordinates to human-readable names (e.g. Storage Unit) with a configurable radius; scans within range display the name instead of raw coordinates
  • Soft delete / restore — mark boxes as disposed without losing their records; search disposed boxes separately and restore them if needed
  • Web-based config & status — configure database, printer, and storage settings through the UI without editing files; health dashboard shows DB connectivity, upload storage, printer reachability, and schema migration status; app redirects to the config page automatically on first run

Support

Buy Me A Coffee

If you find Boxmaster useful, consider buying me a coffee — it's always appreciated!

Tech Stack

Layer Technology
Language Python 3.11+
Framework Flask 3.x
ORM SQLAlchemy 2.x + Flask-Migrate (Alembic)
Database MySQL 8+
Templates Jinja2 + Bootstrap 5.3
Image processing Pillow
QR codes qrcode[pil]
Label printing brother_ql
Printer discovery zeroconf (mDNS/Bonjour)
Deployment Docker / Gunicorn

Quick Start

See INSTALL.md for full installation instructions.

docker compose up --build

Open http://localhost:5091 — the app will redirect you to the Settings page on first run. Fill in the database details and save, then visit Config → Status to apply the database schema.

Usage

  1. New Box — click New Box in the navbar, fill in the name and description, click Create Box
  2. Add contents — on the box page, open Box Contents and type or paste the item list
  3. Add photos — open Add Photos, select one or more images, and click Upload Photos
  4. Print label — click Print Label to send a QR + text label to the configured Brother printer
  5. Search — use the Search box to find any item by name, description, contents, type, or location; click Show All to list every box
  6. Dispose — when a box is unpacked, use the Dispose page to mark it done; disposed boxes can be searched and restored from there

Project Structure

app/
├── __init__.py          # Flask app factory + first-run redirect
├── config.py            # Config from .env (no hardcoded defaults)
├── extensions.py        # SQLAlchemy + Migrate instances
├── models.py            # Box, BoxType, Photo, ScanLog, NamedLocation ORM models
├── routes/
│   ├── boxes.py         # CRUD, search, dispose, restore
│   ├── photos.py        # Photo serving + thumbnails
│   ├── labels.py        # QR label generation + printing
│   ├── api.py           # AJAX endpoints — autocomplete, box types, named locations, scan log
│   └── config_bp.py     # Settings, status dashboard, printer discovery
├── utils/
│   ├── qr.py            # QR code generation
│   ├── label.py         # Brother QL label builder
│   └── image.py         # Thumbnail generation
└── templates/           # Jinja2 / Bootstrap 5 templates
migrations/              # Alembic migration scripts
uploads/                 # Photo files (Docker volume)

Licence

MIT — see LICENCE.

Use of AI

Please note that AI (Claude) was used in the creation of this code.

About

Help your next house move by labelling and searching what's in your boxes!

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors

Languages