尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Movie and TV show tracking with watchlists, watch history, episode progress, and personal ratings. Built with Next.js, Supabase, and TMDB.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A movie and TV show tracking app inspired by TV Time. BeStats is being built to help you discover titles, manage a private watchlist, track watched movies and episodes, and rate what you watch. It is a tracking app, not a streaming service.
TMDB supplies catalog metadata. Supabase stores accounts and private user data. The application uses Next.js; the authoritative stack and product rules live in AGENTS.md, with installed versions in package.json.檢視完整 README ↗A tracker for TV shows, movies and games, inspired by TV Time. You browse and search the catalog, keep a private list of what you plan to watch or play, mark movies and episodes watched, and rate what you finish. BeStats tracks what you watch and play; it does not stream anything.
Live: bestats-sable.vercel.app
TMDB supplies movie and TV metadata, IGDB supplies game metadata, and Supabase stores accounts and your private data. The stack and product rules live in AGENTS.md; installed versions live in package.json.
Every personal rating is kept apart from the TMDB or IGDB community rating, and is labelled that way.
Every planned feature has shipped: features 1 to 25 in the movie and TV scope and G1 to G10 in the games scope. Work now happens in small follow up changes. The decisions behind each feature are in docs/specs/, and the plans for smaller changes in prompts/.
Captured on 2026-10-28 from the running app with live TMDB and IGDB content. Catalog titles and ratings change over time.
Shows home: the On the air carousel, with TMDB community ratings and a plan button on each card.
Movies home: the Popular carousel. A filled bookmark marks a planned movie, a check a watched one, and a blue star your own score.
Watchlist: your planned movies, signed in, with the SHOWS | MOVIES | GAMES tabs and the Watchlist, Upcoming and Watched pages in the navbar.
Games coming soon: upcoming releases from IGDB with their release dates, one of the paged game lists.
You will want Node.js 22 (the version CI and Vercel use) and the pnpm version pinned in the packageManager field of package.json. A running Docker compatible container runtime is needed for local Supabase and the database tests.
From a clone of this repository:
pnpm install --frozen-lockfile
cp .env.example .env.local
If .env.local already exists, update it from the example instead of overwriting it. The committed .env.example explains each setting and where to get it. Keep real credentials in the ignored local file.
Both stay on the server and never reach the browser.
The CLI and project configuration are already in the repo, so you can skip supabase init. With your container runtime running, you can run from the repository root:
pnpm exec supabase start
pnpm exec supabase status
The first start downloads the container images and applies the migrations and the local seed. Local Studio is at 127.0.0.1:54323, and Mailpit, which catches confirmation and recovery emails, is at 127.0.0.1:54324.
To rebuild the database from the migrations and seed, run pnpm exec supabase db reset. It erases local data only. It is also worth running before pnpm test:db, since leftover test data can make the database tests fail.
See the Supabase local development guide for container runtime setup. These commands start local services only; they never touch the cloud project.
pnpm dev:docker
This runs the development server against the local Supabase stack, starting the stack first if it is not running. It sets the local URL, the publishable key and a site URL of http://localhost:3000 for this process only, and those win over .env.local; everything else, such as the TMDB and IGDB credentials, still comes from .env.local. Extra arguments go to next dev. A port other than 3000 is refused, because the local auth redirect allow list in supabase/config.toml only covers that origin.
Use plain pnpm dev when .env.local points at the project you want, such as a cloud project. That project needs the migrations in supabase/migrations/ applied, or every tracking read fails.
Open localhost:3000. / redirects to /shows; movies are at /movies and games at /games. The /showcase page shows the UI components and their states.
The seed creates two confirmed users on the local stack. The database tests use them, and they are handy for trying sign in and tracking:
| Password | |
|---|---|
[email protected] | password-a |
[email protected] | password-b |
They exist only locally and are never applied to a deployed project.
| Command | Purpose |
|---|---|
pnpm dev | Start the development server with the settings in .env.local. |
pnpm dev:docker | Start the development server against the local Supabase stack. |
pnpm typecheck | Generate route types and check TypeScript. |
pnpm lint | Check formatting and lint rules with Biome. |
pnpm lint:ci | The same check as CI, failing on warnings too. |
pnpm format | Apply Biome formatting and fixes. |
pnpm test | Run the fixture based tests; no live providers or credentials needed. |
pnpm test:db | Run the pgTAP database tests against the local Supabase stack. |
pnpm db:types | Regenerate the database types from local Supabase. |
pnpm db:types:check | Check the generated database types still match local Supabase. |
pnpm tmdb:live | Run the opt in live TMDB checks; needs network access and a real token. |
pnpm igdb:live | Run the opt in live IGDB checks; needs network access and real Twitch credentials. |
pnpm build | Create a production build. |
pnpm start | Serve an existing production build. |
The live checks read their credentials from the environment or .env.local and skip when none are set. A placeholder is not a valid credential, and passing fixture tests does not prove a live integration works.
CI runs type checking, linting, the fixture tests and a production build on Node 22. The database tests run when files under supabase/ change.
Vercel hosts the app in Frankfurt (fra1), next to the Supabase project in eu-central-1. Schema and auth settings reach the cloud only from this repo, through supabase db push and supabase config push. The runbook is docs/deploy.md.
| Path | Contents |
|---|---|
| app/ | App Router pages, Server Actions, metadata routes and global styles. |
| components/ | Shared UI built on shadcn/ui and the glass design system. |
| lib/tmdb/ | Server only TMDB access, caching, normalization and fixtures. |
| lib/igdb/ | Server only IGDB access, token handling, catalog filter and fixtures. |
| lib/supabase/ | Browser and server clients, plus the generated database types. |
| lib/ | Auth, tracking, rating and library rules, SEO, legal facts and helpers. |
| proxy.ts | Request middleware: session refresh and early 404s. |
| supabase/ | Local configuration, declarative schemas, migrations, seed and database tests. |
| docs/ | Scopes, specs, reviews, the deploy runbook and screenshots. |
| prompts/ | Implementation plans prepared for approval. |
| .github/ |
This is a solo project built with the help of AI agents. Before you change anything, it helps to read AGENTS.md and the AGENTS.md in the folder you are touching. The usual loop is: write a plan in prompts/, get it approved, implement it, then report the checks you actually ran.
Work on a feat/<slug> branch and merge through a pull request. Changes to main need passing CI and an up to date branch; no approving reviewer is required. Issue forms capture bugs and features with observable acceptance criteria, and blank issues stay available for anything else.
Movie and TV data comes from TMDB and game data from IGDB. TMDB's required notice and the IGDB credit are in the app's footer and on its /terms page.
| CI, issue forms and the pull request template. |