PennBook
A scalable social media website

This group project is the final project for NETS 212 (Scalable and Cloud Computing) therefore the source code cannot be shared. A preview of the project is included at the bottom of this page.

Other group members: Dan Truong and Jonathan Mak

Background

The goal of the project was to build a mini-Facebook application where people can create accounts, search for others, add friends, post on each other's walls, comment on posts, update their status or profile info, chat with friends, visualize their network. Users are also provided a set of recommended friends, which was generated using While developing those features, we placed a huge emphasis on stability, security, and scalability. Our team also decided to undertake some extra credit features, such as adding the ability for users to like posts, persistant group chats, infinite scrolling, ability to upload profile pictures, and ability to update login info (email and/or password).

Stability

Since some of the user interactions require multiple changes to be made to the database (e.g. adding/removing friends), we wanted our implementation to be robust against inconsistencies in the data. We relied on DynamoDB's transactions to achieve atomicity, consistency, isolation, and durability.

Security

We built the front-end code to be robust against injection attacks. In addition, we salted and hashed the passwords to protect sensitive data. We also built API endpoints to prevent users from accessing protected content (e.g. non-friend's posts).

Scalability

When designing the schema of our NoSQL database, our goal was to ensure that the queries would resolve in reasonable time even if the number of users was extremely large. We created sort keys and indexes to optimize queries such as fetching recent posts, fetching friend's, fetching chats, verifying login attempt, and changing account details.

Preview