متتبّع ميزانية مفتوح المصدر للمطورين مع استضافة ذاتية: امتلك بياناتك المالية
لماذا قد يفضّل المطورون استضافة متتبّع المصروفات على بنيتهم الخاصة، مع واجهة SQL برمجية، وتكامل عملي مع وكلاء الذكاء الاصطناعي، وتحكم كامل في قاعدة Postgres.
إذا كنت مطورًا، فغالبًا ما تكون بياناتك المالية محفوظة اليوم على خادم لا تملكه أنت. معظم تطبيقات تتبّع الميزانية والمصروفات مثل Mint وYNAB وCopilot وLunch Money تخزّن معاملاتك وأرصدة حساباتك وأنماط إنفاقك في سحابة تابعة لها. وكل ما تملكه فعليًا هو الثقة بألا تتعرض للاختراق، وألا تبيع بياناتك، وألا تتوقف الخدمة فجأة كما حدث مع Mint في 2024.
إذا كنت مرتاحًا للعمل مع Docker وPostgres، فهناك بديل أفضل: استضف متتبّع ميزانية مفتوح المصدر بنفسك، واحتفظ بكل شيء داخل بنيتك أنت.
متتبّع نفقات مفتوح المصدر تنشره بنفسك
Expense Budget Tracker نظام مفتوح المصدر بالكامل لتتبّع المصروفات والميزانية مبني على Postgres. تستنسخ المستودع، وتشغّل make up، فتحصل على تطبيق يعمل على localhost:3000 مع قاعدة بيانات حقيقية تقع بالكامل تحت سيطرتك.
لا حاجة إلى إنشاء حساب، ولا تغادر بياناتك جهازك أو خادمك، ولا توجد رسوم اشتراك. المشروع مرخّص تحت MIT، لذا يمكنك نسخه وتعديله واستخدامه كما تشاء.

البنية التقنية مباشرة وواضحة: Next.js لواجهة الويب، وPostgres 18 للتخزين، وعامل مكتوب بـ TypeScript يجلب أسعار الصرف اليومية. وكل ذلك يعمل داخل حاويات Docker عبر ملف docker-compose.yml واحد.
استضفه ذاتيًا عبر Docker أو انشره على AWS
يوفّر المستودع خيارين جاهزين للنشر من البداية:
Docker Compose محلي: أربعة أوامر فقط ويصبح التطبيق جاهزًا للعمل:
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 scripts/bootstrap.sh --region eu-central-1
سيُنشئ هذا ECS Fargate وRDS Postgres وALB مع HTTPS وCognito للمصادقة وWAF وCloudWatch للمراقبة ونسخًا احتياطية تلقائية وCI/CD عبر GitHub Actions. التكلفة التقديرية تقارب 50 دولارًا شهريًا، وفي المقابل تحصل على بنية تحتية بمستوى مؤسسي تملكها وتتحكم بها بالكامل. ويشرح دليل النشر كل خطوة، من إنشاء حساب AWS إلى إعداد DNS في Cloudflare.
وبما أن المشروع في جوهره مجرد Postgres مع Docker، يمكنك استضافته تقريبًا في أي مكان آخر أيضًا: DigitalOcean أو Hetzner أو Raspberry Pi في المنزل أو عنقود Kubernetes في شركتك. أي بيئة تشغّل Docker وPostgres يمكنها تشغيله.
واجهة SQL برمجية للوصول المباشر
معظم تطبيقات الميزانية تمنحك واجهة ويب ولا شيء أكثر. هذا المشروع يوفّر واجهة SQL برمجية عبر HTTP: نقطة النهاية POST /v1/sql تستقبل أوامر SQL الخام وتعيد النتائج بصيغة JSON.
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 من صفحة الإعدادات، وتحدد معرّف مساحة العمل المستهدفة، وبعدها يستطيع أي عميل HTTP الاستعلام عن بياناتك. الواجهة هنا بسيطة جدًا: لا GraphQL، ولا تجريدات ORM، ولا SDK تحتاج إلى تعلّمه. ترسل SQL مباشرة، وتحصل على JSON في الاستجابة.
أما نموذج الأمان فصارم وواضح: مفاتيح API تُخزَّن على شكل بصمات SHA-256 من دون حفظ القيم الأصلية، والاستعلامات محصورة في SELECT وINSERT وUPDATE وDELETE فقط من دون DDL، وهناك مهلة تنفيذ قدرها 30 ثانية، وحد أقصى 100 صف في الاستجابة، وحد لمعدل الطلبات يبلغ 10 طلبات في الثانية لكل مفتاح. كما تمر جميع الاستعلامات عبر Postgres Row Level Security، وهو العزل نفسه الذي تستخدمه واجهة الويب، لذلك لا يستطيع أي مفتاح API الوصول إلا إلى بيانات مساحة العمل التابعة له.
مصمم لوكلاء الذكاء الاصطناعي والنماذج اللغوية
وجود SQL API هو ما يجعل دمج الذكاء الاصطناعي عمليًا فعلًا في إدارة المال الشخصي، لأن الوكيل يحتاج إلى قراءة البيانات المالية وكتابتها مباشرة في قاعدة البيانات.
فكر في الطريقة المعتادة اليوم: ترفع لقطة شاشة لكشف حسابك إلى Claude أو ChatGPT، وتطلب منه تصنيف المصروفات، فيعطيك ملخصًا مرتبًا. ثم تعود أنت وتنسخ الأرقام يدويًا إلى الأداة التي تستخدمها. هذا سير عمل يخص مرحلة أقدم.
أما مع SQL API، فالوكيل لا يكتفي بالتحليل، بل يكتب مباشرة إلى قاعدة بياناتك. عندها يصبح التدفق كالتالي:
- تضع كشفًا بنكيًا، سواء كان CSV أو PDF أو لقطة شاشة، داخل وكيل ذكاء اصطناعي.
- يقرأ الوكيل كل معاملة، ويطابقها مع فئاتك الحالية، ثم ينفذ
INSERTفي جدولledger_entries. - يراجع رصيد الحساب ويقارنه بالرقم الصادر من البنك.
- تقضي أنت خمس دقائق في المراجعة بدلًا من ساعة كاملة في الإدخال اليدوي.
وقد صُمم مخطط قاعدة البيانات لهذا النوع من الاستخدام. هناك سبعة جداول مسطّحة، بلا JSON متداخل، ومن دون عمليات ربط معقدة للمهام الأساسية. وجدول ledger_entries بسيط عمدًا: صف واحد لكل حركة حساب، وأسماء أعمدة واضحة وصريحة. لذلك يستطيع النموذج اللغوي كتابة أوامر INSERT صحيحة من المحاولة الأولى غالبًا، لأنه لا توجد تعقيدات تربكه.
ويضم Expense Budget Tracker أيضًا دردشة ذكاء اصطناعي مدمجة داخل واجهة الويب. ما عليك إلا توصيل مفتاح OpenAI أو Anthropic API لتحصل على مساعد يملك أداة query_database، ويمكنه تنفيذ SELECT وINSERT وUPDATE وDELETE مباشرة على Postgres لديك. ارفع لقطة شاشة من تطبيقك البنكي، وسيحلل الذكاء الاصطناعي المعاملات، ويطلب تأكيدك، ثم يدرجها. وهو يتبع بروتوكولًا صارمًا: يكتشف فئاتك الحالية أولًا، ويتحقق من التكرار، ويطابق الأرصدة، ولا يكتب أي شيء قبل موافقتك الصريحة.
وتدعم هذه الدردشة نماذج Claude من Anthropic ونماذج GPT من OpenAI. ويستخدم الطرفان أداة قاعدة البيانات نفسها وقواعد الأمان نفسها، مثل قوائم الكلمات المفتاحية المسموح بها ومهلات التنفيذ وفرض RLS. ويمكنك أيضًا استخدام SQL API مع أي وكيل خارجي، مثل Claude Code أو OpenAI Codex أو سكربتات خاصة أو Webhooks في Zapier. امنح الوكيل مفتاح ebt_ الخاص بك، ووجّهه إلى نقطة النهاية الصحيحة، وسيحصل على صلاحيات القراءة والكتابة ضمن حدود مساحة عملك فقط.
مزايا متتبّع الميزانية
هذا ليس مجرد دفتر مصروفات بسيط، بل أداة تحتوي على المزايا التي تتوقعها من منتج تجاري ناضج:
- شبكة ميزانية: الصفوف تمثل الفئات، والأعمدة تمثل الأشهر. الأشهر الماضية تعرض القيم الفعلية، والأشهر المقبلة تعرض توقعاتك. يمكنك التخطيط لـ 12 شهرًا مقدمًا ورؤية الأرصدة المتوقعة بسرعة.
- دعم متعدد العملات: تُحفَظ كل معاملة بعملتها الأصلية. تُجلب أسعار الصرف اليومية تلقائيًا من ECB وCBR وNBS، ويُجرى التحويل إلى عملة التقارير وقت الاستعلام عبر SQL، من دون أعمدة محسوبة مسبقًا ومن دون فقدان الدقة.
- أرصدة الحسابات: يمكنك تتبّع الحسابات الجارية والادخار وبطاقات الائتمان والنقد والاستثمارات. ولكل حساب رصيد جارٍ مشتق من دفتر الأستاذ.
- التحويلات: يمكنك نقل الأموال بين حساباتك، حتى عند اختلاف العملة. ويُسجَّل ذلك كقيدين في
ledger_entriesيحملانevent_idنفسه، أحدهما سالب والآخر موجب. - تصنيف المعاملات: تحدد فئاتك بنفسك من دون تصنيف جاهز مفروض عليك. والذكاء الاصطناعي يتعلم من الفئات الموجودة في بياناتك.
- واجهة متعددة اللغات: الإنجليزية والإسبانية والصينية والعربية والعبرية والفارسية والأوكرانية والروسية، مع دعم كامل للاتجاه من اليمين إلى اليسار.
- عزل مساحات العمل: يضمن Postgres Row Level Security فصل بيانات كل مستخدم بالكامل. وحتى إذا شارك عدة مستخدمين خادم قاعدة البيانات نفسه، فلن يرى أحد بيانات الآخر.
- وضع العرض التجريبي: يمكنك تفعيل زر في الواجهة للانتقال إلى بيانات تجريبية داخل الذاكرة، من دون الحاجة إلى قاعدة بيانات لاستكشاف الواجهة.
مخطط Postgres مناسب للمطورين
هذا هو النوع من المخططات الذي يمكنك استيعابه سريعًا:
ledger_entries: صف واحد لكل حركة حساب، وهو الجدول الأساسي.budget_lines: سجل ميزانية بإضافات متتابعة، وتُعتمد آخر كتابة لكل خلية.budget_comments: ملاحظات مرتبطة بخلايا الميزانية.exchange_rates: أسعار صرف يومية عامة لا تخضع لتحكم الوصول.workspace_settings: عملة التقارير الخاصة بكل مساحة عمل.account_metadata: تصنيف السيولة للحسابات.accounts:VIEWمشتقة منledger_entries.
لا يوجد ORM، ولا إطار ترحيلات معقد. توجد فقط ملفات SQL مرقمة داخل db/migrations/ يطبقها سكربت shell. يمكنك قراءة كل ترحيل، وفهم كل جدول، وكتابة استعلاماتك مباشرة على المخطط.
وتُدار تغييرات المخطط عبر الترحيلات. دور قاعدة البيانات 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 وتكامل أدوات الذكاء الاصطناعي. وإذا كنت تبني SaaS خاصًا بك، فستجد هنا أنماطًا تستحق الاقتباس.
ابدأ الآن مع متتبّع الميزانية المفتوح المصدر
git clone https://github.com/kirill-markin/expense-budget-tracker.git
cd expense-budget-tracker
make up
افتح http://localhost:3000. أدخل أول معاملة لديك. ثم اضبط ميزانية للشهر الحالي. وإذا أردت التجربة من دون قاعدة بيانات، فانقر زر Demo في الترويسة للانتقال إلى بيانات تجريبية داخل الذاكرة.
وعندما تصبح جاهزًا لبيئة إنتاجية، اتبع دليل النشر على AWS، أو عدّل إعداد Docker Compose بما يناسب بنيتك الخاصة.
المستودع موجود على github.com/kirill-markin/expense-budget-tracker. يمكنك وضع نجمة له، أو نسخه، أو الاكتفاء بقراءة الشيفرة. وهو مرخّص تحت MIT، لذا استخدمه بالطريقة التي تريدها.
إذا كنت تدير خوادم وقواعد بيانات في عملك أصلًا، فاستضافة المكدس نفسه لبياناتك المالية الشخصية خطوة صغيرة نسبيًا، لكنها تمنحك في المقابل تحكمًا كاملًا في بياناتك.