From 83a8cf8b3a260f22bd146896237fc3050d425e0d Mon Sep 17 00:00:00 2001 From: tacticalnoot <130199656+tacticalnoot@users.noreply.github.com> Date: Fri, 8 May 2026 14:23:38 -0500 Subject: [PATCH] Redesign EZWallet main and claim pages with polished UX --- src/experiments/ezwallet/EZWalletApp.svelte | 293 ++++++++---------- .../ezwallet/EZWalletDropApp.svelte | 126 +++++++- 2 files changed, 238 insertions(+), 181 deletions(-) diff --git a/src/experiments/ezwallet/EZWalletApp.svelte b/src/experiments/ezwallet/EZWalletApp.svelte index 9e0898ee..3685e08c 100644 --- a/src/experiments/ezwallet/EZWalletApp.svelte +++ b/src/experiments/ezwallet/EZWalletApp.svelte @@ -112,186 +112,149 @@ } -
-
-
-

POWERED BY SMOL • STELLAR NATIVE

-

EZWallet

-

Create, Share, and Redeem in One Place.

-

Make instantly redeemable tickets for XLM, USDC, or KALE. People can scan, review, and redeem from the same simple flow.

-
-
- - Work in Progress · Until this badge is removed, all payments received are treated as tips supporting ongoing Smol development. -
+
+ -
- Readiness - Red - Yellow - Green - Not Ready / Test -
+
+

EZ Wallet

+

Create professional claim links in minutes

+

Build a claim, share a QR, and let people review details before they approve in wallet. Fast for you, clear for them.

+
-
-
-

01 · Build Your Claim Ticket

-

Step 1: pick a coin, add optional details, then generate a ticket.

-
Asset
-
- - - +
+

1) Claim setup

+
+ +
+ + +
- -
+ + + +
+ -
+ + {#if mode === 'event_drop'} + + {/if} + + + +
+ + +
+

{status}

+
+ +
+

2) Share and preview

+
+ {#if qrData} + Generated claim QR + {:else} +

Generate a claim to preview the QR here.

{/if} -
+ {#if link} + -
- - +
+ + Open claim page
-

{status}

-
+ {/if} +

Recipients always review details before approving.

+
-
-

02 · Share & Review

-

Step 2: share your QR or link. Every person reviews details before redeeming. No auto-send.

-
- {#if qrData} - Generated Stellar QR intent - {:else} -

Generate a QR to preview it here.

- {/if} -
- {#if link} - -
- - Open drop -
- {/if} -
+
+

3) Batch generator

+ -
-

03 · Batch Generation

- -
- - - - -
- -
- - {#if csv}{/if} -
-

Rows generated: {batchRows.length}

-

Best for giveaways: generate many tickets at once, then print or distribute digitally.

-
+
+ + + + +
-
-

04 · Upgrade & Trust

-
-
FreeUp to {TIERS.FREE.maxBatch}
- -
Power Pack{TIERS.POWER.maxBatch} • {TIERS.POWER.priceXlm} XLM
-
Custom / EnterpriseContact for event ops scale
-
-

Step 4: if needed, upgrade your batch limit. Checkout opens in wallet and you can continue right away.

-
- -
- -

Anyone can open a ticket safely, review details, and redeem from the same EZWallet flow with signer approval.

-
+ + +
+ + {#if csv}{/if} +
+ +

Generated rows: {batchRows.length}

-
- Passkey Smart Account - Public Event Ready - Review Before Signing - Stellar Native - No Seed Phrase Required - Signer Review Required -
+
+

4) Upgrade options

+
+
FreeUp to {TIERS.FREE.maxBatch}
+
Event Pack{TIERS.EVENT.maxBatch} • {TIERS.EVENT.priceXlm} XLM
+
Power Pack{TIERS.POWER.maxBatch} • {TIERS.POWER.priceXlm} XLM
+
+
+ +
+ +
diff --git a/src/experiments/ezwallet/EZWalletDropApp.svelte b/src/experiments/ezwallet/EZWalletDropApp.svelte index 0730ff9f..b33fbaa3 100644 --- a/src/experiments/ezwallet/EZWalletDropApp.svelte +++ b/src/experiments/ezwallet/EZWalletDropApp.svelte @@ -3,26 +3,120 @@ import { PENDING_INTENT_KEY } from './config'; import { userState } from '../../stores/user.svelte'; import { useAuthentication } from '../../hooks/useAuthentication'; - let intent:any = null; let errors:string[] = []; let raw = ''; + + let intent: any = null; + let errors: string[] = []; + let raw = ''; + let copyStatus = ''; const auth = useAuthentication(); + if (typeof window !== 'undefined') { const p = new URL(location.href).searchParams.get('p') || ''; raw = p; - if (p) { try { intent = decodeIntent(p); errors = validateIntent(intent as any); } catch { errors=['Invalid payload']; } } - if (!userState.contractId && intent && errors.length===0) sessionStorage.setItem(PENDING_INTENT_KEY, JSON.stringify(intent)); + if (p) { + try { + intent = decodeIntent(p); + errors = validateIntent(intent as any); + } catch { + errors = ['This claim link is invalid.']; + } + } + if (!userState.contractId && intent && errors.length === 0) { + sessionStorage.setItem(PENDING_INTENT_KEY, JSON.stringify(intent)); + } + } + + async function login() { + await auth.login(); + const s = sessionStorage.getItem(PENDING_INTENT_KEY); + if (s) intent = JSON.parse(s); + } + + async function copyIntent() { + await navigator.clipboard.writeText(raw); + copyStatus = 'Link details copied.'; + } + + function prettyMode(value: string) { + return value === 'event_drop' ? 'Event claim' : 'Direct claim'; } - async function login(){ await auth.login(); const s = sessionStorage.getItem(PENDING_INTENT_KEY); if (s) intent = JSON.parse(s); } -
-

Stellar Claim Ticket

-

This page is safe to open. Review details first, then connect and sign only if everything looks right.

-{#if errors.length}

{errors.join(', ')}

{:else if intent} - -

No transaction has been sent. This QR stores claim intent metadata; signer approval is still required.

-
- - -Create another ticket -
-{/if} + +
+
+

EZ Wallet

+

Claim details

+

You can safely open this page. Review every detail below before connecting your wallet and approving anything.

+ + {#if errors.length} + + {:else if intent} +
+
+
Claim type
+
{prettyMode(intent.mode)}
+
+
+
Asset
+
{intent.asset.code}
+
+
+
Amount
+
{intent.amount || 'Set later'}
+
+
+
Destination
+
{intent.destination || 'Choose during claim'}
+
+
+
Event
+
{intent.event || 'Not specified'}
+
+
+
Message
+
{intent.message || 'No message'}
+
+
+
Network
+
Public
+
+
+ +
+ No payment is sent automatically. You will always review and approve in your wallet first. +
+ +
+ + + Create a new claim +
+ {#if copyStatus}

{copyStatus}

{/if} + {:else} + + Go to EZ Wallet + {/if} +
+ +