尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗This is a Next.js project bootstrapped with create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
Open http://localhost:3000 with your browser to see the result.
This repo includes a GitHub Actions workflow at .github/workflows/supabase-keepalive.yml that records a heartbeat in the app_keepalive_heartbeats table every Monday and Thursday.
To enable it:
supabase/migrations/20260405000001_add_app_keepalive_heartbeats.sql has been applied (it is part of the normal migration chain).SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYworkflow_dispatch to verify it works before relying on the schedule.The schema lives in supabase/migrations/ and is the single source of truth.
20260401000000_initial_schema.sql is the baseline; everything after it is an
incremental change. Supabase tracks what has run in
supabase_migrations.schema_migrations, so production and this folder stay in sync.
To change the schema:
supabase/migrations/<YYYYMMDDHHMMSS>_<what_it_does>.sql
(for example via supabase migration new <name>). Never edit or rename a file that
has already been applied — write a new one instead.if not exists, drop policy if exists before create policy).supabase db push, or ask Claude to apply it through the Supabase
connector (apply_migration), using the same version and name as the file.Do not run schema changes by hand in the SQL editor — they won't be recorded and the history drifts.
New places get their cover photo copied into Supabase Storage
(restaurant-review-photos/covers/) by /api/place-lookup. Older rows stored the
googleusercontent URL that Google's photo endpoint redirects to, and those expire.
To move existing covers into Storage (dry run first, then --apply):
node --env-file=.env.local scripts/backfill-cover-photos.mjs
node --env-file=.env.local scripts/backfill-cover-photos.mjs --apply
Needs SUPABASE_SERVICE_ROLE_KEY and GOOGLE_MAPS_API_KEY in .env.local. It skips
rows already in Storage, so it is safe to re-run. Until it has run, cards with an
expired photo fall back to a visit photo, then to a tile in the category colour.
Tastebook is a standard Next.js app with server routes and a proxy (middleware), so
it needs a host that runs a Node.js server — any of Vercel, Netlify, Cloudflare
Workers (via OpenNext), or a plain container running npm run build && npm run start.
Static hosting (GitHub Pages, S3) will not work.
| Name | Where it is used |
|---|---|
NEXT_PUBLIC_SUPABASE_URL | Browser and server — Supabase project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | Browser and server — Supabase anon (publishable) key |
GOOGLE_MAPS_API_KEY | Server only — /api/place-lookup (Places API) |
SUPABASE_SERVICE_ROLE_KEY is not needed by the app. It is only used by the
keepalive GitHub Action, as a repository secret.
https://<new-domain>/auth/callback to Redirect URLs.
Sign-in is email + password, so this only affects the confirmation link sent on
sign-up.