Discord Clone 即時通訊平台
FastAPI + WebSocket 打造的全棧即時聊天系統
以 FastAPI 與 SQLModel 為核心、原生 JavaScript ES Modules 前端構成的 Discord 仿作。後端採分層架構(routers / services / schemas),透過 WebSocket 實現即時聊天與在線狀態,並支援伺服器、頻道、私訊、表情回應、檔案上傳、角色權限、審核、稽核日誌與語音會話等 20 餘組 API。涵蓋 JWT 驗證、bcrypt 雜湊、CORS 與速率限制等安全實務。
已驗證 Demo 錄影 1
由 portfolio quality pass 從既有專案 demo 素材複製。
媒體總覽
快速瀏覽這個專案的截圖與錄影展示。
專案連結與 Demo 狀態
專案概覽
## 專案概述 Discord Clone 是一套全棧即時通訊平台,重現 Discord 的核心體驗:多伺服器(Guild)、頻道與分類、即時聊天、私訊、表情回應、檔案分享、在線狀態與語音會話。後端以 **FastAPI + SQLModel/SQLAlchemy 2.0** 為核心,前端則以**原生 JavaScript ES Modules** 元件化構成單頁應用,刻意不依賴前端框架。 ## 架構設計 後端採清晰的分層架構:routers 負責 API 端點、services 封裝業務邏輯、schemas 以 Pydantic v2 做輸入驗證與序列化,三者解耦以利維護與測試。即時功能由自製的 **WebSocket ConnectionManager** 驅動,負責房間連線管理、在線狀態廣播,以及每連線每 10 秒 10 則訊息的速率限制。資料層使用 SQLModel 定義 20 餘張資料表(Guild、Channel、Role、Message、DirectMessage、Reaction、Thread、Ban/Mute/Timeout、AuditLog、VoiceSession 等),並為高頻查詢欄位建立索引。 ## 功能範圍 專案掛載超過 20 組路由,涵蓋驗證、伺服器、頻道、機器人、私訊、反應、檔案、在線狀態、討論串、角色權限、審核、釘選/星標、分類、搜尋、通知設定、伺服器範本、稽核日誌與語音聊天,並提供 /api/health 健康檢查與 Swagger 文件。 ## 安全與效能 身分驗證採 **JWT(python-jose)** 搭配 **passlib/bcrypt** 密碼雜湊;機密改由環境變數載入,CORS 由寬鬆改為來源白名單,並加入輸入清理與速率限制。效能面則導入 SQLAlchemy QueuePool 連線池、索引與訊息歷史的時間分頁。 ## 現況 後端原型已可運行,涵蓋完整領域模型與安全強化;前後端完整接線、PostgreSQL 遷移與 WebRTC 語音串流為後續工作。
我的角色
全端開發者(獨立開發前後端、資料模型與架構設計)
問題背景
想完整實作一套類 Discord 的即時社群通訊系統,需同時處理即時雙向訊息、複雜的權限與審核模型,以及可維護的後端架構,並兼顧安全性與效能。
解決方案
後端以 FastAPI + SQLModel/SQLAlchemy 建立分層架構,將 API 路由、業務邏輯 Service 層與 Pydantic schema 解耦;以 WebSocket ConnectionManager 管理房間連線、在線狀態與速率限制;用 JWT + passlib(bcrypt) 處理驗證,並為高頻查詢欄位加索引、設定連線池與時間分頁。前端採原生 ES Modules 元件化渲染,免框架構成 SPA。
目前成果
完成涵蓋伺服器/頻道/私訊/反應/檔案/在線/角色/審核/搜尋/通知/範本/稽核/語音等 20 餘組 REST 與 WebSocket API 的可運行原型,並落實環境變數化機密、CORS 收斂、輸入驗證與速率限制等安全強化。
作品亮點
- WebSocket ConnectionManager:房間連線追蹤、在線狀態廣播、每連線 10 秒 10 則的速率限制
- 清楚的後端分層:routers(API)→ services(業務邏輯)→ schemas(Pydantic 驗證),便於維護與測試
- 完整 Discord 領域模型:Guild、Channel、Role、Message、DM、Reaction、Thread、Ban/Mute/Timeout、AuditLog、VoiceSession 等 20+ 資料表
- 安全實務:JWT(python-jose)、bcrypt 密碼雜湊、機密改用環境變數、CORS 來源白名單、輸入清理
- 效能優化:SQLAlchemy QueuePool 連線池、高頻欄位索引、訊息歷史時間分頁
- 免框架前端:原生 ES Modules 元件化 SPA,啟動時自動探測可用 port
技術挑戰
- 即時雙向通訊的連線生命週期管理與斷線清理,並避免訊息洪水(速率限制)
- 在單一資料模型中同時支撐頻道訊息與私訊的反應/檔案關聯,並維持查詢效能
- 將早期硬編碼機密與寬鬆 CORS 重構為環境變數化與白名單的安全設定
目標使用者
- 作品集審閱者與面試官
- 需要快速理解專案目的、技術棧與成熟度的技術讀者
技術亮點
- 偵測到的主要技術線索:Python, FastAPI, SQLModel, SQLAlchemy 2.0, Pydantic v2, SQLite, Uvicorn, WebSockets, JWT (python-jose), passlib/bcrypt, JavaScript (ES Modules), HTML5, CSS3, Docker, Nginx
- 已有 README 作為後續補齊案例研究的依據
- 尚未確認公開 GitHub repository,作品集會先標示 GitHub 待補
系統架構
此專案目前由 portfolio catalog pipeline 依 README、Git metadata、package/build 設定與素材線索建立案例頁。正式架構說明仍需依實際 source code 補齊;目前可確認的技術線索包含:Python, FastAPI, SQLModel, SQLAlchemy 2.0, Pydantic v2, SQLite, Uvicorn, WebSockets, JWT (python-jose), passlib/bcrypt, JavaScript (ES Modules), HTML5, CSS3, Docker, Nginx。
資料流程
目前尚未完成可公開的資料流程說明。若此專案含資料處理、AI pipeline 或後端 API,後續應補上 input、processing、storage、UI/output 的端到端流程。
專案結構
discord-clone/ README.md # project documentation, when available source files # implementation reviewed by local audit package/build config # detected capability signals
安裝與執行
This project does not expose a verified runnable web command yet. Review the README/source tree and add exact install, run, test, and build commands before interview use. No verified build command was detected. Treat the current portfolio page as a case-study placeholder until build steps are reviewed.
後續改進
- 補齊正式 README、截圖與 demo recording
- 補上架構圖、資料流程與關鍵技術決策
- 確認 build/test 狀態並更新 portfolio release report
面試說明重點
- 先說明此專案目前的成熟度與可展示範圍
- 聚焦在可驗證的技術棧、程式結構與已完成部分
- 不要宣稱尚未部署、尚未錄影或尚未測試的能力已完成
後續規劃
- 將前後端完整接線並補上 WebSocket 前端初始化
- 由 SQLite 遷移至 PostgreSQL 並導入 Alembic 資料庫遷移
- 補上自動化測試與 CI,並整合語音聊天的實際 WebRTC 串流