From 9d0140a1bc10c44f85a0f12e6460578823667368 Mon Sep 17 00:00:00 2001 From: Majorfi Date: Wed, 7 Aug 2024 15:16:10 +0200 Subject: [PATCH] feat: first round of apps --- apps/common/components/AppCard.tsx | 6 +- apps/common/utils/constants.ts | 158 +++++++++++++++++++++++------ next.config.js | 4 + pages/home/index.tsx | 33 +++++- public/v2.png | Bin 0 -> 12030 bytes 5 files changed, 166 insertions(+), 35 deletions(-) create mode 100644 public/v2.png diff --git a/apps/common/components/AppCard.tsx b/apps/common/components/AppCard.tsx index 87c30e46c..12e4b0ce0 100644 --- a/apps/common/components/AppCard.tsx +++ b/apps/common/components/AppCard.tsx @@ -14,7 +14,7 @@ export function AppCard(props: TAppCardProps): ReactElement { <> @@ -29,9 +29,10 @@ export function AppCard(props: TAppCardProps): ReactElement { {props.app.name} ) : (
@@ -52,6 +53,7 @@ export function AppCard(props: TAppCardProps): ReactElement { alt={props.app.name} width={300} height={300} + unoptimized className={'size-full rounded-2xl bg-center object-cover md:rounded-[32px]'} />
diff --git a/apps/common/utils/constants.ts b/apps/common/utils/constants.ts index 983f95ec3..db267a070 100644 --- a/apps/common/utils/constants.ts +++ b/apps/common/utils/constants.ts @@ -9,57 +9,136 @@ export const YGAUGES_ZAP_ADDRESS = toAddress('0x1104215963474A0FA0Ac09f4E212EF72 export const V3_STAKING_ZAP_ADDRESS = toAddress('0x1E789A49902370E5858Fae67518aF49d8deA299c'); //Address of the zap to deposit & stake for the v3 staking on arbitrum export const SUPPORTED_NETWORKS = [mainnet, optimism, polygon, fantom, base, arbitrum]; -export const COMMUNITY_APPS: TApp[] = [ +export const FRONTENDS_APPS: TApp[] = [ { - name: 'Product name', - description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', + name: 'Gimme', + description: 'DeFi yields, designed for everyone.', + logoURI: 'https://gimme.mom/favicons/favicon-96x96.png', appURI: 'https://gimme.mom/' }, { - name: 'Product name', + name: 'Yearn V3', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: '/v3.png', + appURI: '/v3' }, { - name: 'Product name', + name: 'Yearn V2', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: '/v2.png', + appURI: '/vaults' + }, + { + name: 'Superform', + description: 'Earn Yield & Distribute Vaults', + logoURI: 'https://www.superform.xyz/icon.png', + appURI: 'https://www.superform.xyz' + } +]; + +export const LOCKERS_APPS: TApp[] = [ + { + name: 'veYFI', + description: 'Stake YFI to earn yield, boost gauges, and take part in governance.', + logoURI: 'https://assets.smold.app/api/token/1/0x41252E8691e964f7DE35156B68493bAb6797a275/logo-128.png', + appURI: 'https://veyfi.yearn.fi' + }, + { + name: 'yCRV', + description: 'Put your yCRV to work', + logoURI: 'https://ycrv.yearn.fi/ycrv-logo.svg', + appURI: 'https://ycrv.yearn.fi' + }, + { + name: 'yPrisma', + description: 'Put your yPRISMA to work', + logoURI: 'https://assets.smold.app/api/token/1/0xe3668873d944e4a949da05fc8bde419eff543882/logo-128.png', + appURI: 'https://yprisma.yearn.fi' }, { - name: 'Product name', + name: 'Cove', + description: 'Earn the best yields on-chain without the hassle of managing a portfolio.', + logoURI: + 'https://assets-global.website-files.com/651af12fcd3055636b6ac9ad/66242dbf1d6e7ff1b18336c4_Twitter%20pp%20-%20Logo%202.png', + appURI: 'https://cove.finance/' + }, + { + name: '1UP', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: 'https://1up.tokyo/logo.svg', + appURI: 'https://1up.tokyo/' + }, + { + name: 'StakeDAO', + description: 'Stake DAO is a non-custodial liquid staking platform focused on governance tokens.', + logoURI: 'https://www.stakedao.org/logo.png', + appURI: 'https://www.stakedao.org' } ]; export const YEARN_X_APPS: TApp[] = [ + { + name: 'PoolTogether', + description: 'Product description example text product description example text', + logoURI: 'https://pooltogether.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://pooltogether.yearn.space' + }, { name: 'Pendle', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: 'https://pendle.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://pendle.yearn.space' }, { - name: 'Ajna', + name: 'AJNA', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: 'https://ajna.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://ajna.yearn.space' }, { - name: 'Optimism', + name: 'Velodrome', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: 'https://velodrome.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://velodrome.yearn.space/' }, { - name: 'Pool Together', + name: 'Aerodrome', description: 'Product description example text product description example text', - logoURI: '/v3-bg.png', - appURI: 'https://gimme.mom/' + logoURI: 'https://aerodrome.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://aerodrome.yearn.space/' + }, + { + name: 'Curve', + description: 'Product description example text product description example text', + logoURI: 'https://curve.yearn.space/favicons/favicon-512x512.png', + appURI: 'https://curve.yearn.space/' + } +]; + +export const POOLS_APPS: TApp[] = [ + { + name: 'yETH', + description: + 'A basket of LSTs in a single token. Simple, straight forward, risk adjusted liquid staking yield.', + logoURI: 'https://yeth.yearn.fi/favicons/favicon-96x96.png', + appURI: 'https://yeth.yearn.fi/' + } +]; + +export const INTEGRATIONS_APPS: TApp[] = [ + { + name: 'Sturdy', + description: + 'Isolated lending with shared liquidity. Permissionlessly create a liquid money market for any asset.', + logoURI: 'https://v2.sturdy.finance/apple-icon.png', + appURI: 'https://v2.sturdy.finance' + }, + { + name: 'PWN', + description: 'PWN is a hub for peer-to-peer (P2P) loans backed by digital assets.', + logoURI: + 'https://3238501125-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FtZYbaMzoeA7Kw4Stxzvw%2Ficon%2F89KZ4VyGSZ33cSf5QBmo%2Fpwn.svg?alt=media', + appURI: 'https://app.pwn.xyz/' } ]; @@ -91,7 +170,7 @@ export const FEATURED_APPS = [ } ]; -export const ALL_APPS = [...FEATURED_APPS, ...COMMUNITY_APPS, ...YEARN_X_APPS]; +export const ALL_APPS = [...FEATURED_APPS, ...FRONTENDS_APPS, ...YEARN_X_APPS]; export const CATEGORIES_DICT = { 'featured-apps': { @@ -101,12 +180,33 @@ export const CATEGORIES_DICT = { catrgorySlug: 'featured-apps', apps: FEATURED_APPS }, - community: { - categoryName: 'Community Apps', + frontends: { + categoryName: 'Frontends', + categoryDescription: + 'Yearn is a decentralized suite of products helping individuals, DAOs, and other protocols earn yield on their digital assets.', + catrgorySlug: 'frontend', + apps: FRONTENDS_APPS + }, + lockers: { + categoryName: 'Lockers', + categoryDescription: + 'Yearn is a decentralized suite of products helping individuals, DAOs, and other protocols earn yield on their digital assets.', + catrgorySlug: 'lockers', + apps: LOCKERS_APPS + }, + pools: { + categoryName: 'Pools', + categoryDescription: + 'Yearn is a decentralized suite of products helping individuals, DAOs, and other protocols earn yield on their digital assets.', + catrgorySlug: 'pools', + apps: POOLS_APPS + }, + integrations: { + categoryName: 'Integrations', categoryDescription: 'Yearn is a decentralized suite of products helping individuals, DAOs, and other protocols earn yield on their digital assets.', - catrgorySlug: 'community-apps', - apps: COMMUNITY_APPS + catrgorySlug: 'integrations', + apps: INTEGRATIONS_APPS }, 'yearn-x': { categoryName: 'Yearn X Projects', diff --git a/next.config.js b/next.config.js index 7757019f5..e115c5bfb 100755 --- a/next.config.js +++ b/next.config.js @@ -28,6 +28,10 @@ module.exports = withPlausibleProxy({ { protocol: 'https', hostname: '**.yearn.fi' + }, + { + protocol: 'https', + hostname: '**.gimme.mom' } ] }, diff --git a/pages/home/index.tsx b/pages/home/index.tsx index 5e14c7e05..ac61e15cf 100644 --- a/pages/home/index.tsx +++ b/pages/home/index.tsx @@ -8,7 +8,14 @@ import {useSearch} from '@common/contexts/useSearch'; import {IconChevron} from '@common/icons/IconChevron'; import {LogoDiscord} from '@common/icons/LogoDiscord'; import {LogoTwitter} from '@common/icons/LogoTwitter'; -import {COMMUNITY_APPS, FEATURED_APPS, YEARN_X_APPS} from '@common/utils/constants'; +import { + FEATURED_APPS, + FRONTENDS_APPS, + INTEGRATIONS_APPS, + LOCKERS_APPS, + POOLS_APPS, + YEARN_X_APPS +} from '@common/utils/constants'; function TextAnimation(): ReactElement { const hasBeenTriggerd = useRef(false); @@ -172,9 +179,15 @@ export default function Home(): ReactElement {
router.push('/home/community')} - apps={COMMUNITY_APPS} + title={'Frontends'} + onExpandClick={() => router.push('/home/frontends')} + apps={FRONTENDS_APPS} + /> + + router.push('/home/lockers')} + apps={LOCKERS_APPS} /> router.push('/home/yearn-x')} apps={YEARN_X_APPS} /> + + router.push('/home/pools')} + apps={POOLS_APPS} + /> + + router.push('/home/integrations')} + apps={INTEGRATIONS_APPS} + />
diff --git a/public/v2.png b/public/v2.png new file mode 100644 index 0000000000000000000000000000000000000000..1fda24fa76d9ae5ca184cdda15ad5553d68a3119 GIT binary patch literal 12030 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