Swap UI + solver portal for Vortex Protocol.
Next.js 14 app providing the user-facing swap interface, intent explorer,
and solver dashboard. Built with TypeScript, Tailwind CSS, Zustand, and
SWR, with Freighter wallet integration for signing swaps and solver
registrations. Part of the multi-repo Vortex stack — see also
vortex-contract and
vortex-backend.
| Route | File | Description |
|---|---|---|
/ |
src/app/page.tsx |
Swap interface, live fills feed, intent pipeline overview |
/explore |
src/app/explore/page.tsx |
Browse all intents with status/chain filters, sorting, and pagination |
/explore/[id] |
src/app/explore/[id]/page.tsx |
Single intent detail, with a settlement tx link once filled |
/solve |
src/app/solve/page.tsx |
Solver leaderboard, open intents feed, and solver registration |
- Wallet — connect/disconnect Freighter, with the session persisted across reloads and silently restored (no popup) as long as the extension still allows the site.
- Swaps — live quotes over SWR, submitted end-to-end with Freighter signing.
- Live data — the homepage feed and the explorer both layer a WebSocket subscription on top of their REST snapshot, with a "Live"/"Polling" indicator reflecting actual socket state.
- Solvers — browse the leaderboard, accept open intents, and register a new solver (Stellar address + bond, validated client-side before submission).
- Notifications — a shared toast system surfaces the outcome of swaps, intent acceptance, solver registration, and wallet connection.
- Responsive + accessible — a mobile nav menu, ARIA-labeled forms/tabs/filters, a skip-to-content link, and keyboard-operable controls throughout.
- Node.js 20+
- A running
vortex-backendrelay (set its URL in.env.local)
npm install
cp .env.example .env.local
npm run dev # http://localhost:3000| Variable | Where to get the value |
|---|---|
NEXT_PUBLIC_API_URL |
URL of your running vortex-backend relay |
NEXT_PUBLIC_WS_URL |
WebSocket URL of the relay (usually with /ws path) |
NEXT_PUBLIC_NETWORK |
Stellar network: testnet, futurenet, or mainnet |
NEXT_PUBLIC_SETTLEMENT_CONTRACT |
Settlement contract ID from vortex-contract deployment |
NEXT_PUBLIC_SOLVER_REGISTRY_CONTRACT |
Solver registry contract ID from vortex-contract deployment |
| Script | Description |
|---|---|
npm run dev |
Dev server |
npm run build |
Production build |
npm run start |
Serve the production build |
npm run lint |
next lint |
npm test |
Run the Vitest suite |
- Make sure the Freighter extension is installed and unlocked.
- On Firefox, ensure the extension is enabled for the current container or profile.
- If you see "Freighter extension is not installed or enabled", try reloading the page after unlocking the extension.
- Confirm
vortex-backendis running and the relay is reachable. - Verify
NEXT_PUBLIC_API_URLin.env/localpoints to the correct backend origin. - If
NEXT_PUBLIC_WS_URLis missing, live feeds will silently fall back to polling only. - Restart the dev server after changing
.env.local.
- This project requires Node.js 20+. Confirm with
node -v. - If you use
nvmorfnm, runnvm install && nvm use(or the equivalent) from the repo root.
- Wallet integration — connect Freighter, sign swaps and solver registrations, persist sessions
- Intent explorer page (
/explore) — browse all intents with filtering, sorting, and pagination - Live WebSocket feeds for fills and open intents
- Shared toast/notification system
- Mobile responsive nav, accessibility pass
- Per-wallet swap history / "my intents" view
- Solver reputation detail (fill history, uptime over time)
- Localization
Issues on the Wave tracker use the following complexity labels with corresponding point values to help contributors find tasks that match their availability:
| Label | Points | Description |
|---|---|---|
| Trivial | 1 | Small fix, typo, or minor change — quick to complete |
| Medium | 3 | Feature work or bug fix requiring moderate investigation |
| High | 5 | Significant implementation effort or architectural change |
See the org-wide CONTRIBUTING.md.
MIT © 2025 Vortex Protocol Contributors