Skip to content

Prototype: Houdini private-send reorg (Proposal A)#6054

Open
j0ntz wants to merge 6 commits into
developfrom
prototype/houdini-send-reorg-a
Open

Prototype: Houdini private-send reorg (Proposal A)#6054
j0ntz wants to merge 6 commits into
developfrom
prototype/houdini-send-reorg-a

Conversation

@j0ntz

@j0ntz j0ntz commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

CHANGELOG

Does this branch warrant an entry to the CHANGELOG?

  • Yes
  • No

Dependencies

none

Requirements

If you have made any visual changes to the GUI. Make sure you have:

  • Tested on iOS device
  • Tested on Android device
  • Tested on small-screen device (iPod Touch)
  • Tested on large-screen device (tablet)

Description

Prototype of the redesigned Houdini send and swap flows, Proposal A. Review-only and fully navigable; nothing talks to Houdini and every value is hard-coded so a reviewer can walk every branch.

Asana: https://app.asana.com/0/1215088146871429/1216019112895453

Send scene (HoudiniSendScene, reached from a wallet's Send button)

  • The "Send from Wallet" tile is shown from the start. The You send amount and Network Fee rows appear only after a recipient address or asset is selected.
  • Two initial-state variants: A1 shows the Recipient receives row before any selection; A2 hides it until a selection is made (the only difference between them).
  • Recipient receives asset picker over a hard-coded chain list (BTC, ETH, XMR, SOL).
  • A plain same-asset, non-incognito send uses the standard add-recipient-address affordance; routing through Houdini (incognito or cross-asset) shows the estimated amount with a conversion percent (swap-scene style, no rate tile) and a locked address. A memo-needed chain (XMR) shows a Destination Tag row.
  • Incognito send toggle; when enabled the toggle tile expands in place with messaging.

Swap scene (HoudiniSwapScene -> HoudiniSwapQuoteScene, reached from a wallet's Trade -> Swap action)

  • Amount-entry scene with From/To wallets, You send / You receive (with conversion percent), and the incognito toggle in an expanding card before the quote.
  • A mock quote scene showing You send / You receive, rate, network fee, and Powered by Houdini with no tappable chevron, then a confirm slider to the swap success scene.

The send scene is parameterized by layout: 'a' | 'b' and variant: 'a1' | 'a2'; this branch routes layout: 'a'.

Testing
Driven end to end on the iOS simulator via maestro (maestro/14-houdini/houdini-send-a.yaml, houdini-swap-a.yaml). The current screenshots are in the latest review comment; older proposal screenshots were removed.

@j0ntz j0ntz force-pushed the prototype/houdini-send-reorg-a branch from c4a2ca2 to bf8eef7 Compare June 24, 2026 22:57
Comment thread src/components/scenes/HoudiniSendScene.tsx Outdated
Comment thread src/components/scenes/HoudiniSendScene.tsx Outdated
Comment thread src/components/scenes/HoudiniSendScene.tsx
Comment thread src/components/themed/TransactionListTop.tsx Outdated
Comment thread src/components/scenes/HoudiniSendScene.tsx
j0ntz added 2 commits June 24, 2026 16:00
Adds a review-only, fully navigable prototype of the redesigned Houdini
private send flow, reachable from a wallet's Send button. The scene
reorganizes the send-to-address experience with two linked amounts
(You send / Recipient gets) computed from a hard-coded rate, a
recipient-asset picker over a hard-coded chain list, a Private send
toggle, an inline quote row, a network fee row, and a conditional
destination-tag row. Cross-asset or private sends complete on
SwapSuccessScene; same-asset sends show the transaction success modal.
Nothing talks to Houdini; all values are hard-coded. The card grouping
uses Proposal A (From -> To grouping).
Walks the prototype from the wallet Send button through the reorganized
scene, recipient-asset picker, cross-asset XMR destination tag, Private
send toggle, and both success paths (Transaction Success modal and
SwapSuccessScene), capturing review screenshots along the way.
@j0ntz j0ntz force-pushed the prototype/houdini-send-reorg-a branch from bf8eef7 to ecd9a88 Compare June 24, 2026 23:00
Comment thread src/components/scenes/HoudiniSendScene.tsx
Address Proposal A review feedback: the Houdini provider tile no longer
renders on a plain same-asset, non-private send. It appears only when the
send is private or converts between assets, with the title 'Houdini Private
Exchange' (private) or 'Houdini Exchange' (cross-asset). A plain BTC send now
shows the standard add-recipient-address UI and hides the estimated recipient
amount.
Comment thread src/components/scenes/HoudiniSendScene.tsx
j0ntz added 2 commits June 26, 2026 14:57
Apply review feedback on the redesigned send flow:
- Drop the conversion-rate tile. Show a conversion percent on the estimated
  side instead (swap-scene style), saving a tile.
- Rename 'Private send' to 'Incognito send' throughout. The incognito toggle
  tile now expands with explanatory messaging while enabled.
- A plain same-asset, non-incognito send is treated as an ordinary on-chain
  send: standard add-recipient-address UI, no exchange rows. Routing through
  Houdini (incognito or cross-asset) shows the estimated amount, conversion
  percent, and a locked recipient address.
- Update the maestro walk to cover all branches (plain, incognito, swap) and
  both success paths.
Bugbot: on the cross-asset / incognito completion path the slider reset was
called synchronously before navigating, which left the control active and let
a second slide fire another navigation. Drop the early reset so SafeSlider
locks after completion, and add a submission guard so the handler runs once.
Comment thread src/components/scenes/HoudiniSendScene.tsx
Comment thread src/components/themed/TransactionListTop.tsx
Apply the next round of design-review feedback:
- The send scene reveals the amount and network-fee rows only after a recipient
  address or asset is selected. Add an a1/a2 variant for the initial state: a1
  shows the Recipient receives row up front, a2 hides it until a selection.
- Add a Houdini swap prototype reachable from a wallet's Trade -> Swap action:
  an amount-entry scene with the incognito toggle in an expanding card, then a
  mock quote scene that shows 'Powered by Houdini' with no tappable chevron.
- Add maestro walks for both flows.
@j0ntz

j0ntz commented Jun 26, 2026

Copy link
Copy Markdown
Contributor Author

📸 Design review v4 — send reveal-on-selection + A1/A2 variants + Houdini swap flow

agent proof 1216019116944855 v4 01 a1 plain initial

agent proof 1216019116944855 v4 01 a1 plain initial

agent proof 1216019116944855 v4 02 a2 plain initial

agent proof 1216019116944855 v4 02 a2 plain initial

agent proof 1216019116944855 v4 03 a1 after address

agent proof 1216019116944855 v4 03 a1 after address

agent proof 1216019116944855 v4 04 a1 incognito

agent proof 1216019116944855 v4 04 a1 incognito

agent proof 1216019116944855 v4 05 asset picker

agent proof 1216019116944855 v4 05 asset picker

agent proof 1216019116944855 v4 06 cross asset xmr

agent proof 1216019116944855 v4 06 cross asset xmr

agent proof 1216019116944855 v4 07 swap entry

agent proof 1216019116944855 v4 07 swap entry

agent proof 1216019116944855 v4 08 swap incognito card

agent proof 1216019116944855 v4 08 swap incognito card

agent proof 1216019116944855 v4 09 swap quote powered by

agent proof 1216019116944855 v4 09 swap quote powered by

Captured by the agent's in-app test run (build-and-test).

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit e3eacff. Configure here.

incognito
})
reset()
})

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quote slider allows double navigation

Medium Severity

handleGetQuote calls the SafeSlider reset callback synchronously right after navigation.navigate to the quote scene. SafeSlider only locks when reset is not invoked during completion, so a second slide can push another quote screen before the first transition finishes.

Fix in Cursor Fix in Web

Triggered by project rule: Bugbot Review Rules

Reviewed by Cursor Bugbot for commit e3eacff. Configure here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant