diff --git a/content/evm/_meta.js b/content/evm/_meta.js
index fe7b1f5a..8905aa7c 100644
--- a/content/evm/_meta.js
+++ b/content/evm/_meta.js
@@ -27,6 +27,7 @@ export default {
title: 'Sei Global Wallet'
},
'building-a-frontend': 'Building a Frontend',
+ 'in-app-swaps': 'In-App Swaps',
'-- Smart Contracts': {
type: 'separator',
diff --git a/content/evm/in-app-swaps.mdx b/content/evm/in-app-swaps.mdx
new file mode 100644
index 00000000..85d72121
--- /dev/null
+++ b/content/evm/in-app-swaps.mdx
@@ -0,0 +1,213 @@
+---
+title: 'In-App Swaps - Symphony Integration Guide'
+description: 'Guide to integrating the Symphony swap widget into your Sei application for seamless token exchanges.'
+keywords: ['swap widget', 'in-app swaps', 'token exchange', 'dex integration', 'symphony']
+---
+
+import { Callout, Tabs } from 'nextra/components';
+
+# In-App Swaps Integration Guide
+
+Integrating in-app swap functionality into your Sei application enables users to exchange tokens directly within your platform, enhancing user experience and engagement.
+
+## Overview
+
+Swap widgets are embeddable UI components that abstract the complexity of interacting with decentralized exchanges (DEXs) and liquidity aggregators. They provide:
+
+- **Seamless UX**: Users can swap tokens without leaving your app
+- **Reduced Friction**: No need to redirect users to external DEX interfaces
+- **Revenue Opportunities**: Many providers offer fee-sharing mechanisms
+- **Cross-Chain Support**: Some widgets enable bridging assets from other chains
+
+## Symphony Swap Widget
+
+[Symphony](https://symph.ag) is a native DEX aggregator on Sei, offering the simplest integration via iframe embedding.
+
+### Quick Start
+
+```html
+
+```
+
+### Live Demo
+
+
+
+
+
+### Size Requirements
+
+- **Minimum Width**: `377px`
+- **Minimum Height**: `650px` (recommended to prevent wallet modal scrolling)
+- **Optimal Height**: `680-685px`
+
+### URL Parameters
+
+Customize the widget by appending query parameters:
+
+#### Token Selection
+
+| Parameter | Description | Example |
+| ---------- | ----------------------------- | ----------------------------------------------------- |
+| `tokenIn` | Input token contract address | `tokenIn=0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392` |
+| `tokenOut` | Output token contract address | `tokenOut=0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7` |
+
+Tokens can be changed by the user after the widget loads.
+
+#### Appearance
+
+| Parameter | Description | Supported Formats |
+| --------- | ------------------------- | -------------------------------------------------------------------------------------------- |
+| `bgColor` | Background color | Hex (`%23FFFFFF`), Named (`white`), RGB (`rgb(255,255,255)`), RGBA (`rgba(255,255,255,0.9)`) |
+| `theme` | Color theme of the widget | `light` or `dark` (defaults to `dark` if not specified) |
+
+For hex colors, use `%23` instead of `#` in the URL (e.g., `%23FFFFFF` for white).
+
+#### Features
+
+| Parameter | Description | Values |
+| --------------- | ---------------------------- | --------------------------- |
+| `notifications` | Show/hide notification cards | `true` (default) or `false` |
+
+### Complete Example
+
+
+
+```html
+
+```
+
+
+```jsx
+function SwapWidget() {
+ const tokenIn = "0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392";
+ const tokenOut = "0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7";
+
+ return (
+
+ );
+}
+```
+
+
+```tsx
+'use client';
+
+export default function SwapPage() {
+ const params = new URLSearchParams({
+ tokenIn: '0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392',
+ tokenOut: '0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7',
+ theme: 'dark',
+ notifications: 'true'
+ });
+
+return (
+
+
+
+
+); }
+
+````
+
+
+
+### Popular Sei Token Addresses (Mainnet)
+
+| Token | Address |
+| ------------- | ------------------------------------------------------------------------------------------------------------------------ |
+| WSEI | [`0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7`](https://seiscan.io/address/0xE30feDd158A2e3b13e9badaeABaFc5516e95e8C7) |
+| USDC (native) | [`0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392`](https://seiscan.io/address/0xe15fC38F6D8c56aF07bbCBe3BAf5708A2Bf42392) |
+| USDT0 | [`0x9151434b16b9763660705744891fA906F660EcC5`](https://seiscan.io/address/0x9151434b16b9763660705744891fA906F660EcC5) |
+
+---
+
+## Best Practices
+
+### Security Considerations
+
+
+**Security Checklist**
+
+- ✅ Validate that iframe sources match official domains
+- ✅ Implement Content Security Policy (CSP) headers
+
+
+### Performance Optimization
+
+```tsx
+// Lazy load swap widgets to improve initial page load
+import dynamic from 'next/dynamic';
+
+const SwapWidget = dynamic(() => import('./SwapWidget'), {
+ loading: () => ,
+ ssr: false
+});
+````
+
+### Responsive Design
+
+```css
+/* Ensure swap widgets are responsive */
+.swap-container {
+ width: 100%;
+ max-width: 420px;
+ margin: 0 auto;
+}
+
+.swap-container iframe {
+ width: 100%;
+ min-height: 650px;
+ border: none;
+ border-radius: 12px;
+}
+
+@media (max-width: 480px) {
+ .swap-container {
+ max-width: 100%;
+ padding: 0 16px;
+ }
+}
+```
+
+### Error Handling
+
+```tsx
+import { useState } from 'react';
+
+function SwapWidgetWithFallback() {
+ const [error, setError] = useState(false);
+
+ if (error) {
+ return (
+
+ );
+ }
+
+ return