GithubHelp home page GithubHelp logo

lesta-ships's Introduction

Каталог кораблей World of Warships

🛠️ Установка

npm install

Для запуска проекта необходимо создать файл .env в корне проекта и указать значение переменной GQL_API_URL.

Пример: GQL_API_URL=https://rickandmortyapi.com/graphql/ (обязательно с слешем в конце)

🚂 Запуск

npm start

🌎 Доступен по адресу:

https://lesta-ships.vercel.app

О проекте:

  • Typescript ✒️
  • Next.js ⚛️
  • Apollo client 🛰️
  • Tailwind CSS 💨
  • Radix UI components 🧬

Ключевые решения:

  • Общение приложения с эндпоинтом через GraphQL осуществляется на сервере. Плюсы: безопасность (позволяет не показывать клиентам эндпоинт), уменьшение клиентского бандла и снижение нагрузки на клиент. И это работает с текущими настройками CORS на сервере GraphQL. Минусы: снижает отзывчивость приложения.
  • Перенос запросов к GraphQL на сервер позволил отдавать клиенту статичные серверные компоненты и воспользоваться преимуществами статической генерации и агрессивного кеширования на Vercel, что должно также снижать нагрузку на сам endpoint.
  • Отказ от стейт-менеджеров: все состояние приложения хранится в query-параметрах, что позволяет упростить логику и обращаться к состоянию из любого компонента – как серверного, так и клиентского. Еще один плюс – состояние приожения можно сохранить/передать, скопировав ссылку из адресной строки.
  • ТТХ и описание корабля подбираются отдельным запросом. Это позволило вписаться в 2Мб лимит кеша.

TODO aka "а вот если бы..."

Сейчас приложению не хватет: более понятной/наглядной логики сортировки и группировки кораблей, отдельной страницы корабля (вне списка) и функций сравнения/избранного/и пр. Направшивается более функциональный текстовый поиск (например, с подсказками ввода).

Неплохо было бы также облагородить шапку и подвал. Стоило бы провести ревизию ui-компонентов, приветсти и к единоообразию и общему стилю. Посмотрев свежим взглядом понял, что копоненты фильтров, сортировки и пагинации лучше вынести из компонента списка на верхний уровень.

🤔 О выбранном стеке

Данный стек был выбран, поскольку на нем можно было быстро собрать необходимый функционал. Те же headless-компоненты radix в обертке shadcn сильно экономят время при сборке ui. Является ли он оптимальным в более длительной перспективе? Возможно. Однако не исключено, что go на бекенде + htmx на фронте лучше подошли бы для реальзации данного функционала: go быстрее справлялся бы с разбором ответов от эндпоинта и генерацией статичных шаблонов, а htmx дал бы минимальный клиентский бандл, притом обеспечивая необходимый уровень интерактивности. Такой проект (go+htmx) занял бы больше времени в разработке (по крайней мере, у меня), однако скорее всего был бы проще в поддержке и развитии.

lesta-ships's People

Contributors

sincerely-manny avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.