-
+
Latest Launches
@@ -190,7 +190,7 @@ function LatestLaunchesSection() {
View All
@@ -214,7 +214,7 @@ function LatestLaunchesSection() {
Retry
@@ -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 (
<>
-
+
+
+
-
- {getInitials()}
+
+
@@ -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 */}
+
+
{
+ if (setShowAuthFlow) {
+ setShowAuthFlow(true);
+ }
+ }}
+ className="flex items-center gap-2 bg-zinc-900/80 backdrop-blur-sm border border-zinc-800 hover:border-sovry-crimson/50 hover:bg-zinc-800/90 transition-all duration-300 group"
+ >
+
+ {/* Ghost icon */}
+
+ {/* MetaMask icon */}
+
+
+ Connect Wallet
+
+
+
{
+ // TODO: Implement X (Twitter) OAuth connection
+ console.log("Connect X clicked");
+ }}
+ className="flex items-center gap-2 bg-zinc-900/80 backdrop-blur-sm border border-zinc-800 hover:border-zinc-600 hover:bg-zinc-800/90 transition-all duration-300"
+ >
+
+ Connect X
+
+
+
{
+ // TODO: Implement Discord OAuth connection
+ console.log("Connect Discord clicked");
+ }}
+ className="flex items-center gap-2 bg-zinc-900/80 backdrop-blur-sm border border-zinc-800 hover:border-indigo-500/50 hover:bg-zinc-800/90 transition-all duration-300"
+ >
+
+ Connect Discord
+
+
@@ -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({
diff --git a/frontend/src/components/hero/ImmersiveHero.tsx b/frontend/src/components/hero/ImmersiveHero.tsx
index d5b0db6..89a63f9 100644
--- a/frontend/src/components/hero/ImmersiveHero.tsx
+++ b/frontend/src/components/hero/ImmersiveHero.tsx
@@ -51,7 +51,7 @@ export function ImmersiveHero() {
};
return (
-
+
{/* Background Image with Gradient Mask */}
{/* Gradient Overlays */}
@@ -60,11 +60,12 @@ export function ImmersiveHero() {
{/* Background Image - Using CSS background for better compatibility */}
@@ -77,7 +78,7 @@ export function ImmersiveHero() {
{/* Content */}
-
+
{/* Stats Badge */}
diff --git a/frontend/src/components/hero/TrendingFloat.tsx b/frontend/src/components/hero/TrendingFloat.tsx
index b2330b2..aa2c724 100644
--- a/frontend/src/components/hero/TrendingFloat.tsx
+++ b/frontend/src/components/hero/TrendingFloat.tsx
@@ -20,18 +20,18 @@ export function TrendingFloat({
marketCap = "$1.2M",
}: TrendingFloatProps) {
return (
-
+
-
+
{/* Header */}
{/* Asset Info */}
@@ -45,8 +45,8 @@ export function TrendingFloat({
/>
) : (
-
-
{assetSymbol[0]}
+
+ {assetSymbol[0]}
)}
@@ -67,7 +67,7 @@ export function TrendingFloat({
24h Change
-
= 0 ? 'text-sovry-green' : 'text-sovry-pink'}`}>
+
= 0 ? 'text-sovry-crimson' : 'text-sovry-pink'}`}>
{priceChange >= 0 ? '+' : ''}{priceChange}%
diff --git a/frontend/src/components/ip-metadata/IPMetadataForm.tsx b/frontend/src/components/ip-metadata/IPMetadataForm.tsx
index efdf3fc..8a5f80f 100644
--- a/frontend/src/components/ip-metadata/IPMetadataForm.tsx
+++ b/frontend/src/components/ip-metadata/IPMetadataForm.tsx
@@ -357,7 +357,7 @@ export default function IPMetadataForm({
-
+
Register IP on Story Protocol
@@ -365,14 +365,14 @@ export default function IPMetadataForm({
{/* Registration Status */}
{registrationStatus === 'uploading' && (
-
+
Uploading metadata to IPFS...
)}
{registrationStatus === 'registering' && (
-
+
Registering IP on Story Protocol...
)}
@@ -380,7 +380,7 @@ export default function IPMetadataForm({
{registrationStatus === 'confirming' && txHash && (
-
+
Waiting for transaction confirmation...
@@ -390,7 +390,7 @@ export default function IPMetadataForm({
href={`${BLOCK_EXPLORER_URL}${txHash}`}
target="_blank"
rel="noopener noreferrer"
- className="flex items-center gap-2 text-sm text-sovry-green hover:underline"
+ className="flex items-center gap-2 text-sm text-sovry-crimson hover:underline"
>
{txHash.slice(0, 10)}...{txHash.slice(-8)}
@@ -405,8 +405,8 @@ export default function IPMetadataForm({
{registrationStatus === 'success' && (
-
-
+
+
IP Registered Successfully!
@@ -426,7 +426,7 @@ export default function IPMetadataForm({
href={`${BLOCK_EXPLORER_URL}${txHash}`}
target="_blank"
rel="noopener noreferrer"
- className="flex items-center gap-2 text-sm text-sovry-green hover:underline"
+ className="flex items-center gap-2 text-sm text-sovry-crimson hover:underline"
>
{txHash.slice(0, 10)}...{txHash.slice(-8)}
@@ -452,7 +452,7 @@ export default function IPMetadataForm({
href={`${BLOCK_EXPLORER_URL}${txHash}`}
target="_blank"
rel="noopener noreferrer"
- className="flex items-center gap-2 text-sm text-sovry-green hover:underline"
+ className="flex items-center gap-2 text-sm text-sovry-crimson hover:underline"
>
{txHash.slice(0, 10)}...{txHash.slice(-8)}
@@ -496,7 +496,7 @@ export default function IPMetadataForm({
-
+
IP Metadata Collection
{enableRegistration && (
@@ -629,7 +629,7 @@ export default function IPMetadataForm({
className={cn(
"border-2 border-dashed rounded-lg p-8 text-center cursor-pointer transition-colors",
isDragActive
- ? "border-sovry-green bg-sovry-green/10"
+ ? "border-sovry-crimson bg-sovry-crimson/10"
: "border-zinc-700 hover:border-zinc-600 bg-zinc-900/50",
errors.image && "border-sovry-pink"
)}
@@ -637,7 +637,7 @@ export default function IPMetadataForm({
{isProcessingImage ? (
) : (
diff --git a/frontend/src/components/ip-metadata/index.ts b/frontend/src/components/ip-metadata/index.ts
index 15a8be4..bf5a7d6 100644
--- a/frontend/src/components/ip-metadata/index.ts
+++ b/frontend/src/components/ip-metadata/index.ts
@@ -1,3 +1,5 @@
export { default as IPMetadataForm } from "./IPMetadataForm";
export type { IPMetadataFormData, IPMetadataFormProps } from "./IPMetadataForm";
+
+
diff --git a/frontend/src/components/launch/LaunchCard.tsx b/frontend/src/components/launch/LaunchCard.tsx
index 9eb6495..b9bad12 100644
--- a/frontend/src/components/launch/LaunchCard.tsx
+++ b/frontend/src/components/launch/LaunchCard.tsx
@@ -27,7 +27,7 @@ export function LaunchCard({
return (
{clampedValue}%
@@ -89,8 +89,8 @@ export function RoyaltyConfiguration({
className={cn(
"flex-1 transition-all",
isPresetActive(preset)
- ? "bg-sovry-green text-black"
- : "border-zinc-700 hover:border-sovry-green/50"
+ ? "bg-sovry-crimson text-black"
+ : "border-zinc-700 hover:border-sovry-crimson/50"
)}
>
{preset}%
@@ -137,7 +137,7 @@ export function RoyaltyConfiguration({
Locked in Curve
-
+
{clampedValue}%
@@ -146,7 +146,7 @@ export function RoyaltyConfiguration({
initial={{ width: 0 }}
animate={{ width: `${clampedValue}%` }}
transition={{ duration: 0.5, ease: "easeOut" }}
- className="h-full bg-sovry-green rounded-full"
+ className="h-full bg-sovry-crimson rounded-full"
/>
diff --git a/frontend/src/components/marketplace/AssetCard.tsx b/frontend/src/components/marketplace/AssetCard.tsx
index b533ee9..e170759 100644
--- a/frontend/src/components/marketplace/AssetCard.tsx
+++ b/frontend/src/components/marketplace/AssetCard.tsx
@@ -27,10 +27,10 @@ interface AssetCardProps {
const categoryColors: Record
= {
Art: "bg-sovry-pink/10 text-sovry-pink border-sovry-pink/20",
Music: "bg-sovry-pink/10 text-sovry-pink border-sovry-pink/20",
- Gaming: "bg-sovry-green/10 text-sovry-green border-sovry-green/20",
+ Gaming: "bg-sovry-crimson/10 text-sovry-crimson border-sovry-crimson/20",
Photography: "bg-sovry-pink/10 text-sovry-pink border-sovry-pink/20",
- "3D Art": "bg-sovry-green/10 text-sovry-green border-sovry-green/20",
- "Commercial IP": "bg-sovry-green/10 text-sovry-green border-sovry-green/20",
+ "3D Art": "bg-sovry-crimson/10 text-sovry-crimson border-sovry-crimson/20",
+ "Commercial IP": "bg-sovry-crimson/10 text-sovry-crimson border-sovry-crimson/20",
"Personal IP": "bg-sovry-pink/10 text-sovry-pink border-sovry-pink/20",
"IP Asset": "bg-zinc-800/30 text-zinc-400 border-zinc-700",
};
@@ -65,10 +65,10 @@ export default function AssetCard({ launch }: AssetCardProps) {
return (
{/* Image Section - 16:9 Aspect Ratio */}
-
+
{launch.imageUrl || launch.ipId ? (
;
}
+
+
diff --git a/frontend/src/components/marketplace/CategoryPills.tsx b/frontend/src/components/marketplace/CategoryPills.tsx
index 3e5cea9..26c3c3a 100644
--- a/frontend/src/components/marketplace/CategoryPills.tsx
+++ b/frontend/src/components/marketplace/CategoryPills.tsx
@@ -32,7 +32,7 @@ export function CategoryPills({ selectedCategory, onCategoryChange }: CategoryPi
className={cn(
"cursor-pointer px-4 py-1.5 text-sm font-medium transition-all duration-200",
isActive
- ? "bg-sovry-green/20 text-sovry-green border-sovry-green/50 shadow-[0_0_12px_rgba(57,255,20,0.3)]"
+ ? "bg-sovry-crimson/20 text-sovry-crimson border-sovry-crimson/50 shadow-[0_0_12px_rgba(57,255,20,0.3)]"
: "bg-zinc-900/50 text-zinc-400 border-zinc-800 hover:border-zinc-700 hover:text-zinc-50"
)}
>
diff --git a/frontend/src/components/marketplace/RemixCount.tsx b/frontend/src/components/marketplace/RemixCount.tsx
index 7c1e3d8..f7261aa 100644
--- a/frontend/src/components/marketplace/RemixCount.tsx
+++ b/frontend/src/components/marketplace/RemixCount.tsx
@@ -17,3 +17,5 @@ export function RemixCount({ count, className }: RemixCountProps) {
);
}
+
+
diff --git a/frontend/src/components/notifications/TransactionNotification.tsx b/frontend/src/components/notifications/TransactionNotification.tsx
index dc1330d..a63e0e3 100644
--- a/frontend/src/components/notifications/TransactionNotification.tsx
+++ b/frontend/src/components/notifications/TransactionNotification.tsx
@@ -48,7 +48,7 @@ export function TransactionNotification({
className={cn(
"absolute z-50 px-3 py-2 rounded-lg",
"bg-zinc-900/90 backdrop-blur-sm border border-zinc-800",
- "text-sovry-green text-xs font-medium",
+ "text-sovry-crimson text-xs font-medium",
"shadow-lg shadow-black/50",
"transition-all duration-300",
isVisible && !isExiting ? "opacity-100 translate-y-0" : "opacity-0 translate-y-2"
@@ -57,7 +57,7 @@ export function TransactionNotification({
>
{isBuy ? (
-
+
) : (
)}
@@ -115,3 +115,5 @@ export function TransactionNotificationsContainer({
);
}
+
+
diff --git a/frontend/src/components/revenue/RevenueClaiming.tsx b/frontend/src/components/revenue/RevenueClaiming.tsx
index f7b7564..894dd4b 100644
--- a/frontend/src/components/revenue/RevenueClaiming.tsx
+++ b/frontend/src/components/revenue/RevenueClaiming.tsx
@@ -219,10 +219,10 @@ export function RevenueClaiming() {
-
+
Total Claimable
-
${totalClaimable.toLocaleString()}
+
${totalClaimable.toLocaleString()}
@@ -231,10 +231,10 @@ export function RevenueClaiming() {
-
+
Total Earned
-
${totalEarned.toLocaleString()}
+
${totalEarned.toLocaleString()}
@@ -270,7 +270,7 @@ export function RevenueClaiming() {
key={position.assetId}
className={`p-4 border rounded-lg cursor-pointer transition-colors ${
selectedAsset.id === position.assetId
- ? "border-sovry-green/50 bg-sovry-green/10"
+ ? "border-sovry-crimson/50 bg-sovry-crimson/10"
: "border-zinc-800 hover:border-zinc-700"
}`}
onClick={() => setSelectedAsset(IP_ASSETS.find(asset => asset.id === position.assetId) || IP_ASSETS[0])}
@@ -281,7 +281,7 @@ export function RevenueClaiming() {
{position.symbol} • {position.balance} tokens
-
${position.claimableRevenue}
+
${position.claimableRevenue}
claimable
@@ -296,7 +296,7 @@ export function RevenueClaiming() {
Revenue Rate:
- {selectedAsset.revenueRate}
+ {selectedAsset.revenueRate}
Total Revenue:
@@ -317,7 +317,7 @@ export function RevenueClaiming() {
)}
{success && (
-
+
{success}
)}
@@ -366,7 +366,7 @@ export function RevenueClaiming() {
{event.timestamp}
-
${event.amount}
+
${event.amount}
))}
@@ -375,12 +375,12 @@ export function RevenueClaiming() {
{/* Stats */}
-
-
Avg. Daily
+
+
Avg. Daily
${(totalEarned / 30).toFixed(2)}
-
-
This Month
+
+
This Month
${(totalEarned * 0.1).toFixed(2)}
@@ -397,8 +397,8 @@ export function RevenueClaiming() {
-
-
1
+
+ 1
Hold rIP Tokens
@@ -407,8 +407,8 @@ export function RevenueClaiming() {
-
-
2
+
+ 2
Revenue Accumulates
@@ -417,8 +417,8 @@ export function RevenueClaiming() {
-
-
3
+
+ 3
Claim Your Share
diff --git a/frontend/src/components/social/UserProfile.tsx b/frontend/src/components/social/UserProfile.tsx
index 3917e96..223bc16 100644
--- a/frontend/src/components/social/UserProfile.tsx
+++ b/frontend/src/components/social/UserProfile.tsx
@@ -144,7 +144,7 @@ const UserProfile = () => {
{saving ? "Saving..." : "Save Profile"}
{message && (
- {message}
+ {message}
)}
{error && (
{error}
diff --git a/frontend/src/components/swap/SwapInterface.tsx b/frontend/src/components/swap/SwapInterface.tsx
index 302da52..5ae57d9 100644
--- a/frontend/src/components/swap/SwapInterface.tsx
+++ b/frontend/src/components/swap/SwapInterface.tsx
@@ -586,14 +586,14 @@ export default function SwapInterface({
)}
{launchpadMode === "dex" && launchInfo?.graduated && (
-
+
Graduated to DEX (Sovry Router)
@@ -610,7 +610,7 @@ export default function SwapInterface({
)}
{selectedPool && (
-
+
Pool: {selectedPool.token0.symbol} / {selectedPool.token1.symbol}
@@ -618,7 +618,7 @@ export default function SwapInterface({
Reserves: {parseFloat(selectedPool.reserve0).toFixed(2)} {selectedPool.token0.symbol} • {parseFloat(selectedPool.reserve1).toFixed(2)} {selectedPool.token1.symbol}
{(fromToken === "IP" || toToken === "IP") && (
-
+
⚡ Native IP will be auto-wrapped to WIP for this swap
)}
@@ -763,8 +763,8 @@ export default function SwapInterface({
)}
{simulationSuccess && (
-
-
+
+
Swap calculation complete! Ready to execute.
diff --git a/frontend/src/components/token/ChartSkeleton.tsx b/frontend/src/components/token/ChartSkeleton.tsx
index f4aca78..8940fad 100644
--- a/frontend/src/components/token/ChartSkeleton.tsx
+++ b/frontend/src/components/token/ChartSkeleton.tsx
@@ -71,3 +71,5 @@ export function ChartSkeleton({ height = 400, className, delay = 100 }: ChartSke
}
+
+
diff --git a/frontend/src/components/token/HarvestButton.tsx b/frontend/src/components/token/HarvestButton.tsx
index fa2201c..e088266 100644
--- a/frontend/src/components/token/HarvestButton.tsx
+++ b/frontend/src/components/token/HarvestButton.tsx
@@ -68,3 +68,5 @@ export function HarvestButton({
);
}
+
+
diff --git a/frontend/src/components/token/ProgressBarSkeleton.tsx b/frontend/src/components/token/ProgressBarSkeleton.tsx
index 20b19ed..6c10466 100644
--- a/frontend/src/components/token/ProgressBarSkeleton.tsx
+++ b/frontend/src/components/token/ProgressBarSkeleton.tsx
@@ -36,3 +36,5 @@ export function ProgressBarSkeleton({ className, delay = 300 }: ProgressBarSkele
}
+
+
diff --git a/frontend/src/components/token/SwapInput.tsx b/frontend/src/components/token/SwapInput.tsx
index ab8eef6..737bdce 100644
--- a/frontend/src/components/token/SwapInput.tsx
+++ b/frontend/src/components/token/SwapInput.tsx
@@ -173,7 +173,7 @@ export function SwapInput({
size="sm"
onClick={handleMaxClick}
disabled={isDisabled || !balance || parseFloat(balance.toString()) <= 0}
- className="h-6 px-2 text-xs text-sovry-green hover:text-sovry-green/80 hover:bg-sovry-green/10"
+ className="h-6 px-2 text-xs text-sovry-crimson hover:text-sovry-crimson/80 hover:bg-sovry-crimson/10"
>
MAX
diff --git a/frontend/src/components/token/SwapInterface.tsx b/frontend/src/components/token/SwapInterface.tsx
index 5d9498b..d2a19d9 100644
--- a/frontend/src/components/token/SwapInterface.tsx
+++ b/frontend/src/components/token/SwapInterface.tsx
@@ -843,7 +843,7 @@ function SwapInterfaceComponent({
}
}}
disabled={!isConnected || (fromToken === "IP" ? !userBalance : !tokenBalance)}
- className="h-6 px-2 text-xs text-sovry-green hover:text-sovry-green/80 hover:bg-sovry-green/10"
+ className="h-6 px-2 text-xs text-sovry-crimson hover:text-sovry-crimson/80 hover:bg-sovry-crimson/10"
aria-label={`Set maximum ${fromToken} balance`}
>
MAX
diff --git a/frontend/src/components/token/SwapInterfaceSkeleton.tsx b/frontend/src/components/token/SwapInterfaceSkeleton.tsx
index b32ae40..018a74e 100644
--- a/frontend/src/components/token/SwapInterfaceSkeleton.tsx
+++ b/frontend/src/components/token/SwapInterfaceSkeleton.tsx
@@ -69,3 +69,5 @@ export function SwapInterfaceSkeleton({ className, delay = 200 }: SwapInterfaceS
}
+
+
diff --git a/frontend/src/components/token/TokenHeaderSkeleton.tsx b/frontend/src/components/token/TokenHeaderSkeleton.tsx
index 64fe2ff..1446c3b 100644
--- a/frontend/src/components/token/TokenHeaderSkeleton.tsx
+++ b/frontend/src/components/token/TokenHeaderSkeleton.tsx
@@ -49,3 +49,5 @@ export function TokenHeaderSkeleton({ className, delay = 0 }: TokenHeaderSkeleto
}
+
+
diff --git a/frontend/src/components/token/TradingChart.tsx b/frontend/src/components/token/TradingChart.tsx
index c46f99a..738f670 100644
--- a/frontend/src/components/token/TradingChart.tsx
+++ b/frontend/src/components/token/TradingChart.tsx
@@ -215,7 +215,7 @@ function TradingChartComponent({
{isLoading && !chartInitialized && (
-
+
Loading chart data...
@@ -253,7 +253,7 @@ function TradingChartComponent({
{isLoading && chartInitialized && (
diff --git a/frontend/src/components/token/TransactionHistory.tsx b/frontend/src/components/token/TransactionHistory.tsx
index 76c8ae8..c9d062e 100644
--- a/frontend/src/components/token/TransactionHistory.tsx
+++ b/frontend/src/components/token/TransactionHistory.tsx
@@ -274,3 +274,5 @@ export function TransactionHistory({
}
+
+
diff --git a/frontend/src/components/ui/badge.tsx b/frontend/src/components/ui/badge.tsx
index d0b32a7..6af50c9 100644
--- a/frontend/src/components/ui/badge.tsx
+++ b/frontend/src/components/ui/badge.tsx
@@ -4,12 +4,12 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const badgeVariants = cva(
- "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold uppercase tracking-wider transition-colors focus:outline-none focus:ring-2 focus:ring-sovry-green focus:ring-offset-2",
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold uppercase tracking-wider transition-colors focus:outline-none focus:ring-2 focus:ring-sovry-crimson focus:ring-offset-2",
{
variants: {
variant: {
default:
- "border-transparent bg-sovry-green text-black hover:bg-sovry-green/90",
+ "border-transparent bg-sovry-crimson text-black hover:bg-sovry-crimson/90",
secondary:
"border-transparent bg-zinc-800 text-zinc-50 hover:bg-zinc-700",
destructive:
diff --git a/frontend/src/components/ui/breadcrumb.tsx b/frontend/src/components/ui/breadcrumb.tsx
index 373862c..4082e16 100644
--- a/frontend/src/components/ui/breadcrumb.tsx
+++ b/frontend/src/components/ui/breadcrumb.tsx
@@ -63,3 +63,5 @@ export function Breadcrumb({ items, className }: BreadcrumbProps) {
+
+
diff --git a/frontend/src/components/ui/button.tsx b/frontend/src/components/ui/button.tsx
index 6a68151..c7db23d 100644
--- a/frontend/src/components/ui/button.tsx
+++ b/frontend/src/components/ui/button.tsx
@@ -5,14 +5,14 @@ import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
- "inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sovry-green focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
+ "inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-sovry-crimson focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
{
variants: {
variant: {
- default: "bg-sovry-green text-black font-bold uppercase tracking-wide hover:bg-sovry-green/90",
+ default: "bg-sovry-crimson text-white font-bold uppercase tracking-wide hover:bg-sovry-crimson/90",
destructive:
"bg-sovry-pink text-white font-bold uppercase tracking-wide hover:bg-sovry-pink/90",
- buy: "bg-sovry-green text-black font-bold uppercase tracking-wide hover:bg-sovry-green/90",
+ buy: "bg-sovry-crimson text-white font-bold uppercase tracking-wide hover:bg-sovry-crimson/90",
sell: "bg-sovry-pink text-white font-bold uppercase tracking-wide hover:bg-sovry-pink/90",
purple: "bg-purple-600 text-white font-bold uppercase tracking-wide hover:bg-purple-700 rounded-lg",
outline:
@@ -20,7 +20,7 @@ const buttonVariants = cva(
secondary:
"bg-zinc-800 text-zinc-50 font-semibold hover:bg-zinc-700",
ghost: "bg-zinc-800 text-zinc-400 hover:bg-zinc-700 hover:text-zinc-50",
- link: "text-sovry-green underline-offset-4 hover:underline",
+ link: "text-sovry-crimson underline-offset-4 hover:underline",
login: "bg-zinc-900 border border-zinc-800 text-white font-semibold hover:bg-zinc-800 rounded-lg",
},
size: {
diff --git a/frontend/src/components/ui/dialog.tsx b/frontend/src/components/ui/dialog.tsx
index 6ffdd6a..5d8bac9 100644
--- a/frontend/src/components/ui/dialog.tsx
+++ b/frontend/src/components/ui/dialog.tsx
@@ -44,7 +44,7 @@ const DialogContent = React.forwardRef<
{...props}
>
{children}
-
+
Close
@@ -123,3 +123,5 @@ export {
+
+
diff --git a/frontend/src/components/ui/input.tsx b/frontend/src/components/ui/input.tsx
index 0a74c77..63fa43b 100644
--- a/frontend/src/components/ui/input.tsx
+++ b/frontend/src/components/ui/input.tsx
@@ -11,7 +11,7 @@ const Input = React.forwardRef(
span]:line-clamp-1",
+ "flex h-10 w-full items-center justify-between rounded-lg border border-zinc-800 bg-zinc-900 px-4 py-3 text-sm text-zinc-50 ring-offset-zinc-950 placeholder:text-zinc-500 focus:outline-none focus:ring-2 focus:ring-sovry-crimson focus:border-transparent disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
className
)}
{...props}
diff --git a/frontend/src/components/ui/slider.tsx b/frontend/src/components/ui/slider.tsx
index c962d5c..692a591 100644
--- a/frontend/src/components/ui/slider.tsx
+++ b/frontend/src/components/ui/slider.tsx
@@ -18,9 +18,9 @@ const Slider = React.forwardRef<
{...props}
>
-
+
-
+
))
Slider.displayName = SliderPrimitive.Root.displayName
diff --git a/frontend/src/components/ui/tabs.tsx b/frontend/src/components/ui/tabs.tsx
index 6b0cd7e..f9c06d0 100644
--- a/frontend/src/components/ui/tabs.tsx
+++ b/frontend/src/components/ui/tabs.tsx
@@ -29,7 +29,7 @@ const TabsTrigger = React.forwardRef<
(
return (