WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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