MyGo 云音乐
Go와 MyGo로 만든 서드파티 네이버 클라우드 뮤직 데스크톱 클라이언트
볼릴 영화를 고를 수 없나요? 영화 룰렛을 스와이프해 선택하고, 원하는 영화를 모아 Watch Deck을 만든다
Can't decide what to watch? Swipe through a roulette of movies, reroll until something clicks, and build a Watch Deck along the way.
미디어TypeScript · PythonGitHub @Donkey-Haute-01000001온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Swipe through a roulette of movies and reroll until something clicks. Built with Next.js and Supabase.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A Victorian picture-show lottery for deciding what to watch. Every movie is a playing card:
swipe through the deck, keep the ones that take your fancy in your Watch Deck, play your hand
on a casino table, or leave it to the slot machine. Built for a class assignment covering
Vercel, shadcn/ui, and Supabase.README 전문 보기 ↗A Victorian picture-show lottery for deciding what to watch. Every movie is a playing card: swipe through the deck, keep the ones that take your fancy in your Watch Deck, play your hand on a casino table, or leave it to the slot machine. Built for a class assignment covering Vercel, shadcn/ui, and Supabase.
Note on artwork: there's no scraped/licensed poster art here — real movie posters are copyrighted studio assets. Every card is drawn from scratch in CSS/SVG instead, after an old (c. 1930) playing-card deck: the movie's genre is its suit, and its rating sets its rank. Movie facts (title, year, director, runtime) are just facts; the one-paragraph blurbs are written from scratch.
/) — swipe right to keep a card (it goes to your Watch Deck), left to discard it
if it doesn't interest you or you've seen it. Cards fly onto Keep and Discard piles beside the
deck. Kept and discarded movies are never dealt again; Shuffle Discards Back In returns the
discards. Filter by genre./watchlist) — your kept cards as a card-game hand (Hearthstone-style: hover
to lift, click or drag a card up to play it). Played cards land on a green-baize casino table
with their details. Deal (the deck on the felt) deals a random card from your hand; Hit Me
deals one you haven't kept yet, fresh from the house. ?play=<movieId> opens with that card
already on the table./roulette) — a three-reel slot machine drawing from your Watch Deck or the whole
catalogue, three spins a day. The winning movie is picked before the reels move, and every
reel is built to stop on it. Adding the result to your deck takes you to it on the table.Stage curtains frame every page; pull a curtain's tassel to move to the neighbouring tab.
A card's rank comes from the movie's rating alone, on fixed half-point bands centred on the
typical film rating (~6.3), so a large catalogue forms a bell curve across the deck: A = 9.0+,
K = 8.5+, Q = 8.0+, J = 7.5+, 10 = 7.0+, 9 = 6.5+, 8 = 6.0+, down to 2 below 3.5. See
src/lib/card-rank.ts.
@supabase/supabase-js) for the movie dataset,
Watch Deck, discards, and the daily spin countsrc/app/ Route pages: / (Swipe), /watchlist (Watch Deck), /roulette (Spin)
src/components/ui/ shadcn-style UI primitives
src/components/ Screens, swipe deck, Watch Deck hand + casino table, slot machine,
movie card + card back, broadside banners, stage curtains, nav/footer
src/lib/ Supabase client and data layer, per-feature clients (watchlist,
discards, spins), card ranks, filters, tabs, session id, genre metadata
supabase/schema.sql Tables (movies, genres, movie_genres, watchlist, seen_movies,
roulette_spins), RLS policies, a joined view
supabase/seed.sql Generated seed data (68 movies across 10 genres, with cast)
supabase/add-cast.sql One-off update adding cast to a database seeded before cast existed
scripts/gen_seed.py Source of truth for the dataset — regenerate with
`python3 scripts/gen_seed.py > supabase/seed.sql`
There's no login system. Each browser gets a random id (crypto.randomUUID()) stored in
localStorage the first time it loads the app (see src/lib/session.ts), and that id tags the
rows a visitor writes: their Watch Deck (watchlist), their discards (seen_movies), and their
daily spin count (roulette_spins, kept server-side so the 3-a-day limit survives clearing the
page). It's enough identity to survive a refresh without building a whole auth system — good
enough for a class demo, not meant to be secure multi-user storage.
Install dependencies:
npm install
Create a Supabase project, then in the SQL editor run supabase/schema.sql followed by
supabase/seed.sql.
Copy .env.local.example to .env.local and fill in your project's URL and publishable
(anon) key (Project Settings → API Keys / Data API). Never use the secret key here.
cp .env.local.example .env.local
Run the dev server:
npm run dev
Open http://localhost:3000.
Without Supabase configured, the app still builds and renders — pages show an empty state instead
of erroring, so npm run build works even before the database is wired up.
Push to GitHub, then import the repository in Vercel. Add NEXT_PUBLIC_SUPABASE_URL and
NEXT_PUBLIC_SUPABASE_ANON_KEY as environment variables in the Vercel project settings and deploy.