Thoughts is a full-stack post-sharing platform built with a production-grade microservices architecture. Combining high-performance Go and Rust gRPC backends with a modern Next.js frontend, it provides a seamless experience for users to create, browse, and interact with posts.
- Microservices Architecture: Backend composed of modular services written in Go and Rust, using gRPC for high-performance internal communication.
- Production-Ready & HA: Fully containerized, stateless services designed for High Availability deployments on Kubernetes.
- API Gateway: Centralized Go-based HTTP gateway routing requests to the underlying internal microservices.
- Resilience: Built-in rate limiting in the gateway to protect against abuse and traffic spikes.
- Observability: Structured logging and tracing implemented across backend services for debugging and monitoring.
- Modern Frontend: Built with Next.js (App Router), React, Tailwind CSS, and DaisyUI.
| Service | Language | Description |
|---|---|---|
| apigateway | Go | API Gateway routing HTTP traffic to internal gRPC backends. |
| authservice | Rust | User authentication and session management. |
| database | PostgreSQL | Database schema, tables, and functions. |
| frontend | TypeScript | Next.js/React web application. |
| imageservice | Rust | Image upload, verification, and staging cleanup. |
| postservice | Go | Core logic for creating, liking, and reposting posts. |
| userservice | Rust | User profile and follower graph management. |
Deploy the application to your active Kubernetes cluster using the provided script:
./scripts/deploy.shThe script builds the Docker images, creates the Kubernetes namespace (thoughts by default) and resources, waits for pods to be ready, and starts a port-forward to the frontend at http://localhost:8080/. It is idempotent and safe to re-run for updates.
To remove all deployed resources and the namespace:
kubectl delete -f ./k8s -n thoughts
kubectl delete namespace thoughtsRun all unit tests across the frontend and backend microservices using the provided Makefile target:
make testLicensed under the MIT License.