尚未检测到更新。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.