Git Product home page Git Product logo

frontend-test-task's Introduction

Тестовое задание Front-End

Здесь находится описание тестового задания на позицию Front-End-разработчика в KazanExpress.
Если вы нашли его случайно - попробуйте сделать! Авось и вас к себе возьмём. 😉

RU | EN

Задача

Создать одностраничное TODO-приложение с использованием Vue.js,
с возможностью ведения/импорта/экспорта проектов.

Приложение может быть имплементировано в одном из уровней сложности:

  • Easy - на данный момент решения этой сложности не принимаются;
  • Medium - Easy с дополнительными усложнениями, минимально-оцениваемый функционал;
  • Hard - Medium с дополнительными усложнениями;
  • Insane - главный челлендж - примем с распростёртыми объятиями, если сделаете! 😉

каждый из которых имеет опциональные задания с более высокой оценкой.

Подробные требования задачи

Ниже приведены подробные требования к приложению, разделённые по сложности.
Каждая последующая сложность включает в себя все требования предыдущей как обязательные.


Easy

  • Каждая новая вкладка в бразуере с приложением - отдельный проект со своим списком задач;
    Система переключения проектов в пределах одной вкладки считается нарушением этого требования!
  • Редактируемое название проекта в качестве заголовка страницы;
  • Список с задачами:
    • Добавление новой задачи в список;
    • Удаление любой задачи из списка;
    • Возможность пометить любую задачу сделанной и возможность убрать эту пометку (mark as done/not done);
  • Вся информация (название проекта, список задач, состояние задач) должна сохраняться при перезагрузке страницы;

Опционально:

  • Возможность добавлять подзадачи в любую задачу (с потенциально бесконечной глубиной);
  • Поле ввода для поиска/фильтрации задач в списке (фильтр должен сохраняться после перезагрузки страницы);
  • Возможность редактирования названия задачи после её создания;

Medium

Все требования easy, включая опциональные. А также:

  • Возможность перемещать любые задачи (со всем списком подзадач) из любого открытого проекта в любой другой открытый проект;
  • Нельзя использовать LocalStorage, Cookies, IndexedDB и WebSQL хранилища;
    Если ваше приложение пишет хоть что-нибудь в одно из этих хранилищ - требование считается невыполненным!
    Это касается и библиотек, которые используют эти типы хранилищ: например - vuex-multi-tab-state.
  • Экспорт проекта в файл / импорт проекта из файла;
    • Имя сохраняемого файла должно соответствовать названию проекта.
  • Drag-n-drop для перемещения задач в списке;
  • Сохранение текущего фильтра для возможности его быстрого применения потом;
  • Итоговое приложение должно весить не более 200 KB (сумма всех загружаемых файлов, исключая картинки);

Опционально:

  • Наличие CSS-анимаций для drag-n-drop и фильтрации задач;
  • Использовать TypeScript для 100% кодовой базы (исключая вёрстку и стили);
  • Использовать Vue Composition API или vue@next;
  • Использовать ESLint/TSLint для контроля качества кода (приветствуется использование настройки KazanExpress/TSLint);
  • Использовать сборщик/бандлер (например, webpack) для сборки приложения в SPA;

Hard

Все требования medium, включая опциональные, а также:

  • Итоговое приложение должно весить не более 100 KB (сумма всех загружаемых файлов, исключая картинки);
  • Drag-n-drop с поддержкой тач-скрина;
  • Масштабируемость на мобильные устройства до 320*480px (iPhone 4);
  • Возможность быстрого просмотра и редактирования описания у любой задачи;

Опционально:

  • SSR;
  • PWA;
  • Опция фильтрации задач по RegExp;
  • Возможность добавлять/удалять именованные списки для задач, между которыми их можно перетаскивать (как в trello);

Insane

Мы можем только апплодировать вашим смелости и скиллу, если решитесь делать задание на этой сложности. 👏
Ну и ещё принять вас к себе с распростёртыми объятиями, конечно!

Все требования hard, включая опциональные, а также:

  • Нельзя использовать Vue.js или любые другие фреймворки/библиотеки для клиентской части - только нативный JavaScript/TypeScript;
    В том числе:
    • Для реактивности/биндинга данных;
    • Для внесения изменений в DOM;
    • Для бизнес-логики;
    • Да, jQuery/React/Lodash/Underscore/Bootstrap тоже нельзя!
  • Документация на JSDoc, по всем стандартам;
  • Итоговое приложение должно весить не более 50 KB (сумма всех загружаемых файлов, исключая картинки);
  • Итоговый скомпилированный проект должен работать на нативных ES6-модулях с помощью <script type="module">;
  • Наличие Source-Maps для итогового приложения и инструкции по их включению;
  • Полный набор горячих клавиш для каждого действия в приложении - создание/удаление/редактирование тасок/проектов, экспорт/импорт и прочее;
    (Обязательна инструкция со списком всех горячих клавиш.)
  • Оценка качества кода "A" на Code Climate;

Опционально:

  • Использовать Conventional Commitlint;
  • Использовать CustomElements/WebComponents и Shadow DOM;
  • 100% test coverage с использованием Jest/Mocha и Coveralls/Code Climate;
  • Использовать travis.ci, now.sh, GitHub Pages или GitHub Actions для CI/CD;
  • Использовать Service-Worker для уведомления пользователя о новых версиях;
  • Взаимоисключающие пункты:
    • SSR без использования сторонних библиотек;
    • Отсутствие SSR и отсутствие бандлера (webpack, rollup, etc.), node_modules и прочего - т.е. нельзя использовать никакие библиотеки (кроме TypeScript) для обработки кода;

Для тех, кто не любит формальности Короче, надо написать очень всратый менеджер задач. Его таким просим, чтобы нам было проще оценить твои навыки и креативность в подходе к решению проблем (нам это важно 😎).

Представь проблему: Команда не может организованно вести список тасок. У каждого сотрудника есть свои хотелки к системе. Необходимо предоставить максимально приемлемый вариант реализации приложения, который устроит наибольшее количество пользователей.

Хотелки:

  • Петя: Я хочу, чтобы можно было выгружать проект в файл, чтобы я мог прийти домой и открыть его там. Но я не хочу синхронизацию через клауд сервисы. Это небезопасно.

  • Вася: Я привык работать с тысячами открытых вкладок браузера. Если в самой вкладке будут еще вкладки (подпроекты) - это будет меня бесить. Хочу, чтобы каждая открытая вкладка приложения была отдельным новым проектом, чтобы я их мог менеджить как и все мои вкладки через браузер!

  • Коля: В одной популярной программе по работе с тасками очень плохо сделана фильтрация. Я хочу, чтобы когда я настраиваю фильтр - он, мать его, сохранялся при перезагрузке страницы! Было бы не плохо давать возможность создавать свой пресет фильтров для быстрого применения.

  • Иван: Вот что должно происходить, когда кликаешь по таске? Правильно, должно открыться описание таски. Но другие сервисы посылают меня на новую страницу. Зачем? ведь есть модалки и их все любят! Максимум что я потерплю - выползающее нечто, которое не блокирует пользовательский интерфейс.

  • Максим: Мне мало платят и я не могу себе позволить мак бук. или любой другой бук. У меня дома стоит Pentium 3 и там XP и старый браузер, который я не могу обновить. Он говорит, что я должен сначала обновить систему. Но я ничего ему не должен! Короче, я работаю из дома и на плохом компе. Пусть не виснет и работает!

  • Марсель: Я ценитель прекрасного и хочу, чтобы любой софт, который я запускаю на своей машине обладал такими же восхитительными анимациями, как и моя любимая и самая крутая операционная система ♥

  • Дима: Я ненавижу клавиатуры. Зачем их придумали, если есть тач скрин? Я хочу все двигать пальцами с телефона или планшета. Запилите плиз тач саппорт.

  • Маша: Я хочу работать с коллегой над одним проектом. И было бы классно видеть в моей вкладке то, что делает он в своей.


Всё, что не указано в требованиях, остаётся на усмотрение исполнителя задачи.

Опциональные требования сложности, которая выше текущей выполняемой, допустимы к имплементации и дадут дополнительные баллы.
Например, если вы решили выполнять задачу на сложности medium, выполнение опциональных требований из сложности hard даст преимущество при итоговой оценке.

FAQ

Q: Пытаюсь сделать фичу Х - перепробовал все варианты! Она не реализуема! Можно ли не делать фичу X?
A: Все требования реализуемы - мы проверяли сами. Скорее всего, решение проблемы либо нетипичное, либо вы его ещё не нагуглили. 😉

Q: Если я делаю, например, сложность medium - могу ли я не делать опциональные требования сложности easy?
A: Нет. Все требования всех предыдущих сложностей являются обязательными для вашей текущей сложности!


Правила оформления

В описании к решению нужно указать:

  • Список выполненных требований;
  • Инструкцию по запуску/развёртыванию приложения на Windows/Unix.

Сроки

  • 7 дней, с момента получения задания - для сложностей easy, medium и hard.
  • 14 дней, с момента получения задания - для сложности Insane - не считая времени на опциональные задачи.

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.