ErickLimaS / anime-website

AniProject: Watch Animes, Read Mangas and make Comments on this website made with Next.js, TypeScript, Firebase, Anilist, Consumet and Aniwatch API. AD FREE.
https://aniproject-dev.vercel.app/
Other
93 stars 29 forks source link
anilist anime anime-api anime-streaming anime-website animes aniwatch consumet consumet-api firebase gogoanime-api nextjs typescript

AniProject

AniProject Website Logo

Project of animes and mangas website, utilizing the AniList, Consumet and Aniwatch API, which has info of animes and mangas released, data of the cast of that media, and many other things.

You can access this website on Vercel or Render (really slow).

[!CAUTION] Please note that this project is strictly non-commercial. It is not permitted to generate revenue or include advertisements using this project. Violating this policy may result in legal actions by the respective owners of these intellectual properties.

Navigation

:hammer: Features

:pushpin: Under Development (unordered)

:heavy_check_mark: Tecnologies Used

Front-end:

Back-End:

:computer: How Can I Run It?

  1. Fork (recommended) or Clone this repository
  git clone https://github.com/ErickLimaS/anime-website.git
  1. Run npm install on your CMD to get all dependencies
npm install
  1. Now you will need to create a .env.local file on the project root folder with the url to where your Consumet and Aniwatch is setted and the settings to your Firebase Account.

    • Go to these repos and host your own instance:
    • About Anilist OAuth:
      • You need to first login on your account on Anilist.
      • Then go to Developer Page on the Settings and click "Create New Client".
      • Now you need to add the name of your forked project/website and the URL to redirect when user accept the login, then hit "Save".
      • Store the Client ID and Secret on your ".env.local".
      • TIP: Create 2 of these, one for the dev env and other to production.
    • On Firebase, get your configs to use the Authentication and Firestore Database.
      • All the Firebase info needed bellow can be found when you create a new project.
      • IMPORTANT: Make Sure to ALLOW your Hosted Website Domain on Firebase Authentication!
    • OPTIONAL: This project uses a JSON file (47 mb) filled with Animes and Mangas data as a offline Database. This repository already has this file, but it might be outdated, so you decide if you want to ignore this step.
      • Go to anime-offline-database and download the JSON file that will be used on only Search Page (or you can make some changes and use some API to fetch the data).
      • With the file downloaded, put it in the /app/api/animes-database directory, replacing the previous one.

With all that done, you will need to fill the .env.local like the example bellow:

// Consumet
NEXT_PUBLIC_CONSUMET_API_URL=https://your-hosted-consumet-api-url.com
// Aniwatch
NEXT_PUBLIC_ANIWATCH_API_URL=https://your-hosted-aniwatch-api-url.
// Anilist OAuth Settings
NEXT_PUBLIC_ANILIST_CLIENT_ID=your-anilist-client-id
ANILIST_CLIENT_SECRET=your-anilist-secret
// Next.js Route Handler - Make sure to add the pathname "/api/animes-database" bellow
NEXT_PUBLIC_NEXT_ROUTE_HANDLER_API=https://url-to-where-your-website-is-hosted.com/api/animes-database
// Bellow is the url to dev enviroment. You'll need to change it when on hosted mode to the respective url
NEXT_PUBLIC_WEBSITE_ORIGIN_URL=http://localhost:3000
// Firebase
NEXT_PUBLIC_FIREBASE_API_KEY=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_PROJECT_ID=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_APP_ID=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_MEASUREMENT_ID=firebase-setting-related-to-this-field
NEXT_PUBLIC_FIREBASE_DATABASE_URL=firebase-setting-related-to-this-field
  1. Now run npm run dev to initialize the website
npm run dev
  1. That's it! It should be running.

:open_file_folder: How Firebase is Organized

Authentication

With Firebase Authentication, theres 4 methods of Login/Signup:

It is used to store on User Document things like:

Collections and Documents

With Firebase Database, we have 3 Collections:

Users

Stores only Users Documents after a successfull signup.

Comments

Stores comments made on episodes or on its main page.

Its separated based on Anilist API Media IDs Documents, and after that, a Collection that holds all comments to this media and other related to a episode where that comment was made.

It strongly depends on Users Collection, due to each comment needs its user (owner). Each comment has a referer to its owner and stores its interactions, with Likes and Dislikes.

When a Comment is made, it saves sort of a log on User Document, with infos like interactions with other comment or written on a episode.

Notifications

The Notifications Collections stores a document for each Media ID related to Anilist API every time a user assigned himself to be notified about a new episode release.

Each document has a Collection that holds every user assigned to receive a notification.

In this document, has info of all episodes already notified to any user and the next to be notified, cover art, if is complete, status and last update date.

:camera: Preview/Screenshots

Home

Home page 1 Home page 2 Home page 3 Home page 4 Home page 5 Home page 6

Anime/Manga Page

Anime/Manga Page 1 Anime/Manga Page 2 Anime/Manga Page 3 Anime/Manga Page 4

Watch Episode Page

Watch Episode Page 1 Watch Episode Page 2

Read Page

Read Chapter Page 1

Search/Filter Page

Search/Filter Page 1

Watchlist Page

Watchlist Page 1

News Home Page

News Home Page 1 News Home Page 2 News Home Page 3

News Article Page

News Article Page 1