Приватный ИИ-дневник на Gemini и Firebase: вопросы к собственным записям
Как дневник с Gemini отвечает на вопросы по вашим же записям, изолирует данные каждого пользователя правилами Firebase и прячет API-ключ на сервере.
Дневник, который умеет отвечать
Большинство дневников просто хранят текст. А теперь представьте, что через несколько недель или месяцев вы возвращаетесь и спрашиваете его, какие закономерности видны в ваших размышлениях, какие цели всплывают снова и снова, как поменялся ход ваших мыслей или о чём вы писали в какой-то конкретный период. На этой идее построено приватное приложение-дневник с ИИ на Gemini, Firebase и Google Cloud, задуманное как защищённый «личный дневник с Gemini».
Приложение сочетает обычный дневник с размышлениями при поддержке ИИ. Главная мысль: помнить события — только половина дела, дневник должен ещё помогать их понимать. Вы пишете записи, отмечаете настроение, при желании указываете место, а Gemini помогает осмыслить написанное.
Самая заметная функция — режим вопросов и ответов по собственной истории. Вместо того чтобы считать каждую запись отдельным документом, он позволяет спросить, например, «какие темы повторяются в моих последних записях?» и получить ответ, собранный из сохранённых записей.
Возможности
Режимы размышления
Написав запись, вы выбираете, как Gemini должен помочь. Есть глубокое осмысление, мозговой штурм, краткое резюме и свободный разговор. Так дневник из статичных заметок превращается в нечто интерактивное.
Вопросы к своим воспоминаниям
Это центральная идея. Вы задаёте вопросы о прошлых записях обычным языком, например какие закономерности есть в последних размышлениях или какие цели вы упоминали снова и снова. Приложение находит подходящие воспоминания и передаёт их Gemini как контекст, так что ответ опирается на ваш дневник, а не на общие советы.
Лента воспоминаний
Сохранённые записи выстраиваются в ленту, и можно пройтись назад по собственному пути. В воспоминании могут быть заголовок, текст, настроение, дата и время, место и выводы, сгенерированные ИИ, — так у всего этого появляется хронология.
Чтение для размышлений
Размышление не должно заканчиваться на странице дневника, поэтому в приложении есть раздел «Книги». Можно листать книги на темы для размышлений и начать запись с выбранной. Цель — замкнуть круг: прочитал, подумал, написал, запомнил.
Места, которые вы выбираете сами
К записи можно привязать место, но приложение не определяет ваше текущее местоположение автоматически. Место ищется вручную, так что вы сами решаете, какие именно данные о локации попадут в дневник.
Приватность и безопасность
Дневник — вещь личная, поэтому безопасность закладывается в дизайн с первого дня, а не латается в конце. Личность пользователя подтверждает Firebase Authentication, а данные каждого человека разделены по его Firebase UID. В Firestore структура следует такой концептуальной схеме:
users/
{userId}/
entries/
{entryId}
Правила безопасности Firestore ограничивают вошедшего пользователя данными, которые лежат под его собственным ID. Принцип жёсткий: пользователь A ни при каких условиях не должен прочитать воспоминания пользователя B. Вдобавок бэкенд ещё раз проверяет аутентификацию Firebase, прежде чем обработать любой запрос в режиме вопросов и ответов. В итоге получается несколько слоёв защиты:
User
↓
Firebase Authentication
↓
Authenticated UID
↓
User-scoped Firestore data
↓
Relevant memories
↓
Gemini
↓
Grounded response
Как используется Gemini
Gemini выступает слоем рассуждений и осмысления. Приложение не отправляет голый вопрос — оно передаёт в Gemini API структурированный контекст. Для вопросов к воспоминаниям поток выглядит примерно так:
User asks a question
↓
Firebase authentication
↓
Verify user identity
↓
Retrieve user's memories
↓
Select relevant/recent entries
↓
Build grounded Gemini context
↓
Gemini analyzes the memories
↓
Return response to user
Системный промпт велит Gemini:
- опираться только на переданные записи дневника
- не выдумывать воспоминания
- выделять повторяющиеся темы и закономерности
- прямо говорить, если чего-то в воспоминаниях пользователя нет
- сохранять поддерживающий, вдумчивый тон
Это ограничение важно: личный ассистент по воспоминаниям ни в коем случае не должен сочинять чужую историю.
API-ключ не попадает на клиент
Ещё одно решение — держать учётные данные Gemini подальше от фронтенда. Ключ хранится в серверной переменной окружения:
GEMINI_API_KEY
Браузер никогда не видит настоящий ключ: его читает бэкенд, когда создаёт клиент Gemini. Правило простое: секретам место на сервере, а не в клиентском JavaScript.
С веб-конфигурацией Firebase ситуация другая. Эти веб-ключи API лишь идентифицируют проект Firebase и секретом не считаются. Данные защищают аутентификация, правила авторизации и разумные ограничения API.
Обзор архитектуры
В общих чертах части складываются так:
┌───────────────────┐
│ User │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ React Frontend │
└─────────┬─────────┘
│
┌─────────────┴─────────────┐
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────┐
│ Firebase Auth │ │ Express Backend │
└──────────────────┘ └────────┬─────────┘
│
┌───────────┴───────────┐
│ │
▼ ▼
┌──────────────────┐ ┌─────────────────┐
│ Cloud Firestore │ │ Gemini API │
└──────────────────┘ └─────────────────┘
Фронтенд отвечает за пользовательский опыт. Firebase занимается аутентификацией и хранением данных каждого пользователя. Бэкенд служит контролируемым шлюзом к Gemini.
Почему именно так
ИИ-дневников и так хватает, так что чат-бот с полем для заметок мало что добавил бы. Интереснее поэкспериментировать с другими отношениями между ИИ и личными данными. Обычно путь такой: пользователь, ИИ, ответ. Здесь он другой: пользователь, воспоминания, ИИ, понимание. ИИ работает поверх личной истории человека, поэтому функции вроде вопросов к воспоминаниям становятся ценнее по мере того, как растёт число записей.
Идею хорошо показывает короткий сценарий. Человек несколько недель ведёт записи. Одна — о старте нового проекта. Другая — о неуверенности в будущем. Более поздняя — о том, как прибавилось уверенности после преодолённой трудности. Вместо шаблонной мотивационной фразы приложение может проанализировать эти записи и описать изменения, которые в них действительно видны.
Чем он отличается
Через весь проект проходят четыре идеи:
- Личная память: дневник становится вашей собственной базой знаний, по которой можно искать.
- ИИ с опорой на факты: Gemini работает с реальными записями пользователя и не выдумывает его историю.
- Приватность в основе дизайна: аутентификация Firebase и правила безопасности Firestore изолируют данные каждого пользователя.
- Осмысление важнее генерации: цель не в том, чтобы нагенерировать больше текста, а в том, чтобы помочь человеку понять уже написанное.
Чему научила разработка
Подключить API к фронтенду оказалось меньшей частью работы. Сложнее были аутентификация, изоляция данных на уровне пользователя, безопасное обращение с API-ключами, проектирование промптов, многоходовые диалоги, привязка ответов к личным данным, аккуратное поведение при сбоях, деплой с маршрутизацией на бэкенд и мысли о приватности до добавления новых функций.
Главный вывод: как только приложение работает с личными данными, его модель безопасности и архитектура становятся частью самого продукта, а не просто трубопроводом.
Что дальше
Возможные направления: более точный поиск воспоминаний, семантический поиск по дневнику, выявление долгосрочных закономерностей, персональные сводки размышлений, более насыщенная лента, улучшенные выводы ИИ, больше настроек приватности, а также лучший деплой и наблюдаемость. Долгосрочная цель — инструмент, который ощущается не как классический дневник, а как приватный слой памяти.
Напоследок
Всё началось с вопроса: может ли дневник помочь вспомнить, чему вас научили события, а не просто что произошло? В проекте пришлось поработать с Gemini, аутентификацией Firebase, Firestore, хранением ключей, привязкой ответов к данным и full-stack-деплоем — и всё это вокруг приватности. Самое интересное здесь не то, что ИИ пишет размышление. А то, что можно оглянуться на собственные воспоминания и заметить закономерности, которые сами вы бы не уловили.