A privacy-first Progressive Web App for simulating mortgage paydowns, comparing renewal and refinancing rates, and planning home equity (HELOC) borrowing — tailored for Canadian mortgages.
All calculations run entirely in your browser. No data is collected, stored, or transmitted to any server.
- Dashboard — At-a-glance summary of your mortgage profile including remaining balance, interest paid, and time saved.
- Paydown Simulator — Model lump-sum payments, double-up schedules, payment increases, and see how they shorten your amortization.
- Rates Comparer — Compare renewal offers and refinancing scenarios side-by-side, including IRD and three-month interest penalties.
- Reno & HELOC Planner — Estimate home equity available for a HELOC and plan renovation financing.
- Settings & Privacy — Export/import profiles, enable passcode encryption, and clear all data.
Mortimer uses semi-annual compounding (Canada's standard) to calculate effective periodic rates across all supported payment frequencies:
- Monthly
- Semi-monthly
- Bi-weekly (regular and accelerated)
- Weekly (regular and accelerated)
- 100% client-side — no backend, no analytics, no cookies
- Optional passcode lock with Web Crypto key derivation
- PIPEDA and Loi 25 (Quebec) compliant
- Data stored only in browser
localStorage
- React 19 + TypeScript 6
- Vite 8
- Chart.js + react-chartjs-2
- Lucide React icons
- Oxlint for linting
- PWA with service worker and web manifest
npm install
npm run devBuild for production:
npm run build
npm run previewnpm test # run the Vitest suite once
npm run test:watch # watch mode
npm run test:coverage # run tests and generate a coverage report (./coverage)Coverage is collected with the V8 provider. CI runs test:coverage on every push and pull
request: results are posted as a comment on the PR, and the full HTML report is uploaded as
the coverage-report artifact on each CI run
(open index.html after downloading).
Generate a CycloneDX Software Bill of Materials locally:
npm run sbom # writes bom.json (CycloneDX 1.6 JSON)CI regenerates this on every run, publishes it as the sbom-cyclonedx build artifact, and
scans it for known vulnerabilities with Grype — see
SECURITY.md for details.
Mortimer deploys to GitHub Pages via the workflow in .github/workflows/deploy.yml.
The workflow uses actions/configure-pages@v5 with enablement: true, which automatically enables GitHub Pages and configures it to build using GitHub Actions — no manual repository settings change required.
If the Setup Pages step fails with HttpError: Not Found, ensure the repository has Pages permissions enabled:
- Go to Settings → Pages in the repository.
- Under Build and deployment → Source, select GitHub Actions.
- Re-run the workflow.
Released under the MIT License. See LICENSE for details.