Superapp / Product requirements / kestrel

Kestrel Banking — product requirements

Version 4.25 features32 requirements12 Must Open appJSONMarkdown

Kestrel Banking is a private-banking vault. Clients sign in with a Secure ID, see their accounts and cards with net liquidity, move money between their deposit accounts behind an explicit authorization step, and open new products through a three-step application with a calendar date picker.

Problem. Clients must be certain that every transfer or product funding is authorized deliberately and that the money is always accounted for: balances and net liquidity must reconcile after every operation.

Users

Goals

Out of scope

Contents

Vault sign-in

Secure ID login, session gating and sign-out.

FR-AUT-01
Must
A valid Secure ID and Access Code open the Portfolio; the header shows the client’s handle, the Portfolio and Move Funds navigation and Sign Out.
  • URL /kestrel/dashboard, heading "Portfolio", "Welcome back, @<secure ID>"
FR-AUT-02
Must
Unrecognised credentials are refused with one generic message and the login card stays.
  • "Access denied — secure ID or access code not recognised"
FR-AUT-03
Should
"Enter Vault Access" is disabled until both fields contain input; spaces alone do not count as a Secure ID.
FR-AUT-04
Could
Show / Hide toggles whether the Access Code is displayed in clear text; the button label alternates between "Show" and "Hide".
FR-AUT-05
Must
Every vault page requires a session: signed-out visits go to /kestrel/login, and after Sign Out the Back button does not reveal portfolio data.

Portfolio

Facilities, net liquidity and sidebar.

FR-PRT-01
Must
Accounts & Cards lists every facility with its type, mask and balance (cards show "Balance owed"); Net Liquidity equals the sum of deposit balances minus card balances owed.
  • Checking •••• 2841 $12,480.55; Savings •••• 5530 $48,210.00; Vela Signature •••• 7710 "Balance owed $642.12"
  • Net Liquidity $60,048.43 (12,480.55 + 48,210.00 − 642.12)
FR-PRT-02
Could
The sidebar offers three products and two vault alerts.
  • Savings "4.10% APY · no lockup", Checking "Zero-fee daily liquidity", Platinum Credit Card "3× points · concierge"
  • Alerts "Statement for September is ready." and "New device sign-in verified."

Move funds

Internal transfers with a Review Protocol and authorization dialog.

FR-TRF-01
Must
A transfer is reviewed first and only moves money when the client clicks "Authorize Transfer" in the "Authorization Protocol" dialog, which restates origin, recipient and amount.
  • Checking → Savings $500.00 shows Origin Checking •••• 2841, Recipient Savings •••• 5530, Amount $500.00
  • After authorizing: Checking $11,980.55, Savings $48,710.00, Net Liquidity unchanged at $60,048.43
  • Savings → Checking $10,000 gives Checking $22,480.55, Savings $38,210.00
FR-TRF-02
Should
Only deposit accounts are transfer facilities: Origin and Recipient list Checking •••• 2841 and Savings •••• 5530, never the card. The form shows the origin’s "Available" balance, which follows the selected origin.
  • Origin Checking: "Available: $12,480.55"; Origin Savings: "Available: $48,210.00"
FR-TRF-03
Must
Origin and recipient must differ.
  • "Origin and recipient facilities must differ"; no dialog
FR-TRF-04
Must
The amount must be a number above zero.
  • Empty, "0" or "ten": "Enter a liquid capital amount above $0.00"
FR-TRF-05
Must
A transfer may use the full available balance but not a cent more.
  • 12480.56 from Checking: "Insufficient liquidity in origin facility"
  • 12480.55 succeeds: Checking $0.00, Savings $60,690.55
FR-TRF-06
Should
Abort or Escape closes the authorization dialog without moving money and the form keeps its values.
  • After Abort the form still shows $250 and Checking stays $12,480.55
FR-TRF-07
Could
Editing the amount hides the previous validation error.

Product application

Three-step application: identity, residence, initial allocation.

FR-APP-01
Must
The application has three steps — Identity Verification, Residence Information, Initial Asset Allocation — and a successful application provisions a new facility with a confirmation.
  • Heading "Apply for Savings"; date hint "March 22, 1985"
  • Externally funded $100: "Facility Approved" — "Savings was successfully provisioned." and "Savings •••• 1148 · Opening balance $100.00"
  • Dashboard shows four facilities and Net Liquidity $60,148.43
FR-APP-02
Should
A facility funded from an existing account is debited that account by the funding amount and opens with the same balance; net liquidity is unchanged.
  • Checking funded $1,000 from Checking •••• 2841: new "Checking •••• 1148 · Opening balance $1,000.00"; source $11,480.55; Net Liquidity $60,048.43
FR-APP-03
Should
An internal funding source must cover the amount.
  • $20,000 from Checking: "Insufficient liquidity in origin facility" under the amount
FR-APP-04
Should
Funding source and amount are both required.
  • "Select a funding source" and "Funding amount required"
FR-APP-05
Must
Funding a new credit card from an account keeps the money accounted for: the amount funded becomes the card’s balance so Net Liquidity is unchanged.
  • Platinum Credit Card funded $100 from Checking: Checking $12,380.55 and Net Liquidity $60,048.43
FR-APP-06
Should
Identity Continue is disabled until first name, last name and a valid date of birth are present; the hint reads "Format: YYYY-MM-DD" until a valid date is typed, then the long date.
  • "1985-03-22" enables Continue with hint "March 22, 1985"
FR-APP-07
Should
Date of birth must be a real calendar date from 1900-01-01 up to today, typed as YYYY-MM-DD.
  • "2023-02-29", "03/22/1985", "1899-12-31" and any future date disable Continue
  • "2024-02-29" is accepted: "February 29, 2024"
FR-APP-08
Should
The calendar popup ("Open calendar") fills the field in ISO format and can navigate by month and year.
  • Popup "Choose date of birth" opens on January 1990
  • July 1972, day 4: field "1972-07-04", hint "July 4, 1972"; reopening shows July 1972 with day 4 selected; "Previous month" twice reaches May 1972
FR-APP-09
Should
Residence fields are required and each shows its own error.
  • "Primary residence required", "City required", "State required", "Valid 5-digit ZIP code required"
  • ZIP "9410" keeps the ZIP error
FR-APP-10
Must
A ZIP code is exactly five digits and is treated as text: leading zeros are valid and anything else is refused.
  • 02101 (Massachusetts) is accepted and "Initial Asset Allocation" opens
  • "1e4" shows "Valid 5-digit ZIP code required"
FR-APP-11
Could
Back keeps every value typed in earlier steps.
  • Residence "456 Oak Ave", "Springfield", California, 94105; Identity Jane / Smith / 1985-03-22
FR-APP-12
Could
An unknown product URL shows "Unknown product" with a "Back to Portfolio" button.
  • /kestrel/apply/Gold%20Bullion: "We couldn't find “Gold Bullion”."

Vault API

REST access to facilities, transfers and applications.

FR-API-01
Should
Facilities are served only with a bearer token; amounts are in cents.
  • No token: 401
  • With token: 200, three facilities, netLiquidity 6004843
FR-API-02
Should
Transfer endpoints enforce the same rules as the form.
  • Review with a card as recipient: 422 "Select origin and recipient facilities"
  • Valid $50 transfer: 201, id "KTX-…", status "authorized", Checking balance 1243055
FR-API-03
Could
Applications reject unknown products and report every field error.
  • Unknown product: 404 "Unknown product Gold"
  • Empty sections: 422 with errors for firstName, lastName, dob, address, city, state, zip, source and amount

Non-functional requirements

NFR-01
Must
Security: vault pages and API facilities are never available without authentication, and a generic message is shown for bad credentials.
NFR-02
Should
Accessibility: dialogs close with Escape.
NFR-03
Should
Data format: money is displayed as $ with thousands separators and two decimals; dates are entered and stored as YYYY-MM-DD.

Glossary and rules

Net LiquidityDeposit balances minus the balance owed on cards.
FacilityAny account or card in the portfolio.
Review ProtocolThe review step before the Authorization Protocol dialog.