Programmer's Social Hub is a social media platform designed for programmers to share their knowledge, tips, tricks, and code snippets. Users can create and engage with posts, follow other users, comment on discussions, and interact in a vibrant community dedicated to programming and software development.
Check out our demo video and presentation slides to get a better understanding of Programmer's Social Hub:
- User Profiles: Create and manage developer profiles with features to follow/unfollow other users, showcase skills, and highlight areas of interest.
- Posts and Code Sharing: Share programming tips, tricks, tutorials, errors, and code snippets using a built-in code editor.
- Real-time Notifications: Get real-time updates on comments, reactions, and followers.
- Image Uploads: Support for image uploads with cloudinary CDN integration.
- Search: Powerful search functionality with topic and profile suggestions.
- Microservices Architecture: Scalable architecture with independent services for security, user management, posts, notifications, and more.
The system is built using a microservices architecture, allowing each component to scale independently and communicate efficiently. The key components include:
- Frontend: Developed using Next.js for server-side rendering and fast client-side interactivity.
- Backend: Built with .NET using a microservices approach to ensure modularity and scalability.
- Databases: Uses MySQL for relational data and MongoDB for non-relational data storage.
- Message Queue: Integrates RabbitMQ for asynchronous communication between services.
- gRPC: Used for efficient inter-service communication between microservices.
- API Gateway: Managed by Kong to secure and manage the APIs.
The architecture of Programmer's Social Hub is designed to be scalable, resilient, and efficient, leveraging modern technologies and best practices. Below is a high-level overview of the system architecture:
The Security Service is responsible for authenticating users and ensuring that all interactions on the platform are secure. It uses JSON Web Tokens (JWT) for user authentication and authorization, with asymmetric key pairs to sign and verify tokens.
- Key Features
- User registration and login.
- Token-based authentication with JWT.
- Secure data exchange using asymmetric encryption.

The User Management Service handles all operations related to user profiles and their interactions with other users. It is built using .NET and MongoDB to store user data efficiently.
- Key Features
The Post Service is where users can create, edit, and delete their posts. This service also handles comments, reactions (likes, dislikes), and saved posts. It uses MongoDB to store post-related data, making it easy to manage and retrieve.
- Key Features:
- Create and manage posts, comments, and reactions.
- Save favorite posts for later viewing.
- Integrated code editor for sharing code snippets for Posts and Comments.

The Notification Service is designed to provide real-time updates to users using SignalR in .NET Core. It notifies users about new followers, comments, reactions, and other activities happening on their posts.
- Key Features:
- Real-time push notifications for various user activities by using Signalr.
- Integration with RabbitMQ for asynchronous event handling.
- gRPC communication with other services for user data retrieval.

The Search and Filter Service provides a powerful search engine that allows users to find posts, topics, and profiles quickly.
- Key Features:
The API Gateway uses Kong to manage and secure all incoming API requests. It acts as a reverse proxy, routing client requests to the appropriate microservices and ensuring secure communication.
- Key Features:
- Centralized API management and traffic control.
- Security and rate-limiting for APIs.
- Load balancing and request routing.
- Next.js: React framework for server-side rendering and static site generation.
-
.NET: Backend framework for building the RESTful APIs and microservices.

-
MongoDB: Non-relational database for managing unstructured data like posts and comments. The following collections are used:
-
MySQL: Relational database for handling structured data like user profiles.
- RabbitMQ: Message broker for handling asynchronous tasks and communication.
- gRPC: Protocol for fast inter-service communication.
- Docker: Containerization of services for consistent deployment.
- Kubernetes: Orchestrates containerized services for automated deployment and scaling.
- Kong: API Gateway for managing and securing APIs.
- JWT (JSON Web Token): For authentication and authorization of users.
- Asymmetric Keys: Uses public/private keys for secure data exchange and JWT signing.
- Docker and Docker Compose
- Kubernetes for orchestration
- .NET SDK
- Node.js and npm/yarn for the frontend
- MySQL and MongoDB for databases
- RabbitMQ for message queue setup
-
Clone the Repository
git clone https://github.com/your-username/programmers-social-hub.git cd programmers-social-hub -
Set Up Environment Variables Create a
.envfile in the root directory and add the necessary environment variables as specified in.env.example. -
Start Services with Docker Compose
docker-compose up -d
-
Apply Kubernetes Configurations
kubectl apply -f k8s/
-
Run Database Migrations
dotnet ef database update
-
Install Frontend Dependencies
cd frontend npm install npm run dev
The application is divided into several microservices, each responsible for a specific domain:
- User Service: Manages user profiles and authentication.
- Post Service: Handles creation, editing, and deletion of posts.
- Notification Service: Manages real-time notifications.
- Search Service: Provides search functionality across posts and profiles.
Security is a top priority, and the application employs several measures to ensure data protection:
- JWT Authentication: Secure user authentication and authorization.
- Data Encryption: Sensitive data is encrypted using industry-standard algorithms.
- Rate Limiting: Protects against abuse by limiting the number of requests a user can make.
We welcome contributions from the community! To contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature-branch). - Make your changes.
- Commit your changes (
git commit -m 'Add new feature'). - Push to the branch (
git push origin feature-branch). - Open a pull request.
This project is licensed under the MIT License. See the LICENSE file for details.







