- TypeScript 94%
- Shell 2.9%
- CSS 2.1%
- HTML 0.4%
- Dockerfile 0.3%
- Other 0.3%
| .forgejo/workflows | ||
| CHANGELOGS | ||
| client | ||
| docker | ||
| insomnia | ||
| MILESTONES | ||
| site | ||
| .gitignore | ||
| CONTRIBUTING.md | ||
| generate-env.sh | ||
| package-lock.json | ||
| README.md | ||
| run-development.sh | ||
| run-docker.sh | ||
Shows
A self-hosted community show flier board: public timeline, host moderation, security and privacy driven.
Quick start
production
Run the setup script:
./setup-env.sh # creates .env (JWT_SECRET, optional INITIAL_HOST_EMAIL/PASSWORD, ...)
Then spin up a new container:
./run-docker.sh
The application will be available at http://localhost:3000/.
Data lives in Docker volumes shows-data and shows-uploads. Keep .env secret.
For extended config options: ./setup-env.sh --host (Docker defaults), --email (SMTP), or --all. Existing .env is merged when you re-run.
development
Use Docker Compose with the dev profile: backend runs with source mounted and hot reload. One container serves API + frontend at port 3000.
./setup-env.sh # generate environment
./run-development # run development stack (backend + db)
Logs: docker compose -f docker/docker-compose.yml --profile dev logs -f backend-dev. Stop: ... down.
Full dev workflow, repo layout, and troubleshooting → CONTRIBUTING.md.
Env reference (minimal)
| Variable | Required | Notes |
|---|---|---|
JWT_SECRET |
Yes | Min 16 chars; use ./setup-env.sh to generate. |
DATABASE_URL |
Yes | Default in container: file:/app/data/shows.db. |
INITIAL_HOST_EMAIL / INITIAL_HOST_PASSWORD |
First run | Seed the initial HOST user (12+ char password). |
PORT |
No | Default 3000. |
UPLOAD_STORAGE_PATH |
No | Default /app/uploads in Docker. |
SMTP_* |
No | Optional; for password-reset email. |
Bare metal: client/deploy.sh runs migrations + seed only (no start). API details → client/API_DOCUMENTATION.md.