A social/thread-style platform with a Vue 3 frontend and Java 25/Spring Boot 4 backend. The system follows domain-driven design and is organized as a Gradle multi-module project with bounded contexts for identity, profiles, threads, chat, hashtags, and notifications.
| Layer | Technologies |
|---|---|
| Framework | Vue 3.5, Vue Router 5 |
| State Management | Pinia 3.0 |
| UI Components | Reka UI 2.9 |
| Styling | TailwindCSS 4.2 |
| Data Fetching | TanStack Vue Query |
| Form Validation | Vee-validate, Zod |
| HTTP Client | Axios |
| Build Tool | Vite 8 |
| Language | TypeScript 6 |
| Testing | Vitest, Playwright |
| Layer | Technologies |
|---|---|
| Language | Java 25 (preview features) |
| Framework | Spring Boot 4.0.0, Spring Cloud 2025.1.1 |
| Database | PostgreSQL, Spring Data JDBC, Liquibase |
| Cache | Redis, Caffeine |
| Messaging | Kafka |
| Security | Spring Security, OAuth2, JWT (RSA) |
| API | REST, GraphQL, SpringDoc OpenAPI |
| Observability | Actuator, OpenTelemetry, Sentry |
| Quality | Checkstyle (Google style), JUnit 5, Mockito, AssertJ |
frontend/
└── vue # Vue 3 application
backend/
├── apps/
│ └── app # Main Spring Boot application
├── core/
│ ├── domain # Domain models (framework-independent)
│ └── database # JDBC persistence layer
├── libs/
│ ├── common # Shared base classes and interfaces
│ ├── utils # Utility helpers
│ ├── constant # Shared constants
│ └── infrastructure # Web, security, caching, messaging infra
├── platform/
│ ├── config # Spring Cloud Config Server
│ ├── gateway # API Gateway (planned)
│ └── discovery # Service Discovery (planned)
└── services/
├── notification # Notification service (planned)
├── realtime # Real-time/WebSocket service (planned)
├── worker # Background workers (planned)
├── scheduler # Scheduled jobs (planned)
└── media # Media/upload service (planned)
- Identity — accounts, credentials, sessions, devices, OTP, login history
- Profile — user profiles, follows, blocks, mutes
- Thread — threads, likes, reposts, bookmarks, polls, moderation
- Chat — conversations, messages, participants
- Hashtag — hashtags, relations, usage analytics
- Notification — notifications, settings, counters
- Node.js 20+
- Java 25+
- PostgreSQL
- Redis
The application uses Spring Cloud Config. Key environment variables:
| Variable | Description | Default |
|---|---|---|
DB_URL |
PostgreSQL JDBC URL | — |
DB_USERNAME |
Database username | — |
DB_PASSWORD |
Database password | — |
REDIS_HOST |
Redis host | localhost |
REDIS_PORT |
Redis port | 6379 |
CONFIG_SERVER_URI |
Config Server URL | — |
APP_PORT |
Application port | 8080 |
cd frontend/vue
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Run tests
npm run test:unit
npm run test:e2ecd backend
# Build all modules
./gradlew build
# Run the Config Server
./gradlew :platform:config:bootRun
# Run the main application
./gradlew :apps:app:bootRun
# Run tests
./gradlew checkLicensed under the MIT License.
Copyright (c) 2026 Ha Duy Khanh