# zl1nq/interlinked architecture

> Architecture diagram of the GitHub repository zl1nq/interlinked, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/zl1nq/interlinked
- Repository: https://github.com/zl1nq/interlinked

## Overview

interlinked is a Vue/Go social network. Users browse and publish feeds, follow people, interact through likes and comments, and use discovery, notifications, and direct messages; the frontend calls the Go API, whose handlers delegate domain work to services and repositories. The README documents hybrid push/pull timelines and reliable Outbox/RabbitMQ delivery. Some feature implementations were not sampled, so their documented subsystems are included without guessing internal call chains.

Main entry points: [`backend/router/router.go`](https://github.com/zl1nq/interlinked/blob/master/backend/router/router.go) (API router), [`backend/services/user_service.go`](https://github.com/zl1nq/interlinked/blob/master/backend/services/user_service.go) (User service), [`backend/services/follow_service.go`](https://github.com/zl1nq/interlinked/blob/master/backend/services/follow_service.go) (Follow service), [`backend/services/feed_service.go`](https://github.com/zl1nq/interlinked/blob/master/backend/services/feed_service.go) (Feed service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_app["Vue application<br/>[App.vue]"]
  node_views["Social pages"]
  node_api["API client<br/>[index.js]"]
end

subgraph group_identity["Accounts and relationships"]
  node_user_handler["User handlers<br/>[user_handler.go]"]
  node_user_service["User service<br/>[user_service.go]"]
  node_follow_service["Follow service<br/>[follow_service.go]"]
  node_smtp["SMTP mail"]
end

subgraph group_social["Feed and discovery"]
  node_feed_handler["Feed handlers<br/>[feed_handler.go]"]
  node_feed_service["Feed service<br/>[feed_service.go]"]
  node_discover["Discovery service"]
  node_feed_repo["Feed repository<br/>[feed_repository.go]"]
end

subgraph group_communication["Messaging and notifications"]
  node_message_handler["Message handlers<br/>[message_handler.go]"]
  node_ws_handler["WebSocket handler<br/>[ws_handler.go]"]
  node_message_service["Message service<br/>[message_service.go]"]
  node_notification_service["Notification service"]
end

subgraph group_platform["Runtime and storage"]
  node_router["API router<br/>[router.go]"]
  node_outbox_service["Outbox worker<br/>[outbox_service.go]"]
  node_main["Backend startup<br/>[main.go]"]
  node_mysql[("MySQL")]
  node_redis[("Redis")]
  node_rabbitmq["RabbitMQ"]
end

node_user(("Social user"))

node_user -->|"uses"| node_app
node_app -->|"renders"| node_views
node_views -->|"requests"| node_api
node_api -->|"calls API"| node_router
node_main -->|"sets up"| node_router
node_router -->|"dispatches"| node_user_handler
node_router -->|"dispatches"| node_feed_handler
node_router -->|"dispatches"| node_message_handler
node_router -->|"dispatches"| node_ws_handler
node_user_handler -->|"calls"| node_user_service
node_user_service -->|"reads/writes"| node_mysql
node_user_service -->|"uses cache"| node_redis
node_user_service -.->|"sends codes"| node_smtp
node_router -->|"dispatches"| node_follow_service
node_follow_service -->|"reads/writes"| node_mysql
node_follow_service -->|"updates cache"| node_redis
node_follow_service -->|"creates notices"| node_notification_service
node_feed_handler -->|"calls"| node_feed_service
node_feed_service -->|"queries"| node_feed_repo
node_feed_repo -->|"reads/writes"| node_mysql
node_feed_service -->|"uses timeline cache"| node_redis
node_feed_service -->|"creates notices"| node_notification_service
node_router -->|"dispatches"| node_discover
node_discover -->|"reads"| node_mysql
node_message_handler -->|"calls"| node_message_service
node_ws_handler -->|"sends and reads"| node_message_service
node_message_service -->|"reads/writes"| node_mysql
node_main -->|"starts worker"| node_outbox_service
node_outbox_service -->|"publishes events"| node_rabbitmq

click node_app "https://github.com/zl1nq/interlinked/blob/master/frontend/src/App.vue"
click node_views "https://github.com/zl1nq/interlinked/tree/master/frontend/src/views"
click node_api "https://github.com/zl1nq/interlinked/blob/master/frontend/src/api/index.js"
click node_router "https://github.com/zl1nq/interlinked/blob/master/backend/router/router.go"
click node_user_handler "https://github.com/zl1nq/interlinked/blob/master/backend/handlers/user_handler.go"
click node_user_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/user_service.go"
click node_follow_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/follow_service.go"
click node_feed_handler "https://github.com/zl1nq/interlinked/blob/master/backend/handlers/feed_handler.go"
click node_feed_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/feed_service.go"
click node_discover "https://github.com/zl1nq/interlinked/blob/master/backend/services/discover_service.go"
click node_feed_repo "https://github.com/zl1nq/interlinked/blob/master/backend/repository/feed_repository.go"
click node_message_handler "https://github.com/zl1nq/interlinked/blob/master/backend/handlers/message_handler.go"
click node_ws_handler "https://github.com/zl1nq/interlinked/blob/master/backend/handlers/ws_handler.go"
click node_message_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/message_service.go"
click node_notification_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/notification_service.go"
click node_outbox_service "https://github.com/zl1nq/interlinked/blob/master/backend/services/outbox_service.go"
click node_main "https://github.com/zl1nq/interlinked/blob/master/backend/main.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_views,node_api,node_user toneBlue
class node_user_handler,node_user_service,node_follow_service,node_smtp toneAmber
class node_feed_handler,node_feed_service,node_discover,node_feed_repo toneMint
class node_message_handler,node_ws_handler,node_message_service,node_notification_service toneRose
class node_router,node_outbox_service,node_main,node_mysql,node_redis,node_rabbitmq toneIndigo
```

## Components

### Web client

- [Vue application](https://github.com/zl1nq/interlinked/blob/master/frontend/src/App.vue): `frontend/src/App.vue`
- [Social pages](https://github.com/zl1nq/interlinked/tree/master/frontend/src/views): `frontend/src/views`
- [API client](https://github.com/zl1nq/interlinked/blob/master/frontend/src/api/index.js): `frontend/src/api/index.js`

### Accounts and relationships

- [User handlers](https://github.com/zl1nq/interlinked/blob/master/backend/handlers/user_handler.go): `backend/handlers/user_handler.go`
- [User service](https://github.com/zl1nq/interlinked/blob/master/backend/services/user_service.go): `backend/services/user_service.go`
- [Follow service](https://github.com/zl1nq/interlinked/blob/master/backend/services/follow_service.go): `backend/services/follow_service.go`
- **SMTP mail**

### Feed and discovery

- [Feed handlers](https://github.com/zl1nq/interlinked/blob/master/backend/handlers/feed_handler.go): `backend/handlers/feed_handler.go`
- [Feed service](https://github.com/zl1nq/interlinked/blob/master/backend/services/feed_service.go): `backend/services/feed_service.go`
- [Discovery service](https://github.com/zl1nq/interlinked/blob/master/backend/services/discover_service.go): `backend/services/discover_service.go`
- [Feed repository](https://github.com/zl1nq/interlinked/blob/master/backend/repository/feed_repository.go): `backend/repository/feed_repository.go`

### Messaging and notifications

- [Message handlers](https://github.com/zl1nq/interlinked/blob/master/backend/handlers/message_handler.go): `backend/handlers/message_handler.go`
- [WebSocket handler](https://github.com/zl1nq/interlinked/blob/master/backend/handlers/ws_handler.go): `backend/handlers/ws_handler.go`
- [Message service](https://github.com/zl1nq/interlinked/blob/master/backend/services/message_service.go): `backend/services/message_service.go`
- [Notification service](https://github.com/zl1nq/interlinked/blob/master/backend/services/notification_service.go): `backend/services/notification_service.go`

### Runtime and storage

- [API router](https://github.com/zl1nq/interlinked/blob/master/backend/router/router.go): `backend/router/router.go`
- [Outbox worker](https://github.com/zl1nq/interlinked/blob/master/backend/services/outbox_service.go): `backend/services/outbox_service.go`
- [Backend startup](https://github.com/zl1nq/interlinked/blob/master/backend/main.go): `backend/main.go`
- **MySQL**
- **Redis**
- **RabbitMQ**

### Other components

- **Social user**

## Connections

- Social user → Vue application: uses
- Vue application → Social pages: renders
- Social pages → API client: requests
- API client → API router: calls API
- Backend startup → API router: sets up
- API router → User handlers: dispatches
- API router → Feed handlers: dispatches
- API router → Message handlers: dispatches
- API router → WebSocket handler: dispatches
- User handlers → User service: calls
- User service → MySQL: reads/writes
- User service → Redis: uses cache
- User service → SMTP mail: sends codes
- API router → Follow service: dispatches
- Follow service → MySQL: reads/writes
- Follow service → Redis: updates cache
- Follow service → Notification service: creates notices
- Feed handlers → Feed service: calls
- Feed service → Feed repository: queries
- Feed repository → MySQL: reads/writes
- Feed service → Redis: uses timeline cache
- Feed service → Notification service: creates notices
- API router → Discovery service: dispatches
- Discovery service → MySQL: reads
- Message handlers → Message service: calls
- WebSocket handler → Message service: sends and reads
- Message service → MySQL: reads/writes
- Backend startup → Outbox worker: starts worker
- Outbox worker → RabbitMQ: publishes events
