Files

83 lines
4.3 KiB
Markdown

# 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