Boards is a collaborative desktop web application for creating and organizing notes on a digital canvas. Boards is a demo project showcasing event-driven microservices written in Golang as well as a stateful, interactive UI built with Next.js, Tailwind, and React DnD. The containerized applicaton is orchestrated using Kubernetes and hosted on AWS. Perhaps the most interesting aspect of the application is how data is synchronized in real-time across client connections using Redis Pub-Sub and WebSocket events (create, move, edit posts).
- PostgreSQL
- sqlc
- pgx
- Golang Migrate v4
- Docker
- Kubernetes
- AWS: EKS, EC2, Route 53
No. | Service | Local | Hosted |
---|---|---|---|
1 | backend-core | http://localhost:8080 | https://api.useboards.com |
2 | backend-notification | http://localhost:8082 | |
3 | web | http://localhost:3000 | https://useboards.com |
4 | docs | http://localhost:8081 | https://docs.useboards.com |
- WebSockets Client and Hub Architecture
- Implementing Go WebSockets using TDD
- Implementing User Authentication Event
- Hashing Passwords and Authenticating Users
- Building the Posts API
- Building Frontend with Next.js & Tailwind
- Fuzzy Email Search
- E2E Implementation for User Invites
- Setting up Kubernetes
- Deploying Application Cluster to AWS
- Frontend: Grouping Posts
- Frontend: Ordering Posts
- Making Backend Server Stateless
- Creating Email Notification Service using RabbitMQ
- Implementing Email Verifications
- Using SMTP to Send Emails
Before proceeding with the project setup, please ensure that you have Docker installed on your machine.
git clone https://github.com/Wave-95/boards.git
cd boards
docker-compose up
This will start up the frontend, backend, and notification service as well as the PostgreSQL, Redis, and RabbitMQ servers on your local machine. Database migrations should automatically run when a container is created for the backend service during docker compose. If you would like to insert test data into the database, use make testdata
.
The docker-compose.yml
file loads in env vars for the server and frontend containers in their respective .env
files. Depending on the ENV
env varaible, the containers will either boot up in development or production mode. The backend uses air and the frontend uses next dev
. Feel free to rename the .env.example
files to .env
to get local development up and running.
Database migrations are run using golang-migrate
. The golang-migrate
dependency should already be available in the backend container. You can either run migrations manually via an interactive shell or use the make
commands:
make migrate-up
make migrate-down
make testdata
make migrate-create
make test
- WebSocket API documentation
- Implement mobile responsiveness
- Implement high throughput data storage solution
- Refactor frontend components
- Add post voting
- Add board duplication