OaboutAI 是一個雙語(EN / zh-TW)的 AI 治理與安全知識庫。系統採用「公開程式碼 + 私有內容資料」架構,兼顧可維護性與內容保密需求。
Production: https://oaboutai.vercel.app/
- 目的:將 AI 政策、治理、安全文獻標準化,提供可檢索、可追蹤、可擴充的知識系統。
- 使用者能力:登入、列表/單篇瀏覽、Topic/Keyword/Type 篩選、收藏、中英切換。
- 內容策略:主 repo 不追蹤受保護原文;文章來源由 private repo 在 build 階段注入。
- Frontend shell: Hugo(頁面框架、導覽、版型)
- Auth, access control, favorites: Supabase Auth + RLS tables
- Content source: private repo
cclljj/OaboutAI_data(Obsidian markdown) - Pipeline: private Obsidian markdown -> validate/parse -> upsert
public.articles-> frontend query
關鍵原則:
- 未登入不應直接暴露受保護內容流程。
- production deploy 必須成功讀取 private data repo 才可發布。
/items/:slug既有連結需持續 rewrite 到/item/?slug=:slug。
core/: 共用框架(layouts/assets/scripts)apps/oaboutai/: app 組態與內容殼層scripts/: monorepo 入口腳本(compose / validate / build)docs/: schema、操作手冊、系統測試清單.github/workflows/docs-site-ci.yml: CI/CD 主流程
Current count: 5
- AI Policy(AI 政策)
- AI Governance(AI 治理)
- AI Safety(AI 安全)
- Agentic AI(代理式 AI)
- Physical AI(物理 AI)
python3 scripts/compose_site.py --app-id "${APP_ID:-oaboutai}" --output /tmp/oaboutai-site --clean
cd /tmp/oaboutai-site
python3 scripts/sync_topics.py
python3 scripts/auto_resolve_content_issues.py
python3 scripts/validate_content.py
npx --yes hugo-bin server -DOpen: http://localhost:1313/
Workflow: .github/workflows/docs-site-ci.yml
validate-and-build:
- Compose site(不依賴 private data)
- Sync topics / metadata checks
- Hugo build + output verification
deploy-vercel(main push 或 workflow_dispatch):
- 檢查
VERCEL_TOKEN、OABOUTAI_DATA_REPO_TOKEN - 驗證可讀取
cclljj/OaboutAI_data - Compose with private data injection
- Sync topics + auto resolve + validate content metadata
- Upsert Obsidian content to Supabase
public.articles - Build + deploy to Vercel production
- Post-deploy smoke tests
Required:
public.articles(runtime content)public.favoritespublic.app_userspublic.user_rolespublic.access_allowlistpublic.access_requests
Obsidian section contract (required for each EN/zh-TW file):
## Executive Summary## Detailed Notes## Take-away
Compatibility note:
- DB column keeps
takeaway_htmlname for backward compatibility, while value is markdown parsed from## Take-away.
Topic IDs must be exact and only from:
ai-policyai-governanceai-safetyagentic-aiphysical-ai
Keyword IDs source of truth:
apps/oaboutai/data/keywords.json
Preferred official keyword IDs:
regulation,risk-management,model-evaluation,red-teaming,incident-reportingaudit,standards,safety-cases,governance-framework,public-consultation,sovereign-ai
Validation rules:
primary_topicmust not appear intopics.- keyword IDs are never valid topic values.
- keyword aliases should map to canonical IDs defined in
keywords.json.
GitHub Actions secrets:
VERCEL_TOKENOABOUTAI_DATA_REPO_TOKEN(GitHub PAT,需可讀cclljj/OaboutAI_data)
Runtime/build env (Vercel or CI):
HUGO_SUPABASE_URLHUGO_SUPABASE_ANON_KEYHUGO_SUPABASE_REDIRECT_URLOABOUTAI_ADMIN_NOTIFY_EMAIL(default:cclljj@gmail.com)OABOUTAI_SMTP_USER(建議:cclljj.agent@gmail.com)OABOUTAI_SMTP_PASS(Gmail App Password)OABOUTAI_SMTP_HOST(optional,default:smtp.gmail.com)OABOUTAI_SMTP_PORT(optional,default:465)OABOUTAI_SMTP_SECURE(optional,default:true)OABOUTAI_MAIL_FROM(optional,預設OaboutAI <OABOUTAI_SMTP_USER>)OABOUTAI_REPLY_TO(optional,例如cclljj@gmail.com)RESEND_API_KEY(optional;SMTP 無法使用時的 fallback)OABOUTAI_RESEND_FROM(Resend fallback 用;若啟用 Resend 正式寄送,需已驗證網域)HUGO_VERCEL_ANALYTICS_ENABLED(optional;default:true)HUGO_VERCEL_SPEED_INSIGHTS_ENABLED(optional;default:true)OABOUTAI_DATA_REPO_URL(default:https://github.com/cclljj/OaboutAI_data)OABOUTAI_DATA_REPO_REF(default:main)OABOUTAI_DATA_REPO_SUBDIR(default:obsidian)
- Setup/Deploy: INSTALL.md
- Supabase schema: docs/supabase_schema.sql
- Supabase ops: docs/supabase_operations.md
- Regression checklist: docs/system_test_checklist.md
- Agent contract: AGENTS.md
When maintainers only update cclljj/OaboutAI_data, they must trigger OaboutAI CI/CD via dispatch.
Required in OaboutAI_data:
- Workflow file:
.github/workflows/trigger-oaboutai-cicd.yml - Secret:
OABOUTAI_REPO_TRIGGER_TOKEN - Token type: Fine-grained PAT (recommended)
- Token target repo:
cclljj/OaboutAI - Token minimum permissions:
- Actions: Read and write
- Contents: Read
Quick verification steps:
- Push any change under
OaboutAI_data/obsidian/** - Confirm
trigger-oaboutai-cicdrun is successful (dispatch API should return HTTP 204) - Confirm
cclljj/OaboutAIreceivesdocs-site-ciwith eventworkflow_dispatch - Confirm
deploy-verceljob runs (not skipped)
- 不要將
OABOUTAI_DATA_REPO_TOKEN設成 SSH key;必須是單行 PAT。 - 不要將
OABOUTAI_REPO_TRIGGER_TOKEN設成 SSH key;必須是可呼叫 Actions API 的 PAT。 - 若 dispatch 回傳
Resource not accessible by personal access token(403),表示 trigger token 權限不足。