Community程式設計與開發github.com

hasaneks/web-craft-arch

React 網頁應用(Next.js App Router 或 React + Vite)的架構與整合規則:伺服器與客戶端元件邊界、統一的 API 層與型別化錯誤模型、狀態所有權、react-hook-form + Zod 以及伺服器錯誤映射至表單欄位、狀態邊界(loading.tsx、error.tsx、Suspense)、i18n 架構(語言環境註冊表、解析順序、URL 策略、請求範圍的語言環境、目錄、套件與日期語言環境)、RTL 與邏輯屬性、身份驗證、XSS、CSRF、秘密與快取隔離。

web-craft-arch 是什麼?

此技能提供了一套全面的架構規則和參考資料,專為使用 Next.js App Router 或 React + Vite 構建的 React 網頁應用程式而設計。它強制執行明確的伺服器與客戶端元件邊界,以確保交互式區塊保持小巧且安全,並建立一個帶有型別化錯誤模型的統一 API 層。該技能指導 react-hook-form 與 Zod 在表單處理中的整合,將伺服器端驗證錯誤映射到特定表單欄位,並防止重複提交。它還詳細說明了狀態邊界(通過 loading.tsx、error.tsx 和 Suspense)以實現穩健的錯誤處理,並提供了一個完整的 i18n 架構,包括語言環境註冊表、解析順序、請求範圍的語言環境以及針對 BCP 47 標籤和格式化進行的目錄管理。安全性方面,它涵蓋了伺服器端授權、XSS、CSRF 保護和快取隔離,同時還包括 RTL 支援、主題和 SEO。支援的套件和框架包括 shadcn/ui、Ant Design、Material UI,以及 Next.js App Router 和 React + Vite 的專用適配器。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/hasaneks/web-craft/tree/HEAD/skills/web-craft-arch

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

網頁應用程式架構

請先閱讀 web-craft。僅載入任務所需的參考資料;套件和框架適配器僅用於所選的套件和框架。

對照表

主題參考資料
伺服器與客戶端元件、BFF、環境變數與秘密邊界references/server-client.md
API 層、錯誤模型、狀態所有權、表單、樂觀 UI、URL 狀態references/data-forms.md
載入、錯誤和未找到邊界、重試、離線、骨架計時references/states.md
i18n:註冊表、解析、URL、目錄、格式化、後端標頭references/i18n.md
RTL、邏輯屬性、方向性圖示、入口references/rtl.md
身份驗證、授權、XSS、CSRF、Cookie、快取隔離、個人資料references/auth-security.md
主題:使用者偏好 vs 應用的主題、系統變更、無閃爍references/theming.md
公開頁面的 SEOreferences/seo.md
GEO:在 AI 搜尋和助手工具中的可見性references/geo.md
Next.js App Router 適配器references/fw-next.md
React + Vite 適配器references/fw-vite.md
shadcn/ui 適配器references/kit-shadcn.md
Ant Design 適配器references/kit-antd.md
Material UI 適配器references/kit-mui.md
搭配 node-craft(或任何 OpenAPI)後端使用references/node-craft-contract.md
官方來源與審查日期references/sources.md

普遍適用的規則

  1. 按需定義邊界。 元件之所以成為客戶端元件,是因為它需要互動性、瀏覽器 API 或客戶端狀態,而非預設如此。保持互動式區塊小巧。切勿將僅供伺服器使用的程式碼、ORM 客戶端或秘密引入客戶端程式碼;公開的環境變數並非秘密。
  2. 單一 API 層。 一個 fetch 客戶端、一個以穩定代碼和狀態為鍵的型別化錯誤模型、一種身份驗證行為。功能不應自行建構 fetch 和重試邏輯。伺服器資料位於查詢/快取層,全域客戶端狀態位於小型 store 或 context 中,表單狀態位於表單工具中,本地 UI 狀態位於元件內。模擬資料源透過配置啟用,僅用於開發和測試,絕不透過編輯功能來切換;不受信任的回應在執行時期進行解析。
  3. 表單。 除非專案使用其他工具,否則使用 react-hook-form + Zod。設定 mode: 'onTouched'、reValidateMode: 'onChange',聚焦並滾動到第一個錯誤,透過 setError 處理伺服器欄位錯誤,錯誤後保留值,禁止雙重提交。伺服器始終是驗證的主體。
  4. 狀態具有邊界。 路由層級的載入和錯誤邊界,以及資料串流處的本地 Suspense;一個元件失敗不應導致整個頁面空白。
  5. i18n 是架構的一部分。 使用真實的引擎、語言環境註冊表(BCP 47 標籤、方向、目錄、顯示名稱)、除非另有選擇否則採用英文後備、伺服器上的請求範圍語言環境、伺服器與客戶端使用相同的初始語言環境、按語言環境和命名空間載入目錄、從應用程式語言環境對應套件和日期語言環境。
  6. 安全性屬於伺服器端。 在後端進行授權。對您渲染的任何 HTML 進行消毒。Cookie 工作階段需要 CSRF 保護。個人回應絕不進入共用快取;語言環境和用戶相關的回應應變化其快取鍵。
  7. 公開頁面應易於找到。 在伺服器上渲染語言環境正確的中繼資料,每種語言都有標準網址、僅針對實際對應頁面提供 hreflang 替代連結、網站地圖、與可見內容相符的結構化資料。GEO 從此開始:可索引、可引用的內容以及明確的 AI 爬蟲政策。不保證排名或引用。
  8. 套件應被適配,而非包裹。 主題和權杖來自產品的設計決策。僅為重複的產品行為或固定 API 才包裹套件元件。請勿在套件自身的動畫系統上疊加第二個動畫系統。

完成條件

應用 web-craft → 完成,再加上:客戶端 bundle 中不得包含秘密或僅供伺服器使用的模組;不同語言環境或不同使用者的兩個並行請求不得混合資料;首次渲染應使用正確的語言和主題;每個聲稱的套件/框架組合均經過實際驗證。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能