155 lines
3.7 KiB
Markdown
155 lines
3.7 KiB
Markdown
# Wishlist
|
|
|
|
[](https://hub.docker.com/r/reggiodigital/wishlist)
|
|
[](https://github.com/Reggio-Digital/wishlist/blob/main/LICENSE)
|
|
|
|
A simple, self-hosted wishlist app for sharing gift ideas with family and friends.
|
|
|
|
## Why This App?
|
|
|
|
Most wishlist apps are bloated with features you don't need, require accounts for everyone, or lock you into a platform. This app solves a simple problem: you want to share what you'd like as gifts, and your friends and family want to claim items without spoiling the surprise.
|
|
|
|
**Features:**
|
|
|
|
- **Simple** - No complex features, just wishlists and items
|
|
- **Easy to Share** - Send a single URL, no signups required
|
|
- **Multiple Purchase Links** - Add multiple store links for each item so people can choose where to buy
|
|
- **Public/Private Wishlists** - Keep lists private while you're working on them, then make them public when ready
|
|
- **No Peeking!** - Admins can't see claimed items from the dashboard - you'd have to visit the specific wishlist's public URL to spoil the surprise
|
|
- **Privacy-Focused** - Self-hosted, your data stays with you
|
|
- **Transparent** - Anyone viewing the list can see what's been claimed to avoid duplicates
|
|
- **Low Maintenance** - Single Docker container with SQLite, no database setup needed
|
|
- **URL Scraping** - Auto-fill item details from product URLs _(Coming Soon)_
|
|
|
|
## Demo
|
|
|
|

|
|
|
|
## Screenshots
|
|
|
|
### Homepage
|
|
|
|

|
|
|
|
### Wishlist View
|
|
|
|

|
|
|
|
### Admin Dashboard
|
|
|
|

|
|
|
|
### Admin Dashboard - Item Details
|
|
|
|

|
|
|
|
## Quick Start
|
|
|
|
### Using Docker Compose
|
|
|
|
```bash
|
|
# Clone and configure
|
|
git clone https://github.com/Reggio-Digital/wishlist
|
|
cd wishlist
|
|
cp .env.example .env
|
|
|
|
# Edit .env with your admin credentials
|
|
nano .env
|
|
|
|
# Start with Docker Compose
|
|
docker-compose up -d
|
|
```
|
|
|
|
Visit http://localhost:3000
|
|
|
|
### Using Docker Image
|
|
|
|
```bash
|
|
docker run -d \
|
|
-p 3000:3000 \
|
|
-e PUID=1000 \
|
|
-e PGID=1000 \
|
|
-e ADMIN_USERNAME=admin \
|
|
-e ADMIN_PASSWORD=your-secure-password \
|
|
-v wishlist-data:/app/data \
|
|
--name wishlist \
|
|
reggiodigital/wishlist:latest
|
|
```
|
|
|
|
**For Unraid users:** Set `-e PUID=99 -e PGID=100`
|
|
|
|
## Data Storage
|
|
|
|
Data is stored in `/app/data`:
|
|
|
|
- `/app/data/db` - SQLite database files
|
|
- `/app/data/uploads` - Uploaded images
|
|
|
|
## Environment Variables
|
|
|
|
Create a `.env` file:
|
|
|
|
```env
|
|
# Required - Admin Credentials
|
|
ADMIN_USERNAME=admin
|
|
ADMIN_PASSWORD=changeme
|
|
|
|
# Optional - User/Group IDs for docker-compose (defaults to 1000:1000)
|
|
# For Unraid, use PUID=99 and PGID=100
|
|
PUID=1000
|
|
PGID=1000
|
|
|
|
# Optional - JWT Secret (auto-generated if not provided)
|
|
# Generate with: openssl rand -base64 32
|
|
SECRET=
|
|
```
|
|
|
|
### User Permissions (PUID/PGID)
|
|
|
|
The container automatically handles file permissions using PUID/PGID environment variables (LinuxServer.io pattern):
|
|
|
|
- **Default:** `1000:1000` (standard Linux user)
|
|
- **Unraid:** Set `PUID=99` and `PGID=100` (nobody:users)
|
|
- **Find your IDs:** Run `id` on your system
|
|
|
|
Example for Unraid in `.env`:
|
|
```env
|
|
PUID=99
|
|
PGID=100
|
|
```
|
|
|
|
The entrypoint script automatically:
|
|
- Creates the user/group if needed
|
|
- Sets correct ownership on data directories
|
|
- Ensures proper file permissions for uploads
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Install dependencies
|
|
npm install
|
|
|
|
# Run development server
|
|
npm run dev
|
|
|
|
# Build for production
|
|
npm run build
|
|
|
|
# Start production server
|
|
npm start
|
|
```
|
|
|
|
## Pages
|
|
|
|
- `/admin/login` - Admin authentication
|
|
- `/admin` - Admin dashboard (manage wishlists and items)
|
|
- `/[slug]` - Public wishlist view
|
|
|
|
## License
|
|
|
|
MIT
|
|
|
|
---
|
|
|
|
Made with ❤️ by [Reggio Digital](https://reggiodigital.com)
|