This is a social network application built to explore and learn various modern web technologies. The application allows users to:
- Create user accounts
- Post updates and content
- Follow other users
- View a curated feed of posts
- Receive notifications for new followers and posts
Some of the following parts are still in progress, such as the uploading of posts, sending of notifications and developing the frontend.
As I am still working on developing the frontend, I haven't had time to deploy the whole project. Below is a demo video showcasing the current frontend with full backend integration:
Social.Network.App.Demo.mp4
Below is a high-level system design diagram that outlines the key components of the application architecture:
This project is designed to leverage a wide range of technologies, including:
- Backend: Golang
- Databases: PostgreSQL, MongoDB, Neo4j Graph Database
- Caching and Queuing: Redis, Kafka
- API Gateway: Kong API Gateway
- Cloud Storage and Delivery: Amazon S3, AWS CloudFront (unimplemented)
- Real-time Notifications: Firebase (unimplemented)
- Containerization: Docker Compose
- Inter-service Communication: gRPC
- Prefetching and Caching: Efficient feed generation using caching mechanisms to improve user experience.
- Event-driven Architecture: Kafka is used to process events such as:
- Generating user feeds when a post is created or a user is followed.
- Updating user post/following counts asynchronously
- Sending notifications when users follow each other or create posts.
To run the project locally using Docker Compose, follow these steps:
- Docker and Docker Compose installed on your machine.
- Ensure you have the required environment variables for services like PostgreSQL, MongoDB, Neo4j, Redis.
-
Clone the repository:
git clone https://github.com/ebilsanta/social-network.git cd social-network -
Set up environment variables such as service ports, database URLs, Kafka configurations and rename the
.env.samplefile to.env -
Build and start the services with Docker Compose:
docker-compose up --build
-
Access the backend APIs using the postman file provided.