diff --git a/frontend/package.json b/frontend/package.json index 12853e0..4f1ee79 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,8 +3,8 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --webpack", - "build": "NEXT_PRIVATE_SKIP_TURBO=1 next build", + "dev": "next dev", + "build": "next build", "start": "next start", "lint": "next lint" }, @@ -34,7 +34,6 @@ "next": "16.0.3", "react": "19.2.0", "react-dom": "19.2.0", - "react-dropzone": "^14.3.8", "react-hot-toast": "^2.6.0", "recharts": "^3.4.1", "sonner": "^2.0.7", @@ -52,8 +51,6 @@ "babel-plugin-react-compiler": "1.0.0", "eslint": "^9", "eslint-config-next": "16.0.3", - "ignore-loader": "^0.1.2", - "null-loader": "^4.0.1", "tailwindcss": "^4", "typescript": "^5" } diff --git a/frontend/public/elijahblds_2D_BAYC-style_NFT_illustration_of_a_green_alien_DJ_a8dfdfdd-6690-4fb0-87b7-0f6d29b7b90a_2.png b/frontend/public/elijahblds_2D_BAYC-style_NFT_illustration_of_a_green_alien_DJ_a8dfdfdd-6690-4fb0-87b7-0f6d29b7b90a_2.png new file mode 100644 index 0000000..9fac093 Binary files /dev/null and b/frontend/public/elijahblds_2D_BAYC-style_NFT_illustration_of_a_green_alien_DJ_a8dfdfdd-6690-4fb0-87b7-0f6d29b7b90a_2.png differ diff --git a/frontend/public/nft-images/4850.sp3ow1.192x192.png b/frontend/public/nft-images/4850.sp3ow1.192x192.png new file mode 100644 index 0000000..50ce920 Binary files /dev/null and b/frontend/public/nft-images/4850.sp3ow1.192x192.png differ diff --git a/frontend/public/nft-images/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png b/frontend/public/nft-images/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png new file mode 100644 index 0000000..75b4cb6 Binary files /dev/null and b/frontend/public/nft-images/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png differ diff --git a/frontend/public/nft-images/MetaMask-icon-fox.svg b/frontend/public/nft-images/MetaMask-icon-fox.svg new file mode 100644 index 0000000..66cbc40 --- /dev/null +++ b/frontend/public/nft-images/MetaMask-icon-fox.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/frontend/public/nft-images/X_logo_2023_(white).svg.png b/frontend/public/nft-images/X_logo_2023_(white).svg.png new file mode 100644 index 0000000..fc902f9 Binary files /dev/null and b/frontend/public/nft-images/X_logo_2023_(white).svg.png differ diff --git a/frontend/public/nft-images/discord-white-icon.webp b/frontend/public/nft-images/discord-white-icon.webp new file mode 100644 index 0000000..783b4b5 Binary files /dev/null and b/frontend/public/nft-images/discord-white-icon.webp differ diff --git a/frontend/public/nft-images/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png b/frontend/public/nft-images/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png new file mode 100644 index 0000000..cd8fc68 Binary files /dev/null and b/frontend/public/nft-images/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png differ diff --git a/frontend/public/profile-logos/4850.sp3ow1.192x192.png b/frontend/public/profile-logos/4850.sp3ow1.192x192.png new file mode 100644 index 0000000..50ce920 Binary files /dev/null and b/frontend/public/profile-logos/4850.sp3ow1.192x192.png differ diff --git a/frontend/public/profile-logos/4850.sp3ow1.192x192.webp b/frontend/public/profile-logos/4850.sp3ow1.192x192.webp new file mode 100644 index 0000000..2504abc Binary files /dev/null and b/frontend/public/profile-logos/4850.sp3ow1.192x192.webp differ diff --git a/frontend/public/profile-logos/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png b/frontend/public/profile-logos/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png new file mode 100644 index 0000000..75b4cb6 Binary files /dev/null and b/frontend/public/profile-logos/515591D7-FD6F-4C0B-B5F6-AEB092D452F1.png differ diff --git a/frontend/public/profile-logos/MetaMask-icon-fox.svg b/frontend/public/profile-logos/MetaMask-icon-fox.svg new file mode 100644 index 0000000..66cbc40 --- /dev/null +++ b/frontend/public/profile-logos/MetaMask-icon-fox.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/frontend/public/profile-logos/X_logo_2023_(white).svg.png b/frontend/public/profile-logos/X_logo_2023_(white).svg.png new file mode 100644 index 0000000..fc902f9 Binary files /dev/null and b/frontend/public/profile-logos/X_logo_2023_(white).svg.png differ diff --git a/frontend/public/profile-logos/discord-white-icon.png b/frontend/public/profile-logos/discord-white-icon.png new file mode 100644 index 0000000..0ab61b3 Binary files /dev/null and b/frontend/public/profile-logos/discord-white-icon.png differ diff --git a/frontend/public/profile-logos/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png b/frontend/public/profile-logos/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png new file mode 100644 index 0000000..cd8fc68 Binary files /dev/null and b/frontend/public/profile-logos/elijahblds_Create_a_1600900_NFT_Art_2D_render_in_the_Bored_Ap_1ae416d8-4a95-4d9d-9f1a-b8275bff1d1e_1.png differ diff --git a/frontend/src/app/create/page.tsx b/frontend/src/app/create/page.tsx index 221b2bd..9f3ee67 100644 --- a/frontend/src/app/create/page.tsx +++ b/frontend/src/app/create/page.tsx @@ -624,7 +624,7 @@ export default function CreatePage() { placeholder="Search for or create an IP to remix (e.g. Spinning Cat)" value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} - className="pl-10 h-10 bg-zinc-900 border border-zinc-800 rounded-lg focus:ring-2 focus:ring-sovry-green focus:border-transparent" + className="pl-10 h-10 bg-zinc-900 border border-zinc-800 rounded-lg focus:ring-2 focus:ring-sovry-crimson focus:border-transparent" /> {/* Category Pills */} @@ -638,9 +638,9 @@ export default function CreatePage() { {/* Hero */}
-
- - Create & Launch IP Tokens +
+ + Create & Launch IP Tokens

Turn Your IP Into a Liquid Asset @@ -663,7 +663,7 @@ export default function CreatePage() { {success && (
- + {success}
@@ -672,7 +672,7 @@ export default function CreatePage() { {/* Trending IPs Section */}
- +

Trending IPs

{trendingLoading ? ( @@ -740,15 +740,15 @@ export default function CreatePage() { {/* IP Assets List */}
-
- +
+

Your IP Assets

{loading ? (
- + Fetching IP assets...
) : displayIPAssets.length === 0 ? ( @@ -768,7 +768,7 @@ export default function CreatePage() { key={ipAsset.ipId} className={`p-4 bg-zinc-900/50 backdrop-blur-sm border rounded-xl cursor-pointer transition-all duration-300 relative ${ selectedIP === ipAsset.ipId - ? "border-sovry-green/50 bg-sovry-green/10" + ? "border-sovry-crimson/50 bg-sovry-crimson/10" : "border-zinc-800 hover:border-sovry-pink/50 hover:bg-sovry-pink/5 hover:scale-105 hover:shadow-xl hover:shadow-sovry-pink/30" }`} onClick={() => setSelectedIP(ipAsset.ipId)} @@ -807,8 +807,8 @@ export default function CreatePage() {

{ipAsset.name}

{hasTokens && ( -
- Ready +
+ Ready
)}
@@ -822,16 +822,16 @@ export default function CreatePage() {
-
- +
+
{tokenBalance.balance} {tokenBalance.symbol}
{hasTokens ? ( -
- Available +
+ Available
) : (
@@ -853,8 +853,8 @@ export default function CreatePage() { {/* Create / Launch Form (only launch existing IP assets) */}
-
- +
+

Launch Existing IP

@@ -907,15 +907,15 @@ export default function CreatePage() {

{ipAsset.name}

{hasTokens && ( -
- Ready +
+ Ready
)}

{ipAsset.description}

{tokenBalance && (
- + {tokenBalance.balance} {tokenBalance.symbol} @@ -938,8 +938,8 @@ export default function CreatePage() { {/* Selected IP + Launch */} {selectedIPAsset ? (
-
-

Selected IP Asset

+
+

Selected IP Asset

{/* IP Image Preview */} {selectedIPAsset.imageUrl && ( @@ -947,7 +947,7 @@ export default function CreatePage() { {selectedIPAsset.name} { const target = e.target as HTMLImageElement; target.style.display = "none"; @@ -956,7 +956,7 @@ export default function CreatePage() {
)}
-

{selectedIPAsset.name}

+

{selectedIPAsset.name}

Royalty Token: {selectedIPAsset.royaltyVaultAddress.slice(0, 10)}...

@@ -969,8 +969,8 @@ export default function CreatePage() {
-
-

Story Protocol Pair Details

+
+

Story Protocol Pair Details

Royalty Token + WIP pair on SovryRouter will be created automatically when this launch graduates to the DEX. @@ -978,10 +978,10 @@ export default function CreatePage() {

-
+
- -

Launch on SovryLaunchpad

+ +

Launch on SovryLaunchpad

Launch your royalty token on a bonding curve. No need to provide initial IP liquidity – SovryLaunchpad @@ -1025,7 +1025,7 @@ export default function CreatePage() { }} /> {launchLogoFile && ( -

+
Custom Upload
)} @@ -1173,41 +1173,41 @@ export default function CreatePage() {
1. - + IP Asset Registered (from Story Protocol)
2. {needsUnlock ? ( unlockingTokens === selectedIPAsset.ipId ? ( - + ) : ( - + ) ) : ( - + )} Minting Royalty Tokens / unlock token
3. {creatingPool === selectedIPAsset.ipId && launchStep === 3 ? ( - + ) : launchStep !== null && launchStep > 3 ? ( - + ) : ( - + )} Approving Launchpad...
4. {creatingPool === selectedIPAsset.ipId && launchStep === 4 ? ( - + ) : launchStep !== null && launchStep >= 4 ? ( - + ) : ( - + )} Launching Market... @@ -1233,7 +1233,7 @@ export default function CreatePage() { href="https://story.foundation/" target="_blank" rel="noopener noreferrer" - className="inline-flex items-center gap-2 text-sovry-green hover:text-sovry-green/80 hover:underline transition-colors" + className="inline-flex items-center gap-2 text-sovry-crimson hover:text-sovry-crimson/80 hover:underline transition-colors" > Don't see your IP? Register an IP now. diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index fc4e733..4e58be0 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -11,9 +11,9 @@ --card-foreground: #FAFAFA; --popover: #18181B; --popover-foreground: #FAFAFA; - /* Primary/Buy - Toxic Green (#39FF14) */ - --primary: #39FF14; - --primary-foreground: #09090B; + /* Primary/Buy - Crimson (#DC143C) */ + --primary: #DC143C; + --primary-foreground: #FAFAFA; /* Secondary/Sell - Hot Pink (#FF10F0) */ --secondary: #FF10F0; --secondary-foreground: #FAFAFA; @@ -21,9 +21,9 @@ --muted: #18181B; /* Text Muted - Ash Grey (#A1A1AA / zinc-400) */ --muted-foreground: #A1A1AA; - /* Accent uses primary (Toxic Green) */ - --accent: #39FF14; - --accent-foreground: #09090B; + /* Accent uses primary (Crimson) */ + --accent: #DC143C; + --accent-foreground: #FAFAFA; /* Destructive uses secondary (Hot Pink) */ --destructive: #FF10F0; --destructive-foreground: #FAFAFA; @@ -31,8 +31,8 @@ --border: #27272A; /* Input uses surface (Gunmetal) */ --input: #18181B; - /* Ring uses primary (Toxic Green) */ - --ring: #39FF14; + /* Ring uses primary (Crimson) */ + --ring: #DC143C; --radius: 0.625rem; } @@ -44,19 +44,19 @@ --card-foreground: #FAFAFA; --popover: #18181B; --popover-foreground: #FAFAFA; - --primary: #39FF14; - --primary-foreground: #09090B; + --primary: #DC143C; + --primary-foreground: #FAFAFA; --secondary: #FF10F0; --secondary-foreground: #FAFAFA; --muted: #18181B; --muted-foreground: #A1A1AA; - --accent: #39FF14; - --accent-foreground: #09090B; + --accent: #DC143C; + --accent-foreground: #FAFAFA; --destructive: #FF10F0; --destructive-foreground: #FAFAFA; --border: #27272A; --input: #18181B; - --ring: #39FF14; + --ring: #DC143C; --radius: 0.5rem; } @@ -83,13 +83,13 @@ /* Sovry Custom Colors */ --color-void-black: #09090B; --color-gunmetal: #18181B; - --color-toxic-green: #39FF14; + --color-crimson: #DC143C; --color-hot-pink: #FF10F0; --color-hologram-white: #FAFAFA; --color-ash-grey: #A1A1AA; --color-deep-zinc: #27272A; /* Sovry Style Guide Colors - Utility Classes */ - --color-sovry-green: #39FF14; + --color-sovry-crimson: #DC143C; --color-sovry-pink: #FF10F0; --radius-sm: calc(var(--radius) - 4px); --radius-md: calc(var(--radius) - 2px); @@ -117,9 +117,9 @@ @apply bg-input/90 backdrop-blur-sm border border-border rounded-lg px-4 py-3 text-foreground placeholder-muted-foreground/60 focus:outline-none focus:ring-2 focus:ring-accent/70 focus:border-accent/50 focus:bg-input transition-all duration-200; } - /* Buy button - Sovry Green (Primary Action) */ + /* Buy button - Sovry Crimson (Primary Action) */ .buy-button { - @apply bg-sovry-green hover:bg-sovry-green/90 text-black font-bold uppercase tracking-wide rounded-lg py-3 px-6 transition-colors; + @apply bg-sovry-crimson hover:bg-sovry-crimson/90 text-white font-bold uppercase tracking-wide rounded-lg py-3 px-6 transition-colors; } /* Sell button - Sovry Pink (Destructive Action) */ @@ -127,14 +127,14 @@ @apply bg-sovry-pink hover:bg-sovry-pink/90 text-white font-bold uppercase tracking-wide rounded-lg py-3 px-6 transition-colors; } - /* Enhanced accent-button with Toxic Green */ + /* Enhanced accent-button with Crimson */ .accent-button { - @apply bg-gradient-to-r from-[#39FF14] via-[#39FF14] to-[#39FF14]/90 hover:from-[#39FF14]/95 hover:to-[#39FF14]/80 text-[#09090B] font-semibold rounded-lg py-3 px-6 transition-all duration-300 shadow-lg shadow-[#39FF14]/20 hover:shadow-xl hover:shadow-[#39FF14]/30 active:scale-95; + @apply bg-gradient-to-r from-[#DC143C] via-[#DC143C] to-[#DC143C]/90 hover:from-[#DC143C]/95 hover:to-[#DC143C]/80 text-white font-semibold rounded-lg py-3 px-6 transition-all duration-300 shadow-lg shadow-[#DC143C]/20 hover:shadow-xl hover:shadow-[#DC143C]/30 active:scale-95; } - /* Positive PnL / Up charts - Toxic Green */ + /* Positive PnL / Up charts - Crimson */ .positive-pnl { - @apply text-[#39FF14]; + @apply text-[#DC143C]; } /* Negative PnL / Down charts - Hot Pink */ @@ -142,9 +142,9 @@ @apply text-[#FF10F0]; } - /* Updated apy-badge with Toxic Green */ + /* Updated apy-badge with Crimson */ .apy-badge { - @apply inline-flex items-center gap-1 bg-[#39FF14]/25 text-[#39FF14] px-3 py-1 rounded-full text-xs font-medium border border-[#39FF14]/40; + @apply inline-flex items-center gap-1 bg-[#DC143C]/25 text-[#DC143C] px-3 py-1 rounded-full text-xs font-medium border border-[#DC143C]/40; } } @@ -174,4 +174,20 @@ transform: translateY(0); } } + + /* Float animation for wallet logos */ + @keyframes float { + 0%, 100% { + transform: translateY(0px) scale(1); + opacity: 0.2; + } + 50% { + transform: translateY(-10px) scale(1.1); + opacity: 0.4; + } + } + + .animate-float { + animation: float 3s ease-in-out infinite; + } } diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index bc72d50..78d805f 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -10,6 +10,11 @@ const inter = Inter({ subsets: ["latin"] }); export const metadata: Metadata = { title: "Sovry - IP Asset Trading Platform", description: "Trade intellectual property assets on Story Protocol", + viewport: { + width: "device-width", + initialScale: 1, + maximumScale: 5, + }, }; export default function RootLayout({ @@ -24,9 +29,7 @@ export default function RootLayout({
-
- {children} -
+ {children}
diff --git a/frontend/src/app/page.tsx b/frontend/src/app/page.tsx index 96bc344..d5fd5b7 100644 --- a/frontend/src/app/page.tsx +++ b/frontend/src/app/page.tsx @@ -168,7 +168,7 @@ function LatestLaunchesSection() {
-

@@ -190,7 +190,7 @@ function LatestLaunchesSection() { @@ -446,7 +446,7 @@ export default function Home() { {/* Discovery Section */} -

+
{/* Search and Filters */}
@@ -475,7 +475,7 @@ export default function Home() { {isLoading ? (
-
+
{loading ? "Loading launches..." : "Enriching launch data..."} diff --git a/frontend/src/app/pool/[address]/layout.tsx b/frontend/src/app/pool/[address]/layout.tsx index 9fbcdb4..f5c697c 100644 --- a/frontend/src/app/pool/[address]/layout.tsx +++ b/frontend/src/app/pool/[address]/layout.tsx @@ -65,3 +65,5 @@ export default function TokenDetailLayout({ + + diff --git a/frontend/src/app/portfolio/page.tsx b/frontend/src/app/portfolio/page.tsx index e054281..ad6370c 100644 --- a/frontend/src/app/portfolio/page.tsx +++ b/frontend/src/app/portfolio/page.tsx @@ -143,7 +143,7 @@ export default function PortfolioPage() {

Net Worth

${calculateNetWorth().toFixed(2)}

- +
@@ -155,7 +155,7 @@ export default function PortfolioPage() {

Total Holdings

{assets.length}

- +
@@ -177,7 +177,7 @@ export default function PortfolioPage() { {loading ? ( - +

Loading your holdings...

@@ -197,7 +197,7 @@ export default function PortfolioPage() { ) : (
{assets.map((asset) => ( - +
{asset.image && ( @@ -225,7 +225,7 @@ export default function PortfolioPage() {
APY - {asset.apy} + {asset.apy}
{asset.claimableRevenue > 0 && (
diff --git a/frontend/src/app/profile/page.tsx b/frontend/src/app/profile/page.tsx index f317932..7c28510 100644 --- a/frontend/src/app/profile/page.tsx +++ b/frontend/src/app/profile/page.tsx @@ -4,6 +4,7 @@ import { useState, useEffect } from "react"; import { useDynamicContext } from "@dynamic-labs/sdk-react-core"; import { ethers } from "ethers"; import { useSearchParams } from "next/navigation"; +import Image from "next/image"; import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; @@ -17,7 +18,6 @@ import { fetchWalletIPAssets } from "@/services/storyProtocolService"; import UserProfile from "@/components/social/UserProfile"; import { - DollarSign, TrendingUp, Gift, CheckCircle, @@ -43,60 +43,70 @@ interface PortfolioAsset { const MOCK_ASSETS: PortfolioAsset[] = [ { - id: "1", - symbol: "rMUSIC", - name: "Music Royalties", - image: - "https://ttmbengqanqzfrkjajgk.supabase.co/storage/v1/object/public/images/pack-art/20874abc-latinpack.jpg", + id: "template-1", + symbol: "MEME", + name: "Dank Meme Token", + image: "/nft-images/0_1WJiB8mUJKcylomi.jpg", balance: 1250.5, - valueUSD: 1563.12, + valueUSD: 1250.0, claimableRevenue: 45.8, apy: "15.8%", - category: "Music", + category: "Meme", }, { - id: "2", - symbol: "rART", - name: "Art Royalties", - image: "https://cdn.pixabay.com/photo/2024/02/28/07/42/easter-8601492_640.jpg", + id: "template-2", + symbol: "AIAG", + name: "AI Agent Protocol", + image: "/nft-images/045A39D6-3381-473C-A1F1-FD9AE6408087.png", balance: 890.25, - valueUSD: 1112.81, + valueUSD: 890.0, claimableRevenue: 28.45, apy: "12.3%", - category: "Art", + category: "AI Agent", }, { - id: "3", - symbol: "rGAME", - name: "Game Royalties", - image: "https://cdn.pixabay.com/photo/2024/01/25/10/38/minecraft-8532000_640.png", + id: "template-3", + symbol: "GAME", + name: "GameFi Universe", + image: "/nft-images/65217fd9e31608b8b6814492_-9ojwcB1tqVmdclia_Sx-oevPA3tjR3E4Y4Qtywk7fp90800zZijuZNz7dsIGPdmsNlpnfq3l1ayZSh1qWraCQqpIuIcNpEuRBg9tW96irdFURf6DDqWgjZ2EKAbqng6wgyhmrxb5fPt20yMRrWwpcg.png", balance: 2100.0, - valueUSD: 1365.0, + valueUSD: 1560.0, claimableRevenue: 67.2, apy: "18.2%", category: "Gaming", }, { - id: "4", - symbol: "$WIP", - name: "Wrapped IP Token", - image: "https://cdn.pixabay.com/photo/2024/01/25/10/38/minecraft-8532000_640.png", - balance: 5000.0, - valueUSD: 5000.0, - claimableRevenue: 0, - apy: "0%", - category: "Base Token", + id: "template-4", + symbol: "MUSIC", + name: "Sound Waves NFT", + image: "/nft-images/809E1643-B14A-4377-8A71-A17DB8C014C8.png", + balance: 980.0, + valueUSD: 980.0, + claimableRevenue: 32.1, + apy: "14.5%", + category: "Music", }, { - id: "5", - symbol: "rPHOTO", - name: "Photography Royalties", - image: "https://cdn.pixabay.com/photo/2024/02/28/07/42/easter-8601492_640.jpg", - balance: 450.75, - valueUSD: 563.44, - claimableRevenue: 12.3, - apy: "8.7%", - category: "Photography", + id: "template-5", + symbol: "ART", + name: "Digital Canvas", + image: "/nft-images/Creep.png", + balance: 2030.0, + valueUSD: 2030.0, + claimableRevenue: 89.5, + apy: "16.2%", + category: "Art", + }, + { + id: "template-6", + symbol: "MEME2", + name: "Viral Token", + image: "/nft-images/NFT-creators-money-meme.jpg", + balance: 670.0, + valueUSD: 670.0, + claimableRevenue: 18.3, + apy: "10.8%", + category: "Meme", }, ]; @@ -151,7 +161,7 @@ const formatDate = (timestamp: string) => { }; export default function ProfilePage() { - const { primaryWallet } = useDynamicContext(); + const { primaryWallet, setShowAuthFlow } = useDynamicContext(); const isConnected = !!primaryWallet; const walletAddress = primaryWallet?.address; @@ -184,37 +194,19 @@ export default function ProfilePage() { const [liquidityError, setLiquidityError] = useState(""); const [liquiditySuccess, setLiquiditySuccess] = useState(""); - // Load holdings (mock) + // Load holdings (mock - for hackathon demo) useEffect(() => { const loadHoldings = async () => { - if (!walletAddress) { - setAssets([]); - setHoldingsLoading(false); - return; - } - + // For hackathon demo, always show placeholder data + setHoldingsLoading(true); try { - const ipAssets = await fetchWalletIPAssets(walletAddress, primaryWallet); - - if (ipAssets && ipAssets.length > 0) { - const mappedAssets: PortfolioAsset[] = ipAssets.map((asset) => ({ - id: asset.ipId, - symbol: "RT", - name: asset.name, - image: asset.imageUrl, - balance: 0, - valueUSD: 0, - claimableRevenue: 0, - apy: "0%", - category: "IP", - })); - - setAssets(mappedAssets); - } else { - setAssets([]); - } + // Simulate loading delay + await new Promise((resolve) => setTimeout(resolve, 500)); + + // Always use mock assets for demo + setAssets(MOCK_ASSETS); } catch (error) { - console.error("Error loading holdings from Story Protocol:", error); + console.error("Error loading holdings:", error); setAssets(MOCK_ASSETS); } finally { setHoldingsLoading(false); @@ -293,11 +285,24 @@ export default function ProfilePage() { return ( <>
-
+
+ Hero banner +
-
- {getInitials()} +
+ Profile picture
@@ -327,7 +332,7 @@ export default function ProfilePage() {
Claimable rewards
-
+
{new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", @@ -344,6 +349,72 @@ export default function ProfilePage() {
+ + {/* Connect Buttons */} +
+ + + + + +
@@ -357,7 +428,7 @@ export default function ProfilePage() { {holdingsLoading ? (
- +

Loading your holdings...

) : ( @@ -377,19 +448,18 @@ export default function ProfilePage() { Total value of all your IP assets

-
{/* Claim All */} - +
- +

Available to Claim

-

+

{new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", @@ -417,8 +487,8 @@ export default function ProfilePage() { {lastClaimTime && ( - - + + Successfully claimed rewards at {lastClaimTime.toLocaleTimeString()} @@ -431,7 +501,7 @@ export default function ProfilePage() { - + My Assets @@ -489,7 +559,7 @@ export default function ProfilePage() { {asset.claimableRevenue > 0 ? ( - + {new Intl.NumberFormat("en-US", { style: "currency", currency: "USD", @@ -500,7 +570,7 @@ export default function ProfilePage() { )} - + {asset.apy} @@ -545,14 +615,14 @@ export default function ProfilePage() { - + Your Liquidity Pools {poolsLoading ? (

- + Loading your pools...
) : poolsError ? ( @@ -569,21 +639,21 @@ export default function ProfilePage() { {userPools.map((pool) => (
-
- +
+

{pool.token0?.symbol ?? "UNKNOWN"} / {pool.token1?.symbol ?? "UNKNOWN"}

- - Active + + Active
@@ -600,7 +670,7 @@ export default function ProfilePage() {
Volume USD - + ${formatNumber(pool.volumeUSD)}
@@ -612,7 +682,7 @@ export default function ProfilePage() {
Your Share - + {pool.userLpPercentage?.toFixed(2) || "0.00"}%
@@ -665,7 +735,7 @@ export default function ProfilePage() { - + Manage Liquidity {selectedPoolForLiquidity.token0.symbol}/ diff --git a/frontend/src/components/ErrorBoundary.tsx b/frontend/src/components/ErrorBoundary.tsx index ced739c..839b8f9 100644 --- a/frontend/src/components/ErrorBoundary.tsx +++ b/frontend/src/components/ErrorBoundary.tsx @@ -131,3 +131,5 @@ export class ErrorBoundary extends Component { } + + diff --git a/frontend/src/components/LaunchCard.tsx b/frontend/src/components/LaunchCard.tsx index f6b6579..4b14e9b 100644 --- a/frontend/src/components/LaunchCard.tsx +++ b/frontend/src/components/LaunchCard.tsx @@ -63,8 +63,8 @@ function LaunchCardComponent({