{"id":25215252,"url":"https://github.com/moinmn/blogotypo","last_synced_at":"2026-04-09T08:37:46.928Z","repository":{"id":276488276,"uuid":"929433492","full_name":"MoinMN/blogotypo","owner":"MoinMN","description":"Blogotypo is a feature-rich, secure, and user-friendly blogging platform built with Next.js. It allows users to create, publish, and manage blogs, with advanced features like search, filtering, sharing, and verified user authentication.","archived":false,"fork":false,"pushed_at":"2025-04-29T13:25:32.000Z","size":27676,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-12T17:05:30.821Z","etag":null,"topics":["bcrypt","blogging","bootstrap5","chartjs","farmer-motion","jodit-react","mern-stack","mongodb-atlas","next-auth","nextjs","nodemailer","react-skeleton","tailwindcss"],"latest_commit_sha":null,"homepage":"https://blogotypo.moinnaik.bio","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MoinMN.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-08T14:44:17.000Z","updated_at":"2025-04-29T13:25:36.000Z","dependencies_parsed_at":"2025-04-25T15:43:50.656Z","dependency_job_id":null,"html_url":"https://github.com/MoinMN/blogotypo","commit_stats":null,"previous_names":["moinmn/blogotypo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MoinMN/blogotypo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoinMN%2Fblogotypo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoinMN%2Fblogotypo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoinMN%2Fblogotypo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoinMN%2Fblogotypo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MoinMN","download_url":"https://codeload.github.com/MoinMN/blogotypo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MoinMN%2Fblogotypo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264804157,"owners_count":23666516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bcrypt","blogging","bootstrap5","chartjs","farmer-motion","jodit-react","mern-stack","mongodb-atlas","next-auth","nextjs","nodemailer","react-skeleton","tailwindcss"],"created_at":"2025-02-10T18:13:57.195Z","updated_at":"2026-04-09T08:37:46.922Z","avatar_url":"https://github.com/MoinMN.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🚀 Blogotypo - A Modern Next.js Blogging Platform\n\n\u003cimg src=\"https://blogotypo.moinnaik.in/assets/images/favicon.jpg\" alt=\"Blogotypo\" width=\"150\" height=\"150\"\u003e\n\n## 🌍 Live Demo\n\n🔗 **[Visit Blogotypo](https://blogotypo.moinnaik.in)** (Deployed on Vercel)\n\n---\n\n## 📖 About Blogotypo\n\n**Blogotypo** is a **feature-rich, secure, and user-friendly** blogging platform built with **Next.js**. It allows users to **create, publish, and manage blogs**, with advanced features like search, filtering, sharing, and verified user authentication.\n\n### ✅ Features:\n\n- **Anyone can create \u0026 publish blogs**\n- **NextAuth with Google \u0026 GitHub authentication**\n- **Secure password encryption using bcrypt**\n- **Full CRUD operations for blogs**\n- **Real-time blog views tracking**\n- **Blog sharing options**\n- **Recommended blogs section**\n- **Advanced search \u0026 filtering (Sort by, Blogs per Page, etc.)**\n- **Review system with ⭐⭐⭐⭐⭐ rating**\n- **Admin dashboard for managing users**\n- **User account deletion request system via `/contact`**\n- **Legal pages: Terms \u0026 Conditions, Privacy Policy, License**\n\n---\n\n## 🔥 Tech Stack\n\n| **Technology**                  | **Usage**                          |\n| ------------------------------- | ---------------------------------- |\n| **Next.js**                     | Frontend \u0026 Backend                 |\n| **MongoDB + Mongoose**          | Database for storing blogs \u0026 users |\n| **NextAuth.js**                 | Authentication (Google \u0026 GitHub)   |\n| **Redux \u0026 Redux Toolkit**       | State management \u0026 global state    |\n| **Jodit Editor**                | Rich text editor for writing blogs |\n| **Cloudinary**                  | Upload \u0026 store images              |\n| **bcrypt**                      | Secure password hashing            |\n| **Nodemailer**                  | Email notifications                |\n| **Chart.js + React Chart.js 2** | Graphical blog statistics          |\n| **Framer Motion**               | Smooth animations                  |\n| **Bootstrap \u0026 Tailwind CSS**    | Responsive UI design               |\n| **Docker \u0026 Docker Compose**     | Containerization \u0026 Orchestration   |\n| **Vercel**                      | Hosting \u0026 Deployment               |\n\n---\n\n## 🚀 Installation \u0026 Setup\n\n### **Option 1: Local Development (Standard Setup)**\n\n#### **1️⃣ Clone the Repository**\n\n```bash\ngit clone https://github.com/MoinMN/blogotypo.git\ncd blogotypo\n```\n\n#### **2️⃣ Install Dependencies**\n\n```bash\nnpm install\n```\n\n#### **3️⃣ Set Up Environment Variables**\n\nCreate a `.env` file and add the following:\n\n```env\nNEXT_PUBLIC_NEXTAUTH_URL=http://localhost:3000\nMONGODB_URI=your-mongodb-uri\nNEXTAUTH_SECRET=your-nextauth-secret\nGOOGLE_CLIENT_ID=your-google-client-id\nGOOGLE_CLIENT_SECRET=your-google-client-secret\nGITHUB_CLIENT_ID=your-github-client-id\nGITHUB_CLIENT_SECRET=your-github-client-secret\nSMTP_HOST=your_smtp_host\nSMTP_USER=your_smtp_email_id\nSMTP_PASS=your_smtp_password\nCLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name\nCLOUDINARY_API_KEY=your_cloudinary_api_key\nCLOUDINARY_API_SECRET=your_cloudinary_api_secret\n```\n\n#### **4️⃣ Run the Development Server**\n\n```bash\nnpm run dev\n```\n\nNow, open **http://localhost:3000** in your browser.\n\n---\n\n### **Option 2: Docker Setup (Recommended for Production) 🐳**\n\nDocker makes it easy to run Blogotypo with **zero configuration**. The setup includes:\n- **Blogotypo Next.js App** (Port 3000)\n- **MongoDB Database** (Port 27017)\n- **Automatic health checks**\n- **Persistent data storage**\n\n#### **Prerequisites**\n\n- **Docker** installed ([Get Docker](https://docs.docker.com/get-docker/))\n- **Docker Compose** installed ([Get Docker Compose](https://docs.docker.com/compose/install/))\n\n#### **1️⃣ Clone the Repository**\n\n```bash\ngit clone https://github.com/MoinMN/blogotypo.git\ncd blogotypo\n```\n\n#### **2️⃣ Set Up Environment Variables**\n\nCreate a `.env` file with the following configuration:\n\n```env\n# Next.js \u0026 NextAuth\nNEXT_PUBLIC_NEXTAUTH_URL=http://localhost:3000\nNEXTAUTH_SECRET=your-nextauth-secret\n\n# MongoDB (Docker)\nMONGODB_URI=mongodb://admin:admin@mongodb:27017/Blogotypo?authSource=admin\n\n# Google OAuth\nGOOGLE_CLIENT_ID=your-google-client-id\nGOOGLE_CLIENT_SECRET=your-google-client-secret\n\n# GitHub OAuth\nGITHUB_CLIENT_ID=your-github-client-id\nGITHUB_CLIENT_SECRET=your-github-client-secret\n\n# SMTP Configuration\nSMTP_HOST=your_smtp_host\nSMTP_USER=your_smtp_email_id\nSMTP_PASS=your_smtp_password\n\n# Cloudinary\nCLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name\nCLOUDINARY_API_KEY=your_cloudinary_api_key\nCLOUDINARY_API_SECRET=your_cloudinary_api_secret\n```\n\n\u003e **📝 Note:** The MongoDB URI for Docker uses `mongodb://admin:admin@mongodb:27017/Blogotypo?authSource=admin` where `mongodb` is the service name defined in `docker-compose.yaml`.\n\n#### **3️⃣ Build and Run with Docker Compose**\n\n```bash\n# Build and start all services\ndocker compose up -d\n\n# View logs\ndocker compose logs -f\n\n# Stop all services\ndocker compose down\n\n# Stop and remove volumes (⚠️ deletes all data)\ndocker compose down -v\n```\n\n#### **4️⃣ Access the Application**\n\n- **Blogotypo App:** http://localhost:3000\n- **MongoDB:** `localhost:27017` (username: `admin`, password: `admin`)\n\n#### **5️⃣ Useful Docker Commands**\n\n```bash\n# Rebuild containers after code changes\ndocker compose up -d --build\n\n# View running containers\ndocker compose ps\n\n# Access container shell\ndocker exec -it blogotypo-app sh\n\n# View MongoDB logs\ndocker compose logs mongodb\n\n# Restart services\ndocker compose restart\n\n# Stop specific service\ndocker compose stop blogotypo\n```\n\n---\n\n## 🐳 Docker Configuration Details\n\n### **Docker Architecture**\n\nThe application uses a **multi-stage Docker build** for optimization:\n\n1. **Builder Stage**: Installs dependencies and builds Next.js\n2. **Runner Stage**: Creates a minimal production image with only necessary files\n\n### **Services**\n\n| Service | Container Name | Port | Description |\n|---------|---------------|------|-------------|\n| **blogotypo** | `blogotypo-app` | 3000 | Next.js application |\n| **mongodb** | `blogotypo-db` | 27017 | MongoDB database |\n\n### **Volumes**\n\n- `mongo-data`: Persistent storage for MongoDB data (survives container restarts)\n\n### **Networks**\n\n- `blogotypo-network`: Bridge network for inter-container communication\n\n### **Health Checks**\n\nBoth services include health checks to ensure reliability:\n- **Blogotypo**: Checks `/api/health` endpoint every 30s\n- **MongoDB**: Runs `mongosh` ping every 10s\n\n---\n\n## 🛠 Features \u0026 Functionalities\n\n### 📝 **Blog System**\n\n- **Create, Read, Update, Delete (CRUD) Blogs**\n- **Rich Text Editing with Jodit**\n- **Blog View Count Tracking**\n- **Review System with ⭐⭐⭐⭐⭐ Ratings**\n- **Share Blogs on Social Media**\n- **Search \u0026 Advanced Filtering**\n\n### 🔒 **User Authentication**\n\n- **Login with Google \u0026 GitHub (NextAuth.js)**\n- **Secure Password Encryption (bcrypt)**\n- **Verified Users System**\n- **Users Can Request Account Deletion**\n\n### 📊 **State Management**\n\n- **Redux \u0026 Redux Toolkit for global state management**\n- **Centralized store for user, blog, and app state**\n- **Async thunks for API calls and side effects**\n- **Persistent state management for enhanced UX**\n\n### 🛠 **Admin Features**\n\n- **Manage Users (Delete \u0026 Set Verified Status)**\n- **No Data Update Permissions for Admins**\n\n### 📊 **Analytics \u0026 Reporting**\n\n- **Graphical Stats on Blog Performance (Chart.js)**\n- **Sort \u0026 Filter Blogs Easily**\n\n### 📜 **Legal \u0026 Privacy Features**\n\n- **[Terms \u0026 Conditions](https://blogotypo.moinnaik.in/docs/term-and-conditions), [Privacy Policy](https://blogotypo.moinnaik.in/docs/privacy-policy), and [License](https://blogotypo.moinnaik.in/docs/license) Pages**\n- **GDPR-Compliant User Data Handling**\n\n---\n\n## 🎨 Screenshots\n\n| **Homepage**                                         | **Blog Editor**                                          | **Admin Dashboard**                                        |\n| ---------------------------------------------------- | -------------------------------------------------------- | ---------------------------------------------------------- |\n| ![Home Page](https://github.com/user-attachments/assets/1b63331e-d2ec-40cf-bac0-3d6e1d59247f) | ![Blog Editor](https://github.com/user-attachments/assets/2df6ab64-4078-4593-99c4-8bde89ee1027) | ![Admin Dashboard](https://github.com/user-attachments/assets/27de586d-ee37-477d-b7a9-8bee3832e432) |\n\n---\n\n## 🚀 Deployment\n\n### **Vercel Deployment**\n\nDeployed on **Vercel**. To deploy your own version:\n\n```bash\nvercel deploy\n```\n\n### **Docker Deployment (VPS/Cloud)**\n\nTo deploy on a VPS or cloud server:\n\n1. **Install Docker and Docker Compose** on your server\n2. **Clone the repository** and set up `.env` file\n3. **Run Docker Compose:**\n\n```bash\ndocker compose up -d\n```\n\n4. **Configure reverse proxy** (Nginx/Caddy) for HTTPS\n5. **Update OAuth redirect URLs** in Google/GitHub console\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome!\n\n1. **Fork the repository**\n2. **Create a new branch** (`feature/my-feature`)\n3. **Commit your changes** (`git commit -m \"Added a new feature\"`)\n4. **Push to the branch** (`git push origin feature/my-feature`)\n5. **Submit a pull request**\n\n---\n\n## 🐛 Troubleshooting\n\n### **Docker Issues**\n\n**Problem:** Port 3000 or 27017 already in use\n```bash\n# Find and kill the process using the port\nlsof -ti:3000 | xargs kill -9\nlsof -ti:27017 | xargs kill -9\n```\n\n**Problem:** MongoDB connection failed\n- Ensure MongoDB service is healthy: `docker-compose ps`\n- Check MongoDB logs: `docker-compose logs mongodb`\n- Verify `MONGODB_URI` in `.env` matches Docker Compose configuration\n\n**Problem:** Changes not reflected after rebuild\n```bash\n# Clear Docker cache and rebuild\ndocker-compose down\ndocker system prune -a\ndocker-compose up -d --build\n```\n\n---\n\n## 📜 License\n\n**Blogotypo** is licensed under its own **custom license**. See the full [LICENSE](https://blogotypo.moinnaik.in/docs/license) for details.\n\n---\n\n## 🛠 Need Help?\n\n📧 **Contact:** [pixelmint.mail@gmail.com](mailto:pixelmint.mail@gmail.com)  \n🌐 **Website:** [https://blogotypo.moinnaik.in](https://blogotypo.moinnaik.in)  \n📣 **Follow us on Socials:** [Twitter](https://x.com/MoinMN5) | [LinkedIn](https://www.linkedin.com/in/moinnaik/) | [Instagram](https://instagram.com/im_moin45)\n\n---\n\n⭐ **Star this repo if you found it useful!** ⭐\n\n---\n\n## 📊 Project Stats\n\n![GitHub stars](https://img.shields.io/github/stars/MoinMN/blogotypo?style=social)\n![GitHub forks](https://img.shields.io/github/forks/MoinMN/blogotypo?style=social)\n![License](https://img.shields.io/badge/license-Custom-blue.svg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoinmn%2Fblogotypo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoinmn%2Fblogotypo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoinmn%2Fblogotypo/lists"}