iArt.ai
AI 모션 그래픽 소프트웨어, 누구나 사용할 수 있는 After Effects 대안, 텍스트 프롬프트로 몇 분 안에 애니메이션·설명 영상 제작
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
📸 Mobile-first disposable camera for weddings — guests scan a QR code, take 30 photos or videos, and they upload straight to a shared Google Drive. No app, no accounts. Next.js 16 + Google Drive API.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Live: https://327photodump.vercel.app/
A mobile-first disposable camera app for weddings. Guests scan a QR code, type their name, and get 30 shots — photos or short videos — that upload straight from their phone to a shared Google Drive folder. No accounts, no app install, no friction.
Each guest gets their own subfolder. The couple gets everything in one place.
When the film is finished, the guest gets a gallery:
Shot count is tracked in localStorage so it survives page refreshes. No accounts and no server-side session.
src/lib/upload-limits.ts.localStorage), not on the server.eslint-config-next)src/
app/
page.tsx # NameEntry → CameraCapture → Gallery
locked/page.tsx # "scan the QR code" screen (proxy rewrite target)
api/
upload-session/ # POST: create a resumable Drive upload session
gallery/guest/ # GET: one guest's files (all same-name folders)
gallery/feed/ # GET: guests ordered by most recent shot
debug/ # GET: auth-chain diagnostics (locked in production)
_lib/validation.ts # request validation (private folder, not a route)
components/ # NameEntry, CameraCapture, Gallery, MyShotsGrid,
# FeedScreen, Lightbox, Thumbnail, ui/ (shadcn)
lib/
google-drive.ts # server-only Drive access
use-guest-session.ts # name + shot count, localStorage with fallback
upload-limits.ts # limits shared by client and server
access-code.ts # guest access code + cookie checks
proxy.ts # guest access gate for every page and API route
types/index.ts # API request/response shapes
__tests__/ # api/, components/, lib/, proxy.test.ts
| Route | Method | Returns |
|---|---|---|
/api/upload-session | POST { guestName, fileName, mimeType, fileSize } | { uploadUrl, folderId } · 400 on invalid input · 500 on Drive failure |
/api/gallery/guest?guestName= | GET | { files } newest first, [] for an unknown guest (never creates a folder) |
/api/gallery/feed | GET | { guests } one entry per name, most recent first |
/api/debug | GET | Auth-chain checks; 404 in production unless ?token= matches DEBUG_TOKEN |
Without a guest access cookie, API routes (except /api/debug) return 401 and pages show the locked screen (see Guest access code). If the app gets a 401 mid-session (cookie cleared or expired), My Shots and the Feed show "Your access expired — scan the QR code at the venue again". The camera keeps the unsent shot and adds ", then tap Upload to retry", so no shot is used up.
Error responses carry a generic error message only — raw Drive errors are logged server-side, never returned.
Files never pass through the server. Vercel serverless functions have a ~4.5 MB body limit and phone photos easily exceed that. Instead:
POST /api/upload-session)XHR PUT to that URL — no Vercel in the middleThe server forwards the client's Origin header when creating the session. Without it, Google doesn't enable CORS on the session URL and the browser upload fails silently.
Service accounts have no Google Drive storage quota. Files they create fail with:
403: Service Accounts do not have storage quota.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗