# GearBox

A single-user 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

## Quick Start (Docker)

### Docker Compose (recommended)

Create a `docker-compose.yml`:

```yaml
services:
  gearbox:
    image: gitea.jeanlucmakiola.de/makiolaj/gearbox:latest
    container_name: gearbox
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DATABASE_PATH=./data/gearbox.db
    volumes:
      - gearbox-data:/app/data
      - gearbox-uploads:/app/uploads
    healthcheck:
      test: ["CMD", "bun", "-e", "fetch('http://localhost:3000/api/health').then(r=>r.ok?process.exit(0):process.exit(1)).catch(()=>process.exit(1))"]
      interval: 30s
      timeout: 5s
      start_period: 10s
      retries: 3
    restart: unless-stopped

volumes:
  gearbox-data:
  gearbox-uploads:
```

Then run:

```bash
docker compose up -d
```

GearBox will be available at `http://localhost:3000`.

### Docker

```bash
docker run -d \
  --name gearbox \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -e DATABASE_PATH=./data/gearbox.db \
  -v gearbox-data:/app/data \
  -v gearbox-uploads:/app/uploads \
  --restart unless-stopped \
  gitea.jeanlucmakiola.de/makiolaj/gearbox:latest
```

## Data

All data is stored in two Docker volumes:

- **gearbox-data** -- SQLite database
- **gearbox-uploads** -- uploaded images

Back up these volumes to preserve your data.

## Updating

```bash
docker compose pull
docker compose up -d
```

Database migrations run automatically on startup.

## 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, SQLite (`bun:sqlite`)

## Local Development Setup

### Prerequisites

You must have [Bun](https://bun.sh/) installed on your machine. Docker is not required for local development.

### Installation

1. Install all dependencies:
   ```bash
   bun install
   ```

2. Initialize the local SQLite database (`gearbox.db`):
   ```bash
   bun run db:push
   ```

3. Start the development servers:
   ```bash
   bun run dev
   ```
   This single command will start both the Vite frontend server (port `5173`) and the Hono backend server (port `3000`) concurrently. 

Open [http://localhost:5173](http://localhost:5173) in your browser to view the app.

## Additional Commands

- `bun run build` — Build the production assets into `dist/client/`
- `bun test` — Run the test suite
- `bun run lint` — Check formatting and lint rules using Biome
- `bun run db:generate` — Generate Drizzle migrations after making schema changes