Dinary
Видно, что попало в пакет из магазина. Учёт расходов, сканирование чеков (Сербия, Черногория), анализ трат с помощью AI.
| Выберите набор категорий при первом запуске |
Чеки классифицируются AI |
Ввод в любой валюте — одно касание |
- Знать, что купили: чек из супермаркета раскладывается по позициям, а категориям приложение учится по вашим исправлениям.
- Записать, пока помните: отсканируйте QR-код или введите расход на телефоне — даже без связи.
- Смотреть траты по-своему: категории, поездки, теги и валюты, а на компьютере — AI-аналитик.
Быстрый старт
Dinary — ваш собственный небольшой сервер, а приложение на телефоне — страница, которую он отдаёт. Он бесплатно работает на виртуалке Oracle Cloud Always Free и доступен через вашу приватную сеть Tailscale.
Есть подписка Claude Pro или Max либо ChatGPT Plus? Откройте вкладку Code в настольном приложении Claude или Codex в настольном приложении ChatGPT и вставьте:
Установи мне dinary на Oracle Cloud по инструкции
https://andgineer.github.io/dinary/agent-install/
Агент по шагам скажет, что можете сделать только вы, — зарегистрироваться в Oracle и Tailscale, вписать ключ в файл, — а остальное сделает сам.
- Разверните сервер:
- Oracle Cloud Free Tier — $0/месяц навсегда
- Свой компьютер — $0 (Tailscale Funnel или Cloudflare Tunnel)
- Настройте HTTPS-доступ — см. инструкции по деплою выше.
- Установите PWA на телефон.
- Первоначально загружается классификатор, который вы далее можете корректировать.
- При желании настройте Google Sheets, чтобы каждый расход попадал строкой в таблицу.
- Запустите
inv analytics— своего персонального финансового аналитика.
Что умеет
Dinary server — бэкенд на FastAPI, который:
- Хранит расходы в локальной SQLite-базе (в EUR, с исходной суммой и валютой для аудита)
- Опционально дублирует каждый расход в Google Sheets (конвертируя в RSD для сводной таблицы)
- Парсит QR-коды сербских фискальных чеков (сумма + дата)
- Раздаёт мобильное PWA-приложение для быстрого ввода расходов в динарах
- Поддерживает офлайн-очередь записей при отсутствии связи
| Проверка категорий чека |
Быстрый ввод в любой валюте |
Как это устроено
Исправления становятся правилами. Известные позиции классифицируются по сохранённым правилам, незнакомые и сомнительные уходят в LLM. Исправление пользователя важнее модели и действует во всех магазинах той же сети. Сбои классификации остаются исправимыми: есть повторы и ручной разбор. Дизайн классификации объясняет уверенность, альтернативы и ручное разрешение.
Выбор провайдера и переключение между провайдерами берёт на себя llmbroker — отдельная библиотека для приложений, которым нужен пул LLM-провайдеров. Логика чеков остаётся в Dinary.
Сохранённый расход переживает упавший сетевой запрос. Офлайн-записи хранятся в IndexedDB, а сканер QR встроен в приложение и работает без сети. На сервере источник истины — SQLite-журнал. Выгрузка в Google Sheets идёт через очередь с повторами, так что недоступная таблица не мешает записывать расходы. См. офлайн-дизайн и интеграцию с Sheets.
У аналитики свой дом. Локальное приложение аналитики через DuckDB читает реплику журнала только для чтения, поэтому тяжёлые аналитические зависимости не попадают на сервер. Его AI может запрашивать траты и настраивать представления, не меняя журнал. Дизайн аналитики описывает дашборд и MCP-интерфейс.
Хранилище определили частые мелкие запросы. В раннем синтетическом тесте 5 000 обращений к таблице соответствий заняли 2,0 секунды на прямом SQL и 19,9 секунды через Ibis. Поэтому транзакционный бэкенд построен на SQL-файлах и миграциях. Архитектурная запись описывает нагрузку и компромиссы; результат относится к этому замеру, а не к скорости всего приложения.