👉 LIVE PREVIEW 👈
Shared blog with ability to create your own user and share your articles with the rest of the users. Users can comment on each others articles and comments. Text editor that allows using several fonts, upload images and even embed code. Enforces user/author permissions through protected routes on the frontend and authorized routes on the backend.
git clone [email protected]:Vikms95/blog-api.git
cd blog-api
npm install
npm start
- Create a fullstack application with the MERN stack
- Serve an API following the REST conventions and serve meaningful error responses from the server
- Managing Authentication and Authorization with JWT
- Manage all CRUD operations with MongoDB and Mongoose
- Make endpoint requests with Postman
- Create a nested comment system between users
- Modularize React logic by creating my owns custom hooks
- Implement optimization techniques in the frontend to improve user experience, such as the useMemo hook and the IntersectionObserver API
- Use the styled-components library to modularize the CSS in JS
- React / react-router
- Express
- MongoDB / Mongoose
- JWT
- styled-components
- TinyMCE
- Sending token to the backend from the frontend component to verify that the token is valid
- Checking the token on every route to see if the user has access to the protected route
- Keeping the UI state in sync with the database data
- Keep the data in state when any page that uses data from the database is reloaded
- Creating pieces of reusable React logic for all components
- Allow the user to upload an image with a post
- Filter sensible data from database models when the models are fetched for use on the frontend
- Create recursive comment system where comment replies get nested into the parent
- Make comments get soft deleted when they are deleted by the user and have child comments remaining, otherwise hard delete it from the comment section
- Send meaningful error messages from the backend so the frontend can act accordingly
- Make PostPreview and Comment components only load whenever they appear on the screen with the IntersectionObserver API
- Make the JS from PostPreview and Comment component only load when the IntersectionObserver API is triggered
- Add pre-load image placeholders with SVG and the react-content-loader library
- Make the grid system of the Home component allow the first two items to be of different size
- Deploy my first fullstack app with a backend serving a static website
- Adapting the endpoint formatting to REST standars
- Use Bcrypt to hash user passwords to a secure encryption when stored
- Using composition pattern to create pieces of reusable code as components while also avoiding components that are too cluttered with passed props and conditional rendering depending on those props
- Give UI a more professional look
- Improve loading image times on production
- Upload images on DB instead of Backend https://www.geeksforgeeks.org/upload-and-retrieve-image-on-mongodb-using-mongoose/#:~:text=So%20for%20storing%20an%20image,in%20the%20form%20of%20arrays.
- Make styled-components share more properties between components
- Comment, CommentBody, CommentForm and PostPreview have too many props, refactor them into smaller components and use them as children to those components mentioned
- Refactor to use less and more reusable code (composition, render props, custom hooks)
- Form can be composed from a root Form component that holds the shared JSX and State
TODO
-->