PingR is a high-availability communication platform developed as a Software Engineering flagship project. Heavily inspired by the user experience of Discord, this release focuses on establishing a robust multidirectional communication flow and resolving critical identity management issues in multi-tenant environments.
💡 Engineering Decision: To simulate real-time interaction, PingR implements a Short Polling strategy (5s cycles). This choice ensures Client/Server state consistency while operating on a standard, secure, and scalable REST API infrastructure.
📋 The complete functional specifications and system analysis are available in the /analyse directory of this repository.
| Desktop Interface Design | Component & User Flow Architecture |
|---|---|
![]() |
![]() |
Software architecture defines the interactions between users and system components.
| Use Case Diagram | Sequence Diagram | Class Diagram |
|---|---|---|
![]() |
![]() |
![]() |
Database modeling, from conceptual to logical levels.
| Conceptual Data Model (MCD) | Logical Data Model (MLD) |
|---|---|
![]() |
![]() |
The project follows a rigorous N-Tier Architecture to decouple concerns:
- Controller Layer: REST endpoints exposure and payload validation via Spring Web.
- Service Layer: Business logic, transaction management, and security checks.
- Repository Layer: Data Access via Hibernate and Spring Data JPA.
| Layer | Technologies |
|---|---|
| Backend Framework | Spring Boot 3.5.7 |
| Application Server | Apache Tomcat 10.1.x (Embedded) |
| ORM & Persistence | Hibernate (JPA), PostgreSQL 18.1 |
| Security | Auth JWT (HS256), BCrypt, DTO Pattern |
The infrastructure is fully containerized to ensure portability and environment parity.
| Service | External Port | Internal Port | Role |
|---|---|---|---|
| Frontend (dev) | 5173 |
5173 |
React UI (Vite) |
| Backend API | 8080 |
8080 |
Spring Boot API |
| Database | 5432 |
5432 |
PostgreSQL Server |
| Adminer | 8081 |
8080 |
DB Management GUI |
Containerization: The entire ecosystem is orchestrated via Docker Compose, ensuring "one-command" deployment and environment isolation.
| Client Interface | Session Storage (JWT Management) |
|---|---|
![]() |
![]() |
Pro Tip: I migrated from
localStoragetosessionStorageto ensure strict browser tab isolation. Sensitive tokens are automatically cleared when the tab is closed.
# Clone the repository
git clone https://github.com/MatthieuClaessens/PingR.git
# Navigate to project
cd PingR
# Spin up the entire stack via Docker
docker-compose up --build







