/agentic-portfolio — 為任何 GitHub 使用者建立具備 AI Agent 且使用免費 LLM 的個人作品集
這項技能會建立 agentic-portfolio 應用程式(Next.js 15 App Router + CopilotKit + /free-llm 生存鏈)。參考實作位於 github.com/wjlgatech/agentic-portfolio — 將其作為範本複製,然後為目標使用者重新填寫 content/ 資料。所有個人資料皆為資料;應用程式程式碼可直接重複使用。
0. 輸入與先決條件
- GitHub 登入名稱(例如
wjlgatech)。若要使用私人倉庫與重點摘要,請執行gh auth status— 使用者必須已通過驗證且具備repo範圍。僅使用公開倉庫則無需驗證。 node >= 18、npm、gh、python3。
1. 擷取活躍倉庫(過去 12 個月)
SINCE=$(python3 -c "import datetime as d;print((d.date.today()-d.timedelta(days=365)).isoformat())")
gh api -X GET 'user/repos?per_page=100&sort=pushed&affiliation=owner' --paginate \
--jq ".[] | select(.pushed_at >= \"$SINCE\") | {name,private,fork,lang:.language,desc:.description,pushed:.pushed_at[0:10],stars:.stargazers_count,url:.html_url}" \
> repos.ndjson
# 若要擷取其他使用者的公開倉庫:gh api "users/<login>/repos?per_page=100&sort=pushed" ...
排除分叉(fork: true)與元倉庫(dotfiles、既有的 portfolio)。
2. 整理至 content/projects.json
針對每個保留的倉庫,輸出 {name, category, highlight, featured, private, language, stars, pushed, url}:
- Category — 歸納為少數幾個類別(例如 Agentic OS · Frameworks & Tooling · AI Products · Faith/Family · Open Knowledge);選擇符合使用者實際工作的名稱。
- highlight — 一行不洩露機密的重點摘要。對於 私人 倉庫:僅提供高階描述,並將
url: null(絕不連結或暴露內部細節)。 - featured — 標記約 15–18 個最強的專案作為預設視圖。
3. 填寫 content/profile.ts 與 content/portfolio.yaml
profile.ts:姓名、標語、使命、價值觀、熱愛的事物,以及 12X 未來實踐(十二項複利紀律)。根據使用者的個人簡介與倉庫主題進行草擬;並清楚標示這是供使用者自行編輯的。portfolio.yaml:控制面板 — 區塊順序、可見性、標籤、主題,以及 文章 列表(初始為空)。擁有者透過與 Agent 對話(「新增我的 LinkedIn 文章...」)或手動方式來填寫文章。LinkedIn 需驗證才能存取 — 請使用者貼上他們的貼文,或接受公開文章 URL 並使用 WebFetch 擷取每個文章。- 在部署時設定
PORTFOLIO_OWNER_TOKEN,以便只有擁有者能套用 Agent 的編輯(訪客僅能檢視)。若未設定,則在本機開發環境中不受限制。
4. 應用程式程式碼 — 從範本複製,無需重寫
可重複使用的部分(對每位使用者皆相同):
app/page.tsx、app/layout.tsx、app/globals.cssapp/api/copilotkit/route.ts+lib/llm.ts(免費 LLM 鏈 — 金鑰僅保留在伺服器端)components/Copilot.tsx、components/Projects.tsx、components/Articles.tsx- 設定檔:
package.json(將 Next 鎖定在修補過的 15.x 版本)、tailwind.config.ts、tsconfig.json、postcss.config.mjs、.env.example
5. 驗證,然後部署
npm install && npm run build # 推送前必須為 GREEN
gh repo create <login>/<repo-name> --public --source=. --remote=origin --push
然後部署至 Vercel(匯入倉庫 → 新增一個免費金鑰,例如 NVIDIA_API_KEY → 部署)。
防護機制
- 絕不洩露私人 IP。 私人倉庫:僅提供重點摘要,
url: null。 - 金鑰保留在伺服器端。 只有
app/api/copilotkit/route.ts會讀取 LLM 金鑰。 - 優先使用免費層級。 維持
lib/llm.ts的順序為 NIM → Groq → Gemini → 付費。 - 推送前建置必須為綠色。 誠實回報建置狀態。
- 倉庫推送需經過人類批准,除非使用者已明確表示「建立並推送」。