https://github.com/belda/giftarium
Simple self-hosted app for gift wishlists for family and friends.
https://github.com/belda/giftarium
Last synced: 13 days ago
JSON representation
Simple self-hosted app for gift wishlists for family and friends.
- Host: GitHub
- URL: https://github.com/belda/giftarium
- Owner: belda
- License: mit
- Created: 2026-03-30T20:19:06.000Z (3 months ago)
- Default Branch: master
- Last Pushed: 2026-03-30T20:27:27.000Z (3 months ago)
- Last Synced: 2026-03-30T22:17:38.068Z (3 months ago)
- Language: HTML
- Size: 46.9 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Giftarium
> Create gift wishlists and share them with your family and friends.
> They can register for a gift — you know you might get it, but not from whom.
Self-hostable. Docker deploy in under 5 minutes.
---
## Features
- **Wishlists** — add gifts with name, description, link, and price range
- **Sharing** — share a wishlist with a group (family, friends, colleagues)
- **Anonymous reservations** — others can reserve a gift; you only see it's taken, not by whom
- **Workspaces** — separate wishlists per group, with member invitations
- **Google OAuth** — optional social login alongside email/password
- **Multi-language** — Czech and English
---
## Self-hosted quickstart (Docker)
**Requirements:** Docker + Docker Compose, a domain with HTTPS (nginx/Caddy/Traefik).
```bash
# 1. Clone and configure
git clone https://github.com/belda/giftarium.git
cd giftarium
cp .env.example .env
```
Open `.env` and set these required values:
```env
SECRET_KEY=
ALLOWED_HOSTS=gifts.example.com
CSRF_TRUSTED_ORIGINS=https://gifts.example.com
DB_PASSWORD=
DEFAULT_FROM_EMAIL=noreply@gifts.example.com
SECURE_SSL_REDIRECT=False # if your reverse proxy handles HTTPS
```
Generate a secret key:
```bash
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
```
```bash
# 2. Start
docker compose up -d
# 3. Create an admin account
docker compose exec web python manage.py createsuperuser
```
The app is now running on port `8000`. Point your reverse proxy at it.
> **Reverse proxy tip:** Set `SECURE_SSL_REDIRECT=False` in `.env` when nginx/Caddy/Traefik
> terminates TLS and forwards plain HTTP to gunicorn internally.
---
## Environment variables
| Variable | Required | Description |
|---|---|---|
| `SECRET_KEY` | yes | Django secret key — random string, keep it secret |
| `ALLOWED_HOSTS` | yes | Comma-separated hostnames, e.g. `gifts.example.com` |
| `CSRF_TRUSTED_ORIGINS` | yes | Comma-separated origins with scheme, e.g. `https://gifts.example.com` |
| `DB_PASSWORD` | yes | PostgreSQL password |
| `DEFAULT_FROM_EMAIL` | | Sender address for invitation and notification emails |
| `EMAIL_BACKEND` | | Set to SMTP backend + configure `EMAIL_HOST` etc. for real email |
| `SECURE_SSL_REDIRECT` | | `False` if reverse proxy handles HTTPS (default `True`) |
| `GOOGLE_CLIENT_ID` / `GOOGLE_CLIENT_SECRET` | | Optional: enables Google OAuth login |
| `ADMIN_EMAIL` | | Admin contact for Django error emails |
See `.env.example` for the full list with comments.
---
## Local development
```bash
python -m venv .venv
source .venv/bin/activate # or activate.fish
pip install -r requirements.txt
cp .env.example .env # defaults work out of the box for local dev
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver
```
Open http://localhost:8000. Uses SQLite and the console email backend by default.
### Docker dev (hot reload)
```bash
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
```
---
## Tech stack
- [Django](https://www.djangoproject.com/) + [webapptemplate](https://pypi.org/project/webapptemplate/) scaffold
- PostgreSQL (production) / SQLite (development)
- Tailwind CSS, HTMX, Alpine.js — no build step
- Gunicorn, Docker Compose