Adapted and extended from the https://github.com/jm-shi/MERN-Social-Network/
A MERN stack social network application with MVP features implemented: user authentication, profile viewing, posting, commenting, and following/unfollowing.
- As a user, I want to be able to create an account so that I can log in.
- As a user, I want to be able to log in so that I can view my home feed.
- As a user, I want to be able to view posts so that I know what people I’m following are up to.
- As a user, I want to be able to create a post so that I can share my current status.
- As a user, I want to be able to delete my posts so that people can no longer see them.
- As a user, I want to be able to edit my posts so that I can correct or clarify my thoughts.
- As a user, I want to be able to like/unlike a post so that I can approve posts I am fond of.
- As a user, I want to be able to comment on a post so that I can share additional thoughts.
- As a user, I want to be able to view other users' profiles so that I can learn more about them.
- As a user, I want to be able to edit my own profile (i.e. change name, avatar color, or bio) so that I can add more style to my page.
- Add option for user to post images
- Add option for user to change their avatar/background to a custom image
- Add social media login options (e.g. Facebook, Google, Twitter)
- Implement find users feature (i.e. find users by typing their name into a search field)
- Improve code organization
- Write more tests
First install the dependencies:
- Clone the repository.
cd
into the directory and runnpm install
.- Run
cd client && npm install
.
Next, set up the database credentials:
- Log into or create an MongoDB Atlas account.
- Create a new MongoDB cluster. You can go with the default settings or customize them as you wish. Once the cluster is created, click "Connect."
- Whitelist a connection IP address and create a new MongoDB user.
- Once connection security is set up, choose "Connect Your Application."
- Replace the dbURI in
secrets.js
, located in backend folder, with the connection string. ReplacesomeUser
and<password>
with the user and password you created in step 2. cd
back into the main directory and runnpm start
. You can access the site atlocalhost:3000
.
Optional: If you want to also deploy the app to Heroku, first go through the aforementioned steps and then proceed as follows:
- Log into or create a Heroku account.
- Create a new app in Heroku.
- In the settings tab, add the config vars for REACT_APP_DB_URI and REACT_APP_JWT_KEY. The value for REACT_APP_DB_URI should be the same as the one you previously entered for dbURI in
secrets.js
. REACT_APP_JWT_KEY can be set to any random string. - In the deploy tab, choose any deployment method to deploy the application.
- Express.js - Backend web framework
- Heroku - Platform to deploy web applications
- JSON Web Token - A standard to securely authenticate HTTP requests
- Material-UI - UI library for React
- MongoDB - Database to store document-based data
- Mongoose - Object-modeling tool for Node.js
- Node.js - Runtime environment to help build fast server applications
- React - JavaScript library for building user interfaces
- Redux - JavaScript library to help better manage application state
- Design was inspired by preexisting projects like Qolzam's React Social Network and Shama Hoque's Mern Social.
- Authentication was implemented with the help of Krunal Lathiya's example, Brad Traversy's guide on building a login system, and Maximilian Schwarzmüller's guide on JWT (primarily episodes 11 and 12).
- Restful CRUD API builds on concepts explained in Andrew Mead's Node.js course.
- Material-UI, React, Redux, Mongoose documentation.