Или как ожил Руутли
TL; DR; После 2 лет использования Meteor по-прежнему остается моим любимым продуктом. React - это круто.
Примерно в августе 2016 года. Оглядываясь на это сейчас, я понимаю, что это было не так давно, но последние 5 недель были ужасными и полезными одновременно. В этот момент оставаться в офисе до 2 часов ночи в субботу вечером кажется нормальным (и просыпаться в 8, чтобы вернуться сюда на следующий день). Это история о том, как Руутли возникло, чтобы изменить то, как мы смотрим на объявления о вакансиях.
Если вы здесь только ради технических специалистов, можете пропустить.
Приквел
Мы - те, кто стоит за Поднимите свой флаг: платформой для тех, у кого нет университетского диплома или диплома колледжа, ищущих работу в компаниях, которые могут привести к карьерному росту. Это довольно просто: мы сопоставляем позицию начального уровня, которую нанимает компания, со следующими тремя шагами в очереди. Мы говорим о навыках / требованиях на каждом этапе и даем информацию на высоком уровне. Это дает контекст для человека, подающего заявку, зная, что должность начального уровня ведет к более устойчивой карьере.
Мы начали эксперимент с одним из наших партнеров, Air Canada, который встроил один из этих путей в их ATS (программное обеспечение для отслеживания кандидатов). Мы отправили одну строку кода менеджеру по привлечению талантов, который затем отправил ее для включения в само объявление о вакансии.
И когда я говорю, что мы начали эксперимент, я имею в виду, что Райан придумал дизайн утром, а ближе к вечеру у нас было что отправить Air Canada для внедрения.
Результаты были впечатляющими. Мы запустили их в течение нескольких месяцев в дюжине объявлений о вакансиях и достигли следующего:
- 65000+ сеансов
- 510 000+ взаимодействий
- 6 500+ кликов Apply
- 150+ рассылок по электронной почте
Тем не менее, число, которое запомнилось нам, было средним временем пребывания на странице. В среднем соискатель тратит 49 секунд на объявление о вакансии, прежде чем решить, подходит он ему или нет. Количество сообщений о вакансиях, в которых был виджет, было 01:34, что почти вдвое больше среднего. Это означало, что люди взаимодействовали с ним, и это имело смысл.
Было разумно предложить это в качестве решения любому менеджеру по привлечению талантов или специалисту по брендингу работодателя, который устал от проблем со стороны кандидата. Удивительные страницы карьеры теряются при переводе, когда они перенаправляются в ATS с объявлениями о вакансиях, которые в лучшем случае имеют крошечный логотип в верхнем левом углу страницы.
Сейчас
Строить Руутлы имело смысл.
Это интерактивный виджет опыта кандидата, который можно разместить в любом месте, которое позволяет технология. Страница карьеры, объявление о вакансии, стена в вашей спальне (вам нужно сначала ее распечатать). Мы также добавляем аналитику, к которой специалисты по привлечению талантов и брендингу работодателей не всегда имеют доступ.
Вы также можете увидеть, как виджет выглядит в реальных условиях, на нашей демонстрационной странице. (Если ваши друзья называют вас Приобретение талантов Тэмми или Брендинг работодателя Брэндон, и вы хотите узнать больше о том, как Ruutly может помочь вам увеличить количество объявлений о вакансиях, давай поговорим)
Техника
Когда дело доходит до создания нового продукта с использованием JavaScript, начало - самая запутанная и утомительная часть процесса. Хосе назвал это этой статьей. Саша недавно опубликовал опрос о состоянии JS в 2016 году. Итак, если вы ищете новый фреймворк, который хотите использовать, удачи.
Я всегда смотрел на экосистему задом наперед с тех пор, как изучил Meteor как свой первый полноценный набор инструментов для разработки. И 2 года спустя я поддерживаю это.
Некоторым людям не совсем ясно, в каком направлении движется Meteor, но на данный момент 1.4 делает то, что должно делать за меня. Было немного сложно научиться использовать npm, ES2016 + и другие новые блестящие функции Meteor, поскольку до того, как все пакеты были доступны вам в любое время.
Соединить его с React было несложно, так как я начал изучать React, когда переключил Raise Your Flag с Blaze на React до версии 1.3 Meteor.
В наши дни я понимаю код еще больше и стараюсь писать лучший код на каждой итерации, которую прохожу. Хотя, когда у вас есть график выпуска нового продукта, вы начинаете красиво и медленно и пишете код, который имеет смысл, но к концу, за 3 дня до того, как мы захотим подготовить продукт, чтобы люди могли с ним поиграть, вы забываете, как выглядит хороший код, отправляете его и молчите.
Хостинг на Galaxy также был моим выбором по умолчанию, поскольку платформа превратилась в надежное место для размещения ваших приложений Meteor. Их служба поддержки очень отзывчива, и мне нравится, что она находится в экосистеме, с которой мне комфортно.
Использование Аруноды и React-Komposer его команды упростило обработку того, какие данные куда идут.
import { composeWithTracker } from ‘react-komposer’; import { Ruuts } from ‘../../api/ruuts/ruuts.js’; import { RuutsList } from ‘../components/ruuts-list.js’; import { Loading } from ‘../components/loading.js’; import { Meteor } from ‘meteor/meteor’; const composer = (params, onData) => { const subscription = Meteor.subscribe(‘ruuts’); if (subscription.ready()) { const ruuts = Ruuts.find({ ownerId: Meteor.userId() }, { sort: { title: 1 } }).fetch(); onData(null, { ruuts }); } }; export default composeWithTracker(composer, Loading)(RuutsList);
React и React Bootstrap отлично работают с Meteor, поэтому отображать эти данные было просто.
import React from ‘react’; import { ListGroup, Alert } from ‘react-bootstrap’; import { Ruut } from ‘./ruut.js’; export const RuutsList = ({ ruuts }) => ( ruuts.length > 0 ? <ListGroup className=”ruuts-list”> {ruuts.map((ruut) => ( <Ruut key={ ruut._id } ruut={ ruut } /> ))} </ListGroup> : <Alert bsStyle=”warning”>No ruuts yet.</Alert> ); RuutsList.propTypes = { ruuts: React.PropTypes.array, };
Платежи производятся через Stripe, и их было легко настроить через Meteor с использованием пакета mrgalaxy: stripe. Вот все пакеты Meteor, которые я использовал:
[email protected] # Packages every Meteor app needs to have [email protected] # Packages for a great mobile UX [email protected] # The database Meteor supports right now [email protected] # Reactive variable for tracker [email protected] [email protected] # Meteor’s client-side reactive programming library json http webapp email [email protected] # CSS minifier run for production mode [email protected] # JS minifier run for production mode [email protected] # ECMAScript 5 compatibility for older browsers. [email protected] # Enable ECMAScript2015+ syntax in app code [email protected] [email protected] [email protected] [email protected] browser-policy fourseven:scss aldeed:collection2 alanning:roles themeteorchef:bert [email protected] xolvio:cleaner practicalmeteor:mocha xolvio:backdoor mdg:validated-method dburles:[email protected] [email protected] msavin:mongol meteorhacks:kadira mrgalaxy:stripe momentjs:moment random meteorhacks:picker wylio:mandrill
И пакеты npm:
“dependencies”: { “analytics-node”: “².1.0”, “body-parser”: “¹.15.2”, “bootstrap”: “³.3.7”, “cloudinary”: “¹.4.1”, “fibers”: “¹.0.14”, “googleapis”: “¹³.0.0”, “jquery”: “².2.4”, “jquery-validation”: “¹.15.1”, “meteor-node-stubs”: “⁰.2.3”, “react”: “¹⁵.3.0”, “react-addons-pure-render-mixin”: “¹⁵.2.1”, “react-bootstrap”: “⁰.30.2”, “react-bootstrap-geosuggest”: “¹.25.5”, “react-color”: “².3.2”, “react-dom”: “¹⁵.3.0”, “react-dropzone”: “³.6.0”, “react-komposer”: “¹.13.1”, “react-router”: “².6.1”, “react-router-bootstrap”: “⁰.23.1”, “reactcss”: “¹.0.8”, “stripe”: “⁴.10.0” }
Интерком - это то, что мы используем, чтобы общаться с нашими пользователями, они классные!
Если у вас есть вопросы по технологиям, оставьте их в комментариях или напишите мне в Твиттере.
Подход
Когда мы начали проект, я старался подготовиться к любому случаю, который мог потенциально замедлить или отложить проект. Я не хотел, чтобы это произошло.
Изучив React и освоившись с ним, я пытаюсь ДУМАТЬ на React. Мы придумали минимальный функционал, а затем разбили его на отдельные компоненты. Каждая страница, каждое представление, каждый элемент были в моей голове отдельной сущностью.
Я ни разу не задумывался о том, как он будет выглядеть, пока у меня не появилась соответствующая функциональность.
Первым делом была пользовательская экосистема. Meteor предоставляет хорошую систему учетных записей, и я выбрал именно ее. После настройки регистрации, входа в систему, сброса пароля я посмотрел на создание объектов.
Три представления были «создание», «редактирование», «просмотр». После того, как у меня была такая настройка, я начал с простой формы для добавления и обновления объекта с одним полем, и как только все было готово, я начал добавлять разные переменные.
И, наконец, я создал все разные страницы, на которых будут размещаться эти компоненты. Контейнер для отображения списка объектов, контейнер для отображения одного объекта, базовый профиль пользователя и т. Д.
Итак, когда начали появляться дизайны, я установил структуру, так что оставалось просто привести их в движение.
Как только все было более или менее настроено, я занялся безопасностью и аналитикой. Мы ДОЛЖНЫ убедиться, что все объекты надежно хранятся и доступны только пользователям, создающим эти объекты.
Мы не хотели использовать «бета» подход, когда вы сначала тестируете его на небольшой группе пользователей, а затем «запускаете».
Я предоставил его команде для тестирования. Мы ломали его кучу раз, я кучу раз исправлял, потом мы ломали его снова. Мы не переставали ломать его, пока не отшлифовали все потоки и не исправили все ошибки, не позволяющие пользователю использовать его должным образом. Мы уверены, что продукт работает так, как должен, и мы здесь, чтобы поддержать всех, кто переживает и пробует его.
В общем, это были долгие 5 недель, но продукт уже есть. Я хотел бы особо поблагодарить ребят из YouXLabs, Джейсон и Тайлер, разработавшие потрясающие дизайны для виджета и панели инструментов.
Выходи.