Capebook
Full-stack single-page social media application inspired by Facebook. Rails, React/Redux, PostgreSQL
Install / Use
/learn @miphnoel/CapebookREADME
Capebook
Capebook is a Facebook-inspired social networking application for superheroes (and villains!). A Redux structure with React.js views offers a dynamic and responsive frontend to complement the trusty backend pairing of Ruby on Rails with a PostgreSQL database.
Features

User Profiles
Upon account creation, Capebook automatically generates a profile for the new user, populating default information such as a profile picture and cover photo (attached to the user with the paperclip gem and accessed through an Amazon Web Services bucket). Users can then edit their profile information and upload new photos through a nested modal form utilizing the flexibility of a ModalReducer to track multiple modals' status in the Redux store.

Friending
Capebook tracks user relationships through friendships, which can have a status of pending, approved, or denied. The database stores these friendship statuses as integer values, while the friendship model translates into recognizable strings for optimal balance between storage efficiency and legibility. The friendship status between the two users is then translated into six different possible action button components on a given user's profile page.
- Edit profile
- Visible only when the current user is on their own
profilepage
- Cancel request
- Allows the
senderof a friend request to delete apendingfriendship before receiving a response from thereceiver.
- Respond to request
- The
receiverof apendingrequest has the option to either 'confirm' or 'delete request' through a hover-dropdown menu, changing the friendship status toapprovedordenied, respectively.
- Unfriend
- Either user in an
approvedfriendship can delete the friendship.
- Blocked notification
- The
senderof a friend request that has beendeniedcan no longer send friend requests to the samereceiver.
- Unblock
- The
receiverof a friend request who initially blocked thesendercan unblock, deleting the friendship and allowing for a new attempt at establishing friendship.
# translate ['pending', 'approved', 'denied'] status of friendship
# between current_user and currently displayed user into
# [ self, no_connection, sent_request, received_request, friends, blocked, blocker]
def status
return -1 if @user.id == current_user.id
return 0 unless @current_friendship
case @current_friendship.status
when "pending"
return 1 if current_user.id == @current_friendship.sender_id
return 2
when "approved"
return 3
when "denied"
return 4 if @user.id == @current_friendship.receiver_id
return 5
end
end
Users can also respond to incoming friend requests through a dropdown menu in the global nav bar, with similar options to 'confirm' or 'delete request', or navigate to the sender's profile for recon before deciding.
Posts and Comments

Users can post and comment on other user's timelines, or post statuses on their own profile page or news feed. The timeline will only display posts for which the corresponding user is the recipient, whereas the news feed will show any posts whose author is either the current user, or among the current user's approved friends.
Moving Forward
Features planned for future implementation include:
- Likes
- Notifications
- Direct Messaging
- Nested Comments
- Search
- Photo Albums
- Privacy Filters
- Users who are not
approvedfriends will see only the costumed character, and not the civilian identity.
- Users who are not
Related Skills
feishu-drive
333.3k|
things-mac
333.3kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
333.3kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
convex
Guidelines and best practices for building Convex projects, including database schema design, queries, mutations, and real-world examples
