MathMatter is an interactive web application designed to make learning mathematics engaging, accessible, and intuitive. Whether you're a student strengthening core concepts or a math enthusiast solving advanced problems, MathMatter provides a dynamic platform with practice tools, problem sets, visualizations, and personalized progress tracking. With real-time feedback and a clean UI, it simplifies complex topics and fosters confident learning in a fun, gamified environment.
(https://mathmatter-by-shahrin-tarin.web.app/)
- Responsive Design: A clean, user-friendly layout with sections for a header, and footer.Seamless browsing with React and React Router.
- Top Blogs – Retrieve the top 10 blogs based on the word count of the long description.
- Get All Blogs – Filter blogs by
categoryortitleusing query parameters. - Long Description's length Based Ranking: Blogs sorted by length of long description for easy discovery.
- User-Generated Blogs: Upload Blogs with images, description, and categories.
- Interactive Blog Cards:comment, edit, or delete Blogs with real-time updates.
- Personalized Blog Collections: Filter Blogs by Blog's Title.
- React-motion:Motion increase the user experience.
- Add Comment – Post comments on individual blogs.
- View Comments – You can see all comments for a specific blog.
- Add to Wishlist – Add a blog to a user’s wishlist (duplicate prevention included).
- Get Wishlist – View all wishlist items for a specific user (requires JWT verification).
- Delete Wishlist Item – Remove a specific item from the wishlist by ID.
- React: Core library for building UI components.
- React Router: Enables single-page app routing for quizzes, profiles, etc.
- react-dom: Supports rendering React components in the DOM (included with Create React App).
- sweet-alert2: Provides a customizable, modern popup library for alerts and confirmations in web applications. Easily integrated with React to enhance user interactions with styled, animated dialogs, replacing basic browser alerts.
- react-icons: Offers a collection of popular icon libraries (e.g., Font Awesome, Material Icons) as React components. Simplifies adding scalable, customizable icons to React apps, enhancing UI with minimal setup.
- Framer Motion: Adds sleek transitions and UI animations.
- styled-components:: Facilitates reusable, scoped CSS styling for recipe cards and buttons, ensuring maintainable and consistent design (npm install styled-components).
src/
├── assets/ # Static assets
├── components/ # Reusable components
├── contexts/ # Context providers
├── hooks/ # Custom hooks
├── pages/ # Page components
├── routes/ # App routing
- Node.js (v14 or later)
- MongoDB Atlas account
- Firebase project with Service Account
-
Clone the repository
git clone <repository-url> cd project-directory
-
Install dependencies
npm install
-
Set up environment variables Create a
.envfile in root directory with these variables:PORT=3000 DB_USER=your_mongodb_username DB_PASS=your_mongodb_password JWT_SECRET_KEY=your_jwt_secret FB_SERVICE_KEY=your_firebase_service_account_base64 -
Run the server
npm start # or for development npm run dev -
Test the server The server should be running at:
http://localhost:3000
(https://assignment-11-server-two-drab.vercel.app/)
| Tech | Usage |
|---|---|
| Node.js | Backend runtime |
| Express.js | Web server framework |
| MongoDB | Database (with collections: blogs, wishlist, comments) |
| Firebase Admin | JWT authentication & decoding |
| Cookie-Parser | JWT cookie handling |
| CORS | Cross-origin resource sharing |
verifyJWT: Ensures requests have a valid Firebase ID token and attaches the decoded email to the request.- Applies to secure endpoints like
GET /wishlist/:emailandPOST /blogs.
| Method | Route | Description |
|---|---|---|
| GET | /blogs |
Get all blogs with optional filters |
| GET | /blogs/:id |
Get a single blog by ID |
| POST | /blogs |
Add a new blog (JWT required) |
| PUT | /blogs/:id |
Update a blog |
| GET | /recentblogs |
Get the 6 latest blogs |
| GET | /topblogs |
Get top 10 blogs (by description size) |
| GET | /wishlist/:email |
Get user’s wishlist (JWT required) |
| POST | /wishlist/:blogId |
Add to wishlist (prevents duplicates) |
| DELETE | /wishlist/:id |
Delete wishlist item |
| POST | /comment/:blogId |
Add a comment to a blog |
| GET | /comment/:blogId |
View all comments for a blog |