A wishlist application. Create wishlists, share them effortlessly, and coordinate gift reservations.
- 🎯 Organize with Purpose - Create unlimited wishlists tailored to every occasion—birthdays, weddings, holidays, or just because
- 🔗 One Link, Instant Access - Share wishlists with a single link—no signups required for viewers
- 🔔 Never Get Duplicates - Automatic coordination when items are reserved by friends and family
- 🔒 Privacy Controls - Create separate lists for different circles and control who sees what
- ❤️ Rich, Visual Context - Attach product images, prices, purchase links, and personal notes
- 👥 Scales with You - Perfect for family gift exchanges or large friend groups
-
Frontend:
- React 19 with TypeScript
- TanStack Router for routing
- TanStack Query for data fetching
- Tailwind CSS 4 for styling
- Framer Motion for animations
- Shadcn UI components
- React Helmet Async for SEO
-
Backend:
- Supabase (PostgreSQL database)
- Supabase Auth (Google OAuth)
- Supabase Edge Functions (Deno)
-
Development:
- Vite for build tooling
- Bun as package manager and test runner
- ESLint for code quality
- TypeScript for type safety
- Bun (v1.2.3 or higher)
- Supabase CLI
- A Supabase project (for production) or Docker (for local development)
-
Clone the repository
git clone <repository-url> cd wishlist
-
Install dependencies
bun install
-
Set up environment variables
Create a
.envfile in the root directory:VITE_SUPABASE_URL=your_supabase_url VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
-
Start Supabase locally (optional, for local development)
bunx supabase start
-
Generate TypeScript types from Supabase schema
bun run generate:types
-
Start the development server
bun run dev
The app will be available at
http://localhost:5173
bun run dev- Start development server with Vitebun run build- Build for productionbun run preview- Preview production build locallybun run lint- Run ESLintbun run typecheck- Run TypeScript type checkingbun run test- Run tests with Bunbun run generate:types- Generate TypeScript types from Supabase schema
wishlist/
├── src/
│ ├── components/ # Reusable UI components
│ │ ├── modules/ # Feature-specific components
│ │ └── ui/ # Shadcn UI components
│ ├── routes/ # TanStack Router routes
│ │ ├── _authenticated/ # Protected routes
│ │ ├── index.tsx # Landing page
│ │ ├── login.tsx # Login page
│ │ └── ...
│ ├── services/ # API service functions
│ ├── lib/ # Utility functions
│ ├── database.types.ts # Generated Supabase types
│ └── main.tsx # Application entry point
├── supabase/
│ ├── functions/ # Edge Functions
│ │ ├── reserve-item/ # Item reservation logic
│ │ └── delete-account/ # Account deletion logic
│ └── migrations/ # Database migrations
├── public/ # Static assets
└── ...config files
The app uses Supabase Auth with Google OAuth for secure authentication. Users can:
- Sign in with their Google account
- Manage their account settings
- Delete their account and all associated data
The application follows a Linear-inspired design aesthetic:
- Clean, minimalist interface
- Purposeful use of color for status indicators
- Subtle animations and micro-interactions
- Premium feel with glassmorphism effects
- Fully responsive mobile design
- Dark mode support
- Create multiple wishlists for different occasions
- Add items with rich details (images, prices, links, notes)
- Set item priorities (low, medium, high)
- Mark items as public or private
- Set expiration dates for time-sensitive items
- Share wishlists via unique URLs
- No account required for viewers
- Real-time reservation status
- Mark items as purchased
- Reserve items anonymously or reveal identity
- Control who can access your wishlists
- Revoke shared links anytime
- Delete account with full data removal
- Secure authentication via Google OAuth
Run the test suite:
bun run testThe project uses:
- Bun's built-in test runner
- Happy DOM for DOM testing
- Testing Library for React component testing
-
Build the application
bun run build
-
Deploy to your hosting platform
The
distfolder contains the production-ready static files. -
Deploy Supabase Edge Functions
bunx supabase functions deploy reserve-item bunx supabase functions deploy delete-account
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with React
- UI components from Shadcn UI
- Backend powered by Supabase
- Icons from Lucide
- Animations with Framer Motion
For support or inquiries, please contact: support@wishlist.com
Made with ❤️ for better gift-giving