Skip to content

Live collaboration tool built with Go backend and Next.js, Typescript, & Tailwind frontend

Notifications You must be signed in to change notification settings

dancewithtruth/boards

Repository files navigation

Boards

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).

Boards

Technology Stack

Frontend

Backend

Storage / DB

Infrastructure / Cloud

  • Docker
  • Kubernetes
  • AWS: EKS, EC2, Route 53

Architecture Overview

architecture

Services

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

Relevant Blog Posts

Project Setup

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.

Development

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

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

Run Tests

make test

To Do

  • WebSocket API documentation
  • Implement mobile responsiveness
  • Implement high throughput data storage solution
  • Refactor frontend components
  • Add post voting
  • Add board duplication