diff --git a/apps/mobile/.env.example b/apps/mobile/.env.example
index f4f974a9..56cacea1 100644
--- a/apps/mobile/.env.example
+++ b/apps/mobile/.env.example
@@ -22,4 +22,12 @@ EXPO_PUBLIC_DYNAMIC_API_KEY="DYNAMIC_API_KEY"
EXPO_PUBLIC_LAYERSWAP_CLIENT_ID=""
EXPO_PUBLIC_LAYERSWAP_API_KEY="API_KEY_LAYER_SWAP"
-EXPO_PUBLIC_GOOGLE_TAG_ID=
\ No newline at end of file
+EXPO_PUBLIC_GOOGLE_TAG_ID=
+
+
+# EKUBU API
+EXPO_PUBLIC_EKUBO_API="https://mainnet-api.ekubo.org"
+EXPO_PUBLIC_EKUBO_ROUTE_API="https://quoter-mainnet-api.ekubo.org"
+
+# AVNU API
+EXPO_PUBLIC_AVNU_API="https://starknet.api.avnu.fi"
\ No newline at end of file
diff --git a/apps/mobile/package.json b/apps/mobile/package.json
index 00808c10..7b8233f7 100644
--- a/apps/mobile/package.json
+++ b/apps/mobile/package.json
@@ -2,7 +2,7 @@
"name": "mobile",
"version": "1.0.0",
"main": "index.js",
- "packageManager": "pnpm@8.15.9",
+ "packageManager": "pnpm@8.15.9",
"scripts": {
"dev": "expo start",
"build:web": "npx expo export --platform web",
@@ -10,10 +10,10 @@
"start:tunnel": "expo start --tunnel",
"android": "expo run:android",
"build:android": "expo build:android",
- "build:android:eas":"eas build -p android",
+ "build:android:eas": "eas build -p android",
"ios": "expo run:ios",
"build:ios": "expo build:ios",
- "build:ios:eas":"eas build -p ios",
+ "build:ios:eas": "eas build -p ios",
"web": "expo start --web",
"postinstall": "patch-package",
"format": "prettier --write \"src/**/*.{ts,tsx}\"",
@@ -75,6 +75,7 @@
"expo": "~51.0.28",
"expo-application": "^5.9.1",
"expo-auth-session": "^5.5.2",
+ "expo-av": "~14.0.7",
"expo-camera": "^15.0.16",
"expo-clipboard": "~6.0.3",
"expo-constants": "^16.0.2",
@@ -146,4 +147,4 @@
"typescript": "~5.3.3"
},
"private": true
-}
\ No newline at end of file
+}
diff --git a/apps/mobile/patches/@reown__appkit-siwe-react-native@1.0.0.patch b/apps/mobile/patches/@reown__appkit-siwe-react-native@1.0.0.patch
deleted file mode 100644
index 8b1044b7..00000000
Binary files a/apps/mobile/patches/@reown__appkit-siwe-react-native@1.0.0.patch and /dev/null differ
diff --git a/apps/mobile/src/app/Router.tsx b/apps/mobile/src/app/Router.tsx
index 9668c8d9..5016ffd2 100644
--- a/apps/mobile/src/app/Router.tsx
+++ b/apps/mobile/src/app/Router.tsx
@@ -15,6 +15,8 @@ import GroupChatGroupRequest from '../modules/Group/memberAction/ViewRequest';
import GroupChat from '../modules/Group/message/GroupMessage';
import AuthSidebar from '../modules/Layout/auth-sidebar';
import Sidebar from '../modules/Layout/sidebar';
+import RightSidebar from '../modules/Layout/RightSideBar';
+import ShortVideosModule from '../modules/ShortVideos';
// import RightSidebar from '../modules/Layout/RightSideBar';
// Components
@@ -305,6 +307,8 @@ const MainNavigator: React.FC = () => {
+
+
);
diff --git a/apps/mobile/src/app/Wrapper.tsx b/apps/mobile/src/app/Wrapper.tsx
index c4b3b7b9..0665036c 100644
--- a/apps/mobile/src/app/Wrapper.tsx
+++ b/apps/mobile/src/app/Wrapper.tsx
@@ -22,6 +22,7 @@ import {EVMProvider} from './EVMProvider';
import {WalletModalEVMProvider} from '../context/WalletModalEvmProvider';
import {CashuProvider} from '../providers/CashuProvider';
import {dynamicClient} from './DynamicClient';
+import {SwapModalEVMProvider} from '../context/SwapModalProvider';
const queryClient = new QueryClient({
defaultOptions: {queries: {retry: 2}},
@@ -31,19 +32,21 @@ const ModalProviders = ({children}: {children: React.ReactNode}) => {
return (
-
-
-
-
-
-
- {children}
-
-
-
-
-
-
+
+
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
);
diff --git a/apps/mobile/src/components/NostrVideo/index.tsx b/apps/mobile/src/components/NostrVideo/index.tsx
new file mode 100644
index 00000000..f2f5e813
--- /dev/null
+++ b/apps/mobile/src/components/NostrVideo/index.tsx
@@ -0,0 +1,80 @@
+import {NostrEvent} from '@nostr-dev-kit/ndk';
+import {ResizeMode, Video} from 'expo-av';
+import React, {useEffect, useState} from 'react';
+import {Pressable, TouchableOpacity, View} from 'react-native';
+
+import {BookmarkIcon, LikeIcon, RepostIcon} from '../../assets/icons';
+import {useStyles} from '../../hooks';
+import stylesheet from './styles';
+
+const NostrVideo = ({item, shouldPlay}: {shouldPlay: boolean; item: NostrEvent}) => {
+ const video = React.useRef