Нофелет — частная система организации пространств для общения
и обмена данными в пределах ограниченного круга пользователей.
Система построена по модели планетной системы. Центральный элемент —
Солнце: общее пространство, существующее постоянно.
Вокруг него располагаются планеты — временные
пространства, создаваемые пользователями. Каждое пространство содержит
собственный голосовой канал, текстовый чат и раздел файлов; данные
одного пространства недоступны из других.
Цели и задачи
Предоставить ограниченному кругу пользователей средства голосовой связи, обмена сообщениями и файлами без процедуры регистрации и без хранения паролей.
Обеспечить разделение общения по темам и составу участников: каждое пространство имеет собственный перечень допущенных лиц.
Исключить накопление данных: система предназначена для текущего взаимодействия, а не для хранения; информация удаляется автоматически по установленным срокам.
Сохранять минимальный объём и сложность системы: одна инсталляция обслуживает один круг пользователей.
Принципы работы
Беспарольная аутентификация. Вход выполняется по одноразовой ссылке, направляемой на адрес электронной почты. Пароли и иные постоянные учётные данные на сервере не хранятся.
Закрытый контур. Доступ предоставляется только адресам из списка допуска, который ведёт владелец системы. Регистрация посторонних лиц невозможна; система не раскрывает, допущен ли конкретный адрес.
Эфемерность данных. Пространство существует ограниченный срок (по умолчанию 12 часов) либо до закрытия владельцем. При закрытии пространства его чат, файлы и приглашения удаляются безвозвратно. Содержимое общего пространства очищается ежесуточно. Постоянные комнаты (см. ниже) существуют до закрытия администратором, однако их содержимое, как и у общего пространства, очищается ежесуточно — накопление данных исключается и в этом случае.
Ограниченный гостевой доступ. Гость приглашается владельцем пространства персональной ссылкой, получает доступ только к этому пространству и утрачивает его по истечении срока приглашения либо при закрытии пространства.
Постоянные комнаты по ссылке. Администратор может создать постоянную комнату и поделиться ссылкой на неё. По этой ссылке в комнату входит любой, кому она передана (без списка допуска, в качестве гостя); ссылка действует, пока администратор не закроет комнату. На орбитальном обзоре постоянные комнаты отображаются только администраторам.
Прямая передача голоса. Голосовой трафик передаётся между участниками напрямую (P2P) в зашифрованном виде; сервер его не получает и не записывает.
Архитектура
Сведения приведены на уровне состава компонентов, без деталей реализации.
Клиентское веб-приложение (SPA) — единственный интерфейс системы; функционирует в браузере, включая мобильные устройства.
Сервер приложения обеспечивает аутентификацию, управление пространствами, чат и файловый обмен; события доставляются клиентам по WebSocket в режиме реального времени.
Голосовая связь — WebRTC: шифрованные соединения «каждый с каждым» в пределах пространства (до 5 участников в голосовом канале). Для участников за ограничивающими NAT трафик ретранслируется TURN-сервером без расшифровки.
Аутентификация — по схеме magic-link: пользователь указывает адрес почты; система сверяет его со списком допуска и направляет одноразовую ссылку с ограниченным сроком действия. Пользовательская сессия также ограничена по сроку.
Изоляция пространств: чат, файлы и голосовой канал пространства недоступны не-участникам. Доступ в чужое пространство предоставляется владельцем по запросу («стук»).
Хранение данных — минимальное и срочное: сообщения и файлы существуют в пределах срока жизни пространства и удаляются вместе с ним.
Все соединения устанавливаются по HTTPS.
Руководство пользователя
Вход в систему
На форме входа укажите адрес электронной почты и нажмите «Прислать ссылку для входа».
Откройте полученное письмо «Вход в систему Нофелет» и нажмите кнопку «Войти в систему». Ссылка одноразовая, срок её действия ограничен; по истечении срока запросите новую.
При первом входе система запросит имя пользователя — под ним вы будете отображаться остальным участникам.
Орбитальный обзор
После входа отображается обзор системы: Солнце в центре, планеты-пространства на орбитах. Для каждой планеты выводятся название, владелец, срок жизни и перечень присутствующих.
Нажатие на Солнце или доступную планету выполняет вход в пространство. Нажатие на недоступную планету (значок 🔒) отправляет владельцу запрос на доступ; владелец подтверждает или отклоняет его.
Управление камерой: колесо мыши — масштаб; перетаскивание — поворот и наклон; клавиши со стрелками и +/− — те же действия с клавиатуры; 0 или кнопка ⌂ — вид по умолчанию.
Кнопка «+ Создать пространство» создаёт новую планету; название назначается системой автоматически. Число одновременно существующих планет ограничено (по умолчанию — девять, не более двух у одного владельца; закрытие своей планеты освобождает место под новую).
Администратору дополнительно доступна кнопка «🔗 Постоянная комната» — она создаёт постоянное пространство, которое не гаснет по таймеру. Постоянные комнаты видны на обзоре только администраторам и располагаются отдельным внешним поясом вокруг системы.
На мобильных устройствах обзор отображается списком карточек; действия те же — нажатие выполняет вход или отправляет запрос на доступ.
Работа в пространстве
Название пространства отображается в заголовке. В центре — участники, слева — файлы, справа — чат. На настольных устройствах боковые панели управляемы: кнопки «📁 Файлы» и «💬 Чат» в нижней строке сворачивают и разворачивают их (центральная область при этом занимает освободившееся место), а перетаскивание за внутреннюю кромку панели изменяет её ширину (от исходной до увеличенной на 30 %); выбранное состояние сохраняется в пределах вкладки браузера. На мобильных устройствах чат и файлы по умолчанию скрыты и открываются кнопками 💬 и 📁 у правого края; на кнопке чата отображается счётчик непрочитанных сообщений.
Кнопка «Подключиться» выполняет вход в голосовой канал; кнопка с микрофоном отключает и включает микрофон. Вертикальный регулятор на плитке участника задаёт его индивидуальную громкость (двойной щелчок — сброс к номиналу).
Замок рядом с кнопкой микрофона показывает состояние шифрования голосовых соединений: зелёный — все соединения с участниками зашифрованы; нажатие раскрывает детали (алгоритм шифрования по каждому участнику). Голосовой трафик шифруется всегда — в некоторых браузерах (например, Firefox) название алгоритма недоступно, и индикатор показывает обобщённое «зашифровано».
Кнопка ⚙ открывает выбор микрофона и устройства вывода звука (наушники или динамики); выбор запоминается в браузере, смена микрофона действует сразу, без переподключения. Отображаются только те настройки, которыми используемый браузер позволяет управлять; в остальных случаях применяются устройства, заданные в операционной системе.
В чате участники обмениваются сообщениями с историей. Вход и выход в пространство отмечаются в ленте служебной строкой в формате «время → имя» (вход) и «время ← имя» (выход). Такие отметки эфемерны: они видны только во время текущего сеанса и в историю не сохраняются.
Кнопка «🖥 Транслировать» (доступна в голосовом канале на настольных устройствах) показывает остальным участникам ваш экран или окно. Передаётся только изображение, без звука; одновременно в пространстве идёт одна трансляция. Зрители видят её во встроенном плеере на «сцене» и управляют воспроизведением сами. Завершить показ — кнопкой «Остановить показ» или средствами браузера.
Кнопка «+ Файл» загружает файл (до 50 МБ). Удаление доступно автору файла и владельцу пространства, а администратору — для любого файла.
Владельцу пространства дополнительно доступны: подтверждение запросов на доступ («впустить» / «отказать»), приглашение гостей кнопкой «+ Гость» (ссылка копируется в буфер обмена) и досрочное закрытие кнопкой «✕ Погасить» — с удалением всего содержимого.
В постоянной комнате администратору доступны: кнопка «🔗 Ссылка» — копирует постоянную ссылку для приглашения (по ней войдёт любой, кому её передали), и «✕ Погасить» — закрывает комнату с удалением содержимого. Постоянную ссылку следует передавать только доверенным лицам: она действует, пока комната не закрыта.
Кнопка «← К орбитам» возвращает к обзору; пространство продолжает существовать.
Обновление страницы возвращает в текущее пространство (в пределах вкладки браузера). Подключение к голосовому каналу после обновления выполняется заново кнопкой «Подключиться» — браузер требует явного действия пользователя для доступа к микрофону.
Гостевой доступ
Откройте полученную ссылку-приглашение и укажите имя; адрес почты не требуется.
Гостю доступно только пространство, в которое он приглашён. Доступ прекращается по истечении срока приглашения либо при закрытии пространства.
Вход по ссылке на постоянную комнату
Откройте полученную ссылку и укажите имя — адрес почты не требуется. Вы попадёте сразу в комнату и будете видеть только её.
В отличие от гостевого приглашения такая ссылка действует постоянно — до тех пор, пока администратор не закроет комнату.
Настройка системы (для владельца инсталляции)
Список допуска
Перечень адресов, которым разрешён вход, определяется текстовым файлом
списка допуска на сервере. Каждая строка — одно правило: точный адрес
либо маска домена; пометка admin после пробела назначает
права администратора системы. Файл перечитывается при каждой попытке
входа; изменения применяются без перезапуска.
Роль администратора вычисляется из списка допуска при каждом входе
(вручную в базе данных не задаётся). Помимо обычных возможностей
администратор создаёт и закрывает постоянные комнаты (и только он видит
их на орбитальном обзоре) и может закрыть любое пространство.
пример строки
значение
ivan@example.com
допущен указанный адрес
*@team.example.com
допущены все адреса домена
boss@example.com admin
адрес допущен с правами администратора
Конфигурационные параметры
Задаются в конфигурации инсталляции; в скобках — значения по умолчанию.
параметр
назначение
SESSION_TTL_DAYS
срок действия пользовательской сессии (7 дней)
MAGIC_LINK_TTL_MIN
срок действия ссылки входа из письма (15 минут)
SPACE_TTL_DAYS
срок жизни пространства с момента создания (0.5 — 12 часов)
SPACE_MAX_COUNT
предельное число одновременно существующих планет (9)
SPACE_PER_USER_MAX
предельное число планет у одного владельца (2)
SUN_CONTENT_TTL_DAYS
срок хранения чата и файлов общего пространства (1 день)
GUEST_TTL_DAYS
срок гостевого доступа и гостевых приглашений (1 день)
Для отправки писем требуется SMTP-учётная запись (задаётся конфигурацией
инсталляции). Порядок развёртывания описан в документации репозитория проекта.
⚠ Система находится в стадии MVP: состав функций
и интерфейс могут изменяться; данные могут быть утрачены при обновлениях.