# LOADOUT // Travel Manifest & Bag Allocation System > **LOADOUT** is a tactile, retro-ephemera inspired travel packing manifest and luggage allocation system designed for purposeful travelers. Built with a boarding pass and cargo ticket aesthetic, continuous post-trip debrief learning, and modular bag management ("What goes in what bag"). --- ## Key Features ### 1. Boarding Pass & Retro Ephemera Aesthetic * **Distinctive Swiss Grotesk & Telemetry Monospace**: Uses `Bebas Neue` uppercase departure board headers, `Space Grotesk` structural typography, and `IBM Plex Mono` for flight codes, weights, and timestamps. * **Tactile Perforated Stubs**: Items are rendered as tear-off baggage coupons with circular notch punchouts and dashed perforation lines. * **Canary Yellow & Gate Orange Accents**: High-contrast utilitarian colorway with rubber stamp badges (`[STOWED]`, `[EXCLUDED]`, `[WISHLIST]`). * **Built-in Tactile Web Audio**: Physical paper tear sounds upon checking off items and mechanical stamp thuds when stowing bags or filing debriefs—zero audio file downloads required. ### 2. Luggage Allocation ("What Goes In What Bag") * Assign and visualize items across distinct containers: * 🎒 **Personal Item / Daypack**: Under-seat essentials (passport, power bank, medications, AirPods, Kindle, cables). * 🧳 **Carry-On Roller**: Overhead compartment (clothes packing cubes, 3-1-1 TSA compliant liquids pouch). * 📦 **Checked Luggage**: Cargo hold (full-size liquids > 100ml, trekking poles, pocket knives, heavy boots). * 🧥 **Worn on Person**: Travel day outfit (heaviest jacket, boots, watch to minimize bag weight). * Dedicated visual bag overview cards with individual capacity meters and TSA advisory reminders. * One-click re-allocation to move any item between bags on the fly. ### 3. Continuous Learning Loop (Post-Trip Debrief) * At the conclusion of your voyage, launch the **Trip Debrief**: * **Identify Deadweight (What Should Have Been Excluded)**: Tap items you packed but never used. The engine remembers this and penalizes or omits them on future matching voyages. * **Log Missing Items (What Should Have Been Included)**: Record items you wished you had on the road. The engine automatically suggests them when planning future trips of that archetype. * **Flight Log Archive**: Inspect accumulated packing wisdom, deadweight statistics, and learned discovery rules anytime. ### 4. Smart Heuristic Engine & AI Booster * **Deterministic Multiplier Formulas**: Calculates clothing requirements dynamically based on days, climate, and mid-trip laundry access (e.g., 7 days with laundry caps duplicate clothing to ~4 days). * **Optional AI Dispatcher**: Connect your local Ollama instance running on `vloser` or a cloud API key for customized destination recommendations that blend with your personal learned rules. * **100% Offline Capability**: Full client-side fallback via `localStorage`—works seamlessly in airplane mode or remote backcountry camps. --- ## Self-Hosting with Docker & Traefik on `vloser` Loadout is packaged as a lightweight Alpine Node container with persistent JSON storage: ```bash docker compose up -d --build ``` ### Compose Configuration (`docker-compose.yml`) ```yaml services: loadout: build: context: . dockerfile: Dockerfile container_name: loadout restart: unless-stopped volumes: - /home/chrisf/docker/appdata/loadout/data:/app/data networks: - t3_proxy ports: - "127.0.0.1:8478:80" healthcheck: test: ["CMD-SHELL", "wget --quiet --tries=1 --spider http://127.0.0.1:80/api/health || exit 1"] interval: 15s timeout: 5s retries: 3 start_period: 5s labels: - "traefik.enable=true" - "traefik.http.routers.loadout.rule=Host(`loadout.vloser.us`)" - "traefik.http.routers.loadout.entrypoints=websecure" - "traefik.http.routers.loadout.tls.certresolver=letsencrypt" - "traefik.http.services.loadout.loadbalancer.server.port=80" networks: t3_proxy: external: true ``` Data is stored persistently in `/app/data`: * `trips.json` — All past, active, and upcoming travel manifests * `memory.json` — Learned exclusions, inclusions, and debrief statistics * `settings.json` — Audio preferences and optional AI endpoint configuration