WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Gift Concierge: product planning workspace
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗One app for three products (T19): gift lists (live, formerly the GiftsAF repo), Gift Concierge (being built) and scan-to-gift (later). Gift Concierge is an app that keeps track of friends and family, what they like, and the dates that matter. It picks gifts for those dates and buys them, with as much or as little automation as the user wants and safeguards so nothing gets purchased without time to approve.
| Folder | Purpose | Status |
|---|---|---|
planning/ | Product discovery: PRD (approved 2026-10-17), decisions log, research, platform strategy (roadmap and go-to-market), longer-term ideas | Complete |
design/ | Technical design (approved 2026-10-17), decisions log. Spike write-ups go in design/spikes/, look and feel in design/ui.md (mock-ups in design/mockups/), and ticket specs and build plans in design/plans/ (start from the template). | Complete |
.claude/ | Shared Claude Code settings (turns on the Superpowers plugin; runs the local setup check at session start) | Done |
apps/web/ | The one web app (Next.js). Products live in modules/lists and modules/concierge; see its README | Lists live; concierge from Wave 2 |
apps/extension/ | Chrome capture extension: save what's on screen to a person. How to build and load it is in its README | MVP built (ALL-22), loaded unpacked |
packages/core/ | Pure shared logic (dates, deadlines, budgets) and database types | W1-5 |
supabase/ | Database migrations and local Supabase settings (config.toml) | Lists tables today |
scripts/ | Repo tooling, such as dev-check.mjs (the local setup check) | Done |
spikes/ | Throwaway Wave 1 experiments (Zinc, AI, email) | Reference only |
Install Claude Code, clone this repo, and open Claude Code in it.
Trust the folder when asked, and accept the prompt to install the Superpowers plugin. It's required for all development here (.claude/settings.json turns it on). If no prompt appears, run /plugin install superpowers@claude-plugins-official and restart Claude Code.
Set up your machine for local development (next section). Claude Code checks this every time a session starts and walks you through anything missing.
Check your machine any time with pnpm dev:check. It lists what's missing and how to fix it on Windows, Mac or Linux. Claude Code runs the same check when a session starts (a SessionStart hook in .claude/settings.json) and offers to walk you through any gaps, so after pulling a change that adds a new requirement, your next session will tell you.
| You need | Why | How to get it |
|---|---|---|
| Node 22+ | Runs everything | Windows: winget install -e --id OpenJS.NodeJS.LTS · Mac: brew install node@22 |
| pnpm | Package manager for this repo | npm install -g pnpm |
| Dependencies | Includes the Supabase CLI, pinned in package.json, so there's nothing to install globally | pnpm install from the repo root |
| Docker | The Supabase CLI runs a full local Supabase (database, auth, storage) in Docker containers | Windows: wsl --install --no-distribution as admin, restart Windows, then winget install -e --id Docker.DockerDesktop, open Docker Desktop and accept its terms. Mac: in Terminal, brew install --cask docker-desktop (it asks for your Mac password), then open Docker Desktop and accept its terms. |
| Playwright's Chromium and WebKit | Run the browser tests (apps/web/e2e/) as an Android phone (Chromium) and an iPhone (WebKit, Safari's engine) | pnpm --filter @gifts-af/web exec playwright install chromium webkit |
Local database. With Docker Desktop running:
pnpm supabase start # first run downloads images (a few minutes); applies supabase/migrations/
pnpm supabase status # local URLs and keys; Studio (the database UI) is at http://127.0.0.1:54323
pnpm supabase db reset # rebuild the local database from the migrations, e.g. after pulling new ones
pnpm supabase stop # stop the containers; your local data is kept
pnpm db:test # run the database tests in supabase/tests/ (privacy rules, keys, cascades)
pnpm db:types # regenerate packages/core/src/database.types.ts after changing the schema
Write new migrations with pnpm supabase migration new <name> and test them locally before they go to dev or prod. Local settings live in supabase/config.toml. Every new user-owned table needs user_id, its privacy rule and a test in supabase/tests/ (see design/decisions.md T26). CI runs pnpm db:test and fails if the generated types are stale.
Before the first migration push to a hosted project (dev or prod): config.toml only exposes the concierge and lists schemas locally. On each hosted project, add both under Project Settings > Data API > Exposed schemas (admin, as allensforever711), or the app's queries fail with PGRST106. Do it right after pushing the migration that creates the schema, never before. Exposing a schema that doesn't exist yet takes the whole Data API down (every request gets a 503; tested locally on 2026-10-25). That project also needs Postgres 15 or later; the migrations use on delete set null (column).
Browser tests (Playwright): with the local database running, pnpm --filter @gifts-af/web e2e. They sign in as a throwaway local account (created for you, email and password, since local Supabase has no Google) at phone width (375 px). If pnpm dev is already running on port 3100 it's reused; otherwise one is started. CI runs them against a production build (e2e job).
Running the web app: follow apps/web/README.md to link Vercel and pull the environment variables, then pnpm dev. Before a PR, pnpm lint && pnpm typecheck && pnpm test && pnpm build (CI runs the same).
Deploys: Vercel project gift-me (team GiftsAF, slug gift-me3) builds apps/web from this repo. Every push to main deploys to production; every other branch gets a preview URL.
| Environment | Database | Used by |
|---|---|---|
| Local | Supabase in Docker (pnpm supabase start) | Your machine, when you point apps/web at it |
dev | Supabase project gift-me-dev (ref bcemtqvdbrrgiipzggyw) | pnpm dev with pulled Vercel variables, and every PR preview |
prod | Supabase project gift-me (ref pegtrucfuaaufqvsavpb), GiftsAF's original project with real users | Production (main) only, at https://giftsaf.com (www redirects there; the old https://gift-me-beige.vercel.app still works) |
NEXT_PUBLIC_GIFT_SUPABASE_* (prod) to every environment. Development and Preview also have NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY set to dev, and apps/web/lib/supabase/env.ts reads those first. The integration store (Vercel → Storage → gift-me) is connected to Production only, so prod's server-side keys stay off developer machines.dev → prod. Sign in once with pnpm supabase login (in a real terminal; it opens a browser, sign in as allensforever711). Then pnpm supabase link --project-ref <ref> and pnpm supabase db push --linked. Check what's linked with pnpm supabase migration list --linked before pushing. No database password is needed. Both dev and prod record the four lists migrations as applied (prod's were pasted in by hand and marked applied with migration repair on 2026-10-25).dev and prod (2026-10-25). Since ALL-14 (2026-11-01) the consent screen shows GiftsAF with giftsaf.com as an authorized domain, and prod's Auth Site URL is https://giftsaf.com (redirect URLs: https://giftsaf.com/** plus the old gift-me-beige.vercel.app). One OAuth client, "Supabase (dev + prod)", in the Google Cloud project gift-me (allensforever711), redirects to both projects' /auth/v1/callback. The consent screen is in testing mode, so only listed test users can sign in. Add people under Google Auth Platform → Audience → Test users. The secret lives only in Google Cloud and the Supabase dashboards. Local Docker Supabase stays email-only, so nobody needs the secret; test Google sign-in on dev or a PR preview. dev's redirect URLs allow http://localhost:3000/** and every preview (https://*-gift-me3.vercel.app/**).dev's Vault as vercel_preview_bypass. Send it as the x-vercel-protection-bypass header, e.g. from pg_net, which was tested on 2026-10-25. It never opens production.Where new docs go, how to write them, and when to push straight to main versus open a PR are in CLAUDE.md. Claude reads it automatically, and it's written for people too. Other AI tools read AGENTS.md, which points them to it. The standing rule for everyone: no work without a Linear ticket, and no ticket done without its test evidence posted on it (T44).
gift-mevercel env pullapps/web/.env.examplevercel env pullRESEND_API_KEYHOLIDAY_LOGO_DATESNEXT_PUBLIC_TURNSTILE_SITE_KEYTURNSTILE_SECRET_KEYNEXT_PUBLIC_GOOGLE_CLIENT_IDZINC_API_KEYSUPABASE_SECRET_KEYdevGIFT_SUPABASE_SECRET_KEYpg_cron and pg_net are turned on in dev but not yet in prod. The round engine (ALL-28) should turn them on everywhere with a migration (create extension if not exists …).