Howtocards

Какую проблему пытается решить сервис?

Есть несколько кейсов, которые я нашел для себя и не смог качественно решить существующими сервисами.

Поиск готового решения. Не знаешь как решить какую-то задачу, например настроить SSL/TLS A+ на nginx. Начинаешь гуглить, открываешь StackOverflow, перечитываешь кучу вопросов и ответов в попытке подобрать рабочее решение. Или как именно нужно переконфигурировать postgres, при добавлении пользователя, чтобы можно было логиниться удаленно с паролем.

Сохранение решенных кейсов на будущее. После того как я настроил nginx и postgres, я хочу сохранить эти знания себе на будущее. Я хочу сохранить это в виде удобной мини-статьи, без кучи воды, только пояснения и код/команды.

Я не могу писать это в блог, потому что нет удобной сортировки, тегирования и прочего. Я не могу сохранять это в заметки, так как нет возможности поделиться ссылкой. Я не могу сохранять это в gist, так как там очень кривой поиск и опять же нет тегов.

Подбор решения без поискового запроса. Иногда я хочу найти конкретную карточку/статью, но не могу подобрать слова для поискового запроса и провожу десятки минут в гуглении. Добавление в закладки и поиск по ним занимает слишком много времени, так как хороших сервисов закладок слишком мало, а сами статьи могут быть переписаны или вовсе удалены. Плюс одна и та же статья не может находиться сразу в нескольких директориях в закладках.

Решения

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

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

Любую карточку можно сохранить для себя на потом, нажав кнопку "Сохранить". Сохраненные карточки также отображаются в личном кабинете, рядом с созданными. Теги сохраненных карточек также позволяют быстро и удобно искать/фильтровать сохраненные карточки.

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

Подбор решения без поискового запроса. В этом помогают те самые теги личного кабинета. В личном кабинете, нажимая на тег, пользователь добавляет в фильтр новое условие по наличию выбранного тега в карточке. Для сужения фильтра, можно расширять фильтр одним кликом: включать наличие тега или исключать наличие тега из поиска по карточкам.

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

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


Вся разработка проводится циклами: предположение, описание, разработка, обкат, анализ, снова предположение.

Первая версия должна включать в себя минимальный набор функциональности без которой проект не может существовать.

Описание функциональности

Карточки

  • Страница просмотра карточки. Необходима поддержка отображения rich-text и подсветки синтаксиса. Задача
  • Страница создания карточки. Карточка описывается заголовком и rich-text с подсветкой синтаксиса. Создать карточку может любой пользователь. Задача
  • Страница редактирования карточки. Редактировать может только автор карточки, либо участник организации с соответствующими правами. Изменить можно всё то, что есть на странице создания. Задача
  • Сохранение карточки. На странице карточке и компоненте предпросмотра есть кнопка "Сохранить", которая добавляет карточку в личный кабинет в раздел Сохраненные карточки. Сохранение карточки увеличивает число сохранений на 1, уровень полезности повышается, карточка в поиске становится выше других аналогичных. Убрать из сохраненных карточку можно по повторному нажатию на кнопку "Сохранить", понизив её уровень полезности и немного опустив её в поиске. Задача
  • Сохранение в список. После оплаты премиума на карточке кнопка "Сохранить" преобразуется в двойную "Сохранить | В список" позволяя выбрать список в который сохранять за один клик. При сохранении в список карточка также становится полезной для пользователя (в зависимости от настроек списка).
  • Удаление карточки. Удалить карточку может только её автор или участник организации, только в случае, если никто не сохранил карточку себе. Удаление производится безвозвратно, сохраняются только логи. Задача
  • Архивирование карточки. Вместо удаления, можно заархивировать карточку, при этом она исчезает из поиска, но остается у пользователей сохранивших её в личный кабинет, и помечается как Заархивированная. Восстановить карточку из архива можно только полностью пересоздав её, потеряв все сохранения. Так можно избежать злоупотреблением архивацией, как заменой приватным карточкам.

Создавая карточку со страницы поиска, фильтра, списка или организации, в новую карточку будут сразу же загружены теги, списки и организация из фильтра или страницы поиска.

Приватные карточки

После оплаты премиума, пользователь имеет возможность пометить карточку как приватная, то есть доступной только автору. При этом он видит её в своём поиске и может дать доступ к ней по ссылке. Задача

Списки

После оплаты премиума, пользователь может создать персональные списки в своём личном кабинете и сохранять карточки сразу в них. По умолчанию, списки приватные для автора, но он может сделать их публичными, позволив пользователям подписываться на них. Одна карточка может быть сразу в нескольких списках.

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

Списки можно настроить:

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

К приватному списку нельзя дать доступ нескольким пользователям, для этого есть организации. Также нельзя назначить несколько владельцев списка.

Комментарии

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

Тред является вопросом по карточке, а все комментарии в нём ответами на вопрос. При просмотре списка тредов, возле каждого треда отображается часть последнего комментария и общее количество комментариев.

В треде всё общение линейно, то есть нет древовидной структуры. Пользователи могут отвечать на другие сообщения, при этом в сообщении с ответом происходит цитирование оригинального сообщения, к которому можно перейти по ссылке.

Запросы на изменение (change request)

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

Ближайшая аналогия — Pull Requests в Github, и Merge Requests в Gitlab.

Пользователи

Каждый пользователь имеет свой личный кабинет. В котором он может задать своё имя, никнейм-ссылку, аватар. Также может просмотреть список тегов и карточек(сохраненных, созданных, приватных), после оплаты премиум создать свои списки и сохранять карточки в них.

Также здесь отображаются подписки на других пользователей, организации и фильтры. Здесь же подписки можно изменить.

У пользователя есть страница настроек, которую не может видеть только он, где он может поменять свои аутентификационные данные, проводить оплату, ..

Организации

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

(Возможно, оплата организации должна быть отдельно от оплаты персонального премиума)

Пользователи в организации могут иметь разные права, публиковать приватные и публичные карточки, а также иметь возможность создавать списки.

Лента карточек

Лента имеет несколько разделов:

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