IPFS-Notebook is a note taking app that allows the user to encrypt notes and ideas. The notes are stored on web3.storage and accessible via metamask sign in. Upon closing the application, the user can rest easily knowing their notes are encrypted and stored in a secure location. Upon opening the application, the user has the ability to seamlessly pull their stored notes back into the note-taking environment via a simple metamask log in where CID's are stored making it for an easy user experience. IPFS-Notebook intends to solve the problem of lost passwords for note taking apps as well as making sure data is stored in a secure location.
We began by creating a minimum viable product on the front-end which was a simple React note-taking app. Just using React, we were able to implement features such as adding and deleting notes. The first additional feature we incorporated was encryption. To do so, we used the AES encryption scheme from the crypto-js library, and made the functionality available to users through "encrypt" and "decrypt" buttons inside our React app. The next thing to do was incorporate saving notes to IPFS. To do this, we used an API from sponsor Web3.Storage. Their API helped us easily save files representing users' note content to IFPS and retrieve them using CID's that the API returned. Once we could save to IPFS and display CID's, we added an input field to retrieve stored CID's. Of course, this requires users to save their own list of CID's, so the last feature we implemented for additional convenience was connect with metamask. Once connected with metamask, we were able to store records of users' CID's and Eth addresses in a Postgres database we spun up on Amazon RDS. Once connected with metamask, our app automatically returns a list of previously saved CID's associated with that user's Eth address.
What impressed us most about this project was our ability to incorporate a full-stack of features to bring a complete user experience to this app. About a week before submission, the feature of storing all a user's CID's automatically was somewhat of a pipe dream. We did not realize we'd have to spin up a database as well as a back-end to serve the database content in addition to our front-end, as we thought there would be a way around this using decentralized storage. However, we hit a wall trying to use OrbitDB and IPNS, so we switched to Postgres and built a back-end server in a surprisingly short amount of time.