Files

4.3 KiB

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:

docker compose up -d --build

Compose Configuration (docker-compose.yml)

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