← Crafts
Trust preview

Trust

Finance production Solo lead full-stack engineer

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

  • deriveInstallmentSchedule and 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
domain ops local SQLite sync bucket @trust/web PowerSync Supabase @trust/loan
Client sync path
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,
    })),
  );
}
Trust loan ledger and route sheet
Screenshot placeholder — borrower ledger with installment schedule and collection route sheet.