Better Bookmarks
Projects | Links: Live | GitHub

Better Bookmarks is a full-stack application that allows users to manage their favorite Tweets with more specificity & organization than the default Twitter tools. It also protects your favorite Tweets against deletion through integration with AWS S3 cloud storage and Lambda serverless functions.
Client
The frontend of Better Bookmarks is a React-based client that implements React’s Context API and handles part of the authentication flow required by the “Sign in with Twitter” service. I implemented lazy-loading of embedded Tweets by wrapping them in a component that conditionally renders embedded Tweets according to the Tweet component’s visibility in the viewport & order in the list of Tweets on the page.
Server
The Better Bookmarks server consists of two main components: a Node server providing a RESTful API for the client, and a collection of AWS cloud services which handle the Tweet archival process. The business logic of the application, including creating & deleting folders, adding Tweets to folders, and sharing folders, is handled by the Node server. For example, when a folder is shared, a unique string is generated and saved to the database, allowing users without an account to access the shared folder by visiting a link to the app ending with ‘/share/:uniqueString’.
When a Tweet is added to a user’s folder, the Node server also triggers execution of a custom-written AWS Lambda function by making a POST request to an endpoint on AWS API Gateway. This Lambda function downloads all information about the requested Tweet, including contents, metadata, and any images & thumbnails associated with the Tweet. The text data is stored directly in a MongoDB Atlas cluster, while the images & thumbnails are written to an AWS S3 bucket. In the event that a Tweet in a folder is deleted, the Tweet is re-created for the user by retreiving the text data from the database and accessing the S3 image data through an endpoint on the Node API server.
Better Bookmarks has been approved for “elevated” participation in Twitter’s Developer Platform.