feat(account): capabilities hub + light headline status (ENG-513 + ENG-516)#667
Merged
Conversation
Retire Pro and International as user-facing labels; Merchant is now Business. The account leads with one headline word (Trial / Verified / Business) with capability badges (Bank payout, USD account) as detail, per the light-headline-status product decision. New useAccountStatus hook queries statusHeadline + capabilities from the backend (lnflash/flash#452) with a level-based fallback for older backends. Settings row and Account screen show the headline instead of the raw level; upgrade-flow tier cards adopt the new names. Synced public-schema.graphql from the backend (additive only) and reran codegen + typesafe-i18n. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ENG-516) The Business (L3) card rendered unconditionally, so a business account reaching the picker (e.g. via Bank accounts → Upgrade your account when Bridge KYC isn't approved) was offered Business again. Guard it like the other tier cards; a business account now only sees the remaining capability (USD Account). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ity CTA (ENG-516) The locked card on the Bank accounts screen gates on the usdAccount capability, so its CTA now opens the Bridge KYC flow (details modal → KYC webview) instead of the tier picker. KYC initiation is extracted from AccountType into a shared useBridgeKyc hook used by both screens; the CTA falls back to the picker when the Bridge feature flag is off. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Rebuild AccountType into the "Do more with Flash" capabilities hub: a light status pill (Trial/Verified/Business) from useAccountStatus, a Verify hero card, and independent capability rows (Bank cash-out, US-dollar account, Business) grouped under "Ways to get paid" / "Grow". Each row routes into its existing setup flow — no guided interview. Rows key off the capabilities object (level-derived fallback for older backends); the internal L1/L2/L3 ladder stays hidden. Drops the linear ProgressSteps, which no longer models a non-linear capability menu. Adds hub i18n strings under AccountUpgrade + regenerated i18n types. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ing sweep (ENG-513/516) - Bank accounts verify CTA now enforces the L1 floor: unverified users route through the verify wizard; verified users launch Bridge KYC directly. The fallback to the upgrade picker is gone. - Hub USD row is always visible: locked (not hidden) when Bridge is remotely disabled or the account is unverified; an "In review" state restores the pending-KYC affordance the old card's orange border gave. - useAccountStatus is the single source of capability truth: the level+KYC fallback moved to account-status-derivation.ts (unit-tested) and AccountType's duplicate derivation is removed. - String sweep: dead tier keys deleted (personal/pro/merchant/ international + descs, accountType, successUpgrade/successRequest); success + validation copy speaks capability language instead of "upgraded to BANK PAYOUT"; account screens and Bridge KYC alerts are localized; the hub's nav header is untitled (the screen self-titles). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…/516) The translation-drift CI check requires every locale to carry all keys in en.json. Adds the 24 new AccountUpgrade hub keys and 3 BridgeKyc alert keys to all 23 locale files, refreshes the renamed BridgeKyc title/description (was untranslated "International Transfer" everywhere), and prunes the 11 tier keys deleted from en — including long-corrupted values like es "pro": "Pro Pro Pro …". Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Verify: "Phone + ID" was wrong — verification is phone + OTP only. Now "Just your phone number · unlocks higher limits in a minute". - USD row: title "US-Dollar Virtual Bank Account"; description leads with what you get — "Your own US account & routing number — receive ACH, wires & payroll". - Business: adds the rewards program — "Get on the Flash map & reward your customers". All 23 locales updated in step. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
When the USD row is locked by the L1 floor, its description now reads "Verify your account first to unlock" instead of leaving the lock unexplained (kill-switch locks keep the normal description). The row also decrowds: title shortened to "USD Virtual Bank Account" and the locked state shows only a lock icon, so the title no longer wraps. All 23 locales updated. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
startBridgeKyc's boolean return had no remaining consumers once the picker fallback was removed — make it void and fix the stale comment. use-account-status re-exported the derivation helpers nobody imports from it; the derivation module is their canonical home. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…reen prop Two review items: a renderHook test asserting backend statusHeadline/capabilities beat the level+KYC fallback (and that the fallback engages when the fields are absent), and removal of keyboardShouldPersistTaps from the hub Screen — it has no text inputs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
bobodread876
approved these changes
Jul 17, 2026
islandbitcoin
pushed a commit
that referenced
this pull request
Jul 18, 2026
main's schema snapshot (synced from the flash#452 branch) predated the Plaid fields, so neither side was a superset: public-schema.graphql now carries the union, with the three Plaid members verified field-by-field against the live production API via introspection. Codegen and i18n-types regenerated from the merged sources; hooks barrel keeps all three new exports. Full suite on the union: 42 suites / 194 tests. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This branch carries two slices of the Account Upgrade Revamp (it was repurposed to hold both):
AccountTypeis rebuilt into the "Do more with Flash" screen (mock): a light status pill, a Verify hero card, and independent capability rows — no tier picker, no guided interview.Companion PRs: lnflash/flash#452 (backend), lnflash/frappe-flash-admin#55 (admin panel).
Product decision (2026-07-14): light headline status — the account leads with one word (Trial → Verified → Business), with capabilities as supporting detail rather than a badge wall.
Changes
Capabilities hub (ENG-513)
app/screens/account-upgrade-flow/AccountType.tsxrewritten from the Personal/Pro/Merchant/International tier ladder into the "Do more with Flash" capabilities hub:useAccountStatus.capabilities { verified bankPayout business usdAccount }object viauseAccountStatus— the single source of capability truth, with a level-derived fallback for older backends (unit-tested in__tests__/hooks/account-status-derivation.spec.ts).PersonalInformationwizard; USD → the Bridge KYC modal. Dropped the linearProgressSteps, which doesn't model a non-linear capability menu. The nav header is untitled — the hub self-titles.AccountUpgradei18n + regeneratedi18n-types.ts/raw-i18n. Dead tier keys (personal/pro/merchant/international+ descs,accountType,successUpgrade/successRequest) deleted.Nomenclature + headline status (ENG-516)
useAccountStatushook (app/hooks/use-account-status.ts): queriesstatusHeadline+capabilities { verified bankPayout business usdAccount };capabilitiesis always defined — backend object when available, else the level+Bridge-KYC derivation fromapp/hooks/account-status-derivation.ts(pure, tested). Screens must not re-derive from the level.useBridgeKychook (app/hooks/use-bridge-kyc.ts): extracted Bridge KYC (bridgeInitiateKyc+BridgeKycModal+navigate("BridgeKycWebView")) into one hook so the hub and other surfaces launch it consistently. Alerts localized.account-level.tsx):PERSONAL/PRO/MERCHANT ACCOUNT→ localizedTrial account / Verified / Business.account-screen.tsx): the level row now showsVerified · Bank payout · USD accountstyle status text (localized) instead of the raw internal level (TWO).public-schema.graphqlsynced from the backend (verified additive-only);yarn dev:codegen+yarn update-translationsrerun.Known limits (by design, later tickets)
Testing
yarn tsc:checkclean; changed files lint clean (the 2Success.tsxinline-style errors exist onmain).__tests__/hooks/account-status-derivation.spec.ts— 8 tests covering the headline + capability level-derivation fallbacks (pass).yarn update-translations/ codegen deterministic and committed.🤖 Generated with Claude Code