Spense.app v0.1

Приложение находится в стадии активной разработки и не доступно для публичного использования.

Выкатил версию 0.1 своего "приложения" для учета денег, решил отчитаться о прогрессе. "Приложения" - потому что это не настоящее приложение, а Progressive Web App - по сути веб-сайт, который можно открыть в телефоне, добавить на Home Screen, и он будет открываться на весь экран, без панелей браузера. Настоящие приложения я пока делать не умею, но и в текущем виде оно уже неплохо работает.

Кстати, даже иконка уже есть, нарисовал в ChatGPT/DALL-E:


Как вы уже поняли, свою поделку я назвал Spense. Это название я придумал когда-то давным давно, подрезав слово "expense", и тогде же купил домен, который вот только сейчас более-менее стал мной использоваться.

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

Изменения в 0.1

Формат отображения валют

По умолчанию все деньги отображались в виде €12345.67. Меня бесило, что значок валюты спереди (особенно когда это рубли, очень дико выглядит), поэтому переделал на 12,345.67 €.


Вообще, в разных странах знак валюты то спереди, то сзади, и десятичные разделители разные, поэтому возни там будет еще порядочно.

"Мягкое" удаление кошельков и транзакций

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

Дата добавляемой транзакции

Раньше поле "Date" было просто редактируемой датой, которая была сегодняшней по умолчанию:


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

Теперь вместо даты там "now", и в этом случае транзакция всегда создается с текущей датой, но опционально можно ее поменять:


Кстати, в одном из популярных приложений видел отдельную кнопку "Yesterday". Можно тоже как-нибудь добавить, потому что это второй по популярности юзкейс.

Список транзакций

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


В интерфейсе добавления, кстати, тоже отображается несколько последних транзакций, но этот список в основном используется для исправления недавних ошибок:


Пополнение базы транзакций историческими данными

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

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

  • назначение платежа BOLT.EU/O/123456... - это на самом деле такси;
  • BOLT.EU/R/56789... - самокат;
  • BOLT.EU/D/24679... - это Bolt Food, доставка на дом, которую я приравниваю к кафе.

Теперь представьте, что у вас таких транзакций несколько тысяч :-)

Но в общем и целом получилось неплохо, я не жалуюсь. Хотя по дороге потерялось где-то 20-30 некритичных транзакций, и я совсем забыл о транзакциях вида "снятие наличных" и "перевод между счетами", мне пока хватит. Закину эти недочеты в задачи на будущее.

Кстати о задачах!

Ведение проекта

Помню, около месяца назад вылез один баг, и в тот момент я понял, что надо бы все баги, идеи и прочие задачи куда-нибудь складывать, чтобы они не терялись и в конечном счете реализовывались. А так как репозиторий с кодом лежит на Гитхабе, я решил далеко не ходить и завел проект в GitHub Projects. Там все как обычно: таски и доски, а большего мне и не надо.

In Progress пустой, потому что версию 0.2 я еще не начал делать.

Вообще, с этим само-проджект-менеджментом я потихоньку учусь отделять важное от неважного. Например, заполнить базу данных транзакциями мне нужно было для того, чтобы получить более полный набор данных для экспериментов (определение тенденций, прогнозирование, и т. д.). То есть вполне допустимо, если среди этих 9-10 лет истории потеряется пара десятков небольших платежей. А вот если бы мне на работе как программисту дали бы подобную задачу, я бы очень долго корпел, чтобы ни одна транзакция не потерялась, и потратил бы месяц.

Короче, учусь делать "достаточно хорошо", задвигая перфекционизм куда подальше и держа в голове контекст и планы на следующие версии.

Идеи для следующей версии

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

Пока я планирую:

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

Конечно, на уровне бэкенда и базы данных почти все эти фичи уже есть, но надо их довести до мобильного интерфейса, по возможности не превращая его в 1С-Бухгалтерию.

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

Stay tuned!

Всегда жалуйтесь

На днях решили заказать на обед грузинской еды в Bolt Food. Нашли неплохой ресторан, понабрали на 40 евро, заказали, ждем. Доста...

The Slappable Jerk

Давно хотел порекомендовать ютуб-канал The Slappable Jerk (буквально "Придурок, которому можно дать по щам"). Там чувак очень ...

Colon

В английском языке слово colon используется и для обозначения знака "двоеточие" : , и для обозначения толстого кишечника. Ка...