Перейти к содержимому

Возможности

Что Financy умеет сегодня и что будет дальше

Financy пересобирается заново. Что работает сегодня: счета в любой валюте и основа под ними — вход, общий доступ с ролями, обновления в реальном времени, офлайн-приложение, экспорт, девять языков и ваш собственный сервер. Каждый раздел ведёт к своему коду.

Автор: Anton ShubinОбновлено

Операций и бюджетов пока нет. Посмотрите, на каком этапе пересборка.

Работает сегодня

Фундамент для денег вашей семьи

Эти части работают и проверяются тестами в CI. Счета в любой валюте и их категории уже есть, операции — следующие.

Уже работаетДля входа через Google и GitHub серверу нужны собственные ключи, поэтому новая копия на своём сервере сначала умеет только вход по e-mail.

Каждый счёт в своей валюте

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

Для разработчиков

  • Сервер считает баланс при каждом чтении и нигде его не хранит, поэтому он не расходится с данными
  • Суммы — целые числа в наименьшей единице валюты: у иены её нет, у динара три знака
  • Читатель видит счета, а менять их могут редакторы и выше — это проверяет сервер
Код счетов

Категории в один уровень

Раскладывайте расходы и доходы по категориям, у каждой свой значок и цвет. Положите «Продукты» и «Кафе» в «Еду». Новая семья начинает с короткого списка на своём языке.

Для разработчиков

  • Категория никогда не удаляется: архив убирает её из списков выбора, а прошлые записи её сохраняют
  • У подкатегории тип её родителя, а у родителя не может быть родителя — это проверяет сервер
  • Зритель читает категории, а менять их может только редактор и выше
Код категорий

Вход уже готов

Зарегистрируйтесь по e-mail и паролю и подтвердите адрес кодом. Забытый пароль можно сбросить, а войти — через Google или GitHub, по ключу доступа или по коду из письма. Приложение-аутентификатор добавит двухфакторную защиту (2FA), а в списке устройств вы увидите, где выполнен вход, и сможете выйти на остальных.

Для разработчиков

  • Пароли хешируются PBKDF2-SHA-256 через Web Crypto, по умолчанию 600 000 итераций
  • Подписанные cookie сеанса и журнал всех событий входа
  • Личные API-токены, которые хранятся только как хеши с ключом
Код входа

Одна семья, у каждого свой логин

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

Для разработчиков

  • Любые данные проверяются по одной границе — семье
  • Каждый видит только те семьи, в которых состоит
  • Приглашения, смена ролей и передача владения — у каждого свои тесты
Код групп

Изменения видны на всех устройствах без перезагрузки

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

Для разработчиков

  • Стандартный WebSocket с порядковым номером у каждого изменения
  • Устройство после переподключения забирает пропущенное
Как устроено реальное время

Приложение, которое открывается без сети

Установите Financy на телефон или компьютер — он откроется даже без сети и покажет то, что видел последним.

Для разработчиков

  • Локальная копия каждого списка в IndexedDB и очередь записей с ключами идемпотентности
  • «Оставить моё» или «Взять с сервера» для каждого конфликта
Читать docs/offline.md

Ваши данные уходят вместе с вами

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

Для разработчиков

  • Весь файл проверяется до записи, а затем импортируется за один шаг
  • Каждая запись получает новый id, поэтому импорт не конфликтует с существующими данными
Код экспорта

На девяти языках

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

Для разработчиков

  • Один каталог на язык и тест, который называет каждую пропущенную строку
  • Числа и даты — через встроенный в браузер Intl
  • Арабские страницы читаются справа налево
Руководство по переводу

Работает на вашем сервере

Financy работает на любом Linux-сервере, арендованном или своём, через Docker Compose. На своём сервере он бесплатен по лицензии AGPL‑3.0, и данные семьи остаются у вас.

Для разработчиков

  • Traefik на входе, с автоматическими сертификатами
  • Postgres и Valkey рядом с приложениями
  • Метрики, логи и оповещения на VictoriaMetrics, VictoriaLogs и Grafana
  • Ежедневная зашифрованная резервная копия базы (включается по желанию) с описанием восстановления
Файлы Compose
$ deno task deploy Copying files... Copying infra/envs/.env.prod to infra/envs/.env... Creating web push keys if missing... Starting the app... Deploy completed.
Сокращено: вывод rsync и Compose между шагами опущен.
  • Traefik
  • Postgres
  • Valkey
  • VictoriaMetrics
  • VictoriaLogs
  • Grafana
  • Alertmanager
  • Garage file store
  • restic backups

Вопросы

А Financy так умеет?

Можно ли запустить Financy на виртуальном хостинге или serverless?

Нет. Financy работает как постоянно запущенные контейнеры в Docker Compose на одном Linux-сервере: API держит открытыми WebSocket-соединения, а воркер разбирает очередь.

Какую базу данных использует Financy?

Postgres. На него рассчитаны миграции, запросы и интеграционные тесты.

Есть ли приложение для телефона?

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