Yanushi is a modern, double-entry property management and tax reporting platform designed for landlords and property managers who value precision, auditability, and simplicity. Built with Ruby on Rails 8, PostgreSQL, Hotwire (Turbo + Stimulus), and daisyUI, Yanushi provides an immutable ledger foundation for managing rental properties, tenancies, automated ingestion, and tax compliance.
- 🏠 Property Portfolio: Manage multi-unit and single-family properties with unit-level tracking, occupancy status, and property-scoped financial reporting.
- 👥 Parties & Tenancies: Track tenant parties, flexible tenancy agreements (fixed-term and periodic), versioned rent terms, and multiple co-tenants per tenancy.
- 📒 Immutable Double-Entry Ledger: Every financial event (rent charge, fee, receipt, expense, security deposit) posts balanced debit and credit entries to a 100% auditable general ledger.
- 💳 Tenancy Running Accounts: Dynamic ledger-backed tenant balances eliminating fragile direct-payment linking. Easily generate rent charges, assess late fees, bill utility reimbursements, and record multi-payer receipts.
- 🛡️ Security Deposit Custody: Separate trust liability accounting for security deposits with dedicated custody tracking, refunds, and charge settlements.
- 📄 Automated Source Document Ingestion: Upload bank statements (e.g. Chase) and digital receipts (Venmo, Zelle). Yanushi automatically parses transactions, deduplicates documents via SHA-256, and provides an interactive confirmation queue.
- 📑 IRS Schedule E Tax Reporting: Generate Schedule E tax worksheets and PDFs with property classifications (Codes 1–5, 7–8), cash-basis rental income calculation (Line 3), standardized expense categorization, review resolution workflows, and PDF export with Line 19 itemized statements.
+-----------------------------------------------------------------------------------+
| DOMAIN LAYER |
| Property | RentableUnit | Party | Tenancy | RentTerm | Charge | Receipt | Expense |
| SecurityDeposit | SourceDocument | ImportedTransaction |
+-----------------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| ACCOUNTING LAYER |
| Accounting::PostEntryService | Accounting::PostingBuilder | ReverseEntryService |
| - Balanced double-entry postings (Debits > 0, Credits < 0, Sum = 0) |
| - Idempotent source-event dispatch: (user_id, source_type, source_id, event_type)|
+-----------------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------------+
| IMMUTABLE LEDGER STORAGE |
| Account | JournalEntry | Posting |
+-----------------------------------------------------------------------------------+
See Double-Entry Accounting Architecture for detailed technical specifications, posting rules, and extension guidelines.
Tenancy accounts maintain dynamic, double-entry ledger-backed running balances. Scheduled rent charges, receipts, and billed reimbursements drive the tenancy account, while property and maintenance expenses post separately to the property ledger.
Upload bank checking statements (e.g. Chase) or digital receipts (Venmo, Zelle). Yanushi parses transaction metadata, deduplicates files via SHA-256, and matches payments directly to active tenancies.
Record manual receipts for cash, checks, or direct transfers. Payments immediately debit operating Cash and credit Tenant Receivable on the double-entry ledger.
Generate property-level Schedule E tax worksheets with IRS classifications (Codes 1–5, 7–8), cash-basis rental income calculation (Line 3), standardized expense categorization, review resolution workflows, and PDF export.
- Ruby 4.0+
- Rails 8.1+
- PostgreSQL 14+ (with
pg_catalog.plpgsql)
-
Clone the repository:
git clone https://github.com/chongfun/yanushi.git cd yanushi -
Install dependencies:
bundle install
-
Setup database and load schema:
bin/rails db:prepare
-
Run the seed data (optional):
bin/rails db:seed
-
Start the development server:
bin/dev
Visit http://localhost:3000 to start managing your properties.
Yanushi maintains strict quality gates across tests, type safety, linting, and security:
# Run full test suite with coverage
bundle exec rspec
# Run RBS type validation and Steep type checker
bundle exec rbs validate
bundle exec steep check
# Run Ruby linter
bundle exec rubocop
# Run security audits
bin/brakeman --no-pager
bundle exec bundler-audit check --updateYanushi uses RBS and Steep for static type checking:
- Hand-written application signatures:
sig/app/ - Generated Rails signatures:
sig/rbs_rails/ - Third-party gem shims:
sig/shims/
To regenerate Rails-aware signatures after database migrations:
bin/rails rbs_rails:all
bundle exec steep checkThis project is licensed under the MIT License.





