Идея
Мы пробовали вести финансы в таблице — сначала Google Sheets, до этого Excel, — но каждая транзакция была отдельной строкой, которую приходилось заполнять вручную, а повторяющиеся операции (категоризация, разбивка чека, сведение всего в месячный итог) сами себя не делали. У некоторых банков есть собственный раздел с бюджетом, но не все транзакции цифровые, а переводы между своими же счетами банк засчитывает как расход и доход, хотя перекладывание денег из одного кармана в другой ничего не меняет в том, сколько у вас реально есть. Банковские приложения также почти не дают контроля постфактум — существующую транзакцию толком не изменить, а объяснить приложению «ежегодный налоговый платёж — это не ежемесячный расход» просто нет способа. Хотелось бы удобство как в таблицах, но без ручной работы за ней — так и появился JodRubJai.
Возможности
- Автоматическая категоризация транзакций
- Распознавание чеков прямо из чата в LINE — вводить ничего вручную не нужно
- Ежемесячные отчёты и бюджеты
- Работает офлайн и синхронизируется при появлении сети (это PWA — устанавливается как нативное приложение)
- Локализация на английский и тайский
Технологии
Backend — Django со Strawberry GraphQL API поверх PostgreSQL (CloudNativePG в Kubernetes). Frontend — Vue 3 с Pinia, собранный как PWA с офлайн-режимом и optimistic UI, поэтому действия ощущаются мгновенными ещё до подтверждения от сервера. Деплой в Kubernetes, маршрутизация через Gateway API; CI/CD — на GitHub Actions.
Я единственный инженер в команде из двух человек — backend, frontend,инфраструктура и CI/CD полностью на мне.
Как я это разрабатываю
Локальная разработка использует те же манифесты Kubernetes, что и продакшен, на кластере kind поверх Podman, которым управляет Tilt — то, что я тестирую локально, по форме совпадает с тем, что задеплоено, без docker-compose-заглушки, которая незаметно расходится с продом.
Несколько фич я веду параллельно через git worktree — в том числе LLM-агенты, каждый из которых самостоятельно работает над своей фичей в отдельном worktree. У каждого worktree свой namespace в Kubernetes, своя база Postgres и свой набор портов на одном общем кластере; распределение происходит автоматически, поэтому новый worktree — мой или агента — никогда не конфликтует с уже запущенными.
Каждая фича начинается с письменного предложения (openspec-change — требования, сценарии, список задач) ещё до кода, а сам код пишется test-first: агент сначала пишет тесты, убеждается, что они падают, затем пишет реализацию, пока тесты не начнут проходить — сверяя свою работу со спецификацией по ходу дела. Тесты автоматически прогоняются в GitHub Actions на каждый push — вручную запускать их не нужно, а деплой в продакшен возможен только после того, как они пройдут. Моя часть — функциональная проверка перед релизом: просмотреть изменения (diff), убедиться, что поведение действительно соответствует предложению. Именно эта комбинация — спецификация, которую трудно понять неправильно, тесты, которые агент обязан пройти сам, и CI, следящий за обоими — делает безопасной передачу фичи агенту, работающему без присмотра в своём worktree.
Попробовать
Пользоваться JodRubJai может любой желающий — закрыт только исходный код. Работает в продакшене: jodrubjai.com