Project Overview
TracknSave is a personal finance management web application designed for everyday users who have no accounting background. Its central purpose is to make daily financial tracking fast, clean, and effortless — not to replace professional accounting software.
The application runs as a local/LAN web app with a single administrator user. All data stays on the user's machine; there is no cloud dependency.
Purpose and Main Goals
- Give users a clear picture of where their money is at any moment
- Allow extremely fast transaction registration (minimum fields, smart defaults)
- Track debts and loans between people
- Manage multiple bank accounts, wallets, and cash simultaneously
- Keep upcoming payments visible through reminders
- Provide simple reports for monthly income and expense review
- Allow data export and backup for peace of mind
Target Audience
- Individuals managing personal finances
- Families tracking shared expenses
- Small-business owners needing simple income/expense records
- Anyone who currently uses a spreadsheet or notebook to track money
No accounting knowledge is required. The UI uses plain human-friendly language throughout, avoiding all accounting terminology.
Technology Stack
| Layer | Technology | Version |
|---|---|---|
| Backend language | PHP | ^8.3 |
| Web framework | Laravel | ^13.8 |
| Admin UI | Filament | 4.11 |
| Database | MySQL | (via XAMPP) |
| Deployment | Localhost / LAN | XAMPP on Windows |
| Settings storage | spatie/laravel-settings | ^3.8 |
| Persian calendar | morilog/jalali | ^3.5 |
| Excel export | phpoffice/phpspreadsheet | 5.7 |
| PDF export | barryvdh/laravel-dompdf | ^3.1 |
| Testing | PHPUnit | ^12.5 |
Application Language and Locale
- Primary UI language: Persian (Farsi), fully RTL
- Secondary language: English (switchable in Settings)
- Calendar support: Jalali (Persian) and Gregorian — user-selectable
- Currency: Configurable — 14 currencies supported; default IRR (Rial); symbol position (before/after/none) is adjustable
- Digit display: Persian Eastern Arabic digits (۰–۹) or Western digits, controlled by a JavaScript MutationObserver that converts all rendered numbers on every Livewire DOM update
Modules Built
Module 1 — Application Settings
Module 2 — Financial Spaces
Separate financial environments (Personal, Family, Business, etc.); each space has its own accounts, transactions, and records. 3 default spaces seeded; user can add custom spaces.
Module 3 — Accounts & Wallets
- 6 account types: Cash, Bank Account, Credit Card, Digital Wallet, Savings, Custom
- Live balance calculation via AccountBalanceService (never hardcoded)
- Credit cards: credit limit, used amount, available amount, billing cycle dates, due date, minimum payment
- Bank accounts: overdraft limit, bank name, account number
- Summary cards at top of Accounts list page; tabbed layout by account type
Module 4 — Banks
Separate bank entity (Persian name, English name, SWIFT code, country, logo); linked to accounts.
Module 5 — Categories
Two-level hierarchy (parent → subcategory); types: Expense / Income / Both; Font Awesome icon support; 18 default expense + 6 income categories seeded; soft delete with protection for used categories.
Module 6 — People / Contacts
Name, mobile, email, relationship type, notes, active/inactive. Person Transactions Report shows all transactions linked to a person with income/expense/transfer/adjustment totals.
Module 7 — Transactions
Expense, Income, Transfer (between accounts), Adjustment/Reconciliation.
TransactionService updates balances on create/edit/delete; type locked after creation; optional file attachment, reminder creation, person linkage, transfer fee.
Module 8 — Debts & Loans
Tracks who owes the user and whom the user owes; partial payment history via separate debt_payments table; due dates, settlement status, linked to a Person record.
Module 9 — Reminders
Title, date/time, repeat pattern (none/daily/weekly/monthly/yearly), status, notes; can be linked to Transaction, Person, Account, or Debt. Default date pre-filled to today at 09:00. Upcoming pending reminders shown on dashboard.
Module 10 — Notes
Quick financial notes with optional title, body, pinned state; can be linked to Transaction, Person, Account. Pinned notes appear first; recent notes shown on dashboard.
Module 11 — Dashboard (V2)
- Account Slider: horizontally scrollable cards (name, type badge, balance, credit usage bar, bank name, account number, financial space)
- Notes & Reminders section: last 5 pinned/recent notes + upcoming reminders; quick-add modals
- Category Quick Transaction: two rows (Expense/Income) of category buttons opening a pre-filled modal
- Latest Transactions: last 10, color-coded by type
- Theme-aware account slider gradient using Filament CSS custom properties; full RTL layout with Alpine.js; V1 backup accessible at /admin/dashboard-v1
Module 12 — Reports
- Monthly Report: filterable by year, month, account; income total, expense total, net balance, category breakdown table
- Person Transactions Report: per-person summary with income/expense/transfer/adjustment totals and full history
Module 13 — PDF & Excel Export
Export transactions to Excel (date range + type filter) via ExportService using PhpSpreadsheet; single transaction PDF receipt (RTL Blade template) using DomPDF, including app name, transaction ID, date, type, account, category, amount, linked person, notes, export timestamp.
Module 14 — Backup & Restore
- Manual backup: mysqldump to ZIP archive
- Backup file list with name, date, size; download and delete per file
- Restore from list (with safety-backup step, progress steps shown live) or upload-and-restore for external ZIP/SQL files
- Auto-backup scheduling UI: frequency, time, day, trigger mode (on_open / on_logout / scheduled)
- Windows .bat file download for Task Scheduler integration
- Configurable storage path with preset selector and path test button; backup retention count setting
Module 15 — Help / Guide
Dynamic sidebar help section backed by Blade HTML pages; Settings guide page in Persian; shared Blade layout and centralized help.css; new help pages added via config/help.php registry.
Module 16 — About Page
Static Persian RTL page with app branding, logo, version, and technology details. Accessible at /admin/about.
Smart / Contextual Features
- Settings-driven date display: all dates across forms, tables, widgets, reports, exports, and PDF receipts switch between Jalali and Gregorian based on a single settings value
- Live balance calculation: never stored as a simple field that can drift out of sync
- Transaction type lock: prevents accidental balance corruption once saved
- Currency symbol auto-sync: selecting a currency instantly auto-fills the correct symbol via a JS-driven hook
- Theme color from DB: the panel's primary color is read from settings on every request
- Persian digit conversion: MutationObserver converts rendered numbers on every Livewire DOM update, including morphed text nodes
- Category-based quick transaction: dashboard buttons pre-select category and suggest the most-recently-used account
- Soft delete protection: categories and people linked to transactions are soft-deleted, preserving referential integrity
- Inactive record access in forms: edit form keeps linked records selectable even if deactivated since
UI/UX Design Highlights
- Full RTL layout (Persian is right-to-left); dir="rtl" enforced at HTML root and per-component level
- All CRUD resources open as modal popups — no full navigation for simple creates/edits
- Forms split into clear sections: essential fields visible, advanced fields collapsible
- helperText on fields explains each input in plain Persian for non-accountant users
- Account list uses summary cards at top + tabbed table below
- Dashboard V2 uses a horizontally-snapping account slider with full Alpine.js interaction
- Font Awesome 6.5.0 hosted locally with CDN fallback — works fully offline/LAN
Data Model Summary
| Table | Key Fields | Notes |
|---|---|---|
| settings | key/value pairs | spatie/laravel-settings |
| financial_spaces | uuid, name, icon, is_default | Soft delete |
| banks | uuid, name_fa, name_en, swift_code | Soft delete |
| accounts | uuid, name, type, current_balance, credit_limit, bank_id | 6 types; soft delete |
| categories | uuid, name, type, parent_id, icon | 2-level; soft delete |
| people | uuid, name, mobile, email, relationship | Soft delete |
| transactions | uuid, type, amount, account_id, category_id, person_id, transaction_date, attachment | 4 types; soft delete |
| debts | uuid, person_id, amount, type, due_date | Soft delete |
| debt_payments | uuid, debt_id, amount, paid_at | Payment history |
| reminders | uuid, title, remind_at, repeat, status, polymorphic links | Soft delete |
| notes | uuid, title, body, is_pinned, polymorphic links | Soft delete |
All tables use UUID primary keys, created_at, updated_at, and deleted_at (soft deletes).
Technical Architecture Summary
The application follows a standard Laravel MVC + Filament Admin Panel architecture:
| Layer | Description |
|---|---|
| app/Models/ | Eloquent models with $fillable, soft deletes, UUID keys, and relationships |
| Filament Resources | Admin CRUD interfaces for each entity; form schema, table columns, actions |
| Filament Pages | Custom pages for dashboard, reports, settings, backup, help |
| Filament Widgets | Dashboard widgets (account balances, financial summary) |
| Services | TransactionService, AccountBalanceService, ExportService, BackupService |
| Support classes | AppSettings, AppDate, AppLocale, TextNormalizer |
| Settings | spatie/laravel-settings typed classes: GeneralSettings, BackupSettings |
| Middleware | SetLocale.php — applies saved language setting on every web request |
| Translations | resources/lang/en.json, fa.json |
There is no separate API layer, no queue-driven processing, and no front-end build step for the admin panel (Filament ships pre-compiled CSS/JS).
Limitations and Intentional Exclusions
Excluded by design (v1 scope)
- No double-entry accounting or ledger system
- No cloud sync, multi-device, or multi-user support
- No native mobile app
- No automatic exchange rates (currencies are manual)
- No OCR or AI-based receipt scanning
- No complex role/permission system
- No ERP, payroll, tax, or inventory features
- No built-in push/email notifications (reminders are in-app only)
- No recurring transaction automation
- No bank import or OFX/CSV import
Known limitations
- The Family Fund / Rotating Pool module was built and then removed from the application; it does not exist in the current codebase
- Auto-backup scheduling requires manual Windows Task Scheduler setup; no native daemon or cron within the app itself
- Reports are limited to monthly and per-person report; no category-drill-down charts, account comparison reports, or trend charts
- File attachments rely on Filament's default file storage; no dedicated attachment management UI
- The application has a single admin user; no registration or multi-user access control
Completed Features and Pending Items
- Settings (language, calendar, currency, theme, digits)
- Financial Spaces
- Accounts & Wallets (6 types, live balance, credit cards)
- Banks
- Categories (2-level, Font Awesome icons, seeded defaults)
- People / Contacts
- Transactions (4 types, balance updates, type lock)
- Debts & Loans (with partial payment history)
- Reminders
- Notes (pinnable, linked to entities)
- Dashboard V2 (account slider, quick-add, category launch)
- Monthly Report & Person Transactions Report
- PDF & Excel Export
- Backup & Restore (manual + scheduling UI)
- Help / Guide module & About Page
- RTL layout and Persian digit conversion
- Feature test suite (8 tests, all passing)
| Item | Status |
|---|---|
| Family Fund / Rotating Pool | Removed — not in codebase |
| Recurring transactions | Not built |
| App lock / PIN security | Not built |
| Budget / spending limits per category | Not planned for v1 |
| Category-level reports (charts, trends) | Not built |
| Account reconciliation as standalone module | Not built (partially covered) |
| Smart account suggestion in main form | Partially built (dashboard only) |
Public Marketing Description (Persian)
TracknSave — مدیریت مالی شخصی، ساده و سریع
TracknSave یک نرمافزار مدیریت مالی شخصی است که برای افرادی طراحی شده که میخواهند امور مالی روزمره خود را بدون پیچیدگیهای حسابداری دنبال کنند. با TracknSave میتوانید در چند ثانیه یک تراکنش ثبت کنید، موجودی همه حسابهایتان را یکجا ببینید، بدهیها و طلبها را پیگیری کنید و از یادآورهای مالی مهم غافل نشوید.
این برنامه با پشتیبانی کامل از زبان فارسی، تقویم جلالی، و نمایش ارقام فارسی، تجربهای کاملاً بومی برای کاربران ایرانی فراهم میکند. TracknSave بر روی سیستم شما اجرا میشود؛ بدون نیاز به اینترنت، بدون ذخیرهسازی اطلاعات در فضای ابری، و با امکان تهیه پشتیبان کامل از دادهها در هر زمان.