{"id":31567949,"url":"https://github.com/lassestilvang/stream3","last_synced_at":"2026-04-10T03:58:41.384Z","repository":{"id":316723217,"uuid":"1064328573","full_name":"lassestilvang/stream3","owner":"lassestilvang","description":"A modern, professional movie/TV tracking web application built with Next.js 15, TypeScript, and Tailwind CSS.","archived":false,"fork":false,"pushed_at":"2025-09-26T10:03:57.000Z","size":360,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-26T10:33:50.332Z","etag":null,"topics":["app-router","authjs","drizzle-orm","jest","neon","neon-postgres","neondb","nextjs","playwright","pnpm","postgresql","react","redis","shadcn-ui","tailwindcss","tmdb","tmdb-api","typescript","upstash","zustand"],"latest_commit_sha":null,"homepage":"https://stream3-theta.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lassestilvang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-25T21:50:26.000Z","updated_at":"2025-09-26T10:04:00.000Z","dependencies_parsed_at":"2025-09-26T10:34:09.212Z","dependency_job_id":null,"html_url":"https://github.com/lassestilvang/stream3","commit_stats":null,"previous_names":["lassestilvang/stream3"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/lassestilvang/stream3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lassestilvang","download_url":"https://codeload.github.com/lassestilvang/stream3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278437947,"owners_count":25986760,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-05T02:00:06.059Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["app-router","authjs","drizzle-orm","jest","neon","neon-postgres","neondb","nextjs","playwright","pnpm","postgresql","react","redis","shadcn-ui","tailwindcss","tmdb","tmdb-api","typescript","upstash","zustand"],"created_at":"2025-10-05T09:46:44.752Z","updated_at":"2025-10-05T09:46:46.034Z","avatar_url":"https://github.com/lassestilvang.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Movie Tracker\n\nA modern, professional movie/TV tracking web application built with Next.js 15, TypeScript, and Tailwind CSS.\n\n## Features\n\n- **Search Movies \u0026 TV Shows**: Integrated with TMDB API\n- **Track Watched Content**: Add, rate, and take notes on movies and TV shows\n- **Watchlist Management**: Keep track of content you want to watch\n- **Authentication**: Secure login with GitHub and Google OAuth\n- **Responsive Design**: Works on all device sizes\n- **Light/Dark Theme**: Automatic theme switching based on system preference\n\n## Tech Stack\n\n- **Frontend**: Next.js 15 (App Router), React, TypeScript\n- **Styling**: Tailwind CSS, shadcn/ui components\n- **State Management**: Zustand\n- **Database**: Neon PostgreSQL with Drizzle ORM\n- **Authentication**: Auth.js with OAuth providers\n- **Caching**: Upstash Redis for session storage\n- **Testing**: Jest for unit tests, Playwright for E2E tests\n\n## Prerequisites\n\n- Node.js 18+ \n- pnpm (or npm/yarn)\n- TMDB API Key\n- GitHub/Google OAuth credentials (for authentication)\n- Neon PostgreSQL database\n- Upstash Redis instance\n\n## Setup Instructions\n\n1. Clone the repository:\n```bash\ngit clone \u003crepository-url\u003e\n```\n\n2. Install dependencies:\n```bash\npnpm install\n# or\nnpm install\n```\n\n3. Create a `.env.local` file in the root directory with the following environment variables:\n\n```env\n# Database\nDATABASE_URL=\"your_neon_postgres_connection_string\"\n\n# Session storage (Upstash Redis)\nUPSTASH_REDIS_REST_URL=\"your_upstash_redis_url\"\nUPSTASH_REDIS_REST_TOKEN=\"your_upstash_redis_token\"\n\n# TMDB API\nTMDB_API_KEY=\"your_tmdb_api_key\"\n\n# OAuth Providers\nGITHUB_ID=\"your_github_client_id\"\nGITHUB_SECRET=\"your_github_client_secret\"\nGOOGLE_CLIENT_ID=\"your_google_client_id\"\nGOOGLE_CLIENT_SECRET=\"your_google_client_secret\"\n\n# NextAuth\nNEXTAUTH_URL=\"http://localhost:3000\"\nNEXTAUTH_SECRET=\"your_nextauth_secret\"\n```\n\n4. Setup the database schema:\n```bash\npnpm run db:generate\npnpm run db:migrate\n```\n\n5. Run the development server:\n```bash\npnpm run dev\n# or\nnpm run dev\n```\n\n6. Open [http://localhost:3000](http://localhost:3000) in your browser to view the application.\n\n## Environment Variables\n\n- `DATABASE_URL`: Your Neon PostgreSQL connection string\n- `UPSTASH_REDIS_REST_URL`: Upstash Redis REST API URL\n- `UPSTASH_REDIS_REST_TOKEN`: Upstash Redis REST API token\n- `TMDB_API_KEY`: Your TMDB API key (get it from [themoviedb.org](https://www.themoviedb.org/settings/api))\n- `GITHUB_ID` \u0026 `GITHUB_SECRET`: GitHub OAuth app credentials\n- `GOOGLE_CLIENT_ID` \u0026 `GOOGLE_CLIENT_SECRET`: Google OAuth app credentials\n- `NEXTAUTH_URL`: URL of your application\n- `NEXTAUTH_SECRET`: Secret for NextAuth (use `openssl rand -base64 32` to generate)\n\n## Running Tests\n\n### Unit Tests\n```bash\npnpm run test\n# or\nnpm run test\n```\n\n### E2E Tests\n```bash\npnpm run test:e2e\n# or\nnpm run test:e2e\n```\n\n## Project Structure\n\n```\n/\n├── app/                    # Next.js App Router pages\n│   ├── layout.tsx          # Root layout with navigation\n│   ├── page.tsx            # Home page with search\n│   ├── watched/            # Watched content page\n│   ├── watchlist/          # Watchlist page\n│   └── api/                # API routes\n├── components/             # Reusable React components\n│   ├── ui/                 # Shadcn UI components\n│   └── navigation.tsx      # Navigation component\n├── hooks/                  # React hooks\n├── store/                  # Zustand store\n├── lib/                    # Utility functions and libraries\n├── services/               # Business logic services\n├── types/                  # TypeScript type definitions\n├── tests/                  # Unit and E2E tests\n└── drizzle/                # Database schema and migrations\n```\n\n## API Documentation\n\n### TMDB API\nThe application uses TMDB API for searching movies and TV shows. The search endpoint is available at `/api/tmdb/search?q={query}`.\n\n## Deployment\n\nThe application is optimized for deployment on Vercel. When deploying:\n\n1. Set up all required environment variables in your Vercel project\n2. Configure your database connection for production\n3. Set up OAuth providers with your production domain\n4. Add your domain to the allowed callback URLs in OAuth providers\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Commit your changes (`git commit -m 'Add amazing feature'`)\n5. Push to the branch (`git push origin feature/amazing-feature`)\n6. Open a Pull Request\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flassestilvang%2Fstream3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flassestilvang%2Fstream3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flassestilvang%2Fstream3/lists"}