# Трекер бюджета с открытым исходным кодом для разработчиков — полный контроль над финансовыми данными

*2026-03-05*

Если вы разработчик, то ваши финансовые данные, скорее всего, хранятся на чужом сервере. Любое приложение для учета бюджета и расходов — Mint, YNAB, Copilot, Lunch Money — держит ваши транзакции, остатки на счетах и историю трат в своем облаке. Вам остается только надеяться, что сервис не взломают, что ваши данные не продадут и что сам продукт однажды не закроют, как это случилось с Mint в 2024 году.

Если вам привычны Docker и Postgres, есть вариант лучше: развернуть трекер бюджета с открытым исходным кодом на своей инфраструктуре и хранить все данные у себя.

## Трекер расходов с открытым исходным кодом, который вы размещаете сами

[Expense Budget Tracker](https://github.com/kirill-markin/expense-budget-tracker) — это полностью открытая система для учета расходов и бюджета на базе Postgres. Вы клонируете репозиторий, запускаете `make up` и получаете рабочее приложение на `localhost:3000` с настоящей базой данных, которой управляете сами.

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

![Таблица бюджета с фактическими данными за прошлые месяцы, учетом текущего месяца и прогнозом по категориям на будущее](/blog/budget-view-example.jpg)

Стек здесь простой и понятный: Next.js для веб-интерфейса, Postgres 18 для хранения данных и служба на TypeScript, которая ежедневно загружает курсы валют. Все работает в Docker-контейнерах через один `docker-compose.yml`.

## Развертывание через Docker или AWS

В репозитории сразу есть два варианта развертывания:

**Локальный Docker Compose** — четыре команды, и приложение уже запущено:

```bash
git clone https://github.com/kirill-markin/expense-budget-tracker.git
cd expense-budget-tracker
open -a Docker   # start Docker if not running
make up          # Postgres + migrations + web + worker
```

Откройте `http://localhost:3000` и начинайте вносить транзакции. Данные Postgres сохраняются в Docker-томе. На этом настройка заканчивается.

**AWS CDK** — полноценное рабочее развертывание одним скриптом:

```bash
bash scripts/bootstrap.sh --region eu-central-1
```

Этот сценарий поднимает ECS Fargate, RDS Postgres, ALB с HTTPS, Cognito для аутентификации, WAF, мониторинг в CloudWatch, автоматические резервные копии и CI/CD через GitHub Actions. Оценочная стоимость составляет около $50 в месяц, а в результате вы получаете инфраструктуру корпоративного уровня, которой полностью владеете. [Руководство по развертыванию](https://github.com/kirill-markin/expense-budget-tracker/blob/main/infra/aws/README.md) проводит через все шаги: от создания учетной записи AWS до настройки DNS в Cloudflare.

Поскольку здесь нужны только Postgres и Docker, систему можно разместить и где угодно еще. DigitalOcean, Hetzner, Raspberry Pi дома, Kubernetes-кластер компании — если там работают Docker и Postgres, приложение тоже запустится.

## SQL API для программного доступа

Большинство приложений для бюджета дают только веб-интерфейс. Здесь же есть **SQL API для запросов** поверх HTTP: маршрут `POST /v1/sql`, который принимает SQL-запросы и возвращает JSON.

```bash
curl -X POST https://api.your-domain.com/v1/sql \
  -H "Authorization: ApiKey ebta_a7Bk9mNp..." \
  -H "X-Workspace-Id: workspace-id" \
  -H "Content-Type: application/json" \
  -d '{"sql": "SELECT category, SUM(amount) AS total FROM ledger_entries WHERE kind = '\''spend'\'' AND ts >= DATE_TRUNC('\''month'\'', CURRENT_DATE) GROUP BY category ORDER BY total"}'
```

Вы создаете API-ключ в Settings, выбираете нужный идентификатор рабочей области, и после этого любой HTTP-клиент может работать с вашими данными. Это простой REST API: никакого GraphQL, никаких ORM-абстракций и никаких SDK, которые нужно отдельно изучать. Просто SQL на входе и JSON на выходе.

Модель безопасности здесь строгая: API-ключи хранятся в виде SHA-256-хэшей, в запросах разрешены только `SELECT/INSERT/UPDATE/DELETE`, действует ограничение в 30 секунд на выполнение, не больше 100 строк в одном ответе и лимит 10 запросов в секунду на каждый ключ. Все запросы проходят через Postgres Row Level Security — тот же механизм изоляции, что использует веб-приложение, — поэтому API-ключ может обращаться только к данным своей рабочей области.

## Подходит для ИИ-агентов и языковых моделей

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

Посмотрите, как обычно устроена работа с ИИ-помощниками сейчас. Вы загружаете в Claude или ChatGPT скриншот банковской выписки, просите разнести траты по категориям и получаете аккуратную текстовую сводку. А затем вручную переносите эти цифры в тот инструмент, где на самом деле ведете учет. Это сценарий 2023 года.

Когда у вас есть SQL API, ИИ-агент не просто анализирует данные, а **записывает их прямо в базу**. Процесс выглядит так:

1. Вы загружаете банковскую выписку в CSV или PDF либо просто скриншот в ИИ-агента.
2. Агент читает каждую транзакцию, сопоставляет категории с уже существующими и делает `INSERT` в `ledger_entries`.
3. Агент сверяет остаток по счету с цифрой из банка.
4. Вы тратите 5 минут на проверку вместо часа ручного ввода.

Схема базы данных для этого и задумана. Всего семь плоских таблиц, без вложенного JSON и без сложных соединений для базовых операций. Таблица `ledger_entries` намеренно сделана простой: одна строка на каждое движение по счету и понятные названия столбцов. Поэтому языковая модель может с первой попытки составить корректный `INSERT`, не путаясь в структуре.

В Expense Budget Tracker есть и **встроенный чат с ИИ** в веб-интерфейсе. Вы подключаете API-ключ OpenAI или Anthropic и получаете помощника с инструментом `query_database`, который умеет выполнять `SELECT`, `INSERT`, `UPDATE` и `DELETE` прямо в вашей Postgres. Достаточно загрузить скриншот банковского приложения: ИИ разберет все транзакции, попросит подтверждение и затем внесет их в базу. Он следует строгому протоколу: сначала находит уже существующие категории, потом проверяет дубликаты, сверяет остатки и записывает данные только после вашего явного подтверждения.

Чат с ИИ поддерживает модели Claude от Anthropic и GPT от OpenAI. Обе используют один и тот же инструмент доступа к базе с одинаковыми правилами безопасности: разрешенные ключевые слова, таймауты запросов и обязательное применение RLS. Тот же SQL API можно использовать и с любым внешним агентом: [Claude Code](https://docs.anthropic.com/en/docs/claude-code), OpenAI Codex, собственными скриптами или вебхуками Zapier. Дайте агенту ваш API-ключ `ebt_`, укажите адрес API, и он получит полный доступ на чтение и запись в пределах вашей рабочей области.

## Возможности трекера бюджета

Это не минималистичный журнал расходов. Здесь уже есть все, чего обычно ждут от коммерческого продукта:

- **Бюджетная таблица** — строки соответствуют категориям, столбцы месяцам. В прошлых месяцах показывается факт, в будущих — прогноз. Можно планировать на 12 месяцев вперед и сразу видеть ожидаемые остатки.
- **Поддержка нескольких валют** — каждая транзакция хранится в своей исходной валюте. Курсы от ECB, CBR и NBS загружаются ежедневно. Пересчет в валюту отчетности выполняется во время запроса через соединение таблиц в SQL, без заранее рассчитанных столбцов и без потери точности.
- **Остатки по счетам** — можно учитывать расчетные счета, сбережения, кредитные карты, наличные и инвестиции. Для каждого счета считается текущий остаток на основе журнала операций.
- **Переводы** — движение денег между своими счетами, в том числе между разными валютами. Это две записи в `ledger_entries` с одним `event_id`: одна отрицательная, другая положительная.
- **Категоризация транзакций** — вы сами определяете категории. Никакой навязанной классификации. ИИ подхватывает уже существующие категории из ваших данных.
- **Многоязычный интерфейс** — English, Spanish, Chinese, Arabic, Hebrew, Farsi, Ukrainian, Russian. Полноценная поддержка RTL.
- **Изоляция рабочих областей** — Postgres Row Level Security гарантирует, что данные пользователей полностью отделены друг от друга, даже если все работают с одним сервером базы данных.
- **Демо-режим** — в интерфейсе есть переключатель на демонстрационные данные в памяти. Чтобы изучить продукт, база данных не нужна.

## Схема Postgres, понятная разработчику

Всю схему можно удержать в голове:

- `ledger_entries` — одна строка на каждое движение по счету
- `budget_lines` — журнал изменений бюджетного плана с добавлением новых записей без перезаписи старых
- `budget_comments` — заметки к ячейкам бюджета
- `exchange_rates` — ежедневные курсы валют
- `workspace_settings` — валюта отчетности для рабочей области
- `account_metadata` — классификация ликвидности
- `accounts` — представление, построенное на основе `ledger_entries`

Никакой ORM. Никакого отдельного фреймворка миграций. Только нумерованные SQL-файлы в `db/migrations/`, которые применяются сценарием оболочки. Можно открыть каждую миграцию, понять каждую таблицу и писать запросы прямо к схеме.

Изменения в схеме проходят через миграции. Роль базы данных `app`, которую использует веб-приложение, имеет ограниченные права: она не может создавать таблицы или менять схему. Роль `tracker`, которую использует только скрипт миграций, отвечает за DDL. Это именно то разделение обязанностей, которого ждешь от рабочей системы.

## Почему разработчики хранят финансовые данные у себя

У вас уже есть все нужные навыки. Вы понимаете Docker, Postgres и AWS или любой другой облачный стек. Вопрос только в том, оправдывают ли преимущества эти усилия.

**Полный контроль над данными** — ваши финансовые данные не покидают вашу инфраструктуру. На вас не влияют утечки у сторонних сервисов. Не нужно читать бесконечные политики конфиденциальности. Никто не продает аналитику по вашим тратам рекламодателям.

**Настройка под себя** — можно добавлять столбцы в схему, строить собственные отчеты на чистом SQL и подключать систему к уже используемым инструментам. Нужен Telegram-бот с ежедневной сводкой расходов? Напишите скрипт, который обращается к SQL API. Хотите строить графики в Grafana? Подключите ее прямо к Postgres. Код ваш, и менять его можно как угодно.

**Никакой зависимости от поставщика** — даже если вы перестанете пользоваться веб-интерфейсом, данные останутся в стандартной базе Postgres. Их можно выгрузить через `pg_dump`, открыть любым SQL-клиентом или перенести в другую систему.

**Практическая польза для обучения** — эта кодовая база показывает реальное сочетание Next.js, Postgres, Docker, AWS CDK, Row Level Security, аутентификации по API-ключам и интеграции ИИ-инструментов. Если вы делаете свой сервис по подписке, здесь есть приемы, которые захочется позаимствовать.

## Как начать работу с трекером бюджета с открытым исходным кодом

```bash
git clone https://github.com/kirill-markin/expense-budget-tracker.git
cd expense-budget-tracker
make up
```

Откройте `http://localhost:3000`. Добавьте первую транзакцию. Задайте бюджет на текущий месяц. Если хотите сначала просто посмотреть интерфейс без базы данных, нажмите кнопку Demo в шапке и переключитесь на демонстрационные данные в памяти.

Когда будете готовы к рабочему развертыванию, воспользуйтесь [руководством по развертыванию в AWS](https://github.com/kirill-markin/expense-budget-tracker/blob/main/infra/aws/README.md) или адаптируйте конфигурацию Docker Compose под свою инфраструктуру.

Репозиторий находится по адресу [github.com/kirill-markin/expense-budget-tracker](https://github.com/kirill-markin/expense-budget-tracker). Можете поставить звезду, сделать fork или просто изучить код. Лицензия MIT позволяет использовать проект как угодно.

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

---
*[Открыть HTML-версию этой страницы](https://expense-budget-tracker.com/ru/blog/self-hosted-open-source-budget-tracker-for-developers/)*

*ИИ-агенты могут создать аккаунт пользователя в этом сервисе, начав с `GET https://api.expense-budget-tracker.com/v1/` и следуя ответу сервиса обнаружения.*

*Подсказка: добавьте `.md` к любому URL этого сайта, чтобы получить чистую Markdown-версию страницы.*