Folder Structure
Edit
frontend/
βββ public/ # Static assets
βββ src/
β βββ assets/ # Images and icons
β βββ components/ # Reusable UI components (buttons, cards, etc.)
β βββ pages/ # Route-level components (Dashboard, Home, CreateBlog)
β βββ redux/ # Redux store setup and slices
β βββ router/ # React Router v7 setup
β βββ styles/ # Tailwind & global styles
β βββ App.jsx # Main app file
β βββ main.jsx # Entry point
βββ .eslintrc.cjs # ESLint configuration
βββ postcss.config.cjs # PostCSS configuration
βββ tailwind.config.cjs # TailwindCSS configuration
βββ vite.config.js # Vite config with plugins
βββ package.json
π₯ Dependencies
"dependencies": {
"@radix-ui/react-avatar": "^1.1.10",
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-dropdown-menu": "^2.1.15",
"@radix-ui/react-label": "^2.1.7",
"@radix-ui/react-select": "^2.2.5",
"@radix-ui/react-slot": "^1.2.3",
"@reduxjs/toolkit": "^2.8.2",
"@tailwindcss/vite": "^4.1.11",
"axios": "^1.10.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"jodit-react": "^5.2.19",
"lucide-react": "^0.523.0",
"next-themes": "^0.4.6",
"react": "^19.1.0",
"react-dom": "^19.1.0",
"react-icons": "^5.5.0",
"react-redux": "^9.2.0",
"react-router-dom": "^7.6.2",
"redux-persist": "^6.0.0",
"sonner": "^2.0.5",
"tailwind-merge": "^3.3.1",
"tailwindcss": "^4.1.11"
}
π οΈ Dev Dependencies
"devDependencies": {
"@eslint/js": "^9.29.0",
"@types/react": "^19.1.8",
"@types/react-dom": "^19.1.6",
"@vitejs/plugin-react": "^4.5.2",
"eslint": "^9.29.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.20",
"globals": "^16.2.0",
"vite": "^7.0.0"
}
π Live Demo
π‘ Hosted on: [Link](https://mern-blog-ha28.onrender.com)
βοΈ Tech Stack & Dependencies β Frontend Libraries
React 19: UI library
Redux Toolkit: Global state management
React Router DOM v7: Client-side routing
Tailwind CSS 4: Utility-first CSS framework
Jodit React: Rich text editor for blogs
Sonner: Toast notifications
Lucide React: Icons
React Icons: Additional icons
Axios: API calls
Radix UI: Accessible components
React Redux: Hooks for Redux
Redux Persist: Persist Redux store
Class Variance Authority / clsx / tailwind-merge: Tailwind class handling
π οΈ Dev Tools
Vite 7: Next-gen frontend build tool
ESLint: Linting for clean code
@vitejs/plugin-react: React support in Vite
TypeScript types: For React & DOM
π§ Installation & Setup Clone the Repository
cd frontend
Install Dependencies
npm install
Start the Development Server
npm run dev
Build for Production
npm run build
Preview Production Build
npm run preview
π Features
β
Blog Creation & Editing
β
Rich Text Editing using Jodit
β
Category-based Blog Filtering
β
Dark/Light Mode Support
β
Toast Notification System
β
Responsive Dashboard & Routes
β
Modern UI/UX with Radix & Tailwind
β
Redux Persist for session state
π Backend Folder Structure
bash
Copy
Edit
backend/
βββ config/
β βββ db.js # MongoDB connection
βββ controllers/
β βββ authController.js
β βββ blogController.js
βββ middlewares/
β βββ authMiddleware.js # JWT verify
β βββ errorMiddleware.js
βββ models/
β βββ Blog.js
β βββ User.js
βββ routes/
β βββ authRoutes.js
β βββ blogRoutes.js
βββ uploads/ # If you use Multer for image uploads
βββ utils/
β βββ sendEmail.js # Nodemailer or Resend API
βββ .env
βββ app.js # Express app setup
βββ server.js # Starts server (listens on port)
βββ package.json
β Example .env file
PORT=5000
MONGO_URI=mongodb+srv://your_db
JWT_SECRET=yourSecretKey
COOKIE_SECRET=yourCookieKey
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
EMAIL_API_KEY=your_smtp_key_or_resend_key
***package.json Dependencies
json
Copy
Edit
"dependencies": {
"bcryptjs": "^2.4.3",
"cookie-parser": "^1.4.6",
"cors": "^2.8.5",
"dotenv": "^16.3.1",
"express": "^4.18.2",
"express-validator": "^6.15.0",
"jsonwebtoken": "^9.0.0",
"mongoose": "^8.3.4",
"morgan": "^1.10.0",
"multer": "^1.4.5-lts.1",
"nodemailer": "^6.9.8"
},
"devDependencies": {
"nodemon": "^3.1.0"
}