DownVid
1000개 이상의 사이트를 지원하고, 인터페이스가 간결하며 macOS·Windows·Linux에서 모두 사용 가능
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기A movie recommender web app
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A movie discovery and recommendation web app built for CSC 371 at Wake Forest. WatchNow helps you discover, rate, and decide what to watch — you don't watch movies inside the app itself.
All five routes read a real movie catalog: a Supabase movies table
(supabase/migrations/0001_movies.sql) seeded from TMDB by
npm run seed (scripts/seed-movies.ts). Pages query it only through
lib/catalog.ts; posters load from TMDB's image CDN. Ratings, watched
state and the watchlist are still in-memory session state
(lib/user-state.tsx, no persistence — a refresh resets it).
There is intentionally no authentication and no real recommendation logic
yet. See CLAUDE.md for the full list of what's in and out of scope for
this phase, plus the design tokens and hard rules the UI follows.
CLAUDE.md — project guardrails: scope, design tokens, responsive
rules, accessibility requirements.docs/design-spec.pdf — the visual design specification (page-by-page
mockups for every view).Requires Node 20+.
git clone https://github.com/gabepmalik27-ai/watchNow.git
cd watchNow
npm install
cp .env.example .env.local # then fill in the four values
npm run check-env # verifies names/format and connectivity
npm run dev
First-time database setup:
supabase/migrations/0001_movies.sql into the Supabase SQL editor
and run it.npm run seed -- --limit 100 for a quick test, then npm run seed for
the full ~5,000-movie catalog. Reruns are safe (rows are upserted by id).Open http://localhost:3000. The app is localhost-only for this phase — there's no deployment or CI yet.
All matching and ranking is one Postgres function, search_catalog (supabase/migrations/0005_search.sql, reading normalized columns precomputed by 0006_search_precompute.sql), called through supabase.rpc by lib/catalog.ts. Titles, directors and cast are normalized (lowercase, accents and punctuation dropped, so "amelie" finds Amélie and "spider man" finds Spider-Man). A movie takes its best tier: exact title, title prefix, title word-start, title contains (3+ characters only), director word-start, cast word-start. Ties break on vote count. People searches return their movies with a "Directed by" / "Stars" hint. Only when nothing matches does a trigram-similarity fallback (threshold 0.3) offer close matches for typos.
npm run check-search runs the acceptance cases against the live catalog with the anon key. Run migrations 0005 and 0006 in the Supabase SQL editor before deploying, or search will fail (0006 keeps it under the anon statement timeout at catalog sizes past ~5,000).
If a search of 3+ characters finds nothing, or only typo guesses, /api/search asks TMDB (lib/catalog-admin.ts), saves up to 5 films with 20+ votes to public.movies permanently, and returns them in the same response. It has a 4 second budget and never fails the search. A query that imports nothing is remembered for 10 minutes, and identical concurrent requests share one TMDB call; both caches are per serverless instance and best-effort. Responses where an import was attempted are no-store and carry x-watchnow-imported: <n>. This is the only app code that uses SUPABASE_SERVICE_ROLE_KEY, so Vercel needs both SUPABASE_SERVICE_ROLE_KEY and TMDB_READ_TOKEN as server-only environment variables (Production and Preview).
localStoragemain is always working code. Nobody pushes to it directly.git checkout -b your-name/what-youre-doingmain before starting anything new: git checkout main && git pullNever commit API keys. Put them in a .env file (already gitignored) and
add the variable names to .env.example so everyone knows what they need.