A modern wishlist application designed to help families and groups coordinate gift-giving for events and holidays. Create wishlists, share them with your group, and "dib" items to prevent duplicate gifts.
- Groups & Events - Create family groups or friend circles, organize around holidays and special occasions
- Wishlists - Build and share wishlists with your group members
- Dibs System - Claim items on others' wishlists to avoid duplicate gifts (hidden from the wishlist owner)
- Group Dibs - Split expensive gifts with multiple people
- Comments & Reactions - Discuss gift ideas with other group members
- Magic Link Auth - Passwordless authentication via email
- Push Notifications - Get notified when items are added or claimed
- Privacy Controls - Fine-grained visibility settings for items and comments
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- API: tRPC for end-to-end typesafe APIs
- Database: PostgreSQL
- ORM: MikroORM
- Authentication: NextAuth.js
- UI: DaisyUI + Tailwind CSS
- Email: Resend
- Node.js 20+
- Docker (for local PostgreSQL)
- pnpm or npm
-
Clone the repository
git clone https://github.com/yourusername/wishlist.git cd wishlist -
Set up environment variables
cd app cp .env.local.example .envEdit
.envwith your configuration (see Environment Variables) -
Start the database
docker compose up -d postgres
-
Install dependencies and run migrations
npm install npm run migration:up
-
Start the development server
npm run dev
Open http://localhost:3000 in your browser.
Create a .env file in the app/ directory:
# Application
NEXTAUTH_URL=http://localhost:3000
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Database
DATABASE_URL=postgresql://dibgifts:password@localhost:5432/dibgifts_db
# Authentication (generate with: openssl rand -base64 32)
NEXTAUTH_SECRET=your-secret-here
ENCRYPTION_KEY=your-32-character-key
# Email (Resend)
RESEND_API_KEY=re_xxxxxxxxx
EMAIL_FROM="Dibgifts <noreply@yourdomain.com>"
# Optional: Unsplash API for banner images
NEXT_PUBLIC_UNSPLASH_ACCESS_KEY=your-unsplash-keySee .env.local.example for all available options.
wishlist/
├── app/ # Next.js application
│ ├── app/ # App Router pages and API routes
│ ├── entities/ # MikroORM entity definitions
│ ├── lib/ # Core logic (tRPC routers, utilities)
│ ├── shared/ # Reusable components and hooks
│ └── migrations/ # Database migrations
├── docs/ # Documentation
│ ├── setup/ # Production setup guides
│ └── security/ # Security configuration
└── .rulesync/ # AI assistant guidelines
- Local Development Guide - Detailed local setup instructions
- Production Setup - Complete production deployment guide
- Deployment Guide - Environment variables and configuration
- Security Checklist - Pre-deployment security checks
From the app/ directory:
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npm run lint # Run ESLint
npm run format # Format code with Prettier
npm run typecheck # Run TypeScript checks
npm run migration:up # Apply database migrations
npm run migration:create # Create new migrationThe application is designed to run on:
- DigitalOcean App Platform (recommended)
- Any platform supporting Node.js and PostgreSQL
See the Production Setup Guide for complete deployment instructions including:
- Managed PostgreSQL setup
- S3-compatible file storage
- Cloudflare CDN configuration
- CI/CD with GitHub Actions
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Copyright 312.dev LLC. This project is licensed under the Polyform Noncommercial License 1.0.0 - you may view, fork, and modify this code for personal, educational, or noncommercial purposes, but commercial use is prohibited without explicit permission.