-
Next.js с использованием TypeScript
-
Mantine UI в качестве UI-кита с PostCSS
-
Drizzle ORM и Neon Serverless DB для хранения данных
-
Tanstack Query и axios для получения данных с API
-
Слайдер аниме карточек на базе Embla Carousel и Mantine UI Carousel
-
Clerk Auth для авторизации
-
Плеер видео для Anilibria API на основе Vidstack.js и HLS.js
-
KodikWrapper для получения видеоплеера Kodik по Shikimori ID
-
Система уведомлений на базе Mantine UI Notifications
-
Форматирование даты и времени с помощью Day.js
-
Применение CSS-модулей
-
Просмотр аниме с субтитрами или озвучкой (на русском или английском)
-
Загрузка аниме с торрента или напрямую через сайт (.m3u8)
-
Авторизация в аккаунт
-
Система комментариев с бесконечной вложенностью, как на реддите
-
Тёмная и светлая темы
-
Поиск аниме с фильтрами
-
Кастомная навигация с помощью router'а из Next.js для более быстрого перемещения между страницами
...и ещё много чего!
-
Локализировать сайт с next-intl
-
Добавить возможность выбирать базу данных в
.env.local
-
Добавить возможность загрузки аниме с торрента или напрямую через сайт
-
Прикрутить API от SovetRomanticaVideo
-
Доделать страницу с поиском и фильтрами аниме
-
Доделать комментарии
-
Доделать страницу с популярными аниме
Раскрыть шаги
Клонирование репозитория
-
Клонируйте этот репозиторий, введя
git clone https://github.com/notwindstone/anisun
-
Переименуйте находящийся в корне приложения файл
.env.example
в.env.local
Настройка Clerk auth
-
Зарегистрируйтесь на https://clerk.com
-
Зайдите в Панель управления (Dashboard) Clerk и создайте новое приложение
-
Перейдите в пункт API Keys в левом меню и скопируйте Publishable key (Пример:
pk_test_qwertyuiop1234567890
) -
Вставьте Publishable key в строку
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
в файле.env.local
-
Перейдите в пункт API Keys в левом меню и скопируйте Secret keys (Пример:
sk_test_qwertyuiop1234567890
) -
Вставьте Publishable key в строку
CLERK_SECRET_KEY
в файле.env.local
Настройка базы данных: 1. Neon Serverless DB
Вы можете использовать Neon Serverless DB в качестве базы данных. Если вы собираетесь использовать локальный PostgreSQL, то перейдите к следующему этапу
-
Зарегистрируйтесь на https://neon.tech/ и создайте там новый проект
-
Перейдите в Панель управления (Dashboard) Neon DB и скопируйте Connection string (Пример:
postgres://postgres:adminadmin@0.0.0.0:5432/db?sslmode=require
) -
Вставьте Connection string в строку
NEON_DATABASE_URL
в файле.env.local
-
Убедитесь, что в строке
DATABASE_TYPE
в файле.env.local
стоит значениеNEON
Настройка базы данных: 2. Локальный PostgreSQL
Вы можете использовать локальный PostgreSQL в качестве базы данных. Если вы собираетесь использовать базу данных Neon Serverless, то пропустите этот этап
-
Откройте файл
.env.local
и вставьте адрес базы данных вPOSTGRESQL_DATABASE_URL
-
Поменяйте значение у
DATABASE_TYPE
сNEON
наPOSTGRESQL
в файле.env.local
Последние штрихи
-
(Необязательно) Если вы хотите смотреть аниме не только через плеер Anisun (который только с озвучкой Anilibria), но и через Kodik, то получите токен Kodik на http://kodik.cc/ (вам нужно связаться с ними через email почту)
-
Запустите команду
npm install
для того, чтобы установить все зависимости -
Создайте таблицу комментариев в базе данных с помощью команды
npx drizzle-kit push:pg
-
Готово! Теперь вы можете запустить приложение
Important
Вот так должен выглядеть файл .env.local
после всех махинаций выше с конфигурацией базы данных Neon Serverless DB
DATABASE_TYPE='NEON'
NEON_DATABASE_URL='postgres://postgres:adminadmin@0.0.0.0:5432/db'
POSTGRESQL_DATABASE_URL='CHANGE_IT_postgres://postgres:adminadmin@0.0.0.0:5432/db'
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_qwertyuiop1234567890
CLERK_SECRET_KEY=sk_test_qwertyuiop1234567890
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/
KODIK_TOKEN='qwertyuiop1234567890'
Important
Вот так должен выглядеть файл .env.local
после всех махинаций выше с конфигурацией базы данных локального PostgreSQL
DATABASE_TYPE='POSTGRESQL'
NEON_DATABASE_URL='CHANGE_IT_postgres://postgres:adminadmin@0.0.0.0:5432/db'
POSTGRESQL_DATABASE_URL='postgres://postgres:adminadmin@0.0.0.0:5432/db'
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_qwertyuiop1234567890
CLERK_SECRET_KEY=sk_test_qwertyuiop1234567890
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/
KODIK_TOKEN='qwertyuiop1234567890'
Если вы хотите запустить сайт в режиме разработки
npm run dev
Tip
Запускайте сайт в этом режиме, если не знаете, какой выбрать
Если вы хотите запустить сайт в режиме продакшна
npm run build
npm run start
Откройте http://localhost:3000 в браузере, чтобы зайти на сайт
Раскрыть шаги
Нажмите кнопку ниже:
Затем перейдите по Project -> Settings -> Environment Variables и создайте следующие переменные с ключом и значением:
-
DATABASE_TYPE
-NEON
-
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL
-/
-
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL
-/
-
NEXT_PUBLIC_CLERK_SIGN_UP_URL
-/
-
NEXT_PUBLIC_CLERK_SIGN_IN_URL
-/
-
CLERK_SECRET_KEY
- ваш собственный Secret key с сайта https://clerk.com -
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY
- ваш собственный Publishable key с сайта https://clerk.com -
NEON_DATABASE_URL
- ваш собственный Connection string с сайта https://neon.tech/ -
(Необязательно)
KODIK_TOKEN
- ваш собственный ключ с сайта http://kodik.cc/ (вам нужно связаться с ними через email почту). Сайт может работать и без ключа, но в таком случае не будут показываться аниме в Kodik Player'е
Раскрыть шаги
-
Установите PRoot дистрибутив линукса, например, через Andronix
-
Установите Node.js, NPM и Git
-
Следуйте дальнейшим указаниям из пункта локального запуска
Помощь приветствуется!
Note
To-Do: Hosted Weblate
-
zvshka за оказание помощи при создании проекта
-
cos (discord аккаунт) за оказание помощи в дизайне сайта
-
Shikimori, Anilibria, Kodik и SovetRomantica за их прекрасные API, без которых Anisun не смог бы работать
-
Sora и Sync for Reddit. Некоторые элементы дизайна были позаимствованы у них
-
Node-shikimori wrapper. Некоторый код был позаимствован с этого враппера