A full-stack blog application built with Flutter frontend and microservice backend architecture. The application provides comprehensive blog management features including user authentication, blog creation, commenting, and social interactions.
The project follows a microservice architecture with three main services:
- User Service (Node.js + TypeScript + MongoDB)
- Blog Service (Node.js + TypeScript + PostgreSQL)
- Media Service (Go + Cloudinary)
- Flutter Client (Dart + Flutter)
- Flutter - Cross-platform mobile framework
- BLoC Pattern - State management
- Auto Route - Navigation
- Dio - HTTP client
- Injectable - Dependency injection
- Freezed - Data classes generation
- Node.js + TypeScript
- Express.js - Web framework
- MongoDB - Database
- Mongoose - ODM
- JWT - Authentication
- Redis - Caching
- RabbitMQ - Message queuing
- Node.js + TypeScript
- Express.js - Web framework
- PostgreSQL - Database
- Neon Database - Serverless PostgreSQL
- Redis - Caching
- RabbitMQ - Message queuing
- Google GenAI - AI content generation
- Go - Programming language
- Fiber - Web framework
- Cloudinary - Image storage and processing
- JWT - Authentication
- User registration and login
- Email verification with OTP
- Password reset functionality
- Profile management
- Avatar upload
- User search and discovery
- Follow/Unfollow system
- Create and edit blog posts
- Rich text editor with HTML support
- Image upload for blog posts
- Category management
- Blog search and filtering
- Pagination support
- AI-powered content generation
- Like/Unlike blog posts
- Save/Unsave blog posts
- Comment system
- Comment likes/dislikes , delete
- User profiles with statistics
- Real-time caching with Redis
- Message queuing with RabbitMQ
- JWT-based authentication
- File upload with Cloudinary
blog-app/
├── blog_client/ # Flutter mobile app
│ ├── lib/
│ │ ├── core/ # Core utilities and services
│ │ ├── features/ # Feature-based modules
│ │ └── main.dart
│ └── pubspec.yaml
├── services/
│ ├── user/ # User management service
│ │ ├── src/
│ │ │ ├── controllers/
│ │ │ ├── middleware/
│ │ │ ├── model/
│ │ │ ├── routes/
│ │ │ └── utils/
│ │ └── package.json
│ ├── blog/ # Blog management service
│ │ ├── src/
│ │ │ ├── controllers/
│ │ │ ├── middleware/
│ │ │ ├── routes/
│ │ │ └── utils/
│ │ └── package.json
│ └── media/ # Media upload service
│ ├── internal/
│ ├── config/
│ └── main.go
POST /api/v1/users/register- Register new user accountPOST /api/v1/users/login- User login with email/passwordPOST /api/v1/users/check-registration- Check if email is already registeredPOST /api/v1/users/verify-email- Verify email with OTPPOST /api/v1/users/resend-verification-otp- Resend email verification OTP
POST /api/v1/users/forgot-password- Request password resetPOST /api/v1/users/verify-password-reset-otp- Verify password reset OTPPOST /api/v1/users/resend-password-reset-otp- Resend password reset OTPPOST /api/v1/users/reset-password- Reset password with OTPPATCH /api/v1/users/change-password- Change password (authenticated)
GET /api/v1/users/:id- Get user profile by IDPATCH /api/v1/users- Update user profilePATCH /api/v1/users/avatar- Update user avatarGET /api/v1/users/profile-stats/:id- Get user profile statisticsGET /api/v1/users- Search usersPOST /api/v1/users/profiles- Get multiple user profilesDELETE /api/v1/users- Delete user account
GET /api/v1/relationships/followers/:id- Get user's followersGET /api/v1/relationships/followings/:id- Get user's followingsPOST /api/v1/relationships/follow- Follow a userPOST /api/v1/relationships/unfollow- Unfollow a user
POST /api/v1/blogs- Create new blog postGET /api/v1/blogs/filter- Get blogs with filtering, pagination, and searchGET /api/v1/blogs/:id- Get blog details by IDPATCH /api/v1/blogs/:id- Update blog postDELETE /api/v1/blogs/:id- Delete blog postGET /api/v1/blogs/my-blogs/:id- Get user's own blogsGET /api/v1/blogs/saved-blogs/:id- Get user's saved blogsGET /api/v1/blogs/user-blogs-count/:id- Get user's blog count
POST /api/v1/blogs/upvote-blog- Like/upvote a blogDELETE /api/v1/blogs/unupvote-blog- Unlike/unupvote a blogPOST /api/v1/blogs/save-blog- Save blog for laterDELETE /api/v1/blogs/unsave-blog- Remove saved blog
POST /api/v1/blogs/category- Create new categoryGET /api/v1/blogs/categories- Get all categories
POST /api/v1/blogs/ai-title- Generate AI-powered blog titlePOST /api/v1/blogs/ai-short-desc- Generate AI short descriptionPOST /api/v1/blogs/ai-desc- Generate AI full description
POST /api/v1/comments- Create comment on blogGET /api/v1/comments/:id- Get comments for blogPOST /api/v1/comments/upvote- Like/upvote a commentDELETE /api/v1/comments/unupvote- Unlike/unupvote a commentDELETE /api/v1/comments- Delete comment
GET /health- Health check endpointPOST /api/v1/media/avatar-upload- Upload user avatar (JPG, PNG, WebP, max 5MB)POST /api/v1/media/blog-image- Upload blog image (JPG, PNG, WebP, max 5MB)
- Flutter SDK (3.8.1+)
- Node.js (18+)
- Go (1.25+)
- MongoDB
- PostgreSQL
- Redis
- RabbitMQ
- Cloudinary account
Copy the .env.example files to .env in each service directory and configure the values:
services/user/.env.example→services/user/.envservices/blog/.env.example→services/blog/.envservices/media/.env.example→services/media/.envblog_client/.env.example→blog_client/.env
- Clone the repository
git clone <repository-url>
cd blog-app- Install dependencies for each service
User Service:
cd services/user
npm install
npm run buildBlog Service:
cd services/blog
npm install
npm run buildMedia Service:
cd services/media
go mod tidy
go build -o media-service main.goFlutter Client:
cd blog_client
flutter pub get- Start the services
Start each service in separate terminals:
# User Service
cd services/user
npm run dev
# Blog Service
cd services/blog
npm run dev
# Media Service
cd services/media
./media-service
# Flutter Client
cd blog_client
flutter run- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License.

















