A collaborative wishlist application allows users to save products while browsing and organize them into shareable lists.
- Create, edit and delete lists
- Infinite scroll pagination for products within lists
- Search and filter products within lists
- Share lists with configurable access levels:
- Read-only access
- Full access (add/remove products)
- Add products from any website URL
- Product details stored:
- Title
- Image
- Price
- Description
- URL
- Move products between lists
- Remove products from lists
- Share lists via unique links
- Configure access permissions per user
- Real-time updates across all collaborators
- Next.js 15 - React framework with App Router
- TailwindCSS - Utility-first CSS framework
- shadcn/ui - Reusable component system
- Lucide Icons - Icon library
- Clerk - Authentication and user management
- TypeScript - Type safety
- Convex - Backend platform with:
- Real-time database
- Serverless functions
- Full-text search
- Authentication integration
- TypeScript support
app/
: Next.js 15 app directory with route groups(marketing)/
: Public pages like landing pagelists/
: Protected routes for authenticated users
components/
: Reusable React componentsui/
: Base UI components from shadcn/ui- Custom components for specific features
middleware.ts
: Clerk authentication middleware
lib/
: Shared utilities and helpersauth.ts
: Access control and permissions
lists.ts
: List CRUD operations and sharingproducts.ts
: Product managementschema.ts
: Database schema and indexes_generated/
: Auto-generated TypeScript types
- Route Groups: Marketing pages are separated from authenticated routes
- Component Hierarchy: UI components separated from feature components
- Backend Modules: Organized by domain (lists, products)
- Shared Logic: Common utilities in
lib
directory - Type Safety: Generated types in
_generated
directory
convex/schema.ts
: Database schema definitionconvex/lib/auth.ts
: Access control logicsrc/app/layout.tsx
: Root layout with providerssrc/middleware.ts
: Authentication middlewareconvex.json
: Convex configuration
This structure follows Next.js and Convex best practices while maintaining clear separation of concerns and modularity.