Getting started
Loanly is a loan-management platform for the Icelandic lending market. It originates and services loans on a value-dated ledger, prices them with a calculator validated to the króna against a golden master, and exposes both an operations console (for staff) and a partner API (for originating partners who integrate programmatically).
What's in the box
- Loan servicing — originate → activate → collect, with payments, prepayments, re-terms, early settlement ("pay up"), delinquency aging, late fees, and IFRS-9 provisions, all posted to a double-entry general ledger.
- A calculator — annuity and other repayment methods, day-count conventions, borrowing fees, down payments, and grace periods.
- An operations console — a React admin app for staff to service loans, manage products, borrowers, users, roles, and read the change audit log. See the Console.
- A partner API — a dedicated, versioned
/api/v1surface so originating partners create and service loans with scoped, revocable API keys. See the Partner API. - The every-app plumbing — cookie + bearer + API-key auth, hybrid RBAC, email, background servicing sweeps, and OpenTelemetry — already wired.
The moving parts
Loanly runs as two HTTP hosts over one PostgreSQL database, orchestrated in development by .NET Aspire:
| Host | Serves | Auth |
|---|---|---|
| Admin API | the operations console (SPA) + internal /api/* endpoints, and runs the background worker (servicing sweeps, disbursement dispatch) | cookie (web) or bearer session (mobile) |
| Partner API | the external /api/v1 loan-lifecycle surface — no worker | API key (pat_…) |
A migrator applies the schema and seeds the reference data (permission catalog, the Admin
role + admin user, and the Partner service account), then exits; both hosts wait for it.
Run it locally
From backend-server/, start everything with Aspire (Postgres + migrator + both hosts):
dotnet run --project Loanly.AppHost
Open the Aspire dashboard it prints, then the admin console. Sign in with the seeded admin
(configurable via Admin:Email / Admin:Password; defaults below):
admin@example.com / Admin123!
For the SPA on its own during development, run the Vite dev server from web-app/:
cd web-app && npm install && npm run dev # http://localhost:5173, proxies /api → :5259
npm run dev -- --mode demo # backend-free demo (MSW) — used for these screenshots
Where to go next
- The Console — a screenshot tour of the staff app.
- The Partner API — how partners integrate.
- Concepts — the loan lifecycle and how disbursement works.