Skip to content

Releases: Greigh/FiHaven

v1.6.1 — Push that actually arrives, pay what's left, nine more issuer logos

Choose a tag to compare

@Greigh Greigh released this 16 Jul 01:36

Summary

Admin tools you can actually run a product with, a Rewards page that helps you pick a card (and keeps your rates when the catalog updates), manual-first bank balance suggestions and subscription confirms — now reliable across more than one linked bank — a History tab that charts what you earned against what you spent, cards that lead with the amount you pick, a Pay flow that counts what you've already paid, real brand logos for nine more issuers, push notifications that actually arrive, web billing on Paddle, redesigned notification emails with one-click unsubscribe, safer production auth / store webhooks, and native Plaid + social sign-in that return into the app.

Builds: iOS 1.6.1 (17) · Android 1.6.1 (versionCode 39) · Web live at fihaven.app

Changes (Jul 29)

Push notifications actually arrive now

  • Turning on push asks for permission. It didn't. iOS hands out a delivery token whether or not you've allowed notifications, so the server was sending to phones that had never been asked and iOS threw every reminder away — silently, and indistinguishable from push simply being broken. If you'd already turned it on, the app asks next launch; a deliberate "Don't Allow" is never re-asked (#231)
  • On Android, pushed reminders land in "Bill reminders" again. They were going to a channel Android invents on the spot called "Miscellaneous", so they ignored the sound, importance and mute settings you'd chosen — and vanished entirely if you'd muted that unfamiliar channel. The channel is now named on the server payload as well as in the app, so this is fixed for already-installed apps too
  • When registration fails, we can tell why — the underlying reason is recorded and kept after the app closes, and the server now reports a device it can't deliver to or a dead token it drops. That prune was the one failure that left no trace anywhere

Paying something lowers what it asks for

  • Every figure in the Pay flow — Minimum, Recommended, a loan's monthly payment, a bill's full amount — is what's left toward that target this period, and a target you've covered drops off instead of offering itself twice. Where a figure shrank, it says why: "Minimum payment · $35.00 of $35.00 paid" (#231)
  • Open Pay on something already paid and the amount starts empty rather than pre-filling the whole recommendation again — which is how you record a payment twice
  • The "Suggested" figure on a card shrinks as you pay it and disappears once there's nothing left

Real logos for nine more issuers

  • Citi, Capital One, U.S. Bank, Bilt, Fifth Third, T-Mobile, Best Buy, Lowe's and Hyatt were showing initials on a colored chip. They now draw their actual logo in full color — Citi's blue and red, Best Buy's yellow tag, Fifth Third's 5/3 shield, T-Mobile's magenta T — on web, iPhone and Android alike (#231)
  • A full-color logo sits on a white tile in both themes, because that's what it was drawn for; it's also what keeps Bilt's black wordmark visible in dark mode. Wordmarks keep their real proportions instead of being squeezed into a square
  • "Citizens Bank" no longer shows Citi's logo, and Capital City Bank no longer shows Capital One's — a short brand name hiding inside a longer, unrelated one used to count as a match
  • "Barclay" and "Barclaycard" find Barclays; a Centurion Card shows American Express
  • Care Credit, Mission Lane, Aven, OpenSky, Indigo and LMCU have no logo we can license, so they keep initials — now on their own brand color, with the shorthand each uses for itself

Refund windows: what the stores actually allow

  • Our 14-day, no-questions refund is a promise about fihaven.app, and the policy now says so plainly instead of implying it everywhere (#231)
  • Google Play: 48 hours self-service, then come to us — after 48 hours Google stops handling it, and we refund from the Play Console on the same 14-day terms as a web purchase
  • Apple: no published window, and Apple's decision — we can't issue, override or appeal an App Store refund. But you won't be worse off for buying through a store: if Apple refuses one we think you should have had, we make it right with equivalent Pro access
  • EU / EEA / UK withdrawal rights, Paddle's Buyer Terms, and Paddle's 60-day tax/VAT-only refund path are all spelled out

Changes (Jul 28)

Income vs. spending in History

  • The income panel was one bar per month scaled against your biggest month — income barely moves, so every bar ran nearly full width and they all looked the same. It's a two-line chart now: income vs. spending, oldest month first, the gap shaded as your net (#230)
  • New headline: average net per month, with average income and average spending beside it
  • Card payments no longer count as spending — the purchases they settle were already counted, so including both doubled your card spending. Bills and purchases merge into one figure; a bill both typed into Spending and marked paid counts once
  • Months we can't account for are left blank, not drawn as zero. Card payments with nothing logged behind them break the line and shade the month rather than plotting $0 (which would read as a great month). Those months stay out of your averages
  • The chart starts at your first recorded month, so it can't show a fake surplus for the years before you started logging
  • Same chart and same rules on iPhone and Android

Cards lead with the amount you choose

  • Utilization now measures against your current balance, not the statement — a card that closed at zero but has been used since no longer reads 0% (#230)
  • Pick which of a card's three amounts gets the big figure: amount due, current balance, or what's left to pay this period
  • What's due moved to the top-right corner of every card — amount, date, and urgency color in one place

Card logos on iPhone and Android

  • Real brand marks instead of a colored dot, matching web; 26 more logos on every platform (#230)
  • Every other issuer gets its initials on a brand-colored chip — C1, US, NF — with the real brand color where we know it
  • "Bilt Mastercard" shows Bilt, not Mastercard; marks stay readable in dark mode

Changes (Jul 26–27)

  • Cards ↔ bank accounts, part two: matching is reliable across more than one linked bank; cards show which account they matched and can be told don't link this one (#229)
  • Push notifications fixed — iOS build 13 was the first with working push; Android push fixed in versionCode 35 (#225, #226)
  • Web billing moves to Paddle; refund policy published
  • Notification emails redesigned with one-click unsubscribe

Changes (Jul 18–25)

  • Android Google Custom Tab sign-in returns into the app; native Plaid OAuth returns to iOS/Android instead of the web redirect (#194, #195)
  • App-level MFA after Google/Apple when enrolled; verify Apple StoreKit JWS; auth Google Play RTDN (#185)
  • Expanded Rewards catalog with Update / Keep mine when admin rates change — never a silent overwrite (#183)
  • Family plan & trials; ownership & licensing; category icons; list spacing

Earlier in 1.6.1

  • Admin user/promo console; Rewards redesign + report wrong rate
  • Debt payoff redesign; user_data encryption; Play upload automation; health probe

Full notes: CHANGELOG.md

v1.6.0 — Bank sync that works, card due dates & skip, two data-loss fixes

Choose a tag to compare

@Greigh Greigh released this 14 Jul 02:29
8ac95e5

Release sent to TestFlight, App Store (pending approval), and Play Store Closed testing (email daniel@fihaven.app to get access).

Bank linking now actually imports something, cards tell you when they're due and let you skip a payment, and the dashboard shows who's really taking the money. Under the hood: two data‑loss bugs fixed and the reason notification emails were quietly going missing.

⚠️ Data loss — fixed

  • Changing a setting could erase your data. Changing currency, timezone, default view, or a bank toggle saved only part of your account and the server treated the rest as deleted — wiping your Spending transactions, net‑worth accounts, and savings goals. Fixed and covered by a test.
  • Autopay auto‑marking could erase the same data on a different code path. Also fixed.

Bank sync (Plaid) — it works now

  • Linking a bank actually imports something (it used to just connect and stop)
  • We ask what you want right after linking — import purchases, update card balances, or neither
  • Syncs on its own — on link, on app open, on a webhook, and the moment you turn importing on
  • Your history is no longer thrown away when importing is off
  • Accept or decline a pending bank charge — Keep it or remove it, and a declined charge never comes back, even after it settles under a new id

Cards

  • See when a card is due — the actual date ("Due Jul 28 · in 15 days", "Overdue — was due Jul 12")
  • Skip a payment (with a warning if you still owe the minimum)
  • "Already paid this month?" when you add a card, so its 0% payoff plan starts from the right place

Rewards

  • Report a wrong reward rate — corrects your card immediately and tells us so the shared presets get fixed for everyone

Dashboard

  • Upcoming rows show the business (or a card's issuer) under the name

Notifications

  • A failed reminder email is retried instead of silently dropped
  • The hourly scheduler no longer drifts past the hour it should send in

📄 Full technical detail in the CHANGELOG.

v1.5.0 — Bank linking, Net Worth tab, archive, passkeys & push

Choose a tag to compare

@Greigh Greigh released this 27 Jun 23:37
bf88b4a

iOS 1.5.0 (10) · Android build 18

The big pre-launch wave — budget lenses and push notifications on every platform, bank linking live in production, real subscription brand logos, and archive‑instead‑of‑delete for bills, cards, and loans.

Budget & spending

  • Budget lenses (50/30/20, envelopes, debt‑focus) on iOS & Android, not just web
  • Envelope editor and spending insights (Pro)
  • Household rollup — a shared dashboard card for couples/families

Net worth & accounts

  • Net Worth is its own free tab — assets minus debts — on web, iOS & Android

Bills, cards & loans

  • Archive instead of delete — retire an item without losing its history; restore anytime
  • Payoff plan for 0% cards; set a separate autopay day from the due date

Subscriptions

  • Real brand logos (Netflix, Spotify, YouTube, …); jump straight to the bill; save or share a manage/cancel link

Notifications

  • Push notifications on iOS/Android and browser notifications on the web

Sign in

  • Passwordless passkey sign‑in on web, iOS & Android

Pricing & plans

  • Real prices: $1.99/mo, $14.99/yr, and a $25.99/yr Family plan (a shared household of up to 3)

Plus monthly rollover, a redesigned native Bills tab, iOS currency‑field polish, a long tail of Android layout fixes, and refreshed dark‑mode marketing pages.

📄 Full detail in the CHANGELOG.

v1.4.2 — Pro & Family onboarding + source available license

Choose a tag to compare

@Greigh Greigh released this 26 Jun 23:58
892ee44

Pro and Family sharing messaging on intro, onboarding, paywall, and household settings — plus a new source available license replacing AGPL.

Changed

  • License — replace AGPL-3.0 with the FiHaven Source Available License: public code for transparency and contributions; no production hosting, commercial redistribution, or stripping entitlements without permission.
  • Terms of Use — clarify account sharing, API misuse, Pro circumvention on the hosted service, family sharing in Pro, and how the source license differs from using fihaven.app.
  • Intro Pro step — feature highlights (payoff planner, family sharing, calendar, rewards, category budgets) on web /welcome, iOS, and Android intro screens.
  • Post-signup onboarding — Pro tour step lists the same highlights; final step offers See Premium plans and Continue with Free on iOS and Android.
  • Web welcome Pro stepStart free trial launches Stripe Checkout; Get Premium opens the Pro dialog; Continue with Free skips to the dashboard.
  • Paywall copy — Family sharing listed as a Pro perk on web, iOS, and Android paywalls.
  • Settings → Family (non-Pro) — upgrade entry points with clearer copy that invitees can join for free; Pro badge on the Family row when locked (iOS).
  • Android versionCode 8 (same 1.4.2 build for Play re-upload).
  • iOS build numbersproject.yml / Info.plist aligned to 1.4.2 (8); scripts/ios-testflight.sh archives and uploads to App Store Connect.

Fixed

  • Android PendingIntents (CodeQL #31, #32) — bill-reminder alarm and notification tap intents use the explicit Intent(context, Class) constructor so CodeQL recognizes fixed destination components.
  • iOS CIios.yml selects Xcode via setup-xcode (latest-stable) instead of standalone Swift 6.0.3, fixing FiHavenCore manifest / SDK mismatch on GitHub runners.

Full changelog: https://github.com/Greigh/FiHaven/blob/main/CHANGELOG.md#142--2026-06-26

v1.4.1 — CodeQL security fixes

Choose a tag to compare

@Greigh Greigh released this 26 Jun 23:07
65d9c53

CodeQL security remediations for Android bill reminders and household invite email validation, plus Android housekeeping for the intro screen and encrypted token storage.

Changed

  • Information security policy — documents that CodeQL runs on main pushes, weekly schedule, and manual dispatch (not on every pull request).
  • Android intro iconsReceiptLong and TrendingUp use auto-mirrored Material icons on the pre-login intro for RTL locales.
  • Android token storage — document intentional use of deprecated EncryptedSharedPreferences until a stable security-crypto successor ships.
  • Android versionCode 6 (same 1.4.1 build for Play re-upload).

Fixed

  • Android PendingIntents — bill-reminder alarm and notification tap intents use explicit ComponentName destinations with FLAG_IMMUTABLE (CodeQL java/android/implicit-pendingintents, alerts #31 and #32).
  • Household invite email validation — reuse shared isValidEmail() with a 254-character cap before regex matching (CodeQL js/polynomial-redos, alert #33).

Full changelog: https://github.com/Greigh/FiHaven/blob/main/CHANGELOG.md#141--2026-06-26

v1.4.0 — Budget lenses, household sharing & iOS accessibility

Choose a tag to compare

@Greigh Greigh released this 26 Jun 22:43
7223edd

Budget lenses, household sharing, dashboard budget insights, trial reminders, envelope rollover, iOS accessibility, and subscription action links — with 354 Vitest tests.

Added

  • Budget lenses — optional split presets (50/30/20, 80/20, 60/20/20, 70/20/10, custom), obligations-first / safe-to-spend, debt-focus with debtFocusExtra, and envelope lite (Pro) on web, iOS, and Android.
  • Envelope editor & rollover (Pro) — assign per-goal and per-category envelope amounts on the Budget tab; optionally roll unused category envelopes into the next period.
  • Dashboard budget status widget — safe-to-spend / lens headline as a reorderable dashboard widget.
  • Richer dashboard alerts — high credit utilization, subscription trials ending soon, and 0% promo cliffs on web, iOS, and Android.
  • Subscription action panel — cancel/manage links, duplicate detection, and trialEnds countdown on subscription bills.
  • Trial-ending reminders — email via the scheduler lead window and local notifications on iOS/Android when a subscription trial ends within three days.
  • Spending insights (Pro) — top category deltas vs the previous period on web and iOS.
  • Budget onboarding — welcome flow toggle for detailed tracking vs one-tap 50/30/20 lens when Budget is a goal.
  • Household sharing — create/join households, email invites, shared entity sync, and live SSE collaboration on web, iOS, and Android.
  • iOS accessibility — Dynamic Type, VoiceOver labels, reduced-motion animations, and semantic amount/status presentation.
  • 354 Vitest tests (up from 326).

Changed

  • Settings → Budget lens and Family (household) on all clients.
  • Entitlements include householdMax for Pro vs Family tier caps.
  • docs/competitive-roadmap.md and docs/native-contract.md updated.
  • Dependencies: stripe 22.3.0, @simplewebauthn/server 13.3.2; Android versionCode 4.

Fixed

  • Contact page dark mode — legal/contact sub-panels no longer wash out against the dark hero shell.

Full changelog: https://github.com/Greigh/FiHaven/blob/main/CHANGELOG.md#140--2026-06-26

v1.3.0 — Dashboard widgets, reminders & hourly income

Choose a tag to compare

@Greigh Greigh released this 23 Jun 23:14
c044962

Dashboard customization, reminders across email and native apps, hourly income and income history, branded social sign-in, and dev entitlement testing — with expanded scheduler settings and 326 Vitest tests.

Added

  • Customizable dashboardClassic (fixed) or Widgets layout on web, iOS, and Android. Reorder and toggle nine shared widgets: overview tiles, period cash-flow, alerts, upcoming payments, net worth, spending, savings goals, subscriptions, and income history.
  • Income history — 12-month income trend with bonuses and average monthly pay on web, History tab (iOS/Android), and as a dashboard widget. Includes hourly-rate support with hoursPerWeek on every client.
  • Local bill reminders — opt-in on-device notifications on iOS and Android; rescheduled when data changes and after reboot on Android.
  • Configurable remindersreminderLeadDays (0–14), notifyHour (0–23), and optional remindOnDueDay on web, iOS, Android, and the server scheduler.
  • Weekly digest email — opt-in Monday summary of bills due in the next seven days plus card-debt total.
  • Branded social sign-in — Apple and Google buttons with official logos on web, iOS, and Android.
  • Dev entitlement override — DEBUG-only Pro simulation on web, iOS, and Android for paywall testing without a real purchase.
  • scripts/mail-check.js — on-server SMTP diagnostic with hints for common relay/firewall issues.
  • 326 Vitest tests (up from 293).

Changed

  • Bill-reminder emails follow user lead-time and due-day settings.
  • Unified Settings → Notifications section on all clients.
  • Android widget-mode dashboard and notification preference sheets.
  • native-contract.md, README, and platform READMEs updated.
  • Dependencies: stripe 22.2.3; Android versionCode 3.

Fixed

  • Hourly income sources without hoursPerWeek now contribute $0 to budget totals.

Full changelog: https://github.com/Greigh/FiHaven/blob/main/CHANGELOG.md#130--2026-06-23

v1.2.3

Choose a tag to compare

@Greigh Greigh released this 18 Jun 11:46

Public site, sign-in, and reliability release: marketing pages with SEO
discovery, optional Apple/Google OAuth on every client, Android
app.fihaven identity, rolling-period anchors, autopay memory fixes,
clear-data controls, and production deploy templates.

Added

  • Marketing site — FAQ, pricing, security, and contact pages with
    shared footer links and a public navbar (Home, Pricing, FAQ, Log In).
    Homepage, privacy, and terms copy refreshed for web-first positioning and
    accurate Free vs Pro scope.
  • SEO & discovery — expanded sitemap.xml and robots.txt,
    site.webmanifest updates, RFC 9116 security.txt, richer homepage
    JSON-LD, and IndexNow (npm run indexnow) with a Vite-built key file
    and deploy hook.
  • Social sign-in — optional Apple and Google OAuth on web, iOS, and
    Android (server/oauth.js, client/js/social-login.js); buttons stay
    hidden until provider client IDs are configured.
  • Rolling-period anchor — optional periodAnchor date for rolling
    budget windows on web, iOS, and Android.
  • Autopay memory — per-calendar-month autopayDone tracking on
    client and server so undone auto-marks are not re-applied; $0 items no
    longer loop forever.
  • Clear dataPOST /api/account/clear-data with password and TOTP
    gates; settings UI on web, iOS, and Android.
  • Onboarding goals — welcome flow can tailor the default tab order to
    bills, debt, budget, rewards, or subscriptions.
  • Deploy templatesscripts/examples/upload.example.sh (backup,
    build, rsync, PM2 restart, HTTP verify, IndexNow) and
    rollback.example.sh; maintainer utilities moved under scripts/dev/.
  • Billing profile — “Member since” / “Pro for” line when entitlement
    history is available.
  • 293 Vitest tests (up from 275) — autopay, period anchor, scheduler,
    and integration coverage for the above.

Changed

  • Android packagecom.danielhipskind.fihavenapp.fihaven
    (applicationId, namespace, and Play Billing product IDs
    app.fihaven.pro.monthly / .yearly).
  • iOS bundleapp.fihaven prefix, StoreKit product IDs aligned,
    redesigned intro carousel, card-skip warning when minimum/goal unpaid,
    Google Sign-In SDK, and Sign in with Apple entitlements.
  • Card recommendations — 0% APR (non-promo) cards recommend minimum
    payment only, not full balance.
  • Account deletion — requires typing DELETE ACCOUNT DATA; TOTP when
    2FA is enrolled (delete and clear-data).
  • WebAuthn RP origin — production uses PUBLIC_ORIGIN or
    https://fihaven.app.
  • native-contract.md — production base URL and product ID updates.
  • Dependenciesbetter-sqlite3 12.11.1; Vitest 4.1.9.

Fixed

  • Autopay re-marking after a user removes an auto-generated payment.
  • Rolling periods spanning multiple calendar months reading autopay memory
    from every overlapped YYYY-MM bucket.
  • Date-less payments in calendar mode placed by monthKey only.
  • iOS card skip without warning when minimum or policy goal is still due.

v1.2.2 — Password visibility, test suite expansion & icon refresh

Choose a tag to compare

@Greigh Greigh released this 15 Jun 03:30
2418770

Polish and quality release: expanded test coverage, password visibility on
all platforms, refreshed app icons, Android dependency updates, and CI fixes.

Added

  • Password show/hide — eye toggle on web (login, reset, settings),
    iOS (RevealableSecureField), and Android auth/settings.
  • Integration test suite — nine flows covering auth, export, period
    budget, scheduler email, subscriptions, autopay sync, card presets, and
    security (serialized Vitest project with real Express boot).
  • subscriptionsFinder.js — extracted recurring-subscription detection
    shared by the web panel and tests.
  • Server unit tests — emails, mail, scheduler, rate limits, tokens,
    util, bill schedule, captcha, session.
  • Expanded client unit tests — payoff, autopay, rewards render, password
    toggle, theme, subscriptions finder, and additional coverage for period,
    export, card presets, and utils.
  • 275 Vitest tests total across unit and integration projects.

Changed

  • App icons regenerated from client/public/icon.svg (iOS asset
    catalog + Android mipmaps); slimmer launcher background.
  • Android dashboard — branded ScreenHeader and grouped upcoming rows
    in a single card (iOS parity).
  • native-contract.md — full tab list and Pro-gating parity matrix.
  • README badges — Swift 6.3.1, Kotlin 2.3.21.
  • Android dependencies — Compose BOM 2026.05.01, Plaid 5.5.2,
    activity-compose 1.13.0, kotlinx 1.11.0, JUnit 6.1.0; swipe-to-dismiss
    migrated off deprecated Compose API.
  • CodeQL Action v4 (Node 24 runtime).

Fixed

  • Rolling-period boundsForKey round-trip in web period.js.
  • Kotlin pinned to 2.3.21 so CodeQL traced Gradle builds succeed
    (extractor lacks 2.4.0 support until github/codeql#21938).

Full changelog: https://github.com/Greigh/FiHaven/blob/main/CHANGELOG.md#122--2026-06-15

v1.2.1 — Native branding, Android sync & bill frequency parity

Choose a tag to compare

@Greigh Greigh released this 14 Jun 21:33

Polish release: bill frequency parity, Spending/Subscriptions tabs, native
branding, Android production sync, and payment-history editing.

Added

  • Bill frequency scheduling — Weekly, Bi-weekly, Quarterly, and Annually
    bills drive real due dates across web, iOS, Android, and the server
    (calendar, upcoming, budget obligations, autopay, reminders).
  • Bill active windows — optional startDate / endDate; Next: {date}
    on Bills and Subscriptions.
  • Spending tab — manual spend logging moved out of Budget into its own tab
    on web, iOS, and Android.
  • Subscriptions screens — dedicated iOS and Android views (web already had
    the panel).
  • Hide fully paid on dashboard setting — fully paid items drop out of
    Upcoming.
  • Bio-lock grace period — Never, Immediately, or 1 / 5 / 15 / 30 minutes
    (Android also supports a custom 1–60 minute delay).
  • Payment history edit/delete — long-press a row on iOS and Android to
    edit amount/date/note or delete.
  • Card preset auto-detect — adding/editing a card suggests a preset from
    the rewards database (web, iOS, Android).
  • Android Turnstile captcha on the auth screen.
  • Web navbar “More” dropdown — Subscriptions, Calendar, History, Payoff,
    Rewards live under More; primary tabs stay Dashboard / Bills / Cards / Loans
    / Budget / Spending.
  • Loans page hero styling on web.
  • Vitest suite for core web logic (~92% coverage).

Changed

  • Dashboard period model — prorate income for rolling / custom start-day
    periods; obligations filter to bills due in the active period.
  • Card payments decrement live balance (applyCardPaymentDelta).
  • RewardspointValue, rotating 5% category pools, expanded card
    presets.
  • Pro paywall perks aligned across web, iOS, and Android.
  • Cards tab (native) — card-only summary (balance / credit / utilization);
    net worth and asset accounts removed from Cards (still on Budget).
  • FiHaven branding (native) — app icons regenerated from
    client/public/icon.svg; toolbar Fi monogram on every iOS tab and
    branded headers on Android; Settings paid-goal control uses segmented / pill
    UI instead of a cramped menu.
  • Android defaults to the production API (https://fihaven.app); lenient
    JSON decode for legacy payment IDs; loading gate with retry/error screen
    after sign-in.
  • iOS project — Xcode 26 recommended settings in project.yml, launch
    screen assets, deployment target 18.6.
  • Dependency bumps: nodemailer 9, Android billing/crypto/lifecycle/coroutines
    libraries.

Fixed

  • Android data load — strict JSON decoding no longer wipes the whole
    dataset when the server returns legacy numeric payment IDs.
  • Bills UX (native) — business/name on separate lines; tap status to
    pay, undo, or un-skip.
  • Rolling shiftPeriod bug in web period logic.
  • CI / security — green Codecov, AES-GCM biometric key hardening, looped
    HTML sanitization fix.