Как я собрал генератор дизайнерского дайджеста на базе Apple Shortcuts

Пару недель назад при помощи системного приложения для автоматизации «Команды» (Shortcuts) от Apple я собрал приятного и быстрого мини-бота для пополнения личного дизайнерского дайджеста. Спустя пару дней я дополнил его собственным API и получил на выходе удобный инструмент для ненапряжного контент-менеджмента без лишних трудностей.

Как я собрал генератор дизайнерского дайджеста на базе Apple Shortcuts

Немного про Apple Shortcuts

В 2018 году с очередным обновлением операционной системы Apple представила приложение «Команды», позволяющее автоматизировать многие рутинные действия и настраивать интеграции между другими приложениями системы. На самом деле, ещё в 2017 году компания купила стартап, разрабатывающий подобное решение для iOS, а затем сделала его частью своей экосистемы.

Помимо передачи информации из одного приложения в другое, Команды имеют примитивные функции, свойственные большинству языков программирования: циклы, переменные, типизацию данных. Наконец, собственными наработками всегда можно поделиться с сообществом — например, портал ShortcutsGallery собирает лучшие автоматизации и разбивает их по категориям (там я, кстати, нашёл команду для быстрого скачивания видео с YouTube).

Функционал Shortcuts не ограничен лишь установленными на устройстве приложениями. Вы всегда можете запросить информацию из сторонних источников или поработать с лежащими на девайсе файлами. Именно это и заинтересовало меня, когда я начал собирать собственного мини-бота.

Почему меня привлёк данный вариант?

Я провожу огромную часть времени в течение дня за своими гаджетами. Ранее это был только iPhone. Помимо этого, с недавнего времени я почти полностью перешёл с MacBook на iPad Pro, поэтому операционная система iOS стала моим главным инструментом.

Ежедневно я отсматриваю десятки статей, видео-лекций, дизайнерских инструментов и прочих материалов, которые могут быть так или иначе полезны моим подписчикам. Главным вопросом для меня всегда было: где это всё хранить?

Я пробовал вести отдельный раздел на сайте, создавал коллекцию ресурсов в Notion, собирал дайджесты в Telegram-канале. У всех этих вариантов есть одна большая проблема — инструменты не лежат под рукой, к ним нужно постоянно обращаться: заходить в админку, заполнять кучу полей в Notion или добавлять закладку в чат.

Не катит, мне нужно что-то более нативное и комфортное для использования!

В этот момент я и обратил внимание на приложение «Команды». Мне понравилась возможность добавить кастомное действие в меню «Поделиться», которое есть абсолютно везде. Просто тапаешь стрелочку, выбираешь свою команду и готово — да здравствует автоматизация.

Как я собрал генератор дизайнерского дайджеста на базе Apple Shortcuts

Теперь, где бы я ни находился (лента Twitter или просто сторонний сайт), я могу сохранить полезный ресурс или ссылку через нативный интерфейс операционной системы. И вот, как это работает…

Попытка № 1: хранение дайджеста в JSON

В качестве персонального MVP я решил организовать всё локально, прямо на iPad. Каждая новая ссылка со своими дополнительными полями сохраняется в общий JSON-файл. Благодаря тому, что файл лежит в облаке iCloud, фишка с Shortcuts работает одинаково хорошо на всех моих гаджетах.

Пример цепочки связанных действий из Shortcuts
Пример цепочки связанных действий из Shortcuts

Само по себе приложение «Команды» хоть и умеет работать с массивами и словарями из коробки, но всё же имеет ряд проблем и недостаток функций. Например, выполнить поиск по JSON-массиву или получить ключ необходимого элемента либо невозможно совсем, либо крайне затруднительно. В тот момент мне на помощь пришло приложение Scriptable: оно умеет «вклиниваться» в общий алгоритм команды, получать аргументы и возвращать результат, обрабатывая всё это нужным образом на JavaScript.

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

Попытка № 2: отдельный сервер + API

Чуть позже я вспомнил, что шорткаты могут связываться со сторонними URL, отправляя любые запросы, с заголовками и содержимым в JSON. Я переспал с этой идеей и на утро бросился писать собственный примитивный API. За основу взял Laravel + их собственную админку Nova для более удобной работы в будущем. Любители zero-code могут построить связку на базе Airtable, Google Sheets и чего угодно ещё.

Примечательно, что около 70% всего кода было написано на iPad с подключённой к нему клавиатурой. Браузерный VS Code на базе Gitpod в помощь.
Примечательно, что около 70% всего кода было написано на iPad с подключённой к нему клавиатурой. Браузерный VS Code на базе Gitpod в помощь.

Зачем столько сложностей ради хранения пары десятков (или сотен) простых ссылок? За тем, что имея полностью контролируемый собственный backend можно развивать проект как угодно.

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

Несколько «фишек-улучшателей» добавил для удобства администрирования и форматирования рассылки. Ловите подборку этих мини-функций ниже в галерее.

Доступные категории загружаются с сервера по API и выводятся в виде красивого кликабельного списка
Доступные категории загружаются с сервера по API и выводятся в виде красивого кликабельного списка
Если публикуется ссылка на видео с YouTube или Vimeo, для него автоматически загрузится обложка
Если публикуется ссылка на видео с YouTube или Vimeo, для него автоматически загрузится обложка
После добавления ссылки можно увидеть текущее состояние дайджеста: какие категории заполнены, а какие требуют дополнительного внимания
После добавления ссылки можно увидеть текущее состояние дайджеста: какие категории заполнены, а какие требуют дополнительного внимания

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

Судя по отзывам, мой простенький email-шаблон зашёл аудитории с точки зрения типографики и простоты подачи информации. Поэтому я доработал его и собрал на Laravel конструктор писем для других моих каналов. То есть, теперь письмо не обязательно привязывается к конкретному дайджесту и ссылкам — его можно собрать с нуля с абсолютно любым контентом.

Главная проблема, которую помогает решать связка Apple Shortcuts и собственного API, заключается в энтузиазме от пополнения коллекции полезных материалов. Если раньше мне приходилось заставлять себя заниматься этой скучной работой, то теперь процесс добавления одной ссылки занимает у меня около 20 секунд и приносит дикое удовольствие при виде финальной «успешной» галочки. Кто-то скажет: «не стоило заморачиваться». Возможно. Но у меня это заняло 4-5 часов суммарной работы — посмотрим, сколько нервов и времени оно сэкономит в итоге.

Подумываю помимо электронной рассылки публиковать дайджест и на VC.ru — поделитесь мыслями, стоит ли оно того. Всем хорошего дня ✌🏻

P.S. Буду рад, если вы поделитесь своими идеями, а также подпишетесь на мой дайджест или аккаунт в Instagram.

1717
4 комментария

Ну охуеть не встать, нужно было тоже писать на vc.ru :)  Я вот тоже написал когда-то шорткат для просмотра сериалов и фильмов. Да и бэк пришлось писать в придачу.


https://www.icloud.com/shortcuts/5fdc07aee61d4b54879bd4e98f871ae4

4
Ответить

Круто, особенно категории с сервера по API

Ответить

Круто реализовано. Надо попробовать повторить. Монетизировать не думали?

Ответить

Кто нибудь, объясните пожалуйста, как получить нужные команды? Вот например специально искал "Получить текст из «Объект из списка»" и не нашел. Поиск в шорткатах тоже не дал результата

Ответить