RU: Онлайн-сервис по мониторингу и уничтожению опасных астероидов на основе данных API NASA.
EN: An online service for monitoring and destroying dangerous asteroids based on NASA API data.
Описание задания
Используя API NASA разработать сервис по мониторингу и псевдо-уничтожению опасных астероидов.
Макет: Figma
- На главной список подлетов астероидов к Земле от текущей даты в бесконечность. Загрузка астероидов при скролле порциями. По каждому астероиду: название, размер, оценка опасности, как близко будет к Земле, точная дата максимального подлёта. Иконка астероида в зависимости от размера (критерий малый-большой выбрать самостоятельно). И опция вывода расстояний: в километрах или расстояниях до Луны.
- Адаптивная вёрстка.
- Кнопка заказа отправляет заказ в корзину. Корзина — это плашка на странице списка. По нажатию на кнопку отправки открывается страница успешного заказа, где перечислены заказанные сближения.
- У астероида есть своя страница. Там указаны данные астероида и список всех его сближений. По каждому сближению: скорость относительно Земли, время максимального сближения с Землей, расстояние до Земли, по орбите вокруг чего летит.
- Использовать Next.js (также принимаются решения на React, если будет реализован SSR).
- Использование redux нежелательно.
- Стилизация с помощью CSS модулей.
- Решение предоставить в виде git репозитория (github/bitbucket/gitlab по выбору).
- Корректное отображение в последних версиях браузеров (chrome, firefox, safari, edge).
- Использование TypeScript.
- Тесты.
- Деплой проекта на любой удобный для вас хостинг.
- Документация/инструкция по сборке проекта (README).
Выполненные требования
- Приложение написано с использованием фреймворка Next.js последней версии.
- В качестве state-менеджера используется Zustand.
- Стилизация выполнена с помощью SCSS модулей (для упрощения адаптации верстки под различные девайсы).
- Код чистый и читабельный.
- Отсутствует дублирование кода, приложение разбито на компоненты, отформатировано в едином стиле.
- Приложение адаптировано под различные устройства.
- Корректное отображение в браузерах Chrome, Firefox, Edge.
- Используется TypeScript.
- Выполнен деплой проекта на хостинг Vercel.
- Написана документация по сборке проекта, а также по компонентам и функциям.
-
Главная страница
- При входе в приложение отображаются астероиды начиная с текущей даты.
- Возможность выбрать единицы измерения дистанции до астероида (в километрах/в лунных орбитах).
- Возможность добавить астероид в корзину по нажатию на кнопку "ЗАКАЗАТЬ". При повторном нажатии астероид удалится из корзины.
- Отображается счётчик астероидов в корзине.
- При клике на название астероида происходит редирект на страницу с информацией о выбранном астероиде.
- При клике на кнопку корзины "ОТПРАВИТЬ" происходит редирект на страницу отправки заказа на уничтожение астероида(-ов).
- При скроллинге страницы данные об астероидах загружаются с лимитов в 1 день.
-
Страница отправки заказа
- На странице отображается список заказанных на уничтожение астероидов. При клике на название астероида происходит редирект на страницу с информацией о выбранном астероиде.
- В случае отсутствия астероидов в корзине выводится информационное сообщение.
-
Страница с данными астероида
- На странице отображается название астероида, статус опасности, кнопка заказать, данные о характеристиках астероида, все сближения астероида.
- Возможность выбрать диаметр астероида в предложенных единицах измерения (метры, километры, мили, футы).
- Возможность выбрать дистанцию до астероида в предложенных единицах измерения (километры, астрономические единицы, лунные единицы, мили).
- Возможность выбрать скорость астероида в предложенных единицах измерения (км/ч, км/с, миль/ч).
- Возможность посмотреть о сближениях с астероидом вплоть до точной даты.
Приложение написано с использованием следующего JavaScipt/TypeScript стека.
- Для корректной работы приложения необходимо указать переменные среды. Название переменных указаны в файле .env.local.example.
- Файл
.env.local
располагается в корневом разделе приложения. - Для работы приложения необходимо получить ключ на сайте NASA API.
- Описание файла
.env.local
NEXT_PUBLIC_BASE_URL="PUT BASE NASA URL HERE"
NEXT_PUBLIC_API_KEY="PUT API URL HERE"
- Для обхода ограничений CORS можно использовать URL CORS Anywhere. Для этого необходимо вставить URL сервиса CORS Anywhere перед URL API NASA. В качестве работающего сервиса указан личный сервис CORS Anywhere.
NEXT_PUBLIC_BASE_URL=https://important-crab-cardigan.cyclic.app/api.nasa.gov/neo/rest/v1
- Для работы приложения требуется NodeJS версии
>= 18.17
- Для запуска приложения в режиме разработчика использовать
npm run dev
- Для сборки использовать
npm run build
ВАЖНО: перед запуском убедитесь, что у Вас установлен Docker, а также Docker Compose
- Для запуска Docker-контейнера, необходимо в корневом разделе создать файл
.env.production
с ключами, указанными в разделеНастройка приложения
. - Для запуска сборки Docker-контейнера выполните следующую команду:
docker-compose up -d
- Docker-контейнер запустится в фоновом режиме.
✨ Превью
👤 Разработчик Indar Basto (@wowblvck)