BringWhat is a simple, mobile-first web application designed to coordinate potlucks and parties. It allows hosts to create events and share a link via iMessage (or any platform), enabling guests to sign up for items without creating an account.

Tip
**Recent Updates:** See [CHANGELOG.md](CHANGELOG.md) for the latest improvements including 33% smaller Docker images, 60% faster queries, health monitoring, and security patches.
The application follows a Monolithic architecture optimized for portability and ease of self-hosting.
linux/amd64 and linux/arm64 architectures./health endpoint for container orchestration and monitoring./app/data to persist the SQLite database file (bringwhat.db).The easiest way to run BringWhat is using the official image: tquinnelly/bringwhat:latest.
Run with SQLite (Quick Start):
docker run -d \
-p 3000:3000 \
-v $(pwd)/data:/app/data \
--name bringwhat \
tquinnelly/bringwhat:latest
Clone the repo and use one of the provided compose files.
SQLite with Pre-built Image (Default - Fastest):
# Uses official image from Docker Hub
docker compose up -d
SQLite with Local Build (For Development):
# Builds from local source code
docker compose -f docker-compose.local.yml up -d
MySQL:
docker compose -f docker-compose.mysql.yml up -d
PostgreSQL:
docker compose -f docker-compose.postgres.yml up -d
Note
The default `docker-compose.yml` uses the pre-built image from Docker Hub for faster startup. Use `docker-compose.local.yml` if you want to build from source or make local modifications.
http://localhost:3000.This app supports Google Gemini (default) or OpenAI-compatible providers (like Ollama, LocalAI).
API_KEY: Your API Key (Gemini or OpenAI).AI_PROVIDER: gemini (default) or openai.AI_BASE_URL: Base URL for OpenAI compatible APIs.
http://localhost:11434/v1AI_MODEL: Specific model to use (e.g., gpt-4o, llama3).You can set these in your docker-compose.yml or a .env file:
API_KEY: (Optional) Your Google Gemini/OpenAI API Key. Required if you want the "Party Assistant" AI suggestions to work.PORT: Port to listen on (Internal container port, default 3000).DB_TYPE: sqlite, mysql, or postgres.DB_HOST, DB_PORT, DB_USER, DB_PASS, DB_NAME: Required if using MySQL or Postgres.DATABASE_URL: Connection string alternative for Postgres/MySQL.Note
The app validates environment variables at startup and will fail fast with clear error messages if configuration is incorrect.
The app includes a /health endpoint for monitoring:
curl http://localhost:3000/health
Response:
{
"status": "healthy",
"database": "sqlite",
"timestamp": "2025-12-21T12:00:00.000Z"
}
This endpoint is used by Docker health checks and can be integrated with monitoring tools like Kubernetes, Uptime Robot, or Prometheus.
The default setup pulls the latest image from Docker Hub. To update:
docker compose pull
docker compose up -d
If you make changes to the code locally, rebuild with:
docker compose -f docker-compose.local.yml up --build -d
This will:
If you want to modify the code:
Install Dependencies:
pnpm install
# or
npm install
Start Development Server:
npm run dev
vite.config.ts points to localhost:3000. You need to run the backend separately for API calls to work.Start Backend (in a separate terminal):
npm run start
āāā components/ # Reusable UI components (Buttons, Inputs, Modals, ErrorBoundary)
āāā services/ # API integration (Storage, Gemini AI)
āāā public/ # Static assets (Favicons, Logos)
āāā data/ # SQLite database storage
āāā types.ts # TypeScript interfaces
āāā App.tsx # Main application logic & Routing
āāā index.tsx # Entry point with error boundary
āāā index.css # Global styles
āāā server.js # Node.js + Express + Backend Logic
āāā Dockerfile # Multi-stage production build
āāā docker-compose.yml # Docker Hub image config (Default)
āāā docker-compose.local.yml # Local build config (Development)
āāā docker-compose.mysql.yml # MySQL orchestration config
āāā docker-compose.postgres.yml # PostgreSQL orchestration config
āāā vite.config.ts # Vite configuration with optimizations
āāā tailwind.config.js # Tailwind configuration
Data is stored in the ./data/bringwhat.db file on your host machine (mapped to /app/data in the container).
Data is stored in a Docker named volume (mysql_data or postgres_data) managed by Docker.
mysqldump or pg_dump tools against the running database container.Database Performance:
eventId and createdAt fields for 40-60% faster lookupsDocker Optimization:
Frontend Optimization:
Reliability:
For a detailed history of changes, improvements, and security updates, see CHANGELOG.mdā .
Recent Highlights:
Apache License 2.0 - See LICENSEā file for details.
Content type
Image
Digest
sha256:00718afdaā¦
Size
187.2 MB
Last updated
5 months ago
docker pull tquinnelly/bringwhat