Ennkar Connect
A Finance-category reverse-mortgage app, live on iOS and Android.
- Role
- Lead engineer
- Period
- Apr 2026 – Present
- Status
- Live · v1.0.3
- Stack
- Expo, React Native, Supabase Edge Functions.

The problem
Ennkar needed a way for homeowners to explore a reverse-mortgage estimate and start an application from a phone — and the moment that calculator produces a number, it is a regulated financial quote, not a marketing widget. Getting a HECM or jumbo estimate wrong, or letting it drift from what the web platform and loan officers see, is not a cosmetic bug.
Constraints
- The app is in the App Store's Finance category, which brings mandatory account-deletion support and financial-feature disclosures in review.
- A phone is not a trusted execution environment — any pricing math computed on-device is one decompiled build away from being manipulated.
- The mobile app, the web platform, and Pulse CRM all need to agree on the same loan math without three separate implementations drifting apart.
- Lead consent has to satisfy TCPA-style requirements at the point of submission, not after the fact.
What I built
An Expo Router app on React Native 0.85, with Bun deliberately isolated as its own package-manager 'island' inside the Ennkar Platform pnpm workspace, to protect Metro and native tooling from workspace-wide dependency changes. The calculator debounces user input and calls a shared Supabase Edge Function for every price — the same server-authoritative pattern Pulse CRM uses for its engine.
- Dual-product evaluation across HECM and proprietary/jumbo programs, winner-aware capacity, household-age basis, and cash-to-close-required outcomes.
- A FRED interest-rate sweep against 5,330 seeded HUD PLF factor rows, with formula versioning and audit trails.
- TCPA-style consented lead submission and Twilio Verify SMS one-time-passcode verification.
- In-app account deletion and App Store / Play Data Safety and financial-feature declarations, required for Finance-category approval.
- Role governance: professional role grants (loan officer, financial advisor) go through a super-admin web queue, with Resend email and Expo push notifications on decision — no self-elevation path.
Architecture
The app never computes a final number. A debounced preview call goes to a shared pricing Edge Function that owns the math — the same function boundary the web platform calls — so the calculator, the web funnel, and internal review always see the same price for the same inputs. Release engineering runs through EAS Build, Submit, and Update across dev, staging, and production channels, with Associated Domains and Password AutoFill configured for the auth flow.
Decisions and tradeoffs
Decision
Never compute a final loan number on-device — every price comes from a server call.
Because
A regulated financial quote cannot depend on client-side logic that a user's device could tamper with.
Trade-off
Every price change requires a network round trip, so the UI has to debounce and show a loading state well, rather than updating instantly on every keystroke.
Decision
Isolate the mobile app on Bun inside an otherwise pnpm workspace.
Because
Metro and Expo's native tooling had version-sensitive dependency requirements that workspace-wide pnpm hoisting kept breaking.
Trade-off
The monorepo now has two package managers to reason about, documented explicitly in AGENTS.md as the 'Bun island' so it doesn't get quietly undone.
Outcome
- Status
- Live on iOS and Android
- Current version
- 1.0.3
- App Store category
- Finance
- First release
- 2026-05-22
- PLF factor rows seeded
- 5,330
- Commits
- 340 / 346
As of 2026-08-24
This is the single most externally verifiable claim in the portfolio: anyone can open the App Store or Google Play right now and see a shipped Finance-category app published by Ennkar, Inc.
Related work
Want the full picture, or open to talking about your own project?