尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Create event websites (weddings, birthdays, celebrations…) and share them with guests. Built with Next.js 16 (App Router), TypeScript, Tailwind 4, PostgreSQL, Prisma 7, Auth.js v5, Zod.
Status: website, auth (email + Google), dashboard, event wizard/editing, templates, public pages and live streaming through LiveKit Cloud are done. No recording, replay, payments or storage yet.
npm install
createdb eventlive
cp .env.example .env.local # fill DATABASE_URL and AUTH_SECRET (openssl rand -base64 32)
npx prisma migrate dev
npm run dev
No Docker needed. Never commit .env.local.
Create a project at https://cloud.livekit.io and set LIVEKIT_URL (wss://…), LIVEKIT_API_KEY, LIVEKIT_API_SECRET in .env.local.
/event/[slug]/live → START LIVE. Guests watch on /event/[slug] (no account).POST /api/livekit/token decides the role on the server: broadcaster needs a logged-in owner of the event
(else 401/403); everyone else only ever gets a subscribe-only token. Viewer tokens are issued only while LIVE.event_<eventId>. Viewer count comes from LiveKit participants (identities starting guest-).localhost works on the same computer, but a phone using your LAN IP over
plain http cannot access the camera. Use npx next dev --experimental-https or a tunnel such as Cloudflare Tunnel or ngrok,
and set AUTH_URL to that https address.Owners upload on the event edit page. Files go directly from the browser to R2 (presigned URLs); the server checks login, ownership, file type and size first, then verifies the object before saving it.
[{
"AllowedOrigins": ["http://localhost:3001", "https://your-app.vercel.app"],
"AllowedMethods": ["PUT", "GET", "HEAD"],
"AllowedHeaders": ["*"],
"MaxAgeSeconds": 3600
}]
.env.local (and Vercel env vars): R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY, R2_BUCKET, R2_PUBLIC_URL (no trailing slash).Limits: photos 10 MB (max 30), card 10 MB (1), videos 500 MB (max 3, MP4/WebM/MOV).
http://localhost:3000/api/auth/callback/google (use your real port, e.g. 3001, and add your production URL later)..env.local: AUTH_GOOGLE_ID=… and AUTH_GOOGLE_SECRET=…, then restart npm run dev.The "Continue with Google" button appears only when AUTH_GOOGLE_ID is set. Only Google-verified emails are accepted, and a Google sign-in with an email that already exists signs into that same account.
src/app — routes: /, /login, /register, /dashboard, /dashboard/events/[id], /create-event, /event/[slug], /event/[slug]/livesrc/lib/templates.ts — template themes; one <EventSite> renders all of themsrc/lib/event-types.ts — one flexible Event model, per-type labels (Wedding = bride/groom)src/lib/actions — server actions (auth, events) with Zod validation and ownership checksprisma/schema.prisma — User, Event, EventSchedule, LiveStreamnpm run typecheck && npm run lint && npm run build