B[텍스트 입력] B -->|/nl/parse| S[API Server] A -. 실시간 텍스트 .-> B end subgraph API["API Server Inner Structure (NestJS/FastAPI)"] S -->|LLM 호출 + 검증| O[(Artifacts: menu/aliases/few_shots/manifest)] S -->|ORDER_DRAFT| K[K] S -->|/order/confirm| DB[(SQLite/Mongo)] S -->|SSE/WebSocket| Admin end subgraph AdminWeb["Admin Web (Next.js)"] Admin[주문 테이블/상태] -->|상세 조회| S end O <--> malro[malro-data/outputs] "> B[텍스트 입력] B -->|/nl/parse| S[API Server] A -. 실시간 텍스트 .-> B end subgraph API["API Server Inner Structure (NestJS/FastAPI)"] S -->|LLM 호출 + 검증| O[(Artifacts: menu/aliases/few_shots/manifest)] S -->|ORDER_DRAFT| K[K] S -->|/order/confirm| DB[(SQLite/Mongo)] S -->|SSE/WebSocket| Admin end subgraph AdminWeb["Admin Web (Next.js)"] Admin[주문 테이블/상태] -->|상세 조회| S end O <--> malro[malro-data/outputs] "> B[텍스트 입력] B -->|/nl/parse| S[API Server] A -. 실시간 텍스트 .-> B end subgraph API["API Server Inner Structure (NestJS/FastAPI)"] S -->|LLM 호출 + 검증| O[(Artifacts: menu/aliases/few_shots/manifest)] S -->|ORDER_DRAFT| K[K] S -->|/order/confirm| DB[(SQLite/Mongo)] S -->|SSE/WebSocket| Admin end subgraph AdminWeb["Admin Web (Next.js)"] Admin[주문 테이블/상태] -->|상세 조회| S end O <--> malro[malro-data/outputs] ">
flowchart LR
subgraph Kiosk["Kiosk Web (Next.js)"]
A[마이크 STT] --> B[텍스트 입력]
B -->|/nl/parse| S[API Server]
A -. 실시간 텍스트 .-> B
end
subgraph API["API Server Inner Structure (NestJS/FastAPI)"]
S -->|LLM 호출 + 검증| O[(Artifacts: menu/aliases/few_shots/manifest)]
S -->|ORDER_DRAFT| K[K]
S -->|/order/confirm| DB[(SQLite/Mongo)]
S -->|SSE/WebSocket| Admin
end
subgraph AdminWeb["Admin Web (Next.js)"]
Admin[주문 테이블/상태] -->|상세 조회| S
end
O <--> malro[malro-data/outputs]
malro-app/
packages/
server/ # NestJS (선호시 FastAPI 가능)
web-kiosk/ # Next.js (kiosk)
web-admin/ # Next.js (admin)
types/ # 공통 타입(Order schema 등)
artifacts/
cafe/
menu.json
aliases.json
few_shots.jsonl
evalset.jsonl
artifact_manifest.json
.env # 서버키는 server에서만 참조
turbo.json / pnpm-workspace.yaml (선택)