Tbook · 設計文件

v0.1 草案 — 審閱中 2026-10-18 🚀 Prototype🖥 模擬介面原始 Markdown →

Tbook(暫定名)· 自製雲端筆記 Web App 設計文件

版本 v0.1(草案)· 2026-10-18 · 狀態:待審閱 定位:免費、自控、Notion 風格的雲端筆記系統(個人使用優先)


1. 背景

Notion 好用,但兩個痛點:

  1. 要訂閱付費
  2. 功能唔啱心水(語音輸入、自訂 AI、MD/HTML 雙格式等想自己加)

目標:做一個自己全權控制、零訂閱費嘅 Notion-like web app,並加入自己想加嘅功能(語音板、AI、雙格式)。

2. 目標 / 非目標

目標(MVP 範圍內)

非目標(暫時唔做)

3. 需求清單

# 需求 說明 優先級
R1 登入 帳號系統,註冊/登入 P0
R2 雲端 筆記上雲,瀏覽器存取,自動儲存 P0
R3 Web app 純 web 形式(PWA 加分) P0
R4 Notion 風格 UI 側邊欄 + 區塊編輯 + slash menu P0
R5 Markdown 主要文件格式,可匯入/匯出 .md P0
R6 HTML 亦支援 HTML(手打方便),探索雙格式同時支援嘅方式 P1
R7 語音板 語音輸入面板,喺部電腦嘅瀏覽器內測試可用 P1
R8 AI 文字輔助、圖片生成、語音轉文字 P2
R9 內容遷移 將現有自己做嘅嘢(筆記/作品)搬入新 app P2

4. 整體架構

整體架構

5. 技術棧(建議)

層 建議 備選 理由
前端 Next.js + React + TypeScript Vite + React API routes 一鍋端、SSR、部署簡單
編輯器 Tiptap(ProseMirror 核心) BlockNote、CodeMirror 6 區塊式 WYSIWYG 最似 Notion;原生支援 MD/HTML 匯入匯出
資料庫 PostgreSQL SQLite(MVP 可先简化) 結構化資料 + 全文搜尋
認證 Email + 密碼(Argon2id)+ JWT(httpOnly cookie) Better Auth / Supabase Auth 零依賴、自控
檔案 MinIO(S3 協議) 本地磁碟 + 靜態伺服 S3 協議日後遷移容易
STT faster-whisper(自託管) OpenAI Whisper API、Web Speech API 粵語準確度好、可離線、無按字計費
AI Provider 抽象層(OpenAI / Anthropic / Ollama / 本地 SD) — 用家可自帶 key,成本自控
部署 Docker Compose(next + postgres + minio) VPS / 家用伺服器 一鍵部署、搬遷容易

成本角度:全部自託管 = 只係電費/伺服器錢,AI API 先係唯一變數(可用本地模型壓低)。

6. 關鍵功能設計

6.1 登入

6.2 雲端儲存與同步

6.3 編輯器:Markdown + HTML 雙格式(重點探索)

Plan A · JSON 文件為單一事實來源(進階,最終形態)

Plan B · 每篇筆記標記單一格式(簡單,MVP 建議)

Plan C · Markdown 為單一來源

建議路線:M1/M2 用 Plan B 快速落地 → M4 之後遷移 Plan A。 Tiptap 本身有 MD/HTML serializer,Plan B 嘅 MD 筆記內容可以直接過檔,遷移成本可控。

MD / HTML 雙格式方案

HTML 安全措施:

6.4 語音板

UI:編輯器右側浮動按鈕 → 彈出小面板

引擎(兩套並存,可切換)

引擎 實作 优点 缺點
瀏覽器引擎(MVP) Web Speech API(Chrome) 零成本、即刻有、即時上線 僅 Chrome;離線差;粵語準確度中等
伺服器引擎(v2) MediaRecorder 錄 .webm → faster-whisper(yue 模型) 粵語準確、可離線、無按字計費 要等錄完、伺服器要有 CPU/GPU

語音板工作流程

6.5 AI 功能

統一 AI 閘道(/ai/*),provider 抽象:

功能 實作 備註
文字輔助 LLM(續寫/摘要/翻譯/改寫) 選定段落 + 指令 → 結果可插入
圖片生成 DALL-E / FLUX / SD API 或本地 ComfyUI 結果存 attachments,插入圖片 block
語音轉文字 STT(見 6.4)

設計原則:

6.6 UI(Notion 風格)

UI 概念圖(Notion 風格 wireframe)

🖥 可互動模擬介面(審閱用):https://5211.qrhk.app/mockup/ — 試吓側邊欄切頁、/ 斜線選單、🎤 語音板、⌘K 搜尋、深色模式。UI 確認後先開 M0 執行。

7. 資料模型(簡化)

users(
  id UUID PK, email TEXT UNIQUE, password_hash TEXT,
  created_at TIMESTAMPTZ
)

notes(
  id UUID PK,
  user_id UUID REFERENCES users(id),
  parent_id UUID NULL REFERENCES notes(id),  -- 樹結構
  title TEXT,
  format TEXT CHECK (format IN ('md','html','block')),  -- Plan B → A 過渡
  content TEXT,        -- raw MD 或 raw HTML
  doc_json JSONB,      -- Plan A:Tiptap 文件
  position INT,        -- 排序
  updated_at TIMESTAMPTZ, created_at TIMESTAMPTZ
)

attachments(
  id UUID PK, note_id UUID, user_id UUID,
  filename TEXT, url TEXT, mime TEXT, size INT,
  created_at TIMESTAMPTZ
)

note_versions(
  id UUID PK, note_id UUID, content TEXT, doc_json JSONB,
  created_at TIMESTAMPTZ
)

ai_jobs(
  id UUID PK, user_id UUID, kind TEXT,  -- 'transcribe'|'chat'|'image'
  provider TEXT, input_ref TEXT, result_ref TEXT,
  cost NUMERIC, created_at TIMESTAMPTZ
)

8. API(MVP)

POST   /auth/register          註冊
POST   /auth/login             登入
POST   /auth/refresh           刷新 token

GET    /notes?parent=          列出(樹)
POST   /notes                  建立
GET    /notes/:id              詳情(含 content)
PUT    /notes/:id              儲存(含 format/content)
PATCH  /notes/:id/move         移動/排序
DELETE /notes/:id              刪除(軟刪 → 30 日回收站)
POST   /notes/:id/import       匯入 .md / .html
GET    /notes/:id/export?fmt=  匯出 md | html

POST   /upload                 附件上傳
GET    /files/:id              附件下載

POST   /ai/transcribe          語音 → 文字(multipart audio)
POST   /ai/chat                文字輔助
POST   /ai/image               圖片生成

9. 里程碑

里程碑路線圖

里程碑 內容 粗估
M0 倉庫 scaffold(Next.js + Postgres + Docker)+ 登入/註冊 + 筆記樹 CRUD 1 週
M1 MD 編輯器(Tiptap)+ 自動儲存 + .md 匯入/匯出 1 週
M2 HTML 雙格式(CodeMirror + sandbox 預覽 + .html 匯入/匯出) 3–5 日
M3 語音板(Web Speech API 先行,粵語測試) 3–5 日
M4 AI 閘道(文字輔助 + 圖片生成);開始 Plan A 遷移評估 1 週
M5 faster-whisper 自託管引擎、歷史版本、PWA 打磨、內容遷移工具 持續
M6 Yjs 即時同步、行動端體驗 後期

10. 風險與待決定

# 問題 影響 建議
Q1 部署喺邊?(家用伺服器 / VPS?) 決定 domain、HTTPS、公網 IP、成本 待你確認;M0 前定好
Q2 粵語準確度係咪硬需求? 係 → 語音板直接上 Whisper(yue);唔係 → Web Speech API 先 建議 M3 兩套都測一次先決定
Q3 AI 費用上限? 圖片生成較貴 用家自帶 key + 每次調用記錄成本;本地模型 fallback
Q4 現有內容格式係咩?(Notion 匯出 / MD 檔案 / 其他) 決定匯入工具設計(R9) 你話我知格式,M5 做對應 importer
Q5 MD ↔ HTML 雙向轉換損耗 複雜 block(表格/嵌入)轉換可能失細節 匯入/匯出要一組測試用例;Plan A 可以徹底解決
Q6 單人用定多人用? 影響權限系統複雜度 目前按「個人 workspace、多裝置」設計

11. 下一步

✅ 2026-10-18 更新:Prototype v0.1 已部署 — https://5211.qrhk.app/(landing + 登入 + 筆記 CRUD,手機/桌面響應式)。 設計文件:https://5211.qrhk.app/plan.html | 模擬介面:https://5211.qrhk.app/mockup/ 代碼位置:~/server/running/tbook/。技術棧由 Next.js + Postgres 簡化做 Node 24 + 內建 SQLite(零依賴),Postgres 留到正式化。

  1. 審閱 prototype:建/改/刪筆記、匯出 .md、深色模式、用 iPhone 試一試
  2. 你確認 Q1/Q2(部署環境、語音引擎優先級)
  3. M1:強化編輯 — 待辦 block、表格 block、圖片上傳、拖曳排序
  4. M3 前置:語音板 30 分鐘 POC(Web Speech API 錄粵語,睇準確度)