ae81206de7a0c9ca88679c8360d0670ac62c04c0
Add DOMPurify to sanitize user-generated HTML in the preferences section before rendering with dangerouslySetInnerHTML.
Wishlist
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
# 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
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:
# 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=99andPGID=100(nobody:users) - Find your IDs: Run
idon your system
Example for Unraid in .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
# 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
Languages
TypeScript
95.6%
CSS
3.1%
Dockerfile
0.6%
Shell
0.5%
JavaScript
0.2%



