# dev0711/echo architecture

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

- Interactive diagram: https://gitdiagram.com/dev0711/echo
- Repository: https://github.com/dev0711/echo

## Overview

Echo is a Markdown content-authoring and cross-platform publishing product. A creator edits and saves a post, previews platform-specific renderings, then publishes immediately or schedules delivery; the backend tracks per-platform status so retries can skip completed destinations. The graph also preserves AI assistance, media upload, analytics, and authentication. Several frontend-to-backend and adapter dispatch details are not shown in the excerpts, so those links are dashed rather than presented as inspected calls.

Main entry points: [`backend/src/main/java/com/echo/service/PostService.java`](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/service/PostService.java) (Post service), [`frontend/src/app/dashboard/page.tsx`](https://github.com/dev0711/echo/blob/main/frontend/src/app/dashboard/page.tsx) (Dashboard), [`frontend/src/components/Editor.tsx`](https://github.com/dev0711/echo/blob/main/frontend/src/components/Editor.tsx) (Content editor), [`backend/src/main/java/com/echo/controller`](https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/controller) (REST controllers)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Authoring and previews"]
  node_dashboard["Dashboard<br/>[page.tsx]"]
  node_editor["Content editor<br/>[Editor.tsx]"]
  node_blockeditor["Block editor<br/>[BlockEditor.tsx]"]
  node_aiui["AI assistant"]
  node_previewui["Preview panel<br/>[PreviewPanel.tsx]"]
  node_renderer["Platform renderer"]
  node_serializers["Content serializers<br/>[serializers.ts]"]
  node_analyticsui["Analytics dashboard"]
end

subgraph group_backend["API and identity"]
  node_api["REST controllers"]
  node_auth["OAuth and JWT"]
  node_authui["Login and callback<br/>[page.tsx]"]
end

subgraph group_publishing["Publishing workflow"]
  node_postservice["Post service<br/>[PostService.java]"]
  node_scheduler["Scheduled publisher"]
  node_formatters["Platform formatters"]
  node_publishers["Platform publishers"]
end

subgraph group_state["Persistence and integrations"]
  node_ai["Gemini service<br/>[GeminiService.java]"]
  node_media["Media signing"]
  node_mongo[("MongoDB repositories")]
end

node_creator(("Creator"))
node_cloudinary["Cloudinary"]
node_platforms["Publishing platforms"]

node_creator -.->|"authors in"| node_dashboard
node_dashboard -.->|"edits with"| node_editor
node_editor -.->|"uses blocks"| node_blockeditor
node_editor -.->|"requests assistance"| node_aiui
node_editor -.->|"previews post"| node_previewui
node_previewui -.->|"renders platforms"| node_renderer
node_renderer -->|"serializes blocks"| node_serializers
node_creator -.->|"signs in"| node_authui
node_authui -.->|"completes OAuth"| node_auth
node_auth -->|"reads and saves users"| node_mongo
node_auth -->|"generates JWT"| node_auth
node_dashboard -.->|"calls API"| node_api
node_api -.->|"delegates post work"| node_postservice
node_postservice -->|"reads and writes posts"| node_mongo
node_postservice -->|"saves versions"| node_mongo
node_postservice -->|"selects formatter"| node_formatters
node_postservice -->|"dispatches publishing"| node_publishers
node_publishers -.->|"publishes to"| node_platforms
node_scheduler -->|"queries scheduled posts"| node_mongo
node_scheduler -->|"invokes scheduled publish"| node_postservice
node_dashboard -.->|"views analytics"| node_analyticsui
node_api -.->|"requests AI assistance"| node_ai
node_api -.->|"requests upload signature"| node_media
node_media -.->|"signs uploads for"| node_cloudinary

click node_dashboard "https://github.com/dev0711/echo/blob/main/frontend/src/app/dashboard/page.tsx"
click node_editor "https://github.com/dev0711/echo/blob/main/frontend/src/components/Editor.tsx"
click node_blockeditor "https://github.com/dev0711/echo/blob/main/frontend/src/components/BlockEditor.tsx"
click node_aiui "https://github.com/dev0711/echo/blob/main/frontend/src/components/AiAssistantPanel.tsx"
click node_previewui "https://github.com/dev0711/echo/blob/main/frontend/src/components/PreviewPanel.tsx"
click node_renderer "https://github.com/dev0711/echo/blob/main/frontend/src/components/PreviewRenderer.tsx"
click node_serializers "https://github.com/dev0711/echo/blob/main/frontend/src/lib/serializers.ts"
click node_analyticsui "https://github.com/dev0711/echo/blob/main/frontend/src/components/AnalyticsDashboard.tsx"
click node_api "https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/controller"
click node_auth "https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/security/OAuthSuccessHandler.java"
click node_authui "https://github.com/dev0711/echo/blob/main/frontend/src/app/login/page.tsx"
click node_postservice "https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/service/PostService.java"
click node_scheduler "https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/scheduler/PostSchedulerWorker.java"
click node_formatters "https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/platform"
click node_publishers "https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/platform"
click node_ai "https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/service/GeminiService.java"
click node_media "https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/controller/MediaController.java"
click node_mongo "https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/repository"

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_dashboard,node_editor,node_blockeditor,node_aiui,node_previewui,node_renderer,node_serializers,node_analyticsui toneBlue
class node_api,node_auth,node_authui toneAmber
class node_postservice,node_scheduler,node_formatters,node_publishers toneMint
class node_ai,node_media,node_mongo toneRose
class node_creator,node_cloudinary,node_platforms toneIndigo
```

## Components

### Authoring and previews

- [Dashboard](https://github.com/dev0711/echo/blob/main/frontend/src/app/dashboard/page.tsx): `frontend/src/app/dashboard/page.tsx`
- [Content editor](https://github.com/dev0711/echo/blob/main/frontend/src/components/Editor.tsx): `frontend/src/components/Editor.tsx`
- [Block editor](https://github.com/dev0711/echo/blob/main/frontend/src/components/BlockEditor.tsx): `frontend/src/components/BlockEditor.tsx`
- [AI assistant](https://github.com/dev0711/echo/blob/main/frontend/src/components/AiAssistantPanel.tsx): `frontend/src/components/AiAssistantPanel.tsx`
- [Preview panel](https://github.com/dev0711/echo/blob/main/frontend/src/components/PreviewPanel.tsx): `frontend/src/components/PreviewPanel.tsx`
- [Platform renderer](https://github.com/dev0711/echo/blob/main/frontend/src/components/PreviewRenderer.tsx): `frontend/src/components/PreviewRenderer.tsx`
- [Content serializers](https://github.com/dev0711/echo/blob/main/frontend/src/lib/serializers.ts): `frontend/src/lib/serializers.ts`
- [Analytics dashboard](https://github.com/dev0711/echo/blob/main/frontend/src/components/AnalyticsDashboard.tsx): `frontend/src/components/AnalyticsDashboard.tsx`

### API and identity

- [REST controllers](https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/controller): `backend/src/main/java/com/echo/controller`
- [OAuth and JWT](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/security/OAuthSuccessHandler.java): `backend/src/main/java/com/echo/security/OAuthSuccessHandler.java`
- [Login and callback](https://github.com/dev0711/echo/blob/main/frontend/src/app/login/page.tsx): `frontend/src/app/login/page.tsx`

### Publishing workflow

- [Post service](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/service/PostService.java): `backend/src/main/java/com/echo/service/PostService.java`
- [Scheduled publisher](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/scheduler/PostSchedulerWorker.java): `backend/src/main/java/com/echo/scheduler/PostSchedulerWorker.java`
- [Platform formatters](https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/platform): `backend/src/main/java/com/echo/platform`
- [Platform publishers](https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/platform): `backend/src/main/java/com/echo/platform`

### Persistence and integrations

- [Gemini service](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/service/GeminiService.java): `backend/src/main/java/com/echo/service/GeminiService.java`
- [Media signing](https://github.com/dev0711/echo/blob/main/backend/src/main/java/com/echo/controller/MediaController.java): `backend/src/main/java/com/echo/controller/MediaController.java`
- [MongoDB repositories](https://github.com/dev0711/echo/tree/main/backend/src/main/java/com/echo/repository): `backend/src/main/java/com/echo/repository`

### Other components

- **Creator**
- **Cloudinary**
- **Publishing platforms**

## Connections

- Creator → Dashboard: authors in
- Dashboard → Content editor: edits with
- Content editor → Block editor: uses blocks
- Content editor → AI assistant: requests assistance
- Content editor → Preview panel: previews post
- Preview panel → Platform renderer: renders platforms
- Platform renderer → Content serializers: serializes blocks (evidence: `frontend/src/components/PreviewRenderer.tsx`)
- Creator → Login and callback: signs in
- Login and callback → OAuth and JWT: completes OAuth
- OAuth and JWT → MongoDB repositories: reads and saves users (evidence: `backend/src/main/java/com/echo/security/OAuthSuccessHandler.java`)
- OAuth and JWT → OAuth and JWT: generates JWT (evidence: `backend/src/main/java/com/echo/security/OAuthSuccessHandler.java`)
- Dashboard → REST controllers: calls API
- REST controllers → Post service: delegates post work
- Post service → MongoDB repositories: reads and writes posts (evidence: `backend/src/main/java/com/echo/service/PostService.java`)
- Post service → MongoDB repositories: saves versions (evidence: `backend/src/main/java/com/echo/service/PostService.java`)
- Post service → Platform formatters: selects formatter (evidence: `backend/src/main/java/com/echo/service/PostService.java`)
- Post service → Platform publishers: dispatches publishing (evidence: `backend/src/main/java/com/echo/service/PostService.java`)
- Platform publishers → Publishing platforms: publishes to
- Scheduled publisher → MongoDB repositories: queries scheduled posts (evidence: `backend/src/main/java/com/echo/scheduler/PostSchedulerWorker.java`)
- Scheduled publisher → Post service: invokes scheduled publish (evidence: `backend/src/main/java/com/echo/scheduler/PostSchedulerWorker.java`)
- Dashboard → Analytics dashboard: views analytics
- REST controllers → Gemini service: requests AI assistance
- REST controllers → Media signing: requests upload signature
- Media signing → Cloudinary: signs uploads for
