Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
145 commits
Select commit Hold shift + click to select a range
80a458e
add model, api service
gianfra-t Jan 28, 2026
007bd54
add quote types
gianfra-t Jan 28, 2026
14892f8
add onramp/offramp endpoints
gianfra-t Jan 28, 2026
655d875
add fiat account creation endpoint and types
gianfra-t Jan 28, 2026
ae059da
add alfredpay endpoints, individual
gianfra-t Jan 30, 2026
6cc3c35
update our own state when user performs status query of KYC
gianfra-t Feb 2, 2026
1b6245d
add alfredpay state machine
gianfra-t Feb 2, 2026
56ed7ef
add initial alfredpay kyc flow components
gianfra-t Feb 3, 2026
a7aec32
improve alfredpay status update flow
gianfra-t Feb 3, 2026
44d0206
add initial alfredpay ramp logic
gianfra-t Feb 4, 2026
54a7a6d
use proper country id for kyc link
gianfra-t Feb 4, 2026
50b28cd
connect alfredpay quote and transaction creation logic
gianfra-t Feb 4, 2026
1320e58
connect alfredpay transaction creation to register endpoints
gianfra-t Feb 5, 2026
99f3bd5
correct kyc validator, add ach data response
gianfra-t Feb 5, 2026
2eeae5f
add mint phase for alfredpay flow
gianfra-t Feb 17, 2026
5fe83dc
adjust phase connections
gianfra-t Feb 18, 2026
7bc02ab
add kyc retry endpoint
gianfra-t Feb 18, 2026
b1a66ee
add retry logic to Frontend
gianfra-t Feb 18, 2026
b8a64aa
adjust "to" currency for alfredpay quote
gianfra-t Feb 18, 2026
745d80a
replicate kyc endpoints for business users
gianfra-t Feb 18, 2026
0fd4b05
make alfredpay mint phase less complex
gianfra-t Feb 19, 2026
4df8f9c
corrections to alfredpay flow
gianfra-t Feb 19, 2026
3eb8827
initial draft, alfredpay kyb endpoints improvements
gianfra-t Feb 19, 2026
245fc0e
adjustments and removal of kyb repeated endpoints
gianfra-t Feb 20, 2026
1b6823b
more adjustments to KYB flow
gianfra-t Feb 20, 2026
e2f736a
add quote engine classes for offramping with Alfredpay
gianfra-t Feb 23, 2026
e88fce1
Merge branch 'staging' into add-alfredpay-support
gianfra-t Feb 23, 2026
7541de0
adjust quote metadata for alfredpay offramp, adjust final settlement …
gianfra-t Feb 23, 2026
9d2fc77
adding alfredpay offramp phases
gianfra-t Feb 23, 2026
0dd8c81
connect squidrouter relayer
gianfra-t Feb 25, 2026
1f1699b
adjust signing flow states.
gianfra-t Feb 25, 2026
086b1e7
add squidrouter relayer phase
gianfra-t Feb 26, 2026
77a247f
adjust relayer contract to be payable
gianfra-t Feb 27, 2026
f94d262
adjust phase value selectors
gianfra-t Feb 27, 2026
4cf4312
update ramp flow in docs
gianfra-t Feb 27, 2026
46a8893
add relayer contract files
gianfra-t Feb 28, 2026
018c142
add ephemeral intermediate step after squidrouter
gianfra-t Mar 2, 2026
35d932a
fixes for rpc fee estimation in pre-signed transaction
gianfra-t Mar 2, 2026
140b38e
model modifications, adding quote engine key
gianfra-t Mar 2, 2026
660ea3f
add translation to alfredpay kyc component
gianfra-t Mar 2, 2026
7fbaf25
rename variables
gianfra-t Mar 2, 2026
41483a8
handle alfredpay fees, onramp case
gianfra-t Mar 2, 2026
bda9685
flow adjustments
gianfra-t Mar 3, 2026
0bf93ea
removing unused console logs
gianfra-t Mar 3, 2026
e66a691
changing timeouts, deadlines. Renamings.
gianfra-t Mar 3, 2026
0e9fb3e
rename freeTokenDetails type
gianfra-t Mar 3, 2026
bce696c
solve type issues
gianfra-t Mar 3, 2026
17c7206
more type fixes
gianfra-t Mar 3, 2026
d4c3459
exclude relayer-contract folder from general typecheck
gianfra-t Mar 3, 2026
5a52edb
add portuguese keys for Alfredpay
gianfra-t Mar 3, 2026
a9bc78d
Adjust .env.example
ebma Mar 4, 2026
cdfebb8
Configure 'relayer-contract' as part of the bun monorepo
ebma Mar 4, 2026
987694c
Refactor contracts directory
ebma Mar 4, 2026
58c1706
Add security audit report for TokenRelayer contract
ebma Mar 4, 2026
2230522
add EU flag
Sharqiewicz Mar 4, 2026
bf3d955
add COP flag
Sharqiewicz Mar 4, 2026
9c9df46
add MX flag
Sharqiewicz Mar 4, 2026
729ef9d
add USD flag
Sharqiewicz Mar 4, 2026
c36399b
remove EUR images and replace placeholder
Sharqiewicz Mar 4, 2026
c6172b1
update useGetAssetIcon to handle new currencies
Sharqiewicz Mar 4, 2026
0456a7b
update useGetAssetIcon to handle new currencies
Sharqiewicz Mar 4, 2026
a8ff3f2
Refactor directory structure
ebma Mar 4, 2026
f533870
add reusable Checkbox component
Sharqiewicz Mar 4, 2026
e63d38b
Upgrade smart contract with security findings
ebma Mar 4, 2026
83973b1
Adjust comments
ebma Mar 4, 2026
125f601
Adjust issues with TokenRelayer.sol
ebma Mar 4, 2026
8172325
Remove redundant SECURITY_AUDIT.md
ebma Mar 4, 2026
ea02325
redeployed audited contract
gianfra-t Mar 4, 2026
dbc188c
add business handshake svg for AlfredPay KYB
Sharqiewicz Mar 4, 2026
80a093b
create CustomerDefinitionScreen
Sharqiewicz Mar 4, 2026
14cbbef
extract DoneScreen
Sharqiewicz Mar 4, 2026
20e0e63
extract FailureKYCScreen
Sharqiewicz Mar 4, 2026
428f542
extract FailureScreen
Sharqiewicz Mar 4, 2026
eea51a2
extract FillingScreen
Sharqiewicz Mar 4, 2026
3e62563
extract LinkReadyScreen
Sharqiewicz Mar 4, 2026
8542032
extract LoadingScreen
Sharqiewicz Mar 4, 2026
5f62d89
extract OpeningLinkScreen
Sharqiewicz Mar 4, 2026
7eb4a37
extract PollingScreen
Sharqiewicz Mar 4, 2026
2499231
refactor AlfredpayKycFlow screen
Sharqiewicz Mar 4, 2026
986f2d4
move useQuote to QuoteSummary
Sharqiewicz Mar 4, 2026
43a89a6
remove unnecessary translation
Sharqiewicz Mar 4, 2026
bcdbce2
adjusting payload signature params for token relayer
gianfra-t Mar 4, 2026
1dca43f
fix MXN flag
Sharqiewicz Mar 4, 2026
10ee470
correct for alfredpay usdc onramp to polygon
gianfra-t Mar 6, 2026
b0f6b6e
do not skip destination transfer for special flow
gianfra-t Mar 6, 2026
8f81c53
add new state to machine to validate or refresh auth tokens
gianfra-t Mar 6, 2026
8ce6f96
Shared: add MXN/COP tokens + isAlfredpayToken helper
Sharqiewicz Mar 9, 2026
a57cd00
add COP,MXN token mapping
Sharqiewicz Mar 10, 2026
1354ad4
new UI primitives for fiat account management
Sharqiewicz Mar 10, 2026
382e786
fiat account management constants, hooks, machine + service
Sharqiewicz Mar 10, 2026
8b4a5c3
create FiatAccountRegistration screens
Sharqiewicz Mar 10, 2026
10e4c3c
integrate AlfredpayPaymentMethodSelector into SummaryStep
Sharqiewicz Mar 10, 2026
a95d109
FiatAccountRegistration and go back navigation into widget/KYC
Sharqiewicz Mar 10, 2026
46c532d
multi-currency Alfredpay routing
Sharqiewicz Mar 10, 2026
151c614
MXN/COP token display, defaults, and URL params
Sharqiewicz Mar 10, 2026
d09ffac
chores
Sharqiewicz Mar 10, 2026
008fc2e
refactor: rename paymentMethods machine and constants to fiatAccount
Sharqiewicz Mar 11, 2026
b4ff18c
replace AlfredpayPaymentMethodSelector with FiatAccountSelector in Su…
Sharqiewicz Mar 11, 2026
33d46c1
replace MethodPickerScreen with AccountTypePickerScreen in FiatAccoun…
Sharqiewicz Mar 11, 2026
fabf1f9
add AlertBanner component and update FailureScreen
Sharqiewicz Mar 11, 2026
5c09257
disable Payment Summary confirm for alfredpay currencies if no Paymen…
Sharqiewicz Mar 11, 2026
ab53009
Add translations for Alfredpay screens
Sharqiewicz Mar 11, 2026
ebbccb2
Add selectedFiatAccountId? to RampExecutionInput
Sharqiewicz Mar 11, 2026
e96a07c
extract MaskedAccountNumber reusable component
Sharqiewicz Mar 11, 2026
5674acd
Alfredpay KYC screens: layout polish + illustrations
Sharqiewicz Mar 11, 2026
42738aa
polish Alfredpay KYC screens: illustrations, layout, spinner
Sharqiewicz Mar 11, 2026
3d5d23a
add btn-vortex-success variant and btn cursor fix
Sharqiewicz Mar 11, 2026
c63f09d
Remove trailing ellipsis from verifying translation strings
Sharqiewicz Mar 11, 2026
723a6f7
Stories / dev tooling
Sharqiewicz Mar 11, 2026
1383528
implement shared zustand store for Fiat Account Management
Sharqiewicz Mar 11, 2026
8e6e2af
improve fiat accounts store management
Sharqiewicz Mar 12, 2026
ce579f8
Remove hardcoded user ID from token verification response
ebma Mar 13, 2026
bfa40f9
Fix missing translations
ebma Mar 13, 2026
b78c079
Fix wrong symbol for MXN currency
ebma Mar 13, 2026
3c86302
Adjust text
ebma Mar 13, 2026
6019e85
Remove console logs
ebma Mar 13, 2026
0e2074e
fix(token-selection): remove conditional virtualization and correct r…
Sharqiewicz Mar 23, 2026
476e3b6
Merge branch 'feat/alfredpay-fiat-accounts' of github.com:pendulum-ch…
Sharqiewicz Mar 23, 2026
7688a17
add widget UI typography scale tokens
Sharqiewicz Mar 24, 2026
33a4013
add widget UI typography scale tokens
Sharqiewicz Mar 24, 2026
4959417
extract InfoBox from repeated border+padding pattern
Sharqiewicz Mar 24, 2026
6630034
replace hardcoded colors with semantic tokens
Sharqiewicz Mar 24, 2026
55f2453
update design tokens
Sharqiewicz Mar 24, 2026
e2aefb6
refactor: extract setInterval countdown logic into useCountdown hook
Sharqiewicz Mar 24, 2026
3660902
Code quality: cn(), SearchInput a11y, z-index scale and normalize ha…
Sharqiewicz Mar 24, 2026
3ee1f00
allow reopening verification window from VerifyingCompletion state
Sharqiewicz Mar 24, 2026
092bc59
guard repeat() against short account numbers
Sharqiewicz Mar 24, 2026
51fb635
replace malformed hyphens with em dashes in EN and PT translations
Sharqiewicz Mar 24, 2026
8d9f7fb
accessibility and touch improvements for virtual list
Sharqiewicz Mar 24, 2026
7fd7320
remove console logs from SEP-24 actors and ramp flow
Sharqiewicz Mar 24, 2026
fb31e9c
replace className string concatenation with cn() helper
Sharqiewicz Mar 24, 2026
bcf82b0
add touch-target utility; fix AssetButton hit area, CloseButton, Emai…
Sharqiewicz Mar 24, 2026
e4e71d4
optimize Fiat Accounts management
Sharqiewicz Mar 24, 2026
c9b6d16
replace hardcoded blue-700 with primary token across all components …
Sharqiewicz Mar 24, 2026
d1b8621
add .impeccable.md
Sharqiewicz Mar 24, 2026
5f64172
Merge branch 'add-alfredpay-support' into feat/alfredpay-fiat-accounts
Sharqiewicz Mar 24, 2026
d37b445
add bun.lock
Sharqiewicz Mar 24, 2026
b9e9d97
Adjust .mcp.json
ebma Mar 26, 2026
70f3b13
Merge pull request #1088 from pendulum-chain/feat/alfredpay-fiat-acco…
ebma Mar 26, 2026
61d5470
Potential fix for pull request finding 'Useless assignment to local v…
ebma Mar 26, 2026
53a8755
Merge branch 'staging' into add-alfredpay-support
ebma Mar 26, 2026
ba29bef
Fix issues in QuoteSummary.stories.tsx
ebma Mar 26, 2026
a6eff02
Refactor price formatting to use parseBig for input and output amounts
ebma Mar 26, 2026
f4cbaef
Refactor code
ebma Mar 26, 2026
1d8ca1a
Add numbers.ts
ebma Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ storybook-static

CLAUDE.local.md
.claude
/contracts/relayer/artifacts/*
/contracts/relayer/cache/*
/.roo/*

# hardhat generated files in workspace contract projects
contracts/*/artifacts
contracts/*/cache
12 changes: 12 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"mcpServers": {
"linear-server": {
"type": "sse",
"url": "https://mcp.linear.app/sse"
},
"obsidian": {
"args": ["-y", "obsidian-mcp", "$OBSIDIAN_VAULT_PATH"],
"command": "npx"
}
}
}
27 changes: 26 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ This is a **Bun monorepo** using workspaces:

## Essential Commands

> Always use `bun`- never `npm`, `yarn`, or `pnpm`. Run `bun lint:fix` after any code change.

```bash
# Install all dependencies
bun install
Expand Down Expand Up @@ -70,7 +72,7 @@ Phase metadata and valid transitions are stored in PostgreSQL and seeded via `se
### Frontend Architecture

- **State**: Zustand stores (`stores/`) + React Context (`contexts/`)
- **Forms**: React Hook Form with Yup validation
- **Forms**: React Hook Form with Zod validation (not Yup)
- **Data Fetching**: TanStack Query
- **Routing**: TanStack Router (route tree auto-generated in `routeTree.gen.ts`)
- **State Machines**: XState machines in `machines/` for complex flows (KYC, ramp process)
Expand All @@ -95,6 +97,8 @@ Contains cross-package utilities:

**Important**: Always rebuild shared when making changes: `bun build:shared`

After ANY change to `packages/shared`, run `bun build:shared` before running frontend/api.

## Code Style Guidelines

From `.clinerules/`:
Expand All @@ -110,6 +114,11 @@ From `.clinerules/`:
- Extract complex conditional rendering into new components
- Skip useless comments; only comment race conditions, TODOs, or genuinely confusing code

### XState v5
- Use `setup({ ... }).createMachine(...)` API- not `createMachine` directly
- Actor refs from `useActor` / `useSelector` from `@xstate/react`
- Machine files live in `apps/frontend/src/machines/`

### Biome Configuration
- Line width: 128
- Indent: 2 spaces
Expand All @@ -118,6 +127,22 @@ From `.clinerules/`:
- Quote style: double
- Sorted Tailwind classes enforced via `useSortedClasses` rule

## Token Exhaustiveness

`FiatToken` currently has 6 values: `EURC`, `ARS`, `BRL`, `USD`, `MXN`, `COP`.

Any `Record<FiatToken, X>` must include ALL six. Missing entries cause TypeScript errors
when shared is rebuilt. Check: tokenAvailability, mapFiatToDestination, success page
ARRIVAL_TEXT_BY_TOKEN, sep10 tokenMapping.

## No Over-Engineering

- Don't add features, refactors, or "improvements" beyond what was asked
- Don't add docstrings/comments to code you didn't touch
- Don't create helpers/utilities for one-time operations
- Don't validate inputs that can't be invalid (internal calls, typed params)
- Three similar lines is better than a premature abstraction

## Testing

### Backend Integration Tests
Expand Down
19 changes: 18 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,16 @@ Vortex is a gateway for cross-border payments. It is built on top of the Pendulu

## Repository Structure

This is a **Bun monorepo** containing multiple sub-projects organized into apps and packages:
This is a **Bun monorepo** containing multiple sub-projects organized into apps, packages, and contracts:

### Apps

- **[apps/api](apps/api)** - Backend API service providing signature services, on/off-ramping flows, quote generation, and transaction state management
- **[apps/frontend](apps/frontend)** - React-based web application built with Vite for the Vortex user interface
- **[apps/rebalancer](apps/rebalancer)** - Service for automated liquidity rebalancing across chains
### Contracts

- **[contracts/relayer](contracts/relayer)** - Hardhat project for relayer smart contracts and deployment scripts

### Packages

Expand Down Expand Up @@ -69,6 +72,11 @@ bun dev:backend
bun dev:rebalancer
```

**Relayer contract local node:**
```bash
bun dev:contracts:relayer
```

### Building

**Build all projects:**
Expand All @@ -91,6 +99,15 @@ bun build:sdk
bun build:shared
```

**Relayer contract:**
```bash
# Compile contracts
bun compile:contracts:relayer

# Run contract tests
bun test:contracts:relayer
```

## Sub-Project Specific Instructions

### Frontend (apps/frontend)
Expand Down
5 changes: 5 additions & 0 deletions apps/api/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,8 @@ DELTA_D_BASIS_POINTS=0.3
# RSA Keys for Webhook Signing
# Only the private key is needed - public key is derived from it
WEBHOOK_PRIVATE_KEY=your-webhook-private-key

# AlfredPay
ALFREDPAY_BASE_URL=your-alfredpay-base-url
ALFREDPAY_API_KEY=your-alfredpay-api-key
ALFREDPAY_API_SECRET=your-alfredpay-api-secret
Loading
Loading