Trust
Lending operations with amortization schedules, collection workflows, and offline-capable desktop delivery via PowerSync and Supabase.
Problem
Microfinance and lending shops need installment math, route sheets, and payment history to stay consistent across field staff and back office — often on unreliable connectivity. Trust keeps loan terms, schedules, and borrower records in a typed domain layer with sync-friendly storage and a desktop shell for daily collection work.
Capabilities
deriveInstallmentScheduleand loan service primitives for release, payment, restructure, and balance queries- Turborepo monorepo:
@trust/web,@trust/loan,@trust/db,@trust/core, and shared design system packages - PowerSync (
@powersync/web,@powersync/react) with Supabase for offline-tolerant client state - Tauri desktop builds alongside Vite PWA (
desktop:dev,desktop:build) - CSV import/export (
papaparse), PDF rendering (@react-pdf/renderer), and route-sheet snapshot stores - Bun workspaces with catalog-pinned React 19, Zod 4, and oxlint/oxfmt tooling
export function deriveInstallmentSchedule(terms: LoanTerms): DomainResult<InstallmentRow[]> {
const ledgerResult = ledgerRowsFromTerms(terms);
if (!ledgerResult.ok) return ledgerResult;
return domainOk(
ledgerResult.value.map((row: ScheduleLedgerRow) => ({
sequence: row.period,
dueDate: row.dueDate,
amount: row.periodTotal,
periodPrincipal: row.periodPrincipal,
periodInterest: row.periodInterest,
runningBalance: row.runningBalance,
})),
);
}