Until Then
On-Chain Gifts for Future Moments
Created on 23rd June 2025
•
Until Then
On-Chain Gifts for Future Moments
The problem Until Then solves
Inspiration
This project was inspired by Violet Evergarden's episode "A Loved One Will Always Watch Over You," where a sickly mother hires Violet, a writer, to write 50 intimate letters to her daughter. The letters are sent on the daughter's birthday after the mother passes away. For 50 years, the daughter receives memorable letters from her deceased mother.
With this project, I wanted to implement a similar idea but using a decentralized solution. In the anime, the letters were sent by a postal company that could lose the letters or go out of business.
Features
Until Then offers the following features:
- A user can send a gift with an optional letter together with money. The sender chooses a release date.
- The sender can choose to yield the money in AAVE with ETH or LINK so the gift amount can potentially grow while locked.
- A receiver can only claim the gift on the release date.
- After the gift is claimed, the receiver gets the money and can decrypt the letter content.
- Every week, there is a $100 giveaway for users who claim a gift.
- The first 100 users receive an airdrop of UNTIL tokens on Avalanche.
Challenges I ran into
Managing all the Chainlink services was quite challenging. Each service has its own gas requirements and setup process. Sometimes, fixing a small bug meant I had to redeploy everything from scratch. I tried to automate the deployment as much as possible, but some manual steps were still necessary.
For example, with Log-based Upkeeps, I couldn't find an easy way to update the contract without deleting and recreating the Upkeep.
The CCIP integration with Avalanche was also tricky to test from Sepolia, as each transaction took around 23 minutes to complete.
It was a bit challenging to get the Chainlink Function working. My initial approach was to use the Pinata SDK, but I later realized it wasn't supported. It also took some time to figure out the correct way to update the source in the contract using the JavaScript codebase. I eventually managed it by creating a few utility scripts.
Tracks Applied (3)
Onchain Finance
Cross-Chain Solutions
Avalanche Track
Avalanche
Technologies used

