Введение

Если вы ведете несколько проектов одновременно, вы знаете проблему управления информацией. Мысль пришла в голову — записал куда-то. Через месяц пытаешься вспомнить: где это было? Сохранил в папке где-то на компьютере? В заметках телефона? В рабочем чате или личных сообщениях?

Если не нашел — идея ушла. Или осталась, но найти её — отдельный квест и потеря времени, которое хотелось бы потратить с пользой, а не на поиски.

Со мной так происходило постоянно. Статьи и доклады по учёбе, отчёты по работе, технические заметки по разрабатываемому ПО, ссылки на полезные ресурсы, голосовые идеи по дороге на работу, полезные фото — всё в разных местах, без структуры, без связей.

Изначально я пытался найти для себя идеальный инструмент. Notion, Obsidian, Evernote — ни один не решал мою задачу в комплексе: быстрый ввод заметок (текст, фото, ссылки, голосовые), их сохранение без потери контекста, а затем лёгкий поиск и установление связей между ними.

Поэтому я написал свою систему.

Статья — не «продажа курса» и не «уникальный продукт». Это описание того, как я решал свои задачи, какие решения принимал и что из этого вышло. Если вы тоже сталкивались с хаосом в заметках и теряли время на их поиск — возможно, этот опыт вам пригодится. .

Почему не взял готовое

Notion, Obsidian, Evernote и другие — у каждой системы есть сильные стороны. Но ни одна не давала мне нужного сочетания:

  • быстрый ввод (текст, фото, ссылка, голосовое сообщение)

  • трехуровневая визуализация

  • локальная транскрибация голосовых

  • веб-панель с графами

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

Концепция: три уровня визуализации

Большинство PKM-систем (Personal Knowledge Management или систем по управлению личными знаниями) предлагают либо простую структуру (папки/теги), либо граф связей (как в Obsidian). Мне захотелось сделать иерархию, которая отражала бы естественный процесс: сначала общий обзор, потом детали, потом связи и контекст.

Получилось три уровня:

Скриншот 1. Три уровня визуализации: Стратосфера → Облако → Земля
Скриншот 1. Три уровня визуализации: Стратосфера → Облако → Земля

1. Стратосфера — это уровень, где представлен обзор всех пространств (работа, учёба, личное, другое, плюс пользовательские). Это - самый верхний уровень, где видна вся картина ваших направлений деятельности. Как с орбиты — видно всю картину целиком.

2. Облако — это уровень с коллекциями (по сути это проекты относящиеся к конкретному пространству) внутри пространства. Например, в пространстве «Учёба» это могут быть:

  • «Подготовка доклада на конференцию»

  • «Изучение Python»

  • «Сдача экзамена по английскому»

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

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

На уровне «Облака» коллекции выглядят как интерактивные облака, каждое отдельное облако соединено с родительским пространством плавной кривой. Чем больше заметок в коллекции, тем крупнее облако. Их можно перетаскивать, позиции сохраняются. При клике на облако открывается следующий уровень — «Земля».

3. Земля — детальный граф заметок и целей внутри коллекции. Это уровень, на котором идеи обретают форму, виден полный контекст задачи. Заметки, ссылки, фото, голосовые сообщения — всё становится узлами графа. Цели выделены отдельно и связаны с заметками плавными кривыми Безье.

Цветовая индикация позволяет мгновенно определить тип сущности, не вчитываясь в текст:

  • Синий — обычная текстовая заметка

  • Фиолетовый — ссылка

  • Красный — фото

  • Зелёный — транскрибация голосового сообщения

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

Архитектура: API + бот + воркеры

Сразу решил, что делать отдельное мобильное приложение на этапе MVP — долго. VK бот как интерфейс решил две задачи:

  • не нужно писать отдельное приложение под iOS и Android

  • пользователи уже в VK, не надо никуда переходить

Архитектура:

  • API сервер (FastAPI) — центральное ядро, работа с БД, выдача токенов, приём запросов от бота и веб-панели

  • VK бот (Python) — приём сообщений, отправка в API, показ клавиатур

  • Воркер (отдельный процесс) — только транскрибация голосовых

Разделение позволило запускать несколько воркеров для транскрибаций. База данных — SQLite. Да, PostgreSQL надёжнее и масштабируемее, но я делал систему для себя, под свою нагрузку. SQLite прост, не требует лишних движений, и если в будущем потребуется перейти на PostgreSQL — это не самая сложная миграция.

VK бот — это интерфейс для быстрых действий. Веб-панель — для глубокого анализа. Вместе они дают полноценный опыт без разработки приложения.

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

Отдельное мобильное приложение я пока не планирую. Это отдельный большой проект, а на данном этапе VK бот закрывает 90% моих потребностей: быстро записать мысль, отправить голосовое, скинуть ссылку. Всё остальное — уже через браузер.

Голосовые заметки: транскрибация

Голосовые заметки появились из личной потребности: идеи приходят не только за компьютером. По дороге на работу, в пробке, перед сном — удобнее надиктовать, чем печатать. Надиктовал — заметка сохранилась, дальше возвращаешься к идее и приступаешь к анализу.

Я использую локальную транскрибацию. Данные никуда не уходят, всё работает на моём сервере.

Стек: faster-whisper — оптимизированная версия модели Whisper от OpenAI.

Как это выглядит технически:

  1. Пользователь отправляет голосовое сообщение боту

  2. Бот сохраняет аудио, ставит задачу в очередь (пользователь видит свою позицию — «вы 5-й в очереди»)

  3. Воркер забирает задачу, транскрибирует аудио

  4. Готовая текстовая заметка сохраняется в систему, пользователь получает уведомление

Про модель: сначала использовал faster-whisper small. Качество отличное, но один воркер потреблял ~1.5 GB RAM. После тестов перешёл на модель tiny: 300 MB RAM на воркер, качество чуть ниже, но для текстовых заметок — более чем достаточно.

На текущей конфигурации запущено 4 воркера. Стоит ограничение по длине аудиосообщения в 5 минут. В будущем лимиты можно увеличить.

Веб-панель: графы без фреймворков

Веб-интерфейс написан на чистом HTML/CSS/JS. Основные элементы:

Стратосфера. Пространства выглядят как интерактивные облака. Их можно перетаскивать, позиции сохраняются. При клике на облако — переход на уровень Облака.

Скриншот 2. Стратосфера
Скриншот 2. Стратосфера

Облако. Коллекции внутри пространства визуализируются как облака, связанные динамическими линиями с родительским пространством. Чем больше заметок в коллекции, тем крупнее облако.

Скриншот 3. Облако
Скриншот 3. Облако

Земля. Детальный граф заметок и целей внутри коллекции. Цветовое кодирование позволяет мгновенно определить тип сущности.

Скриншот 4. Земля — общий вид
Скриншот 4. Земля — общий вид

Цели на уровне «Земля». Каждая цель связана с конкретной заметкой отдельной кривой Безье. Не просто «есть связь», а визуально понятно, какая заметка привела к постановке цели. Плавные кривые делают граф читаемым даже при 20+ элементах.

Скриншот 5. Земля — цели и их связи с заметками
Скриншот 5. Земля — цели и их связи с заметками

Деплой и эксплуатация

Изначально система работала у меня локально. Собственный ноутбук, домашний сервер — всё меня устраивало. Но я хотел доступ к заметкам 24/7 с любого устройства. Выключать компьютер на ночь — и система недоступна. Решил поднять в облаке.

Сервер — ВМ в Яндекс.Облаке:

  • 8 vCPU, 16 GB RAM

  • Ubuntu 22.04

  • Nginx + HTTPS (Let's Encrypt)

  • systemd для автозапуска и автовосстановления

Что можно было бы добавить (но не обязательно прямо сейчас)

  • Экспорты— для миграции из других систем

  • Redis для очереди — для работы под высокой нагрузкой

  • Мобильное приложение — для iOS и Android

Для текущих задач и текущей нагрузки перечисленного выше, на мой взгляд, достаточно.

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

Текущей конфигурации сервера (8 vCPU, 16 GB RAM, 4 воркера) должно хватить для тестирования несколькими сотнями пользователей. При росте нагрузки план действий понятен: увеличить ресурсы, добавить воркеров, перейти на PostgreSQL. Код и структура базы данных это позволяют.

Система работает стабильно, остальное — по мере необходимости.

Как начать использовать

Всё работает в режиме открытого тестирования. Использование бесплатное.

VK сообщество: https://vk.com/club234411895

Бот: находится в сообществе. Нужно написать в группу — создастся личный приватный чат с ботом, и можно начинать пользоваться.

Веб-панель: https://ossapiens.com

Как войти в веб-панель:

  1. Напишите боту команду: веб

  2. Бот пришлёт уникальный токен доступа (токен хранится 7 дней, затем нужно получить новый). Токены захешированы для безопасности.

  3. Перейдите на сайт https://ossapiens.com

  4. Введите полученный токен

  5. Готово — вы в системе

Немного про UX (как пользоваться)

1. Чтобы начать пользоваться системой, напишите боту «Начать». Далее можно пользоваться и ботом, и веб-интерфейсом, и тем и другим — как удобнее. Но есть нюанс: в боте вывод информации ограничен (например, нельзя посмотреть фото или прослушать ранее сохранённое аудиосообщение). Всё это доступно в веб-интерфейсе.

2. Меню бота:

Скриншот 6. Меню VK бота
Скриншот 6. Меню VK бота

3. В боте можно создавать заметки, цели, пространства, скидывать фото, ссылки и записывать аудиосообщения. Бот всё обработает и сохранит в нужное пространство.

Пример: вы сделали текстовую заметку в боте: «Нужно подготовить черновик статьи на Хабр». Бот вернёт предложение сохранить заметку с автоматическим определением пространства и коллекции.

Скриншот 7. Пример сохранения заметки через бота
Скриншот 7. Пример сохранения заметки через бота

Бот предложит варианты:

·  автоматическое сохранение в предложенное пространство/коллекцию

·  выбор другого пространства

·  выбор другой коллекции

·  ручной ввод в формате #пространство/коллекция

4. Для меня лично удобен формат, когда через бот я создаю заметки, скидываю фото, записываю голосовые, создаю пространства и коллекции, а дальнейшую работу с информацией произвожу в веб-интерфейсе. Чтобы перейти в веб-интерфейс, нужно написать боту команду веб. Бот пришлёт уникальный токен для входа на https://ossapiens.com.

5. При первом входе в систему вы окажетесь на странице «Дашборд». На этой странице собрана базовая статистика по вашей работе в системе.

Скриншот 8. Дашборд
Скриншот 8. Дашборд

6. В левой области интерфейса расположены основные вкладки: дашборд, заметки, цели, коллекции, статистика, экспорт. В нижней части левой области — вкладки: профиль, токен, настроить (для настройки отображения основных вкладок) и индикатор работы сервера.

Скриншот 9. Навигация
Скриншот 9. Навигация

7. Лайфхаки:

  • Перемещение объектов. На каждом уровне (Стратосфера, Облако, Земля) зажмите ЛКМ в любом свободном месте и переместите — вся группа сущностей переместится.

  • Переход внутрь. Однократное нажатие ЛКМ на сущность позволяет перейти на следующий уровень (для Стратосферы и Облака) или открыть окно с информацией (для Земли).

  • Перемещение сущности. Долгое нажатие ЛКМ на сущность позволяет переместить её в любое место рабочей области. Позиция сохраняется в localStorage.

  • Радиальное меню. Синий кружок в интерфейсе — раскрывающееся радиальное меню. Однократное нажатие — раскрытие списка функций. Долгое зажатие — перемещение кнопки в любое место. Нажатие ПКМ — сброс в дефолтную позицию. Функции меню: создать заметку, создать цель, создать пространство, на дашборд, быстрая статистика.

Скриншот 10. Радиальное меню
Скриншот 10. Радиальное меню
  • Навигация. Чтобы перейти в «Пространство», «Облако» или «Землю» - можно воспользоваться левым меню, для этого наведите на вкладку «Пространства» в левой области, далее нажмите на выпадающий список и выберите необходимый уровень. Или же воспользуйтесь быстрыми клавишами: «Cntrl+1» - для перехода на уровень «Стратосфера», «Cntrl+2» - для перехода на уровень «Облако». «Cntrl+3» - для перехода на уровень «Земля», я, например использую сочетания быстрых клавиш.

Скриншот 11. Как войти в «Пространство», «Облако» или «Землю»?
Скриншот 11. Как войти в «Пространство», «Облако» или «Землю»?

Заключение

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

Получившаяся система закрывает мои задачи:

  • Быстрый ввод заметок через бота (текст, ссылки, фото, голосовые)

  • Структурирование через веб-панель с трехуровневой визуализацией

  • Локальная транскрибация голосовых — данные не уходят в облако

  • Постановка целей и отслеживание прогресса

  • Граф связей между заметками и целями

Сейчас система в режиме открытого тестирования, использование бесплатное.

Ссылки:

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