Собственные продукты

Работы, которые я сам создаю и сопровождаю

Это мои собственные продукты, а не клиентские проекты. Они — самое наглядное публичное свидетельство того, как я работаю: за их безопасность, обновления и сбои отвечаю я.

Clacks

Активен

Почтовый мост для устаревших учётных записей

"Дело не в сообщении. Дело в том, чтобы его отправить."

— GNU Terry Pratchett

Приложение на базе Symfony, которое связывает почтовые аккаунты POP3 и IMAP с Gmail. Опрашивает устаревшие почтовые серверы и безопасно пересылает сообщения прямо в ваш почтовый ящик Gmail — без хранения, без задержек, только бесшовная доставка с полной совместимостью фильтров и правил.

Ключевые функции

Поддержка POP3 & IMAP
Опрос на основе чистых PHP-сокетов без зависимости от ext-imap
Интеграция с Gmail API
Использует Gmail messages.import для нативной совместимости с фильтрами
Безопасная пересылка
Содержимое писем передаётся прямо в Gmail и никогда не хранится
Управление несколькими аккаунтами
Подключите несколько устаревших аккаунтов к одному или нескольким адресам Gmail
Панель управления AdminLTE
Современный веб-интерфейс для управления аккаунтами и мониторинга

Технологический стек

Symfony 7 PHP 8.2+ Gmail API libsodium AdminLTE 3 Webpack Encore MariaDB

Кейс

Задача
Доставлять почту из старых ящиков POP3 и IMAP в Gmail так, чтобы к ней применялись собственные фильтры, ярлыки и спам-фильтр Gmail — как если бы она пришла туда напрямую.
Моя роль
Я спроектировал, разработал и сопровождаю сервис: почтовые клиенты, интеграцию с Gmail, шифрование учётных данных, планировщик и платные тарифы.
Ограничения
Каждое нужное разрешение Gmail Google относит к ограниченным, а это означает проверку безопасности и обязанность обосновать каждое запрошенное разрешение. К тому же сервис, который касается чужой почты, должен хранить её как можно меньше.
Решения
Импортировать, а не пересылать: письма попадают в ящик через messages.import в Gmail, поэтому фильтры и спам-фильтр работают как обычно. Запрашивать пять узких разрешений и сознательно не запрашивать gmail.readonly — приложение никогда не читает уже существующие письма Gmail. Не хранить содержимое писем: почта забирается и импортируется за один проход, а сохраняются только метаданные — отправитель, тема, дата и идентификаторы, предотвращающие повторный импорт, — которые удаляются по графику хранения. Написать клиенты POP3 и IMAP поверх обычных сокетов, а не зависеть от IMAP-расширения PHP. Шифровать секреты, которые хранить всё же приходится, — пароли от почтовых ящиков и токены обновления Gmail — ключом шифрования ключей.
Компромисс
Импорт требует ограниченных разрешений, а они влекут проверку Google. Пересылка позволила бы обойтись без того и другого — и сломала бы те самые фильтры и ярлыки, ради которых всё и делалось.
Результат
Работающий сервис с бесплатным и платными тарифами, который связывает ящики POP3 и IMAP с одним или несколькими ящиками Gmail.
Подтверждения
Каждое ограниченное разрешение задокументировано вместе с конкретными вызовами API, которые его используют, а код проверен на соответствие критериям Google CASA Tier 2 до официальной оценки.

Markest

Активен

Многодокументный Markdown-пастебин

"Лучшая документация — та, которую люди действительно читают."

— Markest

Полнофункциональный markdown-пастебин для создания паст с несколькими связанными документами, боковой навигацией и прекрасным опытом чтения. Поддерживает планы подписки, соавторов, клиентское шифрование, встраиваемые просмотрщики и RESTful API — всё с интернационализацией на 10 языках.

Ключевые функции

Многодокументные пасты
До 50 markdown-файлов на пасту с внутренними ссылками, боковой навигацией и экспортом ZIP
Планы подписки
Бесплатные и платные уровни через Stripe с настраиваемыми лимитами на пасты, хранилище и функции
Безопасность и конфиденциальность
Клиентское шифрование, защита паролем, уничтожение после прочтения и TOTP 2FA
RESTful API
Аутентификация по токену Bearer с API-ключами, разрешениями и полными CRUD-операциями
Совместная работа и обмен
Приглашайте соавторов, встраивайте пасты, изучайте публичный каталог и пользовательские темы

Технологический стек

Symfony 7.4 PHP 8.3+ CommonMark 2.8 Stripe XChaCha20-Poly1305 MariaDB

Кейс

Задача
Pastebin для многодокументных Markdown и HTML. Поддержка HTML означает хранение и отдачу разметки, написанной кем угодно, на том же сайте, где находятся учётные записи пользователей.
Моя роль
Я спроектировал, разработал и сопровождаю его, включая публикацию, управление доступом, совместную работу и платные тарифы.
Ограничения
HTML-пасты должны выполняться так, как написаны, включая скрипты, поэтому их вычистка сломала бы функцию. А правила видимости — публичный, скрытый из списка, защищённый паролем, подписанные ссылки, соавторы — должны соблюдаться на каждом маршруте, который отдаёт пасту.
Решения
Изолировать, а не очищать: сохранённый HTML никогда не отображается на origin приложения. Он отдаётся только с отдельного маршрута в песочнице Content-Security-Policy без allow-same-origin и потому выполняется на непрозрачном origin без доступа к cookies и сессиям сайта. И проверять доступ для каждой поверхности, отдающей пасты, через единственный механизм, чтобы ни один контроллер не держал собственную копию правил видимости.
Компромисс
Изолированный HTML не может обратиться ни к странице просмотра, ни к хранилищу сайта, поэтому встраивания, рассчитанные на обычный origin, внутри пасты работать не будут. Это ограничение намеренное: именно оно не подпускает произвольный скрипт к учётным записям.
Результат
Работающий многодокументный pastebin с бесплатным и платными тарифами, REST API, соавторами и интерфейсом на десяти языках.
Подтверждения
Оба правила зафиксированы как постоянные архитектурные решения. Единая проверка доступа введена после того, как аудит безопасности выявил расхождения в проверках видимости между маршрутами.

Boot

Активен

Операционная система продуктивности для СДВГ

"Протестируй скелет, построй тело, наслои разум."

— Boot

Система продуктивности, адаптированная для СДВГ, построенная вокруг конечного автомата BOS (BIEEII Operating System). Boot моделирует ваш день как структурированные фазы — активация, выполнение, обслуживание и завершение — используя 90-минутные блоки фокусировки, оценку задач с учётом энергии и успокаивающие ритуалы, чтобы держать вас на пути без перегрузки.

Ключевые функции

Конечный автомат BOS
Шесть детерминированных состояний направляют ваш день от загрузки через глубокую работу до ночного завершения, с многоуровневым контролем полномочий
90-минутные блоки фокусировки
Структурированные временные контейнеры с фазами разгона, основного фокуса и охлаждения — плюс журнал импульсов переключения и пауза/возобновление
Умный прогноз и оценка RAB
Детерминированное ранжирование задач по приоритету, срочности дедлайна, соответствию энергии, настроению, релевантности проекта и свежести
Ночное завершение NSIL
Ритуальная последовательность завершения: корабельный журнал, фиксация ограничений, зерно на завтра и блокировка ввода для чистого завершения дня
Изолированное окно рефлексии
Ограниченные по времени периоды рефлексии между блоками для обзора прогресса, ведения дневника и планирования без нарушения потока

Технологический стек

Symfony 7 PHP 8.3+ Stripe XChaCha20-Poly1305 Google OAuth Webpack Encore MariaDB

Есть задача, которую нужно решить?

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

Обсудить проект