WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.