{"id":31729737,"url":"https://github.com/lassestilvang/stream4","last_synced_at":"2026-04-01T18:30:09.090Z","repository":{"id":316815197,"uuid":"1064902112","full_name":"lassestilvang/stream4","owner":"lassestilvang","description":"A modern movie tracking application built with Next.js 15, TypeScript, and Tailwind CSS. Search for movies, track your watchlist, and manage your movie collection.","archived":false,"fork":false,"pushed_at":"2026-03-27T02:29:54.000Z","size":878,"stargazers_count":0,"open_issues_count":5,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T00:12:02.006Z","etag":null,"topics":["app-router","drizzle-orm","jest","neon","neon-postgres","neondb","nextauth","nextjs","nodejs","playwright","pnpm","postgresql","shadcn-ui","tailwindcss","tmdb","tmdb-api","typescript","vercel","zustand"],"latest_commit_sha":null,"homepage":"https://stream4-nine.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-26T18:23:24.000Z","updated_at":"2026-03-10T22:38:50.000Z","dependencies_parsed_at":"2025-09-26T22:28:40.548Z","dependency_job_id":"f5596111-3a90-407c-9cda-4a834b0e55ab","html_url":"https://github.com/lassestilvang/stream4","commit_stats":null,"previous_names":["lassestilvang/stream4"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lassestilvang/stream4","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream4","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream4/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream4/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream4/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lassestilvang","download_url":"https://codeload.github.com/lassestilvang/stream4/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lassestilvang%2Fstream4/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290858,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","drizzle-orm","jest","neon","neon-postgres","neondb","nextauth","nextjs","nodejs","playwright","pnpm","postgresql","shadcn-ui","tailwindcss","tmdb","tmdb-api","typescript","vercel","zustand"],"created_at":"2025-10-09T07:16:09.824Z","updated_at":"2026-04-01T18:30:09.067Z","avatar_url":"https://github.com/lassestilvang.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Movie Tracker\n\nA modern movie tracking application built with Next.js 15, TypeScript, and Tailwind CSS. Search for movies, track your watchlist, and manage your movie collection.\n\n## Features\n\n- 🔍 **Movie Search**: Search movies using The Movie Database (TMDB) API\n- 📱 **Responsive Design**: Works perfectly on desktop and mobile devices\n- 🎨 **Modern UI**: Built with shadcn/ui components and Tailwind CSS\n- 🗄️ **Database Integration**: PostgreSQL with Drizzle ORM\n- 🔐 **Authentication**: NextAuth.js integration ready\n- 📊 **State Management**: Zustand for client-side state\n- 🧪 **Testing**: Jest and Playwright for comprehensive testing\n- 🚀 **Performance**: Optimized with Next.js 15 and Turbopack\n\n## Tech Stack\n\n- **Framework**: Next.js 15 with App Router\n- **Language**: TypeScript\n- **Styling**: Tailwind CSS v4\n- **UI Components**: shadcn/ui\n- **Database**: PostgreSQL with Drizzle ORM\n- **Authentication**: NextAuth.js\n- **State Management**: Zustand\n- **Testing**: Jest, Playwright, Testing Library\n- **Deployment**: Optimized for Vercel\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 18+\n- pnpm\n- PostgreSQL database\n- TMDB API key (get one at [themoviedb.org](https://www.themoviedb.org/settings/api))\n\n### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/lassestilvang/stream4.git\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   pnpm install\n   ```\n\n3. **Environment Setup**\n\n   ```bash\n   cp .env.example .env.local\n   ```\n\n   Fill in your environment variables:\n\n   ```env\n   DATABASE_URL=\"postgresql://username:password@localhost:5432/moviedb\"\n   NEXTAUTH_URL=\"http://localhost:3000\"\n   NEXTAUTH_SECRET=\"your-secret-key-here\"\n   TMDB_API_KEY=\"your-tmdb-api-key-here\"\n   ```\n\n4. **Database Setup**\n\n   ```bash\n   # Generate and run migrations\n   pnpm drizzle:generate\n   pnpm drizzle:migrate\n   ```\n\n5. **Run the development server**\n\n   ```bash\n   pnpm dev\n   ```\n\n   Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\n## Available Scripts\n\n- `pnpm dev` - Start development server with Turbopack\n- `pnpm build` - Build for production\n- `pnpm start` - Start production server\n- `pnpm lint` - Run ESLint\n- `pnpm test` - Run Jest tests\n- `pnpm test:watch` - Run tests in watch mode\n- `pnpm test:coverage` - Run tests with coverage\n- `pnpm test:e2e` - Run Playwright e2e tests\n- `pnpm test:e2e:ui` - Run Playwright tests with UI\n\n## Project Structure\n\n```\n/\n├── src/\n│   ├── app/                 # Next.js app directory\n│   │   ├── api/            # API routes\n│   │   │   └── tmdb/       # TMDB integration\n│   │   ├── globals.css     # Global styles\n│   │   ├── layout.tsx      # Root layout\n│   │   └── page.tsx        # Home page\n│   ├── components/         # React components\n│   │   ├── ui/            # shadcn/ui components\n│   │   └── SearchBar.tsx  # Movie search component\n│   └── lib/               # Utility libraries\n│       ├── db.ts          # Database connection\n│       ├── schema.ts      # Database schema\n│       └── utils.ts       # Utility functions\n├── tests/                 # E2E tests\n├── drizzle.config.ts      # Drizzle configuration\n├── components.json        # shadcn/ui configuration\n├── jest.config.js         # Jest configuration\n├── playwright.config.ts   # Playwright configuration\n└── tailwind.config.js     # Tailwind configuration\n```\n\n## Database Schema\n\nThe application uses the following main entities:\n\n- **Users**: Authentication and user profiles\n- **Movies**: Movie information and user collections\n- **Watch History**: Track what users have watched\n\n## API Routes\n\n- `GET /api/tmdb/search?q=\u003cquery\u003e` - Search movies via TMDB\n\n## Contributing\n\n1. Fork the repository\n2. Create your feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## Testing\n\n### Unit Tests\n\n```bash\npnpm test\n```\n\n### E2E Tests\n\n```bash\npnpm test:e2e\n```\n\n### Test with UI\n\n```bash\npnpm test:e2e:ui\n```\n\n## Deployment\n\nThe app is optimized for deployment on Vercel:\n\n1. Connect your repository to Vercel\n2. Add environment variables in Vercel dashboard\n3. Deploy automatically on push\n\n## Learn More\n\n- [Next.js Documentation](https://nextjs.org/docs)\n- [Tailwind CSS](https://tailwindcss.com/docs)\n- [shadcn/ui](https://ui.shadcn.com/)\n- [Drizzle ORM](https://orm.drizzle.team/)\n- [The Movie Database API](https://developers.themoviedb.org/3)\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%2Fstream4","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flassestilvang%2Fstream4","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flassestilvang%2Fstream4/lists"}