Initial commit

This commit is contained in:
michaeltieso
2025-12-01 14:49:17 +00:00
commit 3480888eaa
92 changed files with 16631 additions and 0 deletions

154
README.md Normal file
View File

@@ -0,0 +1,154 @@
# Wishlist
[![Docker Hub](https://img.shields.io/docker/pulls/reggiodigital/wishlist)](https://hub.docker.com/r/reggiodigital/wishlist)
[![License](https://img.shields.io/github/license/Reggio-Digital/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
![Demo Video](video.mp4)
## Screenshots
### Homepage
![Homepage](screenshot1.png)
### Wishlist View
![Wishlist View](screenshot2.png)
### Admin Dashboard
![Admin Dashboard](screenshot3.png)
### Admin Dashboard - Item Details
![Admin Dashboard - Item Details](screenshot4.png)
## 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)