# Investor RPG 開發環境 ## 第一次啟動 需要 Node.js 18 以上版本。在終端機執行: ```bash cd /Users/daniel/Desktop/finance/app cp .env.example .env # 已經有 .env 時不要執行這行 npm install npm run dev:all ``` 啟動完成後開啟 。 `npm run dev:all` 會同時啟動: - 前端 Vite: - 後端 API: - API 健康檢查: 按 `Ctrl+C` 會一起關閉前端與後端。 ## 日常啟動 ```bash cd /Users/daniel/Desktop/finance/app npm run dev:all ``` 不要只執行 `npm run dev`;那只會啟動前端,沒有後端 API 時頁面資料功能不會運作。 ## Docker 啟動 若要用接近正式環境的方式啟動: ```bash cd /Users/daniel/Desktop/finance/app docker compose up --build ``` 完成後開啟 。 ## 內容管線(YouTube / HyRead) ### 知識庫 知識庫分為兩層: - `content/raw/emmy/` — 原始 Obsidian 格式筆記(Markdown + frontmatter) - `data/knowledge.json` + `data/notes.json` — `npm run build:knowledge` 快照產出 匯入的 YouTube / HyRead 內容會自動寫入 `content/raw/emmy/`,再透過 `build:knowledge` 輸出到前端。 ### 前端頁面 | 路由 | 頁面 | 說明 | |------|------|------| | `/library` | Library | 知識總覽(全文檢索 + 類型過濾) | | `/library/:kind/:id` | LibraryDetail | 單篇知識全文 | | `/content` | ContentManager | 內容管理(來源列表 / YouTube 擷取 / HyRead 匯入 / 排程) | Library 和 LibraryDetail 的選單項目在 `Chrome.tsx` 的「修練 → 知識 · 圖書館」。 ContentManager 在「內容 → 內容 · 管理」。 ### API 端點 所有端點以 `/api/content` 為前綴: | 方法 | 路徑 | 說明 | |------|------|------| | GET | `/api/content` | 列舉內容來源(支援 `?kind=` `?status=` `?limit=` `?offset=`) | | GET | `/api/content/stats` | 來源統計(by kind / by status) | | GET | `/api/content/:id` | 單筆來源詳情 | | DELETE | `/api/content/:id` | 刪除來源 | | POST | `/api/content/youtube/fetch` | 擷取 YouTube 影片/播放清單(傳 `{ url }`) | | POST | `/api/content/youtube/process/:id` | 用 AI 處理 transcript(傳 `{ transcript, episode? }`) | | GET | `/api/content/youtube/yt-dlp-status` | 檢查 yt-dlp 是否可用 | | GET | `/api/content/youtube/local-transcripts` | 列出本地 `~/youtube_transcripts/` 整理檔 | | GET | `/api/content/hyread/scan` | 掃描 `hyread-tools/output/` 目錄 | | POST | `/api/content/hyread/import` | 匯入指定書籍(傳 `{ dir }`) | | POST | `/api/content/hyread/upload` | 上傳 book.html(傳 `{ title, html }`) | | GET | `/api/content/schedules` | 列舉排程 | | POST | `/api/content/schedules` | 新增排程(傳 `{ kind, name, url, ... }`) | | DELETE | `/api/content/schedules/:id` | 刪除排程 | | POST | `/api/content/capture` | 擴充功能接收端(傳 `{ kind, url, title, transcript/html, ... }`) | | POST | `/api/content/rebuild-knowledge` | 觸發 `npm run build:knowledge` | ### Chrome 擴充功能 位於 `extension/` 目錄。 **安裝步驟:** 1. 打開 Chrome,前往 `chrome://extensions` 2. 開啟右上角「開發人員模式」 3. 點選「載入未封裝項目」 4. 選擇 `path/to/app/extension/` 資料夾 **使用方式:** - **YouTube 影片頁**:擴充功能會在影片標題下方自動加入「📥 擷取此影片」按鈕,點擊後取得字幕並傳送至後端 - **HyRead 閱讀器**:擴充功能會在頁面右上角加入「📥 匯入此書」按鈕,點擊後擷取 book HTML 並傳送至後端 - **Popup 面板**:點擊工具列圖示可查看伺服器狀態、偵測當前分頁類型,也可手動擷取 ### 排程器 伺服器啟動後會自動啟動排程器(預設每 5 分鐘檢查一次排程),在內容管理頁面的「排程」分頁中管理 YouTube 頻道 / 播放清單的定期抓取。