# choisunghwan/cenoffice architecture

> Architecture diagram of the GitHub repository choisunghwan/cenoffice, 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/choisunghwan/cenoffice
- Repository: https://github.com/choisunghwan/cenoffice

## Overview

CEN OFFICE is an internal AI-enabled workplace: users sign in, then use a natural-language home assistant or dedicated screens to manage calendars, meetings, documents, tools, and a multiplayer 3D office. The assistant interprets requests and requires confirmation for consequential actions; meeting records proceed through drafting, review, confirmation, and export. AI HUB adds tool registration, approval, execution, and external access. The graph combines sampled call/reference evidence with README-documented capabilities; unsampled implementation details are represented only at supported paths, and some documented links cite the README.

Main entry points: [`backend/src/main/java/com/cenoffice/home/AssistantService.java`](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/AssistantService.java) (Assistant orchestration), [`backend/src/main/java/com/cenoffice/meeting/MinutesService.java`](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/MinutesService.java) (Minutes lifecycle), [`backend/src/main/java/com/cenoffice/meeting/CollaborationService.java`](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/CollaborationService.java) (Video meetings), [`frontend/src/App.tsx`](https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/App.tsx) (Application shell)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_app["Application shell<br/>[App.tsx]"]
  node_workspace["Workspace screens<br/>[Workspace.tsx]"]
  node_login["Login UI<br/>[LoginModal.tsx]"]
end

subgraph group_assistant["Assistant workflow"]
  node_assistant_ui["Home assistant UI<br/>[HomePage.tsx]"]
  node_assistant_api["Assistant API"]
  node_assistant_service["Assistant orchestration"]
  node_chat_sessions["Chat sessions"]
end

subgraph group_meetings["Meetings and scheduling"]
  node_calendar["Calendar service"]
  node_reservation["Room reservations"]
  node_collaboration["Video meetings"]
  node_minutes["Minutes lifecycle"]
  node_notifications["Notifications and mail"]
end

subgraph group_hub["AI Hub and documents"]
  node_templates["Form filling and export"]
  node_skill_service["Skill management<br/>[SkillService.java]"]
  node_hub_execution["Tool execution"]
  node_hub_runtime["Runtime adapters"]
end

subgraph group_platform["Identity and office"]
  node_auth["Authentication<br/>[AuthService.java]"]
  node_users[("User accounts")]
  node_office_chat["Office chat<br/>[ChatService.java]"]
  node_devices["Device control<br/>[DeviceService.java]"]
  node_llm["LLM providers<br/>[LlmProvider.java]"]
end

node_user(("Employee"))
node_livekit["LiveKit"]
node_smtp["SMTP service"]

node_user -->|"uses"| node_app
node_app -->|"renders"| node_workspace
node_app -->|"opens"| node_login
node_user -->|"requests work"| node_assistant_ui
node_assistant_ui -->|"sends requests"| node_assistant_api
node_assistant_api -->|"delegates to"| node_assistant_service
node_assistant_service -->|"stores conversations"| node_chat_sessions
node_assistant_service -->|"manages schedules"| node_calendar
node_assistant_service -->|"books rooms"| node_reservation
node_assistant_service -->|"starts meetings"| node_collaboration
node_assistant_service -->|"requests minutes"| node_minutes
node_assistant_service -->|"finds tools"| node_skill_service
node_assistant_service -->|"interprets requests"| node_llm
node_user -->|"joins meetings"| node_collaboration
node_collaboration -->|"exchanges media"| node_livekit
node_collaboration -->|"provides meeting context"| node_minutes
node_user -->|"reviews and confirms"| node_minutes
node_minutes -->|"notifies attendees"| node_notifications
node_minutes -->|"exports with forms"| node_templates
node_templates -->|"drafts missing fields"| node_llm
node_user -->|"registers tools"| node_skill_service
node_skill_service -->|"publishes approved tools"| node_hub_execution
node_hub_execution -->|"selects runtime"| node_hub_runtime
node_hub_runtime -.->|"runs AI tools"| node_llm
node_notifications -.->|"sends optional mail"| node_smtp
node_auth -->|"reads and saves"| node_users
node_user -->|"signs in"| node_auth
node_user -->|"chats in office"| node_office_chat
node_user -->|"controls equipment"| node_devices
node_user -->|"manages calendar"| node_calendar

click node_app "https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/App.tsx"
click node_workspace "https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/workspace/Workspace.tsx"
click node_login "https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/common/LoginModal.tsx"
click node_assistant_ui "https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/home/HomePage.tsx"
click node_assistant_api "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/AssistantController.java"
click node_assistant_service "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/AssistantService.java"
click node_chat_sessions "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/ChatSessionService.java"
click node_calendar "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/calendar/CalendarService.java"
click node_reservation "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/ReservationService.java"
click node_collaboration "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/CollaborationService.java"
click node_minutes "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/MinutesService.java"
click node_notifications "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/notify/NotificationService.java"
click node_templates "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/form/TemplateService.java"
click node_skill_service "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/SkillService.java"
click node_hub_execution "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/ExecutionService.java"
click node_hub_runtime "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/runtime/RuntimeRegistry.java"
click node_auth "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/api/AuthService.java"
click node_users "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/repo/UserRepository.java"
click node_office_chat "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/chat/ChatService.java"
click node_devices "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/device/DeviceService.java"
click node_llm "https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/llm/LlmProvider.java"

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_workspace,node_login toneBlue
class node_assistant_ui,node_assistant_api,node_assistant_service,node_chat_sessions toneAmber
class node_calendar,node_reservation,node_collaboration,node_minutes,node_notifications toneMint
class node_templates,node_skill_service,node_hub_execution,node_hub_runtime toneRose
class node_auth,node_users,node_office_chat,node_devices,node_llm,node_user,node_livekit,node_smtp toneIndigo
```

## Components

### User experience

- [Application shell](https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Workspace screens](https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/workspace/Workspace.tsx): `frontend/src/workspace/Workspace.tsx`
- [Login UI](https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/common/LoginModal.tsx): `frontend/src/common/LoginModal.tsx`

### Assistant workflow

- [Home assistant UI](https://github.com/choisunghwan/cenoffice/blob/main/frontend/src/home/HomePage.tsx): `frontend/src/home/HomePage.tsx`
- [Assistant API](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/AssistantController.java): `backend/src/main/java/com/cenoffice/home/AssistantController.java`
- [Assistant orchestration](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/AssistantService.java): `backend/src/main/java/com/cenoffice/home/AssistantService.java`
- [Chat sessions](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/home/ChatSessionService.java): `backend/src/main/java/com/cenoffice/home/ChatSessionService.java`

### Meetings and scheduling

- [Calendar service](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/calendar/CalendarService.java): `backend/src/main/java/com/cenoffice/calendar/CalendarService.java`
- [Room reservations](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/ReservationService.java): `backend/src/main/java/com/cenoffice/office/ReservationService.java`
- [Video meetings](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/CollaborationService.java): `backend/src/main/java/com/cenoffice/meeting/CollaborationService.java`
- [Minutes lifecycle](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/meeting/MinutesService.java): `backend/src/main/java/com/cenoffice/meeting/MinutesService.java`
- [Notifications and mail](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/notify/NotificationService.java): `backend/src/main/java/com/cenoffice/common/notify/NotificationService.java`

### AI Hub and documents

- [Form filling and export](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/form/TemplateService.java): `backend/src/main/java/com/cenoffice/hub/form/TemplateService.java`
- [Skill management](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/SkillService.java): `backend/src/main/java/com/cenoffice/hub/SkillService.java`
- [Tool execution](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/ExecutionService.java): `backend/src/main/java/com/cenoffice/hub/ExecutionService.java`
- [Runtime adapters](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/hub/runtime/RuntimeRegistry.java): `backend/src/main/java/com/cenoffice/hub/runtime/RuntimeRegistry.java`

### Identity and office

- [Authentication](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/api/AuthService.java): `backend/src/main/java/com/cenoffice/common/api/AuthService.java`
- [User accounts](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/repo/UserRepository.java): `backend/src/main/java/com/cenoffice/common/repo/UserRepository.java`
- [Office chat](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/chat/ChatService.java): `backend/src/main/java/com/cenoffice/office/chat/ChatService.java`
- [Device control](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/office/device/DeviceService.java): `backend/src/main/java/com/cenoffice/office/device/DeviceService.java`
- [LLM providers](https://github.com/choisunghwan/cenoffice/blob/main/backend/src/main/java/com/cenoffice/common/llm/LlmProvider.java): `backend/src/main/java/com/cenoffice/common/llm/LlmProvider.java`

### Other components

- **Employee**
- **LiveKit**
- **SMTP service**

## Connections

- Employee → Application shell: uses
- Application shell → Workspace screens: renders (evidence: `frontend/src/App.tsx`)
- Application shell → Login UI: opens (evidence: `frontend/src/App.tsx`)
- Employee → Home assistant UI: requests work
- Home assistant UI → Assistant API: sends requests
- Assistant API → Assistant orchestration: delegates to
- Assistant orchestration → Chat sessions: stores conversations (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Assistant orchestration → Calendar service: manages schedules (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Assistant orchestration → Room reservations: books rooms
- Assistant orchestration → Video meetings: starts meetings (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Assistant orchestration → Minutes lifecycle: requests minutes (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Assistant orchestration → Skill management: finds tools (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Assistant orchestration → LLM providers: interprets requests (evidence: `backend/src/main/java/com/cenoffice/home/AssistantService.java`)
- Employee → Video meetings: joins meetings
- Video meetings → LiveKit: exchanges media
- Video meetings → Minutes lifecycle: provides meeting context
- Employee → Minutes lifecycle: reviews and confirms
- Minutes lifecycle → Notifications and mail: notifies attendees (evidence: `backend/src/main/java/com/cenoffice/meeting/MinutesService.java`)
- Minutes lifecycle → Form filling and export: exports with forms
- Form filling and export → LLM providers: drafts missing fields (evidence: `backend/src/main/java/com/cenoffice/hub/form/TemplateService.java`)
- Employee → Skill management: registers tools
- Skill management → Tool execution: publishes approved tools
- Tool execution → Runtime adapters: selects runtime
- Runtime adapters → LLM providers: runs AI tools (evidence: `backend/src/main/java/com/cenoffice/hub/runtime/RuntimeRegistry.java`)
- Notifications and mail → SMTP service: sends optional mail
- Authentication → User accounts: reads and saves (evidence: `backend/src/main/java/com/cenoffice/common/api/AuthService.java`)
- Employee → Authentication: signs in
- Employee → Office chat: chats in office
- Employee → Device control: controls equipment
- Employee → Calendar service: manages calendar
