flowchart TD
START([訪客進入平台]) --> AUTH_CHECK{已登入?}
AUTH_CHECK -- 否 --> AUTH_PAGE[auth.html\n登入 / 註冊]
AUTH_PAGE --> REGISTER[POST /api/users/register\n填姓名、Email、密碼\n選角色:租客 / 房東 / 兩者]
AUTH_PAGE --> LOGIN[POST /api/users/login\n帳密驗證 bcrypt]
REGISTER --> JWT_ISSUED[簽發 JWT Token\n有效期 30 天\n存入 localStorage]
LOGIN --> JWT_ISSUED
AUTH_CHECK -- 是 --> ROLE_SPLIT{角色}
JWT_ISSUED --> ROLE_SPLIT
ROLE_SPLIT -- 租客 --> BROWSE[listings.html\n瀏覽房源]
BROWSE --> SEARCH[GET /api/listings\n篩選條件:城市 / 地區 / 租金\n房型 / 最短租期\n性別限制 / 寵物]
SEARCH --> LISTING_CARD[房源卡片列表]
LISTING_CARD --> LISTING_DETAIL[listing.html\n房源詳情\nGET /api/listings/:id\n瀏覽數 +1]
LISTING_DETAIL --> FAV[❤️ 收藏\nPOST /api/favorites/:id\ntoggle 加入/移除]
LISTING_DETAIL --> INQUIRY_FORM[送出詢問\n填寫入住日期 / 天數 / 留言]
INQUIRY_FORM --> DUP_CHECK{是否已有\n進行中詢問?}
DUP_CHECK -- 是 --> BLOCK[❌ 擋住重複詢問]
DUP_CHECK -- 否 --> INQUIRY_CREATED[POST /api/inquiries\n建立詢問記錄]
INQUIRY_CREATED --> LINE_NOTIFY[LINE Notify\n推播給房東\n需 LINE_CHANNEL_ACCESS_TOKEN]
INQUIRY_CREATED --> TENANT_INBOX[inquiries.html\n租客詢問紀錄]
ROLE_SPLIT -- 房東 --> DASHBOARD[dashboard.html\n房東後台]
DASHBOARD --> LISTING_MGMT[我的房源管理]
LISTING_MGMT --> CREATE_MANUAL[手動新增\nPOST /api/listings\n填寫房源資訊]
LISTING_MGMT --> IMPORT_AIRBNB[Airbnb 一鍵匯入\nPOST /api/listings/import/airbnb\nPlaywright 爬標題/描述\n設施/評分/照片]
LISTING_MGMT --> IMPORT_591[591 匯入\nPOST /api/listings/import/591\nPlaywright 爬房型\n坪數/設施/照片]
LISTING_MGMT --> UPLOAD_PHOTO[上傳照片\nPOST /api/listings/:id/photos\nmulter 限 10MB/張]
DASHBOARD --> INQUIRY_MGMT[詢問管理\nGET /api/inquiries/landlord]
INQUIRY_MGMT --> ACCEPT_REJECT{接受 / 拒絕\nPATCH /api/inquiries/:id/status}
ACCEPT_REJECT -- 接受 accepted --> CHAT_ENABLED[站內聊天啟用]
ACCEPT_REJECT -- 拒絕 rejected --> INQUIRY_CLOSED[詢問結束]
CHAT_ENABLED --> CHAT[GET / POST\n/api/inquiries/:id/messages\n雙向氣泡聊天]
CHAT_ENABLED --> CONTRACT[合約產生\nGET /api/contracts/:inquiry_id\n回傳可列印 HTML\n含雙方資訊 / 租期 / 金額]
CONTRACT --> PRINT[瀏覽器列印 / 儲存 PDF]
CHAT --> REVIEW_FLOW[雙向評價\nPOST /api/reviews\n只限 accepted 詢問\n1-5 星 + 留言]
REVIEW_FLOW --> REVIEW_DISPLAY[房源平均星數顯示\n房東信譽累積]
DASHBOARD --> CORP[企業帳戶\nPUT /api/corporate/profile\n填公司名稱 / 統編]
CORP --> BULK[批量訂房\nPOST /api/corporate/bulk-inquire\n一次最多 20 間同時送出詢問]
BULK --> BULK_RESULT[回傳成功 / 失敗清單]
BROWSE --> AI_CHAT[💬 AI 客服\n右下角浮動聊天框\nPOST /api/ai/chat]
LISTING_DETAIL --> AI_CHAT
AI_CHAT --> CLAUDE_SUB[呼叫 Claude CLI subprocess\n帶入目前上架房源 context\n繁體中文回覆]
INQUIRY_CREATED --- DB[(PostgreSQL\nmigo-postgres\nDocker container)]
CREATE_MANUAL --- DB
IMPORT_AIRBNB --- DB
REVIEW_FLOW --- DB
FAV --- DB
DB --- SYSTEMD[systemd service\nrental-platform.service\n開機自動啟動 Port 3200]
classDef page fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f,rx:6
classDef api fill:#dcfce7,stroke:#22c55e,color:#14532d,rx:6
classDef decision fill:#fef9c3,stroke:#eab308,color:#713f12
classDef external fill:#f3e8ff,stroke:#a855f7,color:#4a1d96,rx:6
classDef system fill:#f1f5f9,stroke:#94a3b8,color:#374151,rx:6
classDef warn fill:#fee2e2,stroke:#ef4444,color:#7f1d1d,rx:6
class BROWSE,LISTING_DETAIL,AUTH_PAGE,DASHBOARD,TENANT_INBOX page
class SEARCH,INQUIRY_CREATED,CREATE_MANUAL,IMPORT_AIRBNB,IMPORT_591,UPLOAD_PHOTO,CHAT,CONTRACT,REVIEW_FLOW,FAV,CORP,BULK,FAV,PRICE_HINT api
class AUTH_CHECK,ROLE_SPLIT,DUP_CHECK,ACCEPT_REJECT decision
class LINE_NOTIFY,CLAUDE_SUB,PRINT external
class DB,SYSTEMD system
class BLOCK warn