尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A collaborative web application for planning trips: itinerary, reservations,
pre-trip prep tasks, shared expenses, documents, and organizer invitations,
all scoped per trip with row-level security in Postgres.
Live at travel-organizer-zeta.vercel.app.檢視完整 README ↗A collaborative web application for planning trips: itinerary, reservations, pre-trip prep tasks, shared expenses, documents, and organizer invitations, all scoped per trip with row-level security in Postgres.
Live at travel-organizer-zeta.vercel.app.
.ics calendar file
with the trip's own timezone attached to each event./api/health endpoint for Supabase and the
reminder service.docs/security/rls-audit.md)docs/operations/incident-investigation.md)src/
app/ # Routes, layouts, and API routes (App Router)
api/ # /api/cron/task-reminders, /api/health, /api/trips/[id]/itinerary.ics
auth/ # sign-in, sign-up, forgot/reset password, callback
dashboard/ # trip list, search/filter/sort, profile, invitations
trips/[tripId]/ # trip detail: itinerary, reservations, tasks, expenses, docs, organizer
components/ # Shared UI: shadcn primitives (ui/), theme toggle, confirm-delete dialog, etc.
features/ # One module per domain, each with actions.ts, validation.ts, and tests:
attachments/ auth/ comments/ expenses/ invitations/ itinerary/
notifications/ participants/ realtime/ reminders/ reservations/ tasks/ trips/
i18n/ # next-intl request config, locale cookie helpers, setLocale action
lib/ # Supabase clients (server/client/proxy), timezone helpers, cn()
messages/ # pt.json / en.json translation catalogs
supabase/
migrations/ # SQL migrations (schema, RLS policies, RPCs)
tests/ # pgTAP RLS authorization tests
e2e/ # Playwright end-to-end and accessibility specs
docs/
security/ # RLS authorization audit
operations/ # Incident investigation workflow
Requirements: Node.js 22+ (CI and production run Node 22; Node 20 works but
@supabase/supabase-js prints deprecation warnings), npm, and Docker
(only needed to run Supabase locally for real auth/data or the e2e suite).
npm install
cp .env.example .env.local # points at local Supabase defaults
npm run dev
Open http://localhost:3000. Without a running local
Supabase instance, pages that require auth/data will fail — start one with
npm run supabase:start (see below) if you need real sign-up/sign-in.
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Supabase project connection (client + server) |
SUPABASE_SERVICE_ROLE_KEY | Server-only key used by the reminder cron to bypass RLS |
RESEND_API_KEY, REMINDER_EMAIL_FROM | Transactional email for invitations and task reminders |
CRON_SECRET | Authorizes Vercel's call to /api/cron/task-reminders and /api/cron/overdue-tasks |
NEXT_PUBLIC_APP_URL | Public base URL used in email links and calendar exports |
VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT | Web push (server-side signing). Generate a pair with npx web-push generate-vapid-keys |
NEXT_PUBLIC_VAPID_PUBLIC_KEY | Same value as VAPID_PUBLIC_KEY, exposed to the browser for pushManager.subscribe() |
SENTRY_DSN, NEXT_PUBLIC_SENTRY_DSN | Sentry error reporting (server and client) |
SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN | Build-time only, for source map upload — not needed for local dev |
Never expose the service-role key, Resend key, or Sentry auth token through
NEXT_PUBLIC_ variables. Reminder delivery failures are logged with only a
technical failure code and delivery ID, never trip content or recipient
email (see the incident-investigation doc).
npm run supabase:start # starts local Supabase (requires Docker)
npm run db:reset # (re)applies every migration to the local database
npm run supabase:stop
Create a new migration with npm run db:diff -- <name> or by hand under
supabase/migrations/. Migrations are applied to production explicitly with
npm run db:push against the linked project — pushing to main does not
apply them automatically.
npm run lint
npm test # unit/component tests (Vitest)
npm run build
npm run test:db # pgTAP RLS tests, requires local Supabase running
npm run test:e2e # Playwright, requires local Supabase running (see e2e/README.md)
The same checks (lint, test, build, then test:db + test:e2e against
a fresh local Supabase instance) run in GitHub Actions for every pull request
and push to main.
Production runs on Vercel, but automatic deploy-on-push is disabled
(vercel.json sets git.deploymentEnabled: false) since database
migrations must be pushed to Supabase explicitly and in order with the code
that depends on them. To ship a change once its PR is merged to main:
npm run db:push # apply any new migrations to production first
vercel deploy --prod
Then confirm /api/health returns {"status":"ok"} and check Sentry/Vercel
runtime logs for errors.
main (e.g. agent/<short-description>).