# 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
