Classic web-based online chat application with rooms, contacts, file sharing, and real-time presence.
- Java 21, Spring Boot 4.0.5, Spring MVC
- PostgreSQL 17, Redis 7
- HTMX 2.0 + Thymeleaf + Bootstrap 5.3 (WebJars, no Node.js)
- STOMP over WebSocket for real-time messaging
- Spring Security (session-based auth, BCrypt)
- Spring Session Redis (multi-device support)
- Liquibase for database migrations
- Testcontainers for integration tests
docker compose up --buildStart infrastructure only:
make infraRun the app from your IDE or:
make run| Command | Description |
|---|---|
make build |
Build without tests |
make run |
Run with Spring Boot |
make test |
Run all tests (Testcontainers) |
make infra |
Start Postgres + Redis only |
make docker-up |
Build and start all containers |
make docker-down |
Stop containers |
make docker-logs |
Tail app container logs |
make clean |
Clean build + remove volumes |
Key environment variables (with defaults for local dev):
| Variable | Default | Description |
|---|---|---|
DB_HOST |
localhost |
PostgreSQL host |
DB_PORT |
5432 |
PostgreSQL port |
DB_NAME |
yac |
Database name |
DB_USER |
yac |
Database user |
DB_PASSWORD |
yac |
Database password |
REDIS_HOST |
localhost |
Redis host |
REDIS_PORT |
6379 |
Redis port |
REMEMBER_ME_KEY |
change-me-in-production |
Secret for remember-me tokens |
WEBSOCKET_ALLOWED_ORIGINS |
http://localhost:8080 |
Comma-separated allowed WebSocket origins |
FILE_STORAGE_PATH |
./file-storage |
Directory for uploaded files |