├── .env.example ├── .eslintrc.json ├── .gitignore ├── README.md ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── prisma └── schema.prisma ├── public ├── logo-svg.svg ├── logo.png ├── luffy.gif ├── not-found.png └── share-icon │ ├── email.svg │ ├── facebook.svg │ ├── reddit.svg │ └── twitter.svg ├── src ├── components │ ├── Anime │ │ ├── AnimeBannerDetail.tsx │ │ ├── AnimeCard.tsx │ │ ├── AnimeInfoDetail.tsx │ │ ├── Banners.tsx │ │ └── SlideBanner.tsx │ ├── Characters │ │ ├── CharacterCard.tsx │ │ └── CharactersList.tsx │ ├── Comment │ │ ├── CommentItem.tsx │ │ ├── CommentList.tsx │ │ ├── Input.tsx │ │ ├── NewestComment.tsx │ │ └── NewestCommentItem.tsx │ ├── Headers │ │ ├── Logo.tsx │ │ ├── Menu.tsx │ │ └── index.tsx │ ├── Player │ │ └── index.tsx │ ├── Search │ │ ├── Genres.tsx │ │ └── SelectFilter.tsx │ ├── Shared │ │ ├── 404NotFound.tsx │ │ ├── Footer.tsx │ │ ├── GenresItem.tsx │ │ ├── Meta.tsx │ │ ├── ScrollToTop.tsx │ │ ├── ShareSocial.tsx │ │ ├── SwiperContainer.tsx │ │ ├── TitlePrimary.tsx │ │ └── Toast.tsx │ ├── ShowCase │ │ ├── BoxShowCase.tsx │ │ └── ShowCaseItem.tsx │ ├── Skeleton │ │ └── AnimeCardSkeleton.tsx │ └── Watch │ │ ├── AnimeInfo.tsx │ │ ├── Comment.tsx │ │ ├── EpisodeInfo.tsx │ │ ├── EpisodeList.tsx │ │ ├── MoreLikeThis.tsx │ │ ├── Note.tsx │ │ ├── SelectIframe.tsx │ │ └── SelectSource.tsx ├── hooks │ └── useInnerWidth.ts ├── layouts │ ├── AnimeGridLayout.tsx │ └── MainLayout.tsx ├── lib │ └── prisma.ts ├── pages │ ├── 404.tsx │ ├── _app.tsx │ ├── _document.tsx │ ├── anime │ │ ├── [id].tsx │ │ ├── genres │ │ │ └── [genres].tsx │ │ └── watch │ │ │ └── [id].tsx │ ├── api │ │ ├── auth │ │ │ └── [...nextauth].ts │ │ ├── comment.ts │ │ ├── like-comment.ts │ │ ├── list.ts │ │ └── subtitles.ts │ ├── characters │ │ └── [id].tsx │ ├── index.tsx │ ├── list.tsx │ ├── search.tsx │ └── sign-in.tsx ├── services │ ├── anime.ts │ ├── characters.ts │ ├── comment.ts │ └── list.ts ├── styles │ └── globals.css ├── types │ ├── amvstr.ts │ ├── anime.ts │ ├── characters.ts │ ├── comment.ts │ ├── global.d.ts │ ├── next-auth.d.ts │ └── utils.ts └── utils │ ├── client.ts │ ├── contants.ts │ ├── filter.ts │ └── path.ts ├── tailwind.config.js └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_BACKEND_URL # a url backend consumet get here https://github.com/consumet/api.consumet.org 2 | NEXT_PUBLIC_NEXT_ANIME_URL # domain web example: https://next-anime-app.vercel.app/ 3 | NEXT_PUBLIC_GOOGLE_CLIENT_ID # google client id https://console.cloud.google.com/ 4 | NEXT_PUBLIC_GOOGLE_CLIENT_SECRET # google client secret 5 | NEXTAUTH_SECRET # https://next-auth.js.org/configuration/options 6 | DATABASE_URL # mongoDB connect string 7 | NEXTAUTH_URL # domain web example: https://next-anime-app.vercel.app/ 8 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals", 3 | "rules": { 4 | "react-hooks/exhaustive-deps": "off" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | .env 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
Next Anime is a free anime watch website built using Consumet API
6 | 7 | ## Video Demo 8 | 9 | Video link: [Click Here](http://www.youtube.com/watch?v=mJNpHoj0dkg) 10 | 11 | ## Live demo 12 | 13 | Official website: [https://nqafe.vercel.app/](https://nqafe.vercel.app/) 14 | 15 | ## Anime sources 16 | 17 | From Consumet API 18 | You can refer to [https://github.com/consumet/api.consumet.org](https://github.com/consumet/api.consumet.org) 19 | 20 | ## Main technology used 21 | 22 | - Nextjs, React, Typescript, Tailwind 23 | - Prisma 24 | - MongoDB 25 | - Swiper (slider) 26 | - Next-Auth 27 | - React Query 28 | - [Player](https://www.npmjs.com/package/vnetwork-player) 29 | 30 | ## Features 31 | 32 | - Watch anime by episode support iframe and custom player 33 | - Advanced anime search by keyword, season, format, status, genre,... 34 | - Sign in via google or github using next auth 35 | - Customize video player adjust playback speed, video quality, subtitles 36 | - Save anime to your lists 37 | - Infinity page scrolling using react-intersection-observer 38 | - Support ssr, seo friendly by nextjs 39 | - Comment on anime while watching 40 | 41 | ## Screenshots, Preview 42 | 43 |  44 |  45 | 46 | ## Star History 47 | 48 | 49 |103 | {getAnimeTitle(info?.title)} 104 |
105 | 106 |
115 |
121 |
127 |
to your friends
171 |Japanese:
17 |{info?.title?.native}
18 |Synonyms:
21 |{info?.synonyms[0]}
22 |Aired:
25 |26 | {dayjs(info?.nextAiringEpisode?.airingTime * 1000).format( 27 | "DD/MM/YYYY" 28 | )} 29 |
30 |Country:
33 |{info?.countryOfOrigin}
34 |Daration:
37 |{info?.duration}
38 |Status:
41 |{info?.status}
42 |Rating:
45 |{info?.rating}
46 |Studios:
56 |{info?.studios}
57 |Current episode:
60 |{info?.currentEpisode}
61 |
33 |
39 |
45 |
51 |
{character?.role}
25 |85 | {calculateCreatedTime(comment.createdAt)} 86 |
87 |{comment.text}
89 |{comment.user?.name}
25 |26 | {calculateCreatedTime(comment.createdAt)} 27 |
28 |{comment.text}
31 | handleChangeGenres(item.value)}
19 | className="border cursor-pointer border-white flex items-center space-x-3 p-2 text-sm flex-2 rounded-md"
20 | key={item?.value}
21 | >
22 | {item?.label} {genresIsCheck(item.value) &&
A-Z
19 | 20 |21 | Searching anime order by alphabet name A to Z. 22 |
23 |26 | Terms of service 27 |
28 |29 | DMCA 30 |
31 |32 | Contact 33 |
34 |35 | Proxy Sites 36 |
37 |
49 |
55 |
43 |
49 |
55 |
66 | Watch episode {nextAiringEpisode?.episode} on the day{" "} 67 | {dayjs(nextAiringEpisode?.airingTime * 1000).format("DD/MM/YYYY")} 68 |
69 | )} 70 |{episode?.description}
19 |9 | { 10 | "If you can't see the movie, try f5 again, change the source, or use an iframe" 11 | } 12 |
13 |31 | Gender: 32 | {info?.gender} 33 |
34 |35 | Date of birth: 36 | 37 | {info?.dateOfBirth?.day}/{info?.dateOfBirth?.month} 38 | 39 |
40 |41 | Gender: 42 | {info?.gender} 43 |
44 |45 | Age: 46 | {info?.age} 47 |
48 |49 | Height: 50 | {info?.height} 51 |
52 |48 | Manage your account, check notifications, comment on anime, and 49 | more. 50 |
51 | 52 |