Skip to content
Sendly

Sendly

Bridge Gifts Across Worlds

Created on 16th May 2025

Sendly

Sendly

Bridge Gifts Across Worlds

The problem Sendly solves

Sendly answers the problem of making gift-giving more personal and varied in today's digital age.

Traditional cash gifts can feel impersonal, while physical gift cards are limited by location and redemption options. Sendly solves this by offering a blockchain-based solution that allows users to send customizable digital gift cards to anyone, anywhere, and at any time.

image

It bridges the gap between Web2 and Web3, enabling seamless integration with both traditional online services (e.g., Amazon, Apple (in the long future haha but I hope)) and decentralized platforms (via the Base network).

image

This gives recipients to spend their gifts flexibly, while also introducing Web 2 users to Web 3 concepts, fostering curiosity and adoption.

Challenges I ran into

  • High Gas Costs

Struggled with high gas fees during transactions.
Solution: Uploaded SVG/JSON to IPFS (or Pinata, Web3.Storage, etc.) and passed only a link (e.g., ipfs://...) to the contract.
Changes Made: SVG and metadata are now uploaded to IPFS via web3.storage. The contract now receives only a short metadata.json link instead of the full JSON/SVG.
Impact: Reduced minting gas costs by 5-10 times.

  • Missing ERC721Enumerable Interface

Initially, the tokenOfOwnerByIndex method and the ERC721Enumerable interface were not implemented.
Solution: Had to create a new contract to include these features.

  • Late Integration of Smart Wallet

Added the Smart Wallet feature late in development. Previously, I used Create React App (CRA), which has limited structure and poor support for modern Web3 packages, causing difficulties with Smart Wallet integration.
Solution: Implemented Coinbase Smart Wallet integration using the wagmi library with the coinbaseWallet connector from @wagmi/connectors.
Future Plan: Migrate from react-scripts to Vite or Next.js, which better support modern dependencies and avoid conflicts with TypeScript 5.x.

  • Display Issues with Current NFTs in Wallet

After redeeming, I filtered the old giftCards array and called setGiftCards(updatedCards). However, React might not update the giftCards state in time before loadGiftCards calls setGiftCards(cards) with a new array, leading to desynchronization and display bugs.
Solution: This could be addressed by ensuring state updates are batched or using a loading state to prevent race conditions—specific implementation can be refined based on your code. Then I broke my head.

Tracks Applied (2)

Stablecoins

Sendly fits the Stablecoins category perfectly because its gift cards use Base network stablecoins, with more stablecoin...Read More

Consumer

Sendly is a great match for the Consumer track because it makes gifting easier and more fun for everyday people using bl...Read More

Cheer Project

Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.

Discussion

Builders also viewed

See more projects on Devfolio