Loading repository data…
Loading repository data…
hlibstrochkovskyi / repository
A full-stack Trello clone built with Java (Spring Boot) and React (Zustand). Features JWT auth, robust Drag & Drop, and is fully containerized with Docker/Nginx.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
This repository contains a full-stack, production-ready clone of Trello. The project was built as a personal portfolio piece to demonstrate a deep understanding of modern backend (Java/Spring) and frontend (React) architecture, including robust API design, JWT security, complex state management, and full containerization with Docker.
The core feature is a stable, "ironclad" Drag & Drop (DND) system for both tasks and columns, which correctly handles database transactions and position re-indexing to prevent concurrency issues.
The application is architected as a multi-container Docker application.
| Service | Technology | Purpose |
|---|---|---|
| Backend | Java 17 | Core language for the backend API. |
| Spring Boot 3 | Framework for building the REST API. | |
| Spring Security (JWT) | JWT-based authentication and endpoint authorization. | |
| Spring Data JPA | Data persistence and ORM. | |
| Frontend | React 18 | UI library for building the single-page application. |
| Vite | Frontend build tooling and dev server. | |
| Zustand | Lightweight state management. | |
| @hello-pangea/dnd |
| The core library for all Drag & Drop functionality. |
| Axios | HTTP client with interceptors for attaching JWT tokens. |
| Database | PostgreSQL 15 | Relational database for storing all user data. |
| Infra | Docker & Docker Compose | Full containerization for all three services. |
| Nginx | Serves the static React build and proxies API requests. |
title and description.This project's main challenge was solving the UNIQUE constraint violation that occurs during DND re-ordering in PostgreSQL.
The solution implemented is:
UNIQUE constraints on position are set to DEFERRABLE INITIALLY DEFERRED. This tells PostgreSQL to only check for duplicates at the end of the transaction, not after every UPDATE statement.TaskService and TaskColumnService load the entire list, re-order it in Java, and iterate (0, 1, 2...) to re-assign all positions. This is extremely robust and fixes any "gaps" in position data.This entire application (Backend, Frontend, DB) can be launched with one command.
80, 5432, and 8080 are free on your machine.Clone the repository:
git clone [https://github.com/hlibstrochkovskyi/trello-clone.git](https://github.com/hlibstrochkovskyi/trello-clone.git)
cd trello-clone
Build and run all services: This command will:
.jar file using a Maven container.postgres_db, trello_backend, and trello_frontend (Nginx) containers.docker-compose up --build
Open the app: Once the logs show that all services are running, open your browser and go to:
http://localhost
This section showcases the application's features.
Create, view, and delete boards. Includes logout functionality.

Drag & Drop columns and tasks. Create new columns and tasks.

Click any task to open the modal. Edit title and description.
