尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗Private Hebrew book library with discovery recommendations, for a small group of invited users. The web app is static HTML and ES modules; catalog and recommendation logic run in Supabase Edge Functions against a shared Postgres cache.
Product decisions live in docs/assignment.md. Technical design is in ARCHITECTURE.md and docs/architecture/.
| Source | Role |
|---|---|
| Simania (official MCP, no auth) | Hebrew catalog: search, details, covers, community rating. Shelves hold Simania books only. |
| Hardcover (GraphQL, server secret) | Canonical work identity, similarity lists, genres and moods for recommendations. |
| Wikidata, NLI (fallback) | Bridge Hebrew titles and original titles in both directions. |
Provider secrets (for example HARDCOVER_API_KEY) stay in a local env file and never reach the browser.
public/): talks to Supabase Auth and Postgres via supabase-js; no direct calls to Simania, Hardcover, Wikidata or NLI.supabase/functions/): add-book, book-details, recommendations, link-edition, invite-user, plus shared code in _shared/. Simania is called from the browser (public/js/simania.js) because its Cloudflare blocks Supabase server IPs.supabase/migrations/): shared catalog cache and per-user library tables with RLS.public/ web app (static files)
design/library.html approved visual design (reference)
prototype/test-page.html earlier test page (reference)
supabase/migrations/ SQL migrations
supabase/tests/ pgTAP database tests
supabase/functions/<name>/ one folder per Edge Function
supabase/functions/_shared/ shared Deno code; types.ts is the contract
tests/functions/ Deno unit tests (mocked fetch)
tests/web/ node --test for pure web modules
scripts/ verification and local serve helpers
docs/contract.md interface contract between lanes
tasks/ harness task briefs
harness.yaml settings for the agent harness (installed separately)
Requirements: Docker Desktop and Node.js (LTS).
Install dependencies:
npm ci
Start the local Supabase stack once (API on port 54321, Studio on 54323). All harness worktrees share this stack:
npm run supabase:start
Serve Edge Functions with your secrets file (must include HARDCOVER_API_KEY). By default the serve script looks for ../book-discovery-plan/.env.local; override with BOOKNOOK_ENV_FILE:
# bash
export BOOKNOOK_ENV_FILE=/path/to/.env.local
npm run functions:serve
# PowerShell
$env:BOOKNOOK_ENV_FILE = "C:\path\to\.env.local"
npm run functions:serve
See supabase/functions/.env.example for the expected variable names.
Serve the web app:
npm run web:serve
Open http://127.0.0.1:4175.
Inviting users and resetting the database locally are described in docs/setup.md.
| Command | What it does |
|---|---|
npm run check:functions | Deno type-check all Edge Functions |
npm run test:functions | Deno unit tests (tests/functions/, stubbed fetch) |
npm run test:web | node --test for pure web modules |
npm run test:db | supabase db reset then pgTAP tests (needs local stack) |
npm run check:contract | Contract presence check |
npm run verify:integration | Integration gate against local stack and live APIs |
Automated tests do not call Simania, Hardcover, Wikidata or NLI; only the integration gate does.
Development tasks are executed by the agent harness (the harness command, from the private agent-harness repo) from task briefs under tasks/. Typical commands:
harness status
harness run <SPRINT>
harness resume <SPRINT>
harness failure <SPRINT>
Full orchestration details, safety rules and CLI reference: README.md and HARNESS-OPERATOR.md in the agent-harness repo.