# No-Peeks Gift Exchange > No-Peeks is a free, privacy-first gift exchange and wishlist application designed to prevent duplicate gifts while guaranteeing that surprises are never spoiled. Unlike traditional tools where software glitches or notifications leak claimed items to the recipient, No-Peeks enforces surprise secrecy at the database rule level. ## Core Capabilities - **Wishlist Coordination**: Participants create wishlists with item titles, prices, descriptions, and product links. - **Duplicate Prevention via Secret Claims**: Group members secretly claim gifts on others' lists so nobody buys the same gift twice. - **Guaranteed Surprise Secrecy**: The list owner can never see whether an item has been claimed or who claimed it. Even inspecting client-side network traffic reveals nothing because Firestore database rules reject requests from the list owner for claim data on their own items. - **Secret Suggestions**: Participants can suggest gift ideas directly onto someone else's list. These suggestions are visible to the entire group for coordination and claiming, but are completely hidden from the intended recipient. - **Instant Invite Links**: Exchange owners generate one-click invitation links without requiring participants to install mobile app store apps. - **100% Free**: No subscription fees, no ads, no trackers, and no paywalls. ## Key URLs - [No-Peeks Homepage](https://no-peeks.com): Main application and account dashboard. - [Sign Up](https://no-peeks.com/signup): Create a free account. - [Log In](https://no-peeks.com/login): Access existing gift exchanges. - [Full LLM Reference](https://no-peeks.com/llms-full.txt): Comprehensive documentation for AI agents, technical architecture, and FAQs. ## Technical Architecture & Privacy - **Platform**: Progressive Web App (PWA) built with Next.js, React, Tailwind CSS, and Firebase/Cloud Firestore. - **Privacy Model**: Zero-knowledge surprise enforcement. Cloud Firestore Security Rules deny read and write access to claim records (`.../items/{itemId}/claims/{claimId}`) if the requesting user ID matches the item's `listOwnerId`.