Information Architecture — HeyMoa
⚠︎ 지난 판 — 2026-08-03. 현재 판은 여기다. 이 문서는 그때의 기록이고 고치지 않는다.
ⓘ 이 판은 사이트 버저닝을 보이려고 채운 자리다. 그날 실제로 쓰인 문서가 아니고, 앞뒤 판에서 끌어와 재구성했다. 지우거나 진짜 기록으로 갈아끼워도 된다.
갱신일 2026-08-03 · 기준:
heymoa-web워킹트리 +interfaces/이 문서가 갖는 것: 사용자가 보는 정보 구조 — 화면 트리, URL, 정보 계층, 권한, 상태가 화면을 가르는 축. 여기 없는 것: 모듈 배치(application-architecture) · 런타임 경계(system-architecture).
확인한 사실
계층은 셋, URL은 둘
| 계층 | 무엇 | URL |
|---|---|---|
| workspace | 초대·멤버·도구 연동·권한의 경계 | /w/{workspaceId} |
| project | 노트를 묶는 단위 | 없음 — 사이드바와 노트 패널의 그룹핑 축으로만 쓴다 |
| note | 회의 1건. 전사·요약·챗봇이 여기 붙는다 | /w/{workspaceId}/notes/{noteId} |
라우트 전부는 위 둘에 랜딩 /, 정적 /privacy·/terms, OAuth 복귀 /auth/callback을 더한 것이다.
챗봇 2종은 탐색 위치가 다르다
| 개인 챗봇 | 공유 챗봇 | |
|---|---|---|
| 어디서 열리나 | 워크스페이스 셸의 오버레이 | 노트 화면의 패널 |
| 소속 | 사용자 글로벌 1개 | 노트 1건당 1개, 영구 세션 |
| 보는 사람 | 본인만 | 노트를 열 수 있는 전 멤버 |
| 쓰기 | 항상 | 회의가 ACTIVE일 때만. 이후는 읽기 전용 아카이브 |
| 동시성 | — | 한 번에 한 명 (서버가 입력 잠금을 소유, 대기 큐 없음) |
여는 위치가 곧 스코프다. 2026-07-26 판이 "계약은 chatKind를 보내기로 했는데 server가 안 보낸다(APP-172)"를 미확인으로 등재했었다. 이 판에서 정합이 끝났다 — server가 chatKind를 실어 보내고, ai는 (chatKind, scope) 조합으로 agent profile 3종을 고른다.
상태가 화면을 가른다
| 축 | 값 | 화면에서 무엇이 달라지나 |
|---|---|---|
| 회의 상태 | IN_PROGRESS → ENDED | ACTIVE 판정(IN_PROGRESS && meetingStartedBy != null)이 공유 챗봇 쓰기와 녹음 컨트롤을 연다 |
| 조작권 | 시작자 1인 | 나머지 멤버는 뷰어다. 중지·종료 버튼이 없다 |
| 역할 | ADMIN · MEMBER | 초대·도구 연동은 ADMIN만 |
| 분석 결과 | 없음 → 있음 | 회의 종료 뒤 요약이 노트에 붙는다. web은 폴링으로 도착을 안다 |
PAUSED는 이 판에서 폐기됐다. 회의는 진행 중이거나 끝났거나 둘 중 하나다.
설계 전제
- project를 URL에 올리지 않았다. 노트는 워크스페이스 안에서 유일하게 식별된다. project별 화면이 생기면 그때 경로를 판다.
- 개인 챗봇은 화면이 아니라 오버레이다. 어느 노트를 보고 있든 따라다녀야 해서 라우트로 만들지 않았다.
- 공유 챗봇은 회의 기록의 일부다. "새 대화"가 없고 노트와 수명을 같이 한다.
- 전사와 챗봇 메시지는 서버 타임스탬프 하나로 정렬한다. 아카이브 타임라인이 시간으로 조인된다.
미확인
| 무엇 | 지금 아는 것 |
|---|---|
| AI 산출물 ↔ 원문 근거 연결 | 제품 원칙이자 차별화의 본체인데 화면에 없다. 설계(APP-391) 진행 중 |
| 알림의 도착 방식 | push 채널이 없고 GET /v1/notifications 폴링만 확인했다 |
| 분석 완료를 web이 아는 경로 | 설계 스펙은 STOMP push, 실제 구현은 refetchInterval 폴링이다 |