-
-
The card on a store rack, next to ordinary gift cards (a still from the demo video's AI-generated opening).
-
The gifter tells the AI shopper what the kid is into. It suggests real, in-stock products, each with a reason.
-
Checkout shows each gift's price, shipping, tax and store: three gifts from three different stores.
-
One PayPal payment covers the costliest gift, with item, shipping and tax sent to PayPal's Orders API.
-
The kid tears open each AI-wrapped gift with a finger. No app, no account, no AI chat.
-
The kid flips through colors, and the photo changes with each one. Then they keep one.
-
The gifter's receipt: the chosen gift's price, shipping and tax come out, and PayPal refunds the rest.
-
The real thing: a blank NFC card wearing a printed sticker, next to its rack backing.
-
A trimmed card front and back. The back tells the kid where to tap. No app needed.
-
The print files: card stickers with bleed and the fold-over rack backing, both in the repo.
-
Tap Gift: try it at tap-gift.onrender.com/c/demo. Built with the PayPal Server SDK, Claude, Channel3 and Render.
Inspiration
Buying for a kid you don't see every day is hard. Ask a 13-year-old what they want and you get "I don't know." Guess wrong and the gift sits in a drawer. A gift card lets them choose, but it shows no thought, has nothing to open, and can be spent on anything. Tap Gift lets the adult do the narrowing down and the kid do the choosing, and it keeps the surprise.
What it does
- The gifter starts a gift, digital or on a card. They open the Tap Gift link, or pick up an NFC-enabled Tap Gift card. Each card holds a unique ID, so tapping it with a phone starts a gift that's saved to that card automatically. No app needed.
- The gifter shops with an AI. They say what the kid is into ("skateboarding", "getting into photography") and set limits like "under $50" or "no screens", by typing or with voice input. The AI suggests real, in-stock products, each with a reason. The gifter keeps two or three options at different prices and picks sizes as they go, so the kid only chooses things like color.
- The gifter pays once with PayPal. Checkout shows each gift's price, its store's shipping and sales tax, and the gifter pays enough to cover the costliest one.
- The kid taps the card or opens the link. No app or account is needed.
- The kid unwraps every gift. They tear the paper with a finger. Each paper was drawn by AI to hint at what's inside: clothing silhouettes for a jacket, cameras for an Instax.
- The kid keeps one. They flip through its colors, choose, and send a thank-you note.
- The balance comes back. The chosen gift's price, shipping and tax are deducted, and PayPal refunds the rest to the gifter automatically. The gifter sees a receipt and the kid's note.
- The card is reused. After the gift is chosen, the same card can be cleared and carry the next birthday's gift.
Fulfillment is simulated: everything runs in the PayPal sandbox, and nothing is bought or shipped.
How we built it
- Next.js 16 on Render, with Render Postgres.
- PayPal Server SDK. The Orders API captures one payment at checkout, sent as item, shipping and tax, so PayPal's own checkout shows the same breakdown. The Payments API refunds the balance on the original capture, with a fixed request ID per gift so a retry can never refund twice.
- Shipping and tax. Each gift gets an estimated cost at checkout (its store's shipping, and the ship-to state's sales tax). The charge covers the costliest gift, so the kid's choice never needs a second charge, and each gift's cost is saved so the refund uses exactly the numbers that were charged.
- Shopping agent: Claude Haiku 5.5 with tools. It saves the gifter's rules, searches real products through Channel3 and proposes 3 to 5 options.
- Wrapping paper: Claude Sonnet 5.5 names each gift's family of things and draws four silhouettes from it.
- Guardrails in code, not in the prompt: price, stock, new condition, US stores, age-based blocked categories, things to avoid and size. A dollar amount in the chat becomes a hard limit even if the model misses it, and the model can only propose products returned by a search that turn.
- NFC cards: a plain NTAG215 tag holds one permanent link. The server decides what a tap opens: a blank card starts a gift, a card holding a gift opens it. The link never changes, so a card is written once and reused.
- Tooling: Claude Code built the app, with the APIMatic Context Plugin for PayPal supplying SDK context.
Eval
30 scripted chats (10 gifter prompts × 3 refinements), including prompts that ask for blocked things like a knife, makeup or a gift card. Latest run: 0 rule violations across 250 options. Earlier runs caught a missed price limit, fragrances slipping past the blocked list and a toy shotgun, all fixed in code.
Challenges we ran into
- Shipping and tax without the data. Product search gives prices but no shipping or tax, and different gifts come from different stores. We estimate both per gift, charge for the costliest, and deduct the chosen gift's full cost, so the money always balances without a recapture.
- Charge now or hold? A PayPal authorization hold expires in days, but a kid may take weeks to open a gift. Capturing up front and refunding the balance is the robust choice.
- iPhones and the PayPal app. The PayPal app grabbed the checkout and couldn't see sandbox orders, so phones go to a web-only approval page.
- Generating unique wrapping paper with AI. Each gift gets its own paper, and it had to hint at what's inside without giving it away.
Accomplishments that we're proud of
- It solves a real problem for real gifters. Grandparents and relatives who don't know what a kid is into this year, and parents buying for a classmate's birthday party, can give something the kid actually wants, without guessing and without a gift card.
- The unwrap feels physical. The rip follows your finger, with torn edges and confetti.
- Real money logic in the sandbox: pay once, see the breakdown, refund the rest, with a receipt.
- One reusable card instead of a new gift card every occasion.
Kids and privacy
The kid has no account, never talks to the AI and types nothing except an optional thank-you. An adult makes every decision about what's offered and pays for it. Opening a gift link changes nothing, so link previews and email scanners can't spend a gift.
Behind the scenes: making the card
The card isn't just a mockup. It's a blank NTAG215 NFC card wearing a printed sticker, sold on a fold-over rack backing like a store gift card. We designed the sticker and backing, printed them at actual size, glued a blank card behind the print and trimmed it, then wrote the card's permanent link onto it with a free NFC app. Tapping it with an iPhone opens Tap Gift with no app installed. The print files are in the repo (media/print).



What's next for Tap Gift
- Real fulfillment, with each store's actual shipping and a tax service.
- Emailing the thank-you to the gifter.
- A check of stored-value and gift-card rules before launch.
Try it
- Digital only (a gift link): https://tap-gift.onrender.com
- Tap card experience: https://tap-gift.onrender.com/c/demo gives you a pretend blank card, as if you had just tapped a real one.
Use a phone if you can, and pay with a PayPal sandbox buyer login from the testing instructions. On the last page, the Demo notes open the gift the way the kid gets it.
Built With
- apimatic
- channel3
- claude
- claude-code
- next.js
- nfc
- node.js
- paypal
- postgresql
- react
- render
- tailwindcss
- typescript