# GearBox A web app for managing gear collections (bikepacking, sim racing, etc.), tracking weight and price, and planning purchases through research threads. ## Features - Organize gear into categories with custom icons - Track weight and price for every item - Create setups (packing lists) from your collection with automatic weight/cost totals - Research threads for comparing candidates before buying - Image uploads for items and candidates ## Deployment GearBox is deployed via [Coolify](https://coolify.io/) as a Docker image with separate services for dependencies. **Required services:** - **PostgreSQL 16** — primary database - **Garage** (or any S3-compatible storage) — image uploads - **Logto** — OIDC authentication **GearBox image:** `gitea.jeanlucmakiola.de/makiolaj/gearbox:latest` See `.env.example` for required environment variables. ## Updating CI pushes a new Docker image on every release. Coolify auto-deploys when the image tag updates. Database migrations run automatically on startup via `entrypoint.sh`. ## Tech Stack - **Runtime & Package Manager:** [Bun](https://bun.sh) - **Frontend:** React 19, Vite, TanStack Router, TanStack Query, Tailwind CSS v4, Zustand - **Backend:** Hono, Drizzle ORM, PostgreSQL - **Storage:** S3-compatible (Garage, Cloudflare R2, AWS S3) - **Auth:** OIDC via Logto ## Local Development ### Prerequisites - [Bun](https://bun.sh/) installed - PostgreSQL, Logto, and Garage running (via Coolify test instance or locally) ### Setup 1. Install dependencies: ```bash bun install ``` 2. Copy and configure environment: ```bash cp .env.example .env # Edit .env with your service URLs and credentials ``` 3. Start the development servers: ```bash bun run dev ``` Starts both the Vite frontend (port `5173`) and Hono backend (port `3000`). Open [http://localhost:5173](http://localhost:5173) in your browser. ## Commands - `bun run dev` — Start dev servers (frontend + backend) - `bun run build` — Build production assets - `bun test` — Run tests - `bun run lint` — Lint with Biome - `bun run db:generate` — Generate Drizzle migrations after schema changes