Film Fanatic is a full-stack movie and TV discovery app built with TanStack Start, Convex, Clerk, and TMDB data. It combines rich media browsing with a persistent watchlist, progress tracking, and a responsive UI for both guests and signed-in users.
- Browse trending, popular, top-rated, upcoming, and curated movie/TV lists
- Search across movies, TV shows, and people with filtering and pagination
- View rich detail pages with cast, crew, trailers, images, seasons, and recommendations
- Save titles to a watchlist with guest-local storage or authenticated Convex sync
- Track progress with statuses like
want-to-watch,watching,caught-up,finished, anddropped - Mark TV episodes as watched and keep per-show progress up to date
- Add reaction tags such as
loved,liked,mixed, andnot-for-me - Import and export your watchlist as JSON
- Toggle between light and dark themes
| Layer | Technology |
|---|---|
| Framework | TanStack Start + TanStack Router + React 19 |
| Backend / Data | Convex |
| Authentication | Clerk |
| Styling | Tailwind CSS 4, Radix UI, shadcn/ui |
| Data Fetching | TanStack Query |
| Client State | Zustand |
| Validation | Valibot |
| Tooling | Vite 7, Biome, TypeScript |
- Node.js 20+
pnpm- A TMDB API read access token
- A Clerk application
- A Convex project
-
Clone the repository:
git clone https://github.com/Swastikdan/Film-Fanatic.git cd Film-Fanatic -
Install dependencies:
pnpm install
-
Create a
.env.localfile in the project root:VITE_PUBLIC_TMDB_ACCESS_TOKEN=your_tmdb_read_access_token VITE_PUBLIC_TMDB_API_URL=https://api.themoviedb.org/3 VITE_CLERK_PUBLISHABLE_KEY=your_clerk_publishable_key CLERK_SECRET_KEY=your_clerk_secret_key CONVEX_CLERK_ISSUER_URL=https://your-clerk-domain VITE_CONVEX_URL=your_convex_url VITE_PUBLIC_APP_URL=http://localhost:3000 VITE_PUBLIC_VIDEO_URL=your_video_provider_base_url
Depending on your Convex setup, the Convex CLI may also add deployment-specific variables such as
CONVEX_DEPLOYMENTto.env.local. -
Start the app:
pnpm dev
This runs the Vite app on port
3000andconvex devin parallel. -
Build for production:
pnpm build
pnpm dev— run Vite and Convex in parallelpnpm dev:vite— run only the frontend dev serverpnpm dev:convex— run only Convex locallypnpm build— type-check and build the apppnpm serve— build and run the production server locallypnpm check— Biome check + TypeScript validationpnpm lint— lint with Biomepnpm format— format the codebase with Biome
src/routes— file-based application routessrc/components— shared UI and domain-specific media componentssrc/hooks— watchlist, progress, and client-side state hookssrc/lib— TMDB client, query helpers, transforms, and utilitiesconvex— schema, auth config, and backend queries/mutationspublic— static assets and web app metadata
src/routeTree.gen.tsis generated; do not edit it manually.- Guest watchlist data is stored locally and synced to Convex after sign-in.
- There is currently no dedicated automated test suite configured; use
pnpm checkfor linting and type-checking.
- Fork the repository.
- Create a feature branch.
- Make your changes.
- Run
pnpm check. - Open a pull request.
- Movie and TV metadata is provided by TMDB.
- Built with TanStack, Convex, Clerk, Vite, and Tailwind CSS.