Skip to content

Repository files navigation

uni-link

GitHub Stars Issues Last commit Commits (last month) License: MIT

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.

Tech Stack

Frontend (Vue)

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

Backend (Java)

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

Project Structure

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)

Domain Contexts

  • 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

Getting Started

Prerequisites

Frontend

  • Node.js 20+

Backend

  • Java 25+
  • PostgreSQL
  • Redis

Configuration

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

Build & Run

Frontend

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:e2e

Backend

cd 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 check

License

Licensed under the MIT License.

Copyright (c) 2026 Ha Duy Khanh

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages