Проект: FinWave App — приложение для учета финансов  Публичный пост
19 августа 2024  710
FinWave App - приложение для учета финансов
https://finwave.app

Привет, клуб! Вы заметили, как много различных решений для учета финансов? Да все какие-то не такие... Время написать еще одно и исправить это! (Правда же?)

TL;DR: попробовать тут, гитхаб тут

Суть проекта

FinWave - это полностью open-source веб-приложение (но второе - необязательно, ниже подробно объясню) для учета финансов. Да, аналогов такого уже достаточно, от Firefly III до Cointry. Но, как я написал во вступлении, все какие-то не такие: первый, например, с интерфейсом... который лично меня пугает так, что уж проще с таблицами работать вручную. Второй - с закрытыми исходниками и платной подпиской для полного функционала.
В целом закрытый код - фу и нафиг, смотри потом финансовые рекомендации в контекстной рекламе...

Как появилась идея?

Думаю, банальней некуда: затосковал, глядя на существующие решения. Вот, взять, например, Мобса - достаточно неплохое решение с точки зрения парсинга сообщений. Но бекенда толком нет: все идет в гугл таблицу, которая содержит кучу технической информации. Неприятно. Ну и закрытый код, как я понимаю: на сайте нет ссылки на гитхаб.

Так что там с твоим... как его... FinWave?

Ну... тут у меня полный фарш, как говорится: поддержка нескольких счетов, кастомные валюты, древовидные категории, автоматизация транзакций, экспорт/импорт csv таблиц, полная синхронизация клиентов, автонакопления, поддержка нескольких языков... В общем список неплохой, и все это с приличным интерфейсом, открытым кодом и на своем сервере. Причем сервер тут может быть хоть raspberry pi, хоть самая дешевая VPSка с 0.5 гигами оперативки.

Но начнем с клиентов. Да, во множественном числе, сейчас объясню: бекенд и фронтенд у меня разделены полностью. Говоря человеческим языком, это значит, что только сайтом мы можем не ограничиваться. На данный момент, конечно, это основной клиент, который реализует весь функционал (и даже с темной темой, все как у взрослых!)

Демка выглядит примерно так
Демка выглядит примерно так

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

Что ж, для этого написан Telegram бот:

Вот так оно выглядит
Вот так оно выглядит

Важно понимать, что и бот, и сайт - это как бы одно целое с точки зрения данных. Дома мы сидим и вдумчиво добавляем транзакции, а на улице, например, сразу после магазина, пишем в бот "2300 продукты" - сервер общий для всего этого, данные тоже.

Стоп, а это тянет на "полную синхронизацию"? Если бы я на этом остановился, то конечно нет.
Тут вступают еще и веб-сокеты под капотом...

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

А что дают древовидные категории?

У разных пользователей разные требования по учету: один хочет просто записывать, что в какой-то день сходил в магазин на какую-то сумму. Другой хочет детально описывать на какие вещи ушли деньги: продукты, товары для дома, и так далее.
Что с этим делать? Правильно, добавлять категории, которые наследуют родительские!

Таким образом, во-первых, во вкладке аналитики можно будет "протыкивать" куски диаграмм, чтобы перейти на уровень ниже. А во-вторых, если у нас установлен бюджет на "Питание" в условные 20 тысяч рублей, тогда при транзакции с категорией "Фастфуд" бюджет тоже будет учитываться. Весьма удобно получается.

На самом деле интересных решений еще немало, и описывать все их тут, кажется, лишним, тем более есть публичный демо-режим вместе с тг ботом (но если нужно - могу отдельную статейку написать и рассказать обо всем!), но "One More Thing" у меня таки есть...

Интеграция с искусственным интеллектом

Скажу сразу, и с грустного: в основном это OpenAI с его ChatGPT, поэтому, к сожалению, в публичной демке можете не искать, а по дефолту интеграция выключена. Есть поддержка ollama, но... оно работает плохо: та же Llama 3.1 просто пихает в контекст доступные инструменты ИИ (tools), и на выходе получается какая-то дичь. В общем-то, кажется, разработчики и не заявляли поддержки тулзов, поэтому так.

Но если у вас таки есть доступ к API, то... ИИ здесь может сделать очень много чего: посмотрит вашу аналитику, добавит/изменит/удалит транзакции, с бюджетом по категориям тоже подскажет. Короче говоря, у него есть возможность взаимодействовать с приложением почти на таком же уровне, как и у пользователя!
Кстати, если он настроен в бекенде, то и в тг боте тоже будет использоваться — в случае, если первичный парсинг провалится.

И, кстати, pdf файлы оно тоже поддерживает: работает, конечно, не всегда, и токенов жрет как не в себя. Я не так давно тестил, как оно понимает текст с картинки... итог - плохо, передаем еще и текст из pdf файла, чтобы меньше галлюцинировало.
Но выписку из сбера на 8 страниц оно, в общем, осиливает, хотя я бы рекомендовал просить у ИИ перевести в CSV (еще лучше - просить первую страницу, затем вторую, и так далее), сохранить все это дело в файлик и потом через массовый режим добавлять, заодно и отредактировать можно будет до применения транзакций.

В целом ИИ здесь - штука удобная, но если вы очень трепетно относитесь к своим данным - скорее всего это не для вас, по крайней мере на данный момент

Возможно, таки есть какая-то llm'ка с поддержкой tools как у OpenAI, но я таких не знаю и тестил только Llama. Может, знающие люди подскажут в комментариях!

О технологическом стеке

Тут тоже есть что обсудить:

Фронтенд - Nuxt 3 & Tailwind CSS & DaisyUI. Я бы назвал это "набор бекендера" - не очень люблю всю эту веб движуху, но вот конкретно эти инструменты весьма симпатичные и мне даже понравилось работать с этим стеком. Почему именно Nuxt 3 и прочее - так исторически сложилось, что начал писать нормальные сайты с их помощью : )

Бекенд - Java с... нет, не со Spring. Все-таки это пет-проект, а не энтерпрайз, так что на мой глаз попали эти сорванцы: Jooq для строго-типизированного описания SQL запросов, Flyway для миграций, для http сервера, внезапно, Spark - мне эта штука понравилась тем, что она чем-то напоминает akka http.
Почему именно Java? Опять же исторически так сложилось, что я давненько так пишу на ней и мне этот язык нравится.

Конечно, я понимаю, что оверхед в лице JVM тут совсем не нужен, но бекенд в итоге кушает относительно немного: для одного пользователя хватит и 32 мегабайта кучи. Но, конечно, выделять лучше больше : )

Совсем чуть-чуть о трудностях реализации

Веселее всего было с написанием страницы аналитики во фронтенде. Я использовал ApexCharts для рендера графиков, но все равно анал-карнавал получился, и код там... отвратительный, прямо скажем. Думается мне, когда-то это нужно будет рефакторить как минимум
В целом, на сколько я знаю, нормальных библиотек до сих пор нет для графиков - все в чем-то проседают. Буду рад совету по этому поводу!

Есть идеи как это можно монетизировать?

Идеи - есть, конкретного плана - нет.
Можно попробовать платно раскатывать инстансы людям, которые совсем далеки от IT. Но тут есть подводные камни: я бы не хотел, чтобы все они работали на арендованных дедиках в моем владении, данные в бд не шифруются и не представляется возможным (всякие аналитики на стороне бекенда считают по-месячно/по годам транзакции, клиентам по типу смартфонов будет тяжеловато такое делать).

Но в целом - пока не сильно задумывался, если есть люди, которые могут помочь - буду рад пообщаться в лс!

Какие планы на будущее?

В ближайших планах - допиливание и полировка. Наверняка найдется несколько ошибок/неудобств. Так же слегка поработать над интеграцией ИИ: надо бы сделать поддержку OCR для изображений, чтобы сканировать чеки, например. Хотя просто изображение оно умеет видеть

Чуть дальше - нативное приложение на андроид. И нет, оно не будет дублировать функционал сайта. Зачем тогда? Объясняю: до этого момента я не упоминал про интеграцию с банками - да, её нет, и нормальных способов я не вижу здесь. Зато есть полу-костыльный: пусть нативное приложение считывает пуш-уведомления, и если оно подходит под какой-нибудь фильтр, определенный пользователем, тогда передавать текст в ИИ - пусть оно само разбирается в какую категорию заносить.

Архитектурно проблем с этим не должно возникнуть, тем более, под Java враппер API уже написан!

В отдаленных - запилить режим... инвестора? Специфичная штука, но лично мне бы пригодилось тречить движение активов и всякий подсчет доходности самостоятельно. Хотя как это должно выглядеть с точки зрения UI/UX - тот еще вопрос

Нужны ли какие-то советы или помощь Клуба?

Да! Я был бы очень благодарен за звездочки на проектах (Backend, Frontend), issues, пул-реквесты, советы, в общем любую активность!

Кстати, выражаю благодарность Юлии Сапсане, Дмитрию Скрыльникову и Анатолию Власову за советы и взгляд со стороны : 3

Связанные посты
14 комментариев 👇

Имхо все подобные платформы страдают одним единственным недостатком - отсутствием интеграции с банками или/и при наличии этих интеграции отсутствие понятного способа обновления токенов на стороне банков. Особенно такая проблема актуальна когда у тебя сотни транзакций за день и каждый раз добавлять их и тратить на это время бывает просто некогда. В РФ пользовался койнкипером, после переезда банковским приложением которое само все бьёт по категориям, но все равно не до конца понятен финансовый флоу. Если захотите делать интеграции в будущем, то можете глянуть в сторону plaid (https://plaid.com/) или MX (https://github.com/mxenabled) Но там тоже все далеко от идеала - авторизации слетают, да и стоит денег.

В наксте кстати из коробки поддерживается typescript и миддлвары можно сделать глобальные, чтобы не прописывать их каждой странице отдельно. В nuxt.config не обязательно прописывать process.env.NUXT_PUBLIC_ENV_VAR и просто опередить его в окружении или положить в енв в корне: https://nuxt.com/docs/guide/going-further/runtime-config#exposing

  Развернуть 1 комментарий

@Nks, этим платформам надо интегрироваться с дзенмани.

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@Nks, а почему отсутствие интеграции с банками - это такой прям сильный недостаток? я в рамках паранойи вообще считаю, что это зло прямо таки неистовое - чтение смсок, доступ к аккаунту в банке и т.п.

я бы добавил в приложение контроллер под вебхуки транзакций, а там уже какие-то мысли мыслил по поводу откуда брать данные и каким образом. хоть плейд, хоть емейла обработку с выпиской.

  Развернуть 1 комментарий

@Nks, На самом деле страдают не очень, на мой взгляд: если пользователь хочет как раз детально понимать финансовый флоу - ему будет недостаточно просто добавлять 1 в 1 транзакции из банков. Взять тот же сбер: у него и так есть какая-то аналитика, но там абстрактные "Супермаркеты". А на что именно ушли деньги - неясно, потому что под этой категории должно быть ещё "молочка", "газировка", и так далее.

Дзен мани с этим тоже справляется плохо, по словам моей мамы, потому что у нее опять же детализация сильная.

Так что да, это далеко не всегда вообще удобно

На счёт сотни транзакций в день - в приложении есть bulk режим с поддержкой импорта из CSV, а эту самую таблицу можно выпросить у ИИ встроенного из любой pdf выписки. Так что и тут есть решение

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@AlexP8, полезная информация! Сохранил, может в будущем придумаю как покрыть такой кейс.

  Развернуть 1 комментарий

Вы заметили, как много различных решений для учета финансов? Да все какие-то не такие... Время написать еще одно и исправить это!

  Развернуть 1 комментарий

@TiraelSedai, Да! Именно этот мем и был в голове, каждый раз, когда перечитывал вступление : D

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Дашборд круто смотрится!

Я использовал ApexCharts для рендера графиков, но все равно анал-карнавал получился, и код там... отвратительный, прямо скажем. Думается мне, когда-то это нужно будет рефакторить как минимум

В целом, на сколько я знаю, нормальных библиотек до сих пор нет для графиков - все в чем-то проседают. Буду рад совету по этому поводу!

Вот это знакомо. Я с миниаппе Cointry тоже помучился с ApexCharts. В итоге, во второй версии перешел на православный ChartJS. Нет ничего лучше старого надежного друга)

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

Пробовал пользоваться приложениями в которые нужно было ручками заносить транзакции и каждый раз забрасывал через несколько недель/месяцев. Потому что рутина, а рутина - это лишняя головная боль каждый день.

Лет 5 назад установил приложение Finanzguru и с тех пор пользуюсь им на регулярной основе.

Из плюсов:

  • интеграции с огромным списком европейских банков
  • можно завести все счета: банковский, кредитной карты, брокерский, и т.д.
  • счета заводятся через банковский API, который просто даёт информацию по транзакциям, без доступа к средствам
  • автоматическая классификация трат по основным категориям + если не получилось автоматически, можно поправить

Из минусов:

  • приложение на немецком
  • российские банки не прикрутить
  • каждый месяц набегает 10-20 транзакций, которые не удалось классифицировать. Надо потратить 5-7 минут чтобы это сделать :)
  • бесплатная версия показывает только 3 месяца статистики, полная история - по подписке за 3€/мес

В общем для меня оказался простой и удобный способ увидеть все свои средства и траты в одном месте. Если бы узнал про такое для российских банков пока я жил в России, то тоже обязательно бы попробовал ибо удобно.

  Развернуть 1 комментарий

😎

Автор поста открыл его для большого интернета, но комментирование и движухи доступны только участникам Клуба

Что вообще здесь происходит?


Войти  или  Вступить в Клуб