Inspiration
We wanted a secure, decentralised way to preserve memories and messages for the future. Inspired by physical time capsules, we built a platform that stores encrypted files on IPFS and unlocks them on a chosen date. It uses cryptography and decentralised storage to ensure privacy and persistence.
What it does
TimeBridge is a web app for creating and storing time capsules. Users can: Create capsules with multiple files and a caption Set an unlock date Encrypt and store files on IPFS Receive email notifications with unlock details Unlock capsules with a decryption key after the unlock date Download decrypted files Files are encrypted server-side, uploaded to IPFS via Lighthouse, and only decrypted when the user provides the key on or after the unlock date. Access their photos even if our service goes down. In order to be truly decentralised the user is emailed their IPFS key and id so they can decrypt and retrieve their photos even if we don't exist.
How we built it
Frontend: React + Vite, TailwindCSS, ShadCN, React Query, React Router, Axios Backend: Django REST Framework, JWT auth, SQLite Storage: IPFS via Lighthouse (lighthouseweb3) Encryption: Fernet (Python’s cryptography library) Email: Django email for notifications Architecture: User authentication: JWT-based login/register/password reset File upload: Encrypt with Fernet → upload to IPFS → store IPFS CID and decryption key in DB Unlock: Validate unlock code → mark as unlocked → decrypt and return files File retrieval: Download from IPFS → decrypt → serve
Challenges we ran into
Encryption integration: Ensuring files are encrypted before IPFS upload and keys are stored securely Client side upload timeouts: Large files cause connection timeouts; added longer timeouts and error handling File format handling: Supporting multiple file types while maintaining encryption/decryption integrity Accomplishments that we're proud of End-to-end encryption using Fernet before IPFS upload Decentralised storage on IPFS Secure unlock workflow with code validation and persistent unlock state Download for multiple files from decrypted capsules JWT authentication with protected routes Error handling for upload failures and invalid unlock codes
What we learned
IPFS integration for decentralised storage Fernet encryption in production React Query for API state management Django REST Framework patterns Security: encrypt before upload, key handling, authentication File handling: encrypting/decrypting multiple file types Email templates in Django
What's next for TimeBridge
Social features: shared capsules with multiple recipients Mobile app: React Native File preview: preview decrypted images/videos in-browser
Built With
- django
- ipfs
- lighthouseweb3
- postgresql
- react
- restful
- shadcn
