一個可部署到 Cloudflare Pages 的互動式成員牆。members/ 裡的照片會變成有重力、碰撞、彈跳與拖曳效果的圓形球體。
- 自動掃描
members/及其子資料夾中的圖片 - 建置時自動縮圖與轉檔:等比縮小至最大 400x400 並轉為 WebP 格式,節省 90% 以上頻寬
- 將所有照片裁切成相同大小的圓形球體
- 圓球總面積最多占容器的 60%,視照片數量及視窗尺寸動態調整
- 模擬重力、碰撞、彈跳、旋轉與摩擦力
- 可用滑鼠或觸控拖曳圓球
- 游標移到圓球上時,照片會變成灰階並顯示不含副檔名的檔名
- 合併到
main後,自動執行圖片優化與打包,並發布至 Cloudflare Pages - Pull Request 會檢查
members/內是否只有合法圖片,通過後自動合併
.
├── .github/workflows/
│ └── validate-and-automerge.yml # 驗證 PR 圖片與自動合併
├── members/ # 成員圖片放這裡(支援 JPG, PNG, GIF, WebP 等)
├── dist/ # 打包與 WebP 優化後的輸出目錄(由 build.js 產生)
├── build.js # 圖片壓縮縮圖(轉 WebP)與靜態網站打包腳本
├── generate-photos.js # 輕量本機圖片清單掃描器
├── photos.js # 本機測試預設檔,請勿手動編輯
├── index.html
├── script.js
├── style.css
└── package.json
- 將個人圖片放入
members/,也可以建立子資料夾。 - 建立新分支並提交變更。
- 推送分支並建立 Pull Request。
- GitHub Actions 會驗證圖片;通過後會啟用自動合併。
- 合併至
main後,自動化腳本會將圖片等比縮小並轉成 WebP 部署至 Cloudflare Pages。
允許的格式:
.jpg .jpeg .png .gif .webp .avif
驗證不只檢查副檔名,也會透過 MIME type(檔案的實際內容類型)確認檔案確實是圖片,因此只把文字檔改名成 .jpg 仍會被拒絕。
一般 Pull Request 只允許修改 members/ 裡的圖片。修改任何 README.md(包含 members/README.md placeholder)、HTML、CSS、JavaScript 或 workflow 都會讓 validate-member-images 失敗;需要維護網站程式時,管理者必須使用 Ruleset bypass 流程。
需要先安裝 Node.js(建議 Node 18 以上)。
npm install
npm run build建置完成後,靜態網頁與壓縮後的 .webp 圖片會輸出至 dist/ 目錄,可直接使用任何靜態檔案伺服器開啟 dist/index.html 進行預覽。
若只想快速確認排版而不進行圖片壓縮:
node generate-photos.js接著直接於瀏覽器開啟專案根目錄的 index.html 即可。
使用 Cloudflare 原生的 Git 整合模式,免設定任何 API Token 或 Secrets:
- 前往 Cloudflare 儀表板 → Compute (Workers & Pages) → Create → Pages → Connect to Git。
- 授權並選取你的 GitHub 儲存庫(例如
bruh0422/gdgoc_git_practice)。 - 建置設定填入:
- Framework preset:
None - Build command:
npm run build - Build output directory:
dist - Root directory:保持空白或
/
- Framework preset:
- 點擊 Save and Deploy 即可完成!
- 前往專案 Settings → Builds & deployments → Build cache 確認已開啟 Build cache(預設為開啟),如此一來每次建置都會快取已壓縮的圖片,實現秒級增量建置!
- 之後每次合併至
main分支,Cloudflare 就會自動拉取最新照片、壓縮轉檔為 WebP,並秒級發布至全球 CDN!
前往 Settings → General → Pull Requests,開啟:
- Allow merge commits
- Allow auto-merge
前往 Settings → Actions → General → Workflow permissions,選擇:
- Read and write permissions
前往 Settings → Rules → Rulesets → New branch ruleset,設定:
- Ruleset name:
Protect main - Enforcement status:
Active - Target branches:Default branch
- Require a pull request before merging
- Required approvals:
0(若需要人工審核可自行提高) - Require status checks to pass:加入
validate-member-images - Block force pushes
- Restrict deletions
第一次設定時,必須先讓 validate-and-automerge.yml 在 Pull Request 中執行一次,GitHub 才會在 Ruleset 選單中顯示 validate-member-images。
- 請勿手動修改
photos.js或dist/photos.js,部署時會由腳本自動重新產生。 - 圖片檔名會顯示在圓球的 hover 狀態;顯示時會自動移除副檔名。
- Pull Request 草稿不會啟用自動合併,改成 Ready for review 後才會執行。
- 從 fork 建立的 Pull Request 可能因
GITHUB_TOKEN權限限制而無法自動合併,但圖片驗證仍可執行。