AlphaFold 開放學習工具。主題 01 = 肌少症網絡(IA 可容多主題)。Phase 1 = 前端 + 最小後端代理。
/tools/alphafold + /en /ja /zh-cn)src/components/alphafold/AlphaFoldHub.astro(吃 lang prop)+ 字典 src/i18n/alphafold.ts(zh-Hant 母版 + alphafold.{en,ja,zh-cn}.json 機器翻譯,待 Paul 覆核)+ 4 薄路由。語言中立結構(座標/accession/蛋白名/顏色/天數)在元件、譯文在字典。改文案改字典(zh-Hant 改 .ts、其餘改對應 .json),別動元件邏輯。client 端字串經 <script define:vars> 注入。改任一語頁面內容記得 bump CACHE_VERSION(尤其 zh-Hant 的 hreflang/切換器)。is:inline vanilla JS(忠實移植 Cowork 定稿原型);3Dmol.js(jsDelivr CDN)paulkuo-ticker(api.paulkuo.tw)新增三個公開代理端點(見下)AlphaFold 學習中心 Phase 1)af- / af,且包在 .af-hub 容器:主站全域 CSS 有 .hero{display:flex}、.card、.btn、.panel、.tag 等同名規則會「反向滲入」同名元素(實測把 hero 擠成直排)。用 <div> 取代 header/section/footer 元素、CSS 變數掛 .af-hub(非 :root)避免覆蓋主站變數。改版時別新增未前綴的 class。is:inline script + <style is:global>:innerHTML/createElement 建立的元素拿不到 Astro scoped 屬性,scoped <style> 匹配不到 → 用 global(已前綴,不外洩)。cdn.jsdelivr.net/npm/[email protected],CSP 白名單):原型用的 3Dmol.org 不在 CSP script-src 白名單。defer + ensure3Dmol() 輪詢,非阻塞。api.paulkuo.tw),前端不直連 EBI/UniProt:主站 CSP connect-src 只放 self + api.paulkuo.tw;代理另解 CORS + 邊緣快取 + 版本無關。alphafold.ebi.ac.uk/api/prediction/{acc} 取當前 pdbUrl 再抓,避免 pinned 版本靜默 404。worker/src/protein.js,公開、無認證、邊緣快取、CORS *)GET /api/protein/search?q= → 名稱/基因/accession → 候選(reviewed 優先)GET /api/protein/:uniprot → 正規化事實 JSON(gene/name/species/length/function/localization/domains/disease/interactions/pdb_refs/alphafold_entry)GET /api/af/:uniprot → AlphaFold PDB 結構(text/plain)^[A-Z0-9]{6,10}$ 先驗證再建上游 URL(SSRF 防護)。bump PROXY_CACHE_VERSION 可整池失效。/tools/alphafold 線上可開、色系與主站一致(hard refresh 驗;Phase 1 zh-only)P01308(胰島素)能生成速查卡(事實 + 3D + pLDDT);查無結構有明確 empty state/health)確認無回歸life,進知識星圖)— #3 決策已定 wiki entity,尚未實作index.astro — 整頁(markup + <style is:global> + <script is:inline>)../../../../worker/src/protein.js — 代理端點;worker/src/index.js router 內接三條路由