dev-sire/NodeStream

Repository files navigation

Welcome to NodeStream, a personal portfolio project aiming to recreate the classic YouTube experience with modern technologies and a touch of AI. Currently under development, NodeStream seeks to provide a familiar yet enhanced video platform.

  • Classic YouTube Feel: NodeStream's design draws inspiration from the legacy YouTube interface, aiming for a nostalgic user experience.
  • AI-Powered Content Creation:
    • Planned feature (Deepseek and Cloudflare AI): Generate compelling video titles, descriptions, and thumbnails using AI, streamlining the content creation process.
  • Modern Tech Stack:
    • Built on Next.js 15 for server-side rendering and performance.
    • Bun.js for fast and efficient runtime.
    • TypeScript for robust type safety.
    • Tailwind CSS and Shadcn for a sleek and responsive UI.
    • tRPC for seamless API communication.
    • Mux for high-quality video .
    • UploadThing for efficient file uploads.
    • Upstash for rate limiting and AI background jobs.
    • Drizzle ORM for serverless SQL database management.
📦 NodeStream
├─ .gitignore
├─ .vscode
│  â””─ settings.json
├─ LICENSE
├─ README.md
├─ bun.lock
├─ components.json
├─ drizzle.config.ts
├─ eslint.config.mjs
├─ next.config.ts
├─ package-lock.json
├─ package.json
├─ postcss.config.mjs
├─ public
│  â”œâ”€ file.svg
│  â”œâ”€ globe.svg
│  â”œâ”€ logo.svg
│  â”œâ”€ next.svg
│  â”œâ”€ placeholder.svg
│  â”œâ”€ user-placeholder.svg
│  â”œâ”€ vercel.svg
│  â””─ window.svg
├─ src
│  â”œâ”€ app
│  â”‚  â”œâ”€ (auth)
│  â”‚  â”‚  â”œâ”€ layout.tsx
│  â”‚  â”‚  â”œâ”€ sign-in
│  â”‚  â”‚  â”‚  â””─ [[...sign-in]]
│  â”‚  â”‚  â”‚     â””─ page.tsx
│  â”‚  â”‚  â””─ sign-up
│  â”‚  â”‚     â””─ [[...sign-up]]
│  â”‚  â”‚        â””─ page.tsx
│  â”‚  â”œâ”€ (home)
│  â”‚  â”‚  â”œâ”€ layout.tsx
│  â”‚  â”‚  â”œâ”€ page.tsx
│  â”‚  â”‚  â””─ videos
│  â”‚  â”‚     â””─ [videoId]
│  â”‚  â”‚        â””─ page.tsx
│  â”‚  â”œâ”€ (studio)
│  â”‚  â”‚  â”œâ”€ layout.tsx
│  â”‚  â”‚  â””─ studio
│  â”‚  â”‚     â”œâ”€ page.tsx
│  â”‚  â”‚     â””─ videos
│  â”‚  â”‚        â””─ [videoId]
│  â”‚  â”‚           â””─ page.tsx
│  â”‚  â”œâ”€ api
│  â”‚  â”‚  â”œâ”€ trpc
│  â”‚  â”‚  â”‚  â””─ [trpc]
│  â”‚  â”‚  â”‚     â””─ route.ts
│  â”‚  â”‚  â”œâ”€ uploadthing
│  â”‚  â”‚  â”‚  â”œâ”€ core.ts
│  â”‚  â”‚  â”‚  â””─ route.ts
│  â”‚  â”‚  â”œâ”€ users
│  â”‚  â”‚  â”‚  â””─ webhook
│  â”‚  â”‚  â”‚     â””─ route.ts
│  â”‚  â”‚  â””─ videos
│  â”‚  â”‚     â””─ webhook
│  â”‚  â”‚        â””─ route.ts
│  â”‚  â”œâ”€ favicon.ico
│  â”‚  â”œâ”€ globals.css
│  â”‚  â””─ layout.tsx
│  â”œâ”€ components
│  â”‚  â”œâ”€ filter-carousel.tsx
│  â”‚  â”œâ”€ infinite-scroll.tsx
│  â”‚  â”œâ”€ responsive-modal.tsx
│  â”‚  â”œâ”€ ui
│  â”‚  â”‚  â”œâ”€ accordion.tsx
│  â”‚  â”‚  â”œâ”€ alert-dialog.tsx
│  â”‚  â”‚  â”œâ”€ alert.tsx
│  â”‚  â”‚  â”œâ”€ aspect-ratio.tsx
│  â”‚  â”‚  â”œâ”€ avatar.tsx
│  â”‚  â”‚  â”œâ”€ badge.tsx
│  â”‚  â”‚  â”œâ”€ breadcrumb.tsx
│  â”‚  â”‚  â”œâ”€ button.tsx
│  â”‚  â”‚  â”œâ”€ calendar.tsx
│  â”‚  â”‚  â”œâ”€ card.tsx
│  â”‚  â”‚  â”œâ”€ carousel.tsx
│  â”‚  â”‚  â”œâ”€ chart.tsx
│  â”‚  â”‚  â”œâ”€ checkbox.tsx
│  â”‚  â”‚  â”œâ”€ collapsible.tsx
│  â”‚  â”‚  â”œâ”€ command.tsx
│  â”‚  â”‚  â”œâ”€ context-menu.tsx
│  â”‚  â”‚  â”œâ”€ dialog.tsx
│  â”‚  â”‚  â”œâ”€ drawer.tsx
│  â”‚  â”‚  â”œâ”€ dropdown-menu.tsx
│  â”‚  â”‚  â”œâ”€ form.tsx
│  â”‚  â”‚  â”œâ”€ hover-card.tsx
│  â”‚  â”‚  â”œâ”€ input-otp.tsx
│  â”‚  â”‚  â”œâ”€ input.tsx
│  â”‚  â”‚  â”œâ”€ label.tsx
│  â”‚  â”‚  â”œâ”€ menubar.tsx
│  â”‚  â”‚  â”œâ”€ navigation-menu.tsx
│  â”‚  â”‚  â”œâ”€ pagination.tsx
│  â”‚  â”‚  â”œâ”€ popover.tsx
│  â”‚  â”‚  â”œâ”€ progress.tsx
│  â”‚  â”‚  â”œâ”€ radio-group.tsx
│  â”‚  â”‚  â”œâ”€ resizable.tsx
│  â”‚  â”‚  â”œâ”€ scroll-area.tsx
│  â”‚  â”‚  â”œâ”€ select.tsx
│  â”‚  â”‚  â”œâ”€ separator.tsx
│  â”‚  â”‚  â”œâ”€ sheet.tsx
│  â”‚  â”‚  â”œâ”€ sidebar.tsx
│  â”‚  â”‚  â”œâ”€ skeleton.tsx
│  â”‚  â”‚  â”œâ”€ slider.tsx
│  â”‚  â”‚  â”œâ”€ sonner.tsx
│  â”‚  â”‚  â”œâ”€ switch.tsx
│  â”‚  â”‚  â”œâ”€ table.tsx
│  â”‚  â”‚  â”œâ”€ tabs.tsx
│  â”‚  â”‚  â”œâ”€ textarea.tsx
│  â”‚  â”‚  â”œâ”€ toast.tsx
│  â”‚  â”‚  â”œâ”€ toaster.tsx
│  â”‚  â”‚  â”œâ”€ toggle-group.tsx
│  â”‚  â”‚  â”œâ”€ toggle.tsx
│  â”‚  â”‚  â””─ tooltip.tsx
│  â”‚  â””─ user-avatar.tsx
│  â”œâ”€ constants.ts
│  â”œâ”€ db
│  â”‚  â”œâ”€ index.ts
│  â”‚  â””─ schema.ts
│  â”œâ”€ hooks
│  â”‚  â”œâ”€ use-intersection-observer.ts
│  â”‚  â”œâ”€ use-mobile.tsx
│  â”‚  â””─ use-toast.ts
│  â”œâ”€ lib
│  â”‚  â”œâ”€ mux.ts
│  â”‚  â”œâ”€ ratelimit.ts
│  â”‚  â”œâ”€ redis.ts
│  â”‚  â”œâ”€ uploadthing.ts
│  â”‚  â””─ utils.ts
│  â”œâ”€ middleware.ts
│  â”œâ”€ modules
│  â”‚  â”œâ”€ auth
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â””─ components
│  â”‚  â”‚        â””─ auth-button.tsx
│  â”‚  â”œâ”€ categories
│  â”‚  â”‚  â””─ server
│  â”‚  â”‚     â””─ procedures.ts
│  â”‚  â”œâ”€ comment-reactions
│  â”‚  â”‚  â””─ server
│  â”‚  â”‚     â””─ procedures.ts
│  â”‚  â”œâ”€ comments
│  â”‚  â”‚  â”œâ”€ server
│  â”‚  â”‚  â”‚  â””─ procedures.ts
│  â”‚  â”‚  â”œâ”€ types.ts
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â””─ components
│  â”‚  â”‚        â”œâ”€ comment-form.tsx
│  â”‚  â”‚        â”œâ”€ comment-item.tsx
│  â”‚  â”‚        â””─ comment-replies.tsx
│  â”‚  â”œâ”€ home
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â”œâ”€ components
│  â”‚  â”‚     â”‚  â”œâ”€ home-navbar
│  â”‚  â”‚     â”‚  â”‚  â”œâ”€ index.tsx
│  â”‚  â”‚     â”‚  â”‚  â””─ search-input.tsx
│  â”‚  â”‚     â”‚  â””─ home-sidebar
│  â”‚  â”‚     â”‚     â”œâ”€ index.tsx
│  â”‚  â”‚     â”‚     â”œâ”€ main-section.tsx
│  â”‚  â”‚     â”‚     â””─ personal-section.tsx
│  â”‚  â”‚     â”œâ”€ layouts
│  â”‚  â”‚     â”‚  â””─ home-layout.tsx
│  â”‚  â”‚     â”œâ”€ sections
│  â”‚  â”‚     â”‚  â””─ categories-section.tsx
│  â”‚  â”‚     â””─ views
│  â”‚  â”‚        â””─ home-view.tsx
│  â”‚  â”œâ”€ studio
│  â”‚  â”‚  â”œâ”€ server
│  â”‚  â”‚  â”‚  â””─ procedures.ts
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â”œâ”€ components
│  â”‚  â”‚     â”‚  â”œâ”€ studio-navbar
│  â”‚  â”‚     â”‚  â”‚  â””─ index.tsx
│  â”‚  â”‚     â”‚  â”œâ”€ studio-sidebar
│  â”‚  â”‚     â”‚  â”‚  â”œâ”€ index.tsx
│  â”‚  â”‚     â”‚  â”‚  â””─ studio-sidebar-header.tsx
│  â”‚  â”‚     â”‚  â”œâ”€ studio-upload-modal.tsx
│  â”‚  â”‚     â”‚  â”œâ”€ studio-uploader.tsx
│  â”‚  â”‚     â”‚  â””─ thumbnail-upload-modal.tsx
│  â”‚  â”‚     â”œâ”€ layouts
│  â”‚  â”‚     â”‚  â””─ studio-layout.tsx
│  â”‚  â”‚     â”œâ”€ sections
│  â”‚  â”‚     â”‚  â”œâ”€ form-section.tsx
│  â”‚  â”‚     â”‚  â””─ videos-section.tsx
│  â”‚  â”‚     â””─ views
│  â”‚  â”‚        â”œâ”€ studio-view.tsx
│  â”‚  â”‚        â””─ video-view.tsx
│  â”‚  â”œâ”€ subscriptions
│  â”‚  â”‚  â”œâ”€ hooks
│  â”‚  â”‚  â”‚  â””─ use-subscriptions.ts
│  â”‚  â”‚  â”œâ”€ server
│  â”‚  â”‚  â”‚  â””─ procedures.ts
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â””─ componenets
│  â”‚  â”‚        â””─ subscription-button.tsx
│  â”‚  â”œâ”€ suggestions
│  â”‚  â”‚  â””─ server
│  â”‚  â”‚     â””─ procedures.ts
│  â”‚  â”œâ”€ users
│  â”‚  â”‚  â””─ ui
│  â”‚  â”‚     â””─ components
│  â”‚  â”‚        â””─ user-info.tsx
│  â”‚  â”œâ”€ video-reactions
│  â”‚  â”‚  â””─ server
│  â”‚  â”‚     â””─ procedures.ts
│  â”‚  â”œâ”€ video-views
│  â”‚  â”‚  â””─ server
│  â”‚  â”‚     â””─ procedures.ts
│  â”‚  â””─ videos
│  â”‚     â”œâ”€ server
│  â”‚     â”‚  â””─ procedures.ts
│  â”‚     â”œâ”€ types.ts
│  â”‚     â””─ ui
│  â”‚        â”œâ”€ components
│  â”‚        â”‚  â”œâ”€ video-banner.tsx
│  â”‚        â”‚  â”œâ”€ video-description.tsx
│  â”‚        â”‚  â”œâ”€ video-grid-card.tsx
│  â”‚        â”‚  â”œâ”€ video-info.tsx
│  â”‚        â”‚  â”œâ”€ video-menu.tsx
│  â”‚        â”‚  â”œâ”€ video-owner.tsx
│  â”‚        â”‚  â”œâ”€ video-player.tsx
│  â”‚        â”‚  â”œâ”€ video-reactions.tsx
│  â”‚        â”‚  â”œâ”€ video-row-card.tsx
│  â”‚        â”‚  â”œâ”€ video-thumbnail.tsx
│  â”‚        â”‚  â””─ video-top-row.tsx
│  â”‚        â”œâ”€ sections
│  â”‚        â”‚  â”œâ”€ comments-section.tsx
│  â”‚        â”‚  â”œâ”€ suggestions-section.tsx
│  â”‚        â”‚  â””─ videos-section.tsx
│  â”‚        â””─ views
│  â”‚           â””─ video-view.tsx
│  â”œâ”€ scripts
│  â”‚  â””─ seed-categories.ts
│  â””─ trpc
│     â”œâ”€ client.tsx
│     â”œâ”€ init.ts
│     â”œâ”€ query-client.ts
│     â”œâ”€ routers
│     â”‚  â””─ _app.ts
│     â””─ server.tsx
├─ tailwind.config.ts
└─ tsconfig.json
  1. Clone the repository:

    git clone https://.com/dev-sire/NodeStream.git
  2. Install dependencies:

    bun install
  3. Set up environment variables:

    • Create a .env.local file and add your API keys, database credentials, and other necessary environment variables.
  4. Run the development server:

    bun run dev
  5. Open your browser and navigate to http://localhost:3000.

Contributions are welcome! If you'd like to contribute:

  1. Fork the repository.
  2. Create a new branch for your feature or bug fix.
  3. Make your changes and submit a pull request.
  • We appreciate contributions for bug fixes, UI improvements, and new features that align with the project's vision.

This project is licensed under the Mozilla Public License 2.0.

  • Live chat functionality.
  • Enhanced video editing tools.
  • Improved AI-powered recommendation system.

For questions, feedback, or collaboration, please reach out:

About

Under Development - NodeStream: A Video Platform

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages