From aadeab23afdfc155a25e7dedff2e7dc14705967d Mon Sep 17 00:00:00 2001
From: kushagrasarathe <76868364+kushagrasarathe@users.noreply.github.com>
Date: Wed, 15 Oct 2025 21:48:18 +0530
Subject: [PATCH 1/5] hot-fix: banner on semantic req page
---
src/app/[...recipient]/client.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/[...recipient]/client.tsx b/src/app/[...recipient]/client.tsx
index 0e9dfdae2..5a1b622c2 100644
--- a/src/app/[...recipient]/client.tsx
+++ b/src/app/[...recipient]/client.tsx
@@ -467,7 +467,7 @@ export default function PaymentPage({ recipient, flow = 'request_pay' }: Props)
return (
{!user && parsedPaymentData?.recipient?.recipientType !== 'USERNAME' && (
-
+
Date: Wed, 15 Oct 2025 21:56:35 +0530
Subject: [PATCH 2/5] fix: on desktop
---
src/app/[...recipient]/client.tsx | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/app/[...recipient]/client.tsx b/src/app/[...recipient]/client.tsx
index 5a1b622c2..162002fd5 100644
--- a/src/app/[...recipient]/client.tsx
+++ b/src/app/[...recipient]/client.tsx
@@ -467,7 +467,7 @@ export default function PaymentPage({ recipient, flow = 'request_pay' }: Props)
return (
{!user && parsedPaymentData?.recipient?.recipientType !== 'USERNAME' && (
-
+
Date: Fri, 17 Oct 2025 18:51:55 +0530
Subject: [PATCH 3/5] chore: withdraw temp unavaillable for non-euro sepa
countries msg
---
.../withdraw/[country]/bank/page.tsx | 32 +++++++++++++++++--
1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx b/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
index 8d01d563f..e69b96ca8 100644
--- a/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
+++ b/src/app/(mobile-ui)/withdraw/[country]/bank/page.tsx
@@ -40,6 +40,14 @@ export default function WithdrawBankPage() {
currency.path?.toLowerCase() === country.toLowerCase()
)?.currencyCode
+ // non-eur sepa countries that are currently experiencing issues
+ const isNonEuroSepaCountry = !!(
+ nonEuroCurrency &&
+ nonEuroCurrency !== 'EUR' &&
+ nonEuroCurrency !== 'USD' &&
+ nonEuroCurrency !== 'MXN'
+ )
+
useEffect(() => {
if (!amountToWithdraw) {
// If no amount, go back to main page
@@ -243,9 +251,27 @@ export default function WithdrawBankPage() {
+
+ {isNonEuroSepaCountry && (
+
+
+
⚠️
+
+
+ Service Temporarily Unavailable
+
+
+ Withdrawals to {nonEuroCurrency} bank accounts are temporarily unavailable.
+ Please try again later.
+
+
+
+
+ )}
+
{error.showError ? (
)}
{error.showError && }
From 80ca9174ef2e9a78f51790d53e5383f148fe1e48 Mon Sep 17 00:00:00 2001
From: Hugo Montenegro
Date: Fri, 17 Oct 2025 16:42:55 -0300
Subject: [PATCH 4/5] Update redirects.json
Signed-off-by: Hugo Montenegro
---
redirects.json | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/redirects.json b/redirects.json
index 4a86e1360..60ffd0561 100644
--- a/redirects.json
+++ b/redirects.json
@@ -37,12 +37,12 @@
},
{
"source": "/pints",
- "destination": "/adag1o/1",
+ "destination": "https://luma.com/zwh7l3ro",
"permanent": false
},
{
"source": "/events",
- "destination": "https://lu.ma/7j6g06rq",
+ "destination": "https://luma.com/zwh7l3ro",
"permanent": false
}
]
From 0ab7c63769836a6f9d0ff17615873653b23f7f8c Mon Sep 17 00:00:00 2001
From: Hugo Montenegro
Date: Sun, 19 Oct 2025 19:54:24 -0300
Subject: [PATCH 5/5] made invite code validation more lax and added numbers
---
pnpm-lock.yaml | 34 ++++++++++++++++++++++++-----
src/app/(mobile-ui)/points/page.tsx | 7 +++---
src/utils/general.utils.ts | 18 +++++++++++++--
3 files changed, 48 insertions(+), 11 deletions(-)
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 50ecdea93..07a3a06cb 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -34,7 +34,7 @@ importers:
version: 2.0.4
'@daimo/pay':
specifier: ^1.16.5
- version: 1.16.5(b5a9a1008f9b28340e09c03161d48735)
+ version: 1.16.5(ffdabe5606f688e09b37d214407e73aa)
'@dicebear/collection':
specifier: ^9.2.2
version: 9.2.4(@dicebear/core@9.2.4)
@@ -8534,11 +8534,11 @@ snapshots:
- typescript
- utf-8-validate
- '@daimo/pay@1.16.5(b5a9a1008f9b28340e09c03161d48735)':
+ '@daimo/pay@1.16.5(ffdabe5606f688e09b37d214407e73aa)':
dependencies:
'@daimo/pay-common': 1.16.5(bufferutil@4.0.9)(typescript@5.9.2)(utf-8-validate@5.0.10)
'@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))
- '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)
+ '@solana/wallet-adapter-react': 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)
'@solana/web3.js': 1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)
'@tanstack/react-query': 5.8.4(react-dom@19.1.1(react@19.1.1))(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)
'@trpc/client': 11.5.0(@trpc/server@11.5.0(typescript@5.9.2))(typescript@5.9.2)
@@ -11529,11 +11529,11 @@ snapshots:
'@wallet-standard/features': 1.1.0
eventemitter3: 5.0.1
- '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)':
+ '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)':
dependencies:
'@solana-mobile/wallet-adapter-mobile': 2.2.3(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(react-native@0.81.0(@babel/core@7.28.3)(@react-native/metro-config@0.81.0(@babel/core@7.28.3)(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.23)(bufferutil@4.0.9)(react@19.1.1)(utf-8-validate@5.0.10))(react@19.1.1)
'@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))
- '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.1)
+ '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.1.1)
'@solana/web3.js': 1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)
react: 19.1.1
transitivePeerDependencies:
@@ -11574,6 +11574,19 @@ snapshots:
'@wallet-standard/wallet': 1.1.0
bs58: 5.0.0
+ '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)':
+ dependencies:
+ '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))
+ '@solana/wallet-standard-chains': 1.1.1
+ '@solana/wallet-standard-features': 1.3.0
+ '@solana/wallet-standard-util': 1.1.2
+ '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)
+ '@wallet-standard/app': 1.1.0
+ '@wallet-standard/base': 1.1.0
+ '@wallet-standard/features': 1.1.0
+ '@wallet-standard/wallet': 1.1.0
+ bs58: 6.0.0
+
'@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.1)':
dependencies:
'@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))
@@ -11585,6 +11598,17 @@ snapshots:
- '@solana/web3.js'
- bs58
+ '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@19.1.1)':
+ dependencies:
+ '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))
+ '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@6.0.0)
+ '@wallet-standard/app': 1.1.0
+ '@wallet-standard/base': 1.1.0
+ react: 19.1.1
+ transitivePeerDependencies:
+ - '@solana/web3.js'
+ - bs58
+
'@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@19.1.1)':
dependencies:
'@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.9.2)(utf-8-validate@5.0.10))(bs58@5.0.0)
diff --git a/src/app/(mobile-ui)/points/page.tsx b/src/app/(mobile-ui)/points/page.tsx
index bdb92cc3e..34ac9fd74 100644
--- a/src/app/(mobile-ui)/points/page.tsx
+++ b/src/app/(mobile-ui)/points/page.tsx
@@ -11,8 +11,8 @@ import TransactionAvatarBadge from '@/components/TransactionDetails/TransactionA
import { VerifiedUserLabel } from '@/components/UserHeader'
import { useAuth } from '@/context/authContext'
import { invitesApi } from '@/services/invites'
-import { Invite } from '@/services/services.types'
-import { generateInvitesShareText } from '@/utils'
+import type { Invite } from '@/services/services.types'
+import { generateInviteCodeLink, generateInvitesShareText } from '@/utils'
import { useQuery } from '@tanstack/react-query'
import { useRouter } from 'next/navigation'
import { useEffect } from 'react'
@@ -27,8 +27,7 @@ const PointsPage = () => {
})
const username = user?.user.username
- const inviteCode = username ? `${username.toUpperCase()}INVITESYOU` : ''
- const inviteLink = `${process.env.NEXT_PUBLIC_BASE_URL}/invite?code=${inviteCode}`
+ const { inviteCode, inviteLink } = generateInviteCodeLink(username ?? '')
useEffect(() => {
// Re-fetch user to get the latest invitees list for showing heart Icon
diff --git a/src/utils/general.utils.ts b/src/utils/general.utils.ts
index 3e2dac022..57dc569f4 100644
--- a/src/utils/general.utils.ts
+++ b/src/utils/general.utils.ts
@@ -1330,11 +1330,25 @@ export function slugify(text: string): string {
}
export const generateInvitesShareText = (inviteLink: string) => {
- return `I’m using Peanut, an invite-only app for easy payments. With it you can pay friends, use merchants, and move money in and out of your bank, even cross-border. Here’s my invite: ${inviteLink}`
+ return `I'm using Peanut, an invite-only app for easy payments. With it you can pay friends, use merchants, and move money in and out of your bank, even cross-border. Here's my invite: ${inviteLink}`
+}
+
+/**
+ * Generate a deterministic 3-digit suffix from username
+ * This is purely cosmetic and derived from a hash of the username
+ */
+export const generateInviteCodeSuffix = (username: string): string => {
+ const lowerUsername = username.toLowerCase()
+ // Create a simple hash from the username
+ const hash = lowerUsername.split('').reduce((acc, char) => acc + char.charCodeAt(0), 0)
+ // Generate 3 digits between 100-999
+ const threeDigits = 100 + (hash % 900)
+ return threeDigits.toString()
}
export const generateInviteCodeLink = (username: string) => {
- const inviteCode = `${username.toUpperCase()}INVITESYOU`
+ const suffix = generateInviteCodeSuffix(username)
+ const inviteCode = `${username.toUpperCase()}INVITESYOU${suffix}`
const inviteLink = `${consts.BASE_URL}/invite?code=${inviteCode}`
return { inviteLink, inviteCode }
}