# رهگیر بودجهٔ متن‌باز خودمیزبان برای توسعه‌دهندگان: دادهٔ مالی‌تان را خودتان مالک باشید

*2026-03-05*

اگر توسعه‌دهنده باشید، احتمالاً داده‌های مالی‌تان روی سرور شخص دیگری زندگی می‌کند. هر اپ رهگیر بودجه و رهگیر هزینه، از Mint و YNAB گرفته تا Copilot و Lunch Money، تراکنش‌ها، مانده‌حساب‌ها و الگوهای خرج شما را در زیرساخت ابری خودش نگه می‌دارد. شما هم باید به آن‌ها اعتماد کنید که دچار نشت امنیتی نشوند، داده‌تان را نفروشند و یک روز هم تعطیل نشوند.

اگر با Docker و Postgres راحت هستید، گزینهٔ بهتری وجود دارد: یک رهگیر بودجهٔ متن‌باز را خودتان میزبانی کنید و همه‌چیز را روی زیرساخت خودتان نگه دارید.

## رهگیر هزینهٔ متن‌بازی که خودتان مستقر می‌کنید

[Expense Budget Tracker](https://github.com/kirill-markin/expense-budget-tracker) یک سیستم کاملاً متن‌باز برای پیگیری هزینه و بودجه است که روی Postgres ساخته شده. مخزن را کلون می‌کنید، `make up` را اجرا می‌کنید و یک اپ آماده‌به‌کار روی `localhost:3000` با دیتابیسی واقعی که کنترلش دست خودتان است دریافت می‌کنید.

نه ساختن حساب کاربری لازم است، نه خروج داده از دستگاه‌تان، نه اشتراک پولی. مجوز MIT هم دارد؛ fork کنید، تغییرش بدهید، هر کاری خواستید بکنید.

![Budget table showing past actuals, current month tracking, and future monthly forecast by category](/blog/budget-view-example.jpg)

پشتهٔ فنی خیلی سرراست است: Next.js برای UI وب، Postgres 18 برای ذخیره‌سازی و یک worker تایپ‌اسکریپت که نرخ ارز روزانه را می‌گیرد. همه‌چیز از طریق یک `docker-compose.yml` واحد داخل containerهای Docker اجرا می‌شود.

## با 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 در یک volume مربوط به Docker ماندگار می‌شود. کل راه‌اندازی همین است.

**AWS CDK**: یک استقرار کامل تولیدی با یک اسکریپت:

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

این مسیر ECS Fargate، RDS Postgres، ALB با HTTPS، Cognito برای auth، WAF، مانیتورینگ CloudWatch، پشتیبان‌گیری خودکار و CI/CD با GitHub Actions را بالا می‌آورد. هزینهٔ تقریبی حدود ۵۰ دلار در ماه است و در عوض زیرساختی در حد enterprise دارید که واقعاً مال خودتان است. [راهنمای استقرار](https://github.com/kirill-markin/expense-budget-tracker/blob/main/infra/aws/README.md) قدم‌به‌قدم همه‌چیز را توضیح می‌دهد؛ از ساختن حساب AWS تا پیکربندی DNS در Cloudflare.

چون مسئله در اصل فقط Postgres و Docker است، می‌توانید هر جای دیگری هم خودتان میزبانی کنید. DigitalOcean، Hetzner، یک Raspberry Pi در انباری، یا کلاستر کوبرنتیز شرکت‌تان؛ اگر Docker و Postgres اجرا می‌کند، این را هم اجرا می‌کند.

## مسیر مربوط به SQL API برای دسترسی برنامه‌نویسی

بیشتر اپ‌های بودجه فقط یک UI وب می‌دهند و تمام. این یکی یک **API پرس‌وجوی SQL** روی HTTP ارائه می‌کند: مسیری در `POST /v1/sql` که statementهای خامِ 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"}'
```

در Settings یک API key می‌سازید، فضای‌کار هدف را انتخاب می‌کنید و بعد هر کلاینت HTTPی می‌تواند داده‌های شما را پرس‌وجو کند. این فقط یک endpoint REST ساده است؛ نه GraphQL، نه abstractionهای ORM، نه SDK جدید برای یادگرفتن. فقط SQL داخل، JSON بیرون.

مدل امنیتی هم سخت‌گیرانه است: API keyها به شکل SHA-256 hash ذخیره می‌شوند، پرس‌وجوها به `SELECT`، `INSERT`، `UPDATE` و `DELETE` محدود هستند، timeout سی‌ثانیه‌ای دارند، سقف ۱۰۰ ردیف در هر پاسخ هست و rate limit برای هر کلید روی ۱۰ درخواست در ثانیه قرار دارد. همهٔ پرس‌وجوها هم از Postgres Row Level Security عبور می‌کنند؛ همان isolationی که UI وب استفاده می‌کند. یعنی یک API key فقط به دادهٔ فضای‌کار مالک خودش دسترسی دارد.

## ساخته‌شده برای عامل‌های AI و LLMها

چیزی که ادغام AI را برای امور مالی شخصی عملی می‌کند همین SQL API است، چون عامل AI شما برای خواندن و نوشتن دادهٔ مالی به دسترسی مستقیم دیتابیس نیاز دارد.

به گردش‌کار فعلی‌تان با دستیارهای AI فکر کنید. یک اسکرین‌شات از صورت‌حساب بانکی را داخل Claude یا ChatGPT می‌اندازید، از آن می‌خواهید خرج‌ها را دسته‌بندی کند و یک خلاصهٔ خوب تحویل می‌گیرید. بعد خودتان باید آن عددها را دستی داخل هر ابزاری که استفاده می‌کنید کپی کنید. این گردش‌کار مربوط به ۲۰۲۳ است.

با SQL API، عامل AI فقط داده‌ها را تحلیل نمی‌کند، بلکه **داخل دیتابیس شما می‌نویسد**. گردش‌کار تبدیل می‌شود به این:

1. یک صورت‌حساب بانکی (CSV، PDF یا اسکرین‌شات) را داخل یک عامل AI بیندازید
2. عامل هر تراکنش را می‌خواند، دسته‌بندی‌ها را با دسته‌بندی‌های موجودتان تطبیق می‌دهد و آن‌ها را داخل `ledger_entries` با `INSERT` ثبت می‌کند
3. عامل ماندهٔ حساب شما را با عدد بانک مقایسه می‌کند
4. شما به‌جای یک ساعت ورود دستی، ۵ دقیقه صرف مرور می‌کنید

schema دیتابیس هم برای همین طراحی شده است. هفت جدول تخت، بدون JSON تو‌در‌تو، بدون joinهای پیچیده برای کارهای پایه. جدول `ledger_entries` عمداً ساده است؛ یک ردیف برای هر حرکت پولی با نام ستون‌های روشن. یک LLM از همان بار اول می‌تواند دستورهای INSERT درست بنویسد، چون چیز زیادی برای گیج‌شدن وجود ندارد.

Expense Budget Tracker یک **چت AI داخلی** هم داخل UI وب دارد. API key مربوط به OpenAI یا Anthropic را وصل می‌کنید و دستیار به ابزار `query_database` دسترسی می‌گیرد؛ می‌تواند مستقیم داخل Postgres شما `SELECT`، `INSERT`، `UPDATE` و `DELETE` انجام دهد. یک اسکرین‌شات از اپ بانکی‌تان آپلود می‌کنید، AI هر تراکنش را تجزیه می‌کند، از شما تأیید می‌گیرد و آن‌ها را ثبت می‌کند. این فرایند از یک پروتکل سخت‌گیرانه پیروی می‌کند: اول دسته‌بندی‌های فعلی شما را کشف می‌کند، دنبال دادهٔ تکراری می‌گردد، مانده‌ها را بررسی می‌کند و فقط بعد از تأیید صریح شما چیزی می‌نویسد.

چت AI از مدل‌های Claude و GPT پشتیبانی می‌کند. هر دو از همان ابزار دیتابیس و همان قوانین امنیتی استفاده می‌کنند: whitelist کلمات کلیدی، timeout برای statementها و enforce شدن RLS. می‌توانید SQL API را با هر عامل بیرونی هم استفاده کنید: [Claude Code](https://docs.anthropic.com/en/docs/claude-code)، OpenAI Codex، scriptهای سفارشی یا webhookهای Zapier. کافی است API key با پیشوند `ebt_` را به عامل بدهید و endpoint را نشانش دهید؛ دسترسی کامل خواندن و نوشتن در محدودهٔ فضای‌کار خودش خواهد داشت.

## قابلیت‌های رهگیر بودجه

این فقط یک دفتر کل مینیمال برای خرج نیست. قابلیت‌هایی که از یک محصول تجاری انتظار دارید اینجا هم وجود دارند:

- **جدول بودجه**: ردیف‌ها دسته‌بندی‌اند، ستون‌ها ماه‌ها. ماه‌های گذشته رقم‌های واقعی را نشان می‌دهند، ماه‌های آینده پیش‌بینی شما را. می‌توانید ۱۲ ماه جلوتر برنامه‌ریزی کنید و مانده‌حساب‌های پیش‌بینی‌شده را یک‌جا ببینید
- **پشتیبانی چندارزی**: هر تراکنش در ارز بومی خودش ذخیره می‌شود. نرخ‌های روزانه از ECB، CBR و NBS خودکار دریافت می‌شوند. تبدیل به ارز گزارش‌گیری هنگام پرس‌وجو و از طریق joinهای SQL انجام می‌شود؛ نه ستونِ از پیش‌محاسبه‌شده، نه افت دقت
- **مانده‌حساب‌ها**: حساب جاری، پس‌انداز، کارت اعتباری، نقد، سرمایه‌گذاری. هر حساب یک ماندهٔ در حال حرکت دارد که از دفتر کل مشتق می‌شود
- **انتقال‌ها**: جابه‌جایی پول بین حساب‌های خودتان، حتی بین ارزها. دو ledger entry با یک `event_id` مشترک، یکی منفی و یکی مثبت
- **دسته‌بندی تراکنش‌ها**: دسته‌بندی‌های آزاد که خودتان تعریف می‌کنید. رده‌بندی اجباری وجود ندارد. AI از داده‌های قبلی شما یاد می‌گیرد
- **رابط چندزبانه**: انگلیسی، اسپانیایی، چینی، عربی، عبری، فارسی، اوکراینی و روسی. با پشتیبانی کامل از RTL
- **جداسازی فضای‌کار**: Postgres Row Level Security دادهٔ هر کاربر را کاملاً جدا می‌کند. حتی اگر همه روی یک سرور باشند، کاربرها دادهٔ یکدیگر را نمی‌بینند
- **حالت دمو**: با یک دکمه در UI می‌توانید به دادهٔ نمونهٔ in-memory سوییچ کنید. برای امتحان‌کردن رابط حتی به دیتابیس هم نیاز ندارید

## schema Postgres که برای توسعه‌دهنده‌ها ساخته شده

کل schema در ذهن جا می‌شود:

- `ledger_entries`: یک ردیف برای هر حرکت پولی حساب
- `budget_lines`: برنامهٔ بودجهٔ append-only
- `budget_comments`: یادداشت روی سلول‌های بودجه
- `exchange_rates`: نرخ ارز روزانه
- `workspace_settings`: ارز گزارش‌گیری برای هر فضای‌کار
- `account_metadata`: طبقه‌بندی نقدشوندگی
- `accounts`: یک VIEW مشتق‌شده از `ledger_entries`

نه ORM. نه framework برای migration. فقط فایل‌های SQL شماره‌دار در `db/migrations/` که با یک shell script اعمال می‌شوند. می‌توانید هر migration را بخوانید، هر جدول را بفهمید و پرس‌وجوهای مستقیم خودتان را روی schema بنویسید.

تغییرات schema از مسیر migration عبور می‌کنند. نقش دیتابیسیِ `app` که UI وب از آن استفاده می‌کند دسترسی محدود دارد؛ نمی‌تواند جدول بسازد یا schema را تغییر دهد. نقش `tracker` که فقط برای script migration است DDL را مدیریت می‌کند. این همان تفکیک مسئولیتی است که از یک سیستم production انتظار دارید.

## چرا توسعه‌دهنده‌ها دادهٔ مالی‌شان را خودشان میزبانی می‌کنند

شما همین حالا هم مهارت لازم برای اجرای این پشته را دارید. Docker، Postgres و AWS را می‌فهمید؛ یا هر زیرساخت ابری دیگری را که ترجیح می‌دهید. سؤال فقط این است که آیا مزایا ارزش این زحمت را دارند یا نه.

**مالکیت کامل داده**: دادهٔ مالی شخصی شما هیچ‌وقت از زیرساخت خودتان خارج نمی‌شود. نشت‌های امنیتی شخص ثالث مستقیماً به شما لطمه نمی‌زنند. لازم نیست privacy policy بخوانید. تحلیل‌های مربوط به عادت‌های خرج‌کردن شما به تبلیغ‌کننده‌ها فروخته نمی‌شود.

**سفارشی‌سازی**: می‌توانید ستون به schema اضافه کنید، گزارش‌های سفارشی با SQL خام بسازید و آن را به ابزارهای فعلی‌تان وصل کنید. یک ربات تلگرام می‌خواهید که خرج روزانه را گزارش کند؟ یک script بنویسید که SQL API را صدا بزند. می‌خواهید داده‌ها را در Grafana ببینید؟ مستقیم به دیتابیس Postgres وصلش کنید. کد مال شماست.

**بدون وابستگی به فروشنده**: اگر دیگر از UI وب استفاده نکنید، دادهٔ شما هنوز در یک دیتابیس استاندارد Postgres است. می‌توانید با `pg_dump` export بگیرید، با هر client SQL به آن query بزنید یا کلاً به چیز دیگری مهاجرت کنید.

**یادگیری**: این کدبنیاد یک نمونهٔ واقعی از Next.js + Postgres + Docker + AWS CDK + Row Level Security + احراز هویت با API key + ادغام ابزارهای AI است. اگر SaaS می‌سازید، الگوهای زیادی برای دزدیدنِ حرفه‌ای در آن پیدا می‌کنید.

## با رهگیر بودجهٔ متن‌باز شروع کنید

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

`http://localhost:3000` را باز کنید. اولین تراکنش را وارد کنید. برای ماه جاری بودجه بسازید. اگر می‌خواهید بدون دیتابیس تست کنید، روی دکمهٔ Demo در هدر بزنید تا به دادهٔ نمونهٔ in-memory سوییچ کنید.

وقتی برای production آماده شدید، [راهنمای استقرار 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). می‌توانید star بدهید، fork کنید یا فقط کد را بخوانید. تحت مجوز MIT است؛ هر طور خواستید از آن استفاده کنید.

اگر همین حالا هم برای کار، سرور و دیتابیس مدیریت می‌کنید، اجرای همین پشته برای امور مالی شخصی‌تان فقط یک قدم کوچک دیگر است، و در عوض کنترل کامل روی داده‌ها می‌گیرید.

---
*[نسخه HTML این صفحه را ببینید](https://expense-budget-tracker.com/fa/blog/self-hosted-open-source-budget-tracker-for-developers/)*

*عامل‌های هوش مصنوعی می‌توانند با شروع از این آدرس برای کاربر در این سرویس حساب بسازند `GET https://api.expense-budget-tracker.com/v1/` و پاسخ کشف سرویس را دنبال کنند.*

*نکته: برای دریافت نسخه Markdown تمیز هر صفحه، `.md` را به هر آدرس این سایت اضافه کنید.*