diff --git a/packages/web/components/Landing/Signup/Cards.tsx b/packages/web/components/Landing/Signup/Cards.tsx index 0f0997664..95e82c2d1 100644 --- a/packages/web/components/Landing/Signup/Cards.tsx +++ b/packages/web/components/Landing/Signup/Cards.tsx @@ -3,39 +3,49 @@ import { Box, Button, Flex, + Icon, IconButton, Image, Link, List, ListIcon, ListItem, + Table, + TableContainer, + Tbody, + Td, Text, + Th, + Thead, + Tr, useBreakpointValue, } from '@metafam/ds'; import { useRouter } from 'next/router'; +import React from 'react'; import { BsFillCheckCircleFill } from 'react-icons/bs'; import { FaCircle } from 'react-icons/fa'; import { MdChevronRight } from 'react-icons/md'; -import { RoleTitle } from './data'; +import { Perk, PerkList } from './data'; -export interface Perk { - perk: string; - checked: boolean; +interface PerksChecklistProps { + perks: Perk[]; + id: keyof Perk; + altBackground?: boolean; } -type CardProps = { +interface CardProps { title?: string; type?: string; image?: string; price?: string; + id?: keyof Perk; description?: string; action?: string; list?: Perk[]; width?: string; background?: string; badgeColor?: string; - info?: string; route?: string; link?: string; recommended?: boolean; @@ -47,19 +57,17 @@ export const RoleCard: React.FC = ({ description, recommended, action, - info, route, link, }) => { const router = useRouter(); - const activeTab = router.query.tab ?? RoleTitle.Player; const isMobile = useBreakpointValue({ base: true, lg: false, }); return ( = ({ fontSize={{ base: 'md', lg: '2xl' }} align={{ base: 'start', lg: 'center' }} > - {description}{' '} - {description.includes('Detailed instructions') && - activeTab === RoleTitle.Patron && - (isMobile ? '👉' : '👇')} - - )} - {info && ( - - {info} + {description} )} {!isMobile && ( <> {route && ( )} {link && ( - - - + )} )} @@ -173,62 +167,132 @@ export const RoleCard: React.FC = ({ export const PerksCard: React.FC = ({ title, type, + id, list, price, width = 'md', description, background, badgeColor, -}) => ( +}) => { + const isMobile = useBreakpointValue({ + base: true, + lg: false, + }); + return ( + + {title && !isMobile && ( + + {title} + + )} + {price && ( + + {price} + + )} + {description && ( + + {description} + + )} + {type && ( + + {type} + + )} + {list && list.length > 0 && ( + + {list?.map((item, idx) => ( + + + {item.title} + + ))} + + )} + + ) +}; + +export const PerksChecklist: React.FC = ({ perks, id, altBackground }) => ( 10 ? '620px' : 'full'} - w={{ base: 'full', lg: width }} - bg={background} + h="full" + w="129px" + bg={altBackground ? "#00000029" : "#FFFFFF0A"} display="flex" flexDir="column" alignItems="center" - gap={3} - p={6} + gap="20px" + p="20px 20px 10px 20px" > - {title && ( + {id && ( { + if (id === 'free') return 'green'; + if (id === 'basic') return 'purple'; + if (id === 'pro') return 'pink'; + return 'gray'; + })() + } p={2} fontSize="0.4em" > - {title} + {id} )} - {price && ( - - {price} - - )} - {description && ( - - {description} - - )} - {type && ( - - {type} - - )} - {list && list.length > 0 && ( - - {list?.map((item, idx) => ( - - - {item.perk} - - ))} - - )} - -); + + {perks?.map((perk, idx) => ( + + + + ))} + + +) + + + + diff --git a/packages/web/components/Landing/Signup/data.ts b/packages/web/components/Landing/Signup/data.ts index 3ff1d6b0a..e25d9c0f0 100644 --- a/packages/web/components/Landing/Signup/data.ts +++ b/packages/web/components/Landing/Signup/data.ts @@ -4,9 +4,21 @@ import BabyOctopus from 'assets/quests/baby_octo.webp'; import Octopus from 'assets/quests/octopus.webp'; import YoungPlant from 'assets/young-plant.webp'; -interface Perk { - perk: string; - checked: boolean; +export enum PerkType { + Free = 'free', + Basic = 'basic', + Pro = 'pro', +} + +export interface Perk { + title: string; + type: 'Player' | 'Guild' | 'Patron'; + visitor?: boolean; + member?: boolean; + free?: boolean; + basic?: boolean; + pro?: boolean; + checked?: boolean; } export interface Role { @@ -22,11 +34,11 @@ export interface Role { price?: string; } -interface PerkList { +export interface PerkList { list: Perk[]; background: string; + type: string; title?: string; - type?: string; price?: string; description?: string; } @@ -37,115 +49,228 @@ export enum RoleTitle { Patron = 'patron', } -export const playerVisitorList: Perk[] = [ - { perk: 'Access to educational resources', checked: true }, - { perk: 'Access to community calls', checked: true }, - { perk: 'List of MetaAlliance guilds', checked: true }, - { perk: 'Free newsletter', checked: true }, - { perk: 'Search & filter people', checked: false }, - { perk: 'Access to the community', checked: false }, - { perk: 'Ability to earn reputation', checked: false }, - { perk: 'Ability to earn Seed tokens', checked: false }, - { perk: 'Get ranked & unlock perks', checked: false }, -]; - -export const playerMemberList: Perk[] = [ - { perk: 'Access to educational resources', checked: true }, - { perk: 'Access to community calls', checked: true }, - { perk: 'List of MetaAlliance guilds', checked: true }, - { perk: 'Free newsletter', checked: true }, - { perk: 'Search & filter people', checked: true }, - { perk: 'Access to the community', checked: true }, - { perk: 'Ability to earn reputation', checked: true }, - { perk: 'Ability to earn Seed tokens', checked: true }, - { perk: 'Get ranked & unlock perks', checked: true }, -]; - -export const guildFreeList: Perk[] = [ - { perk: 'Guild page in MG', checked: true }, - { perk: 'Members directory', checked: true }, - { perk: 'Your leaderboard', checked: true }, - { perk: 'Onboarding paths', checked: true }, - { perk: 'A guild2guild meetup', checked: true }, - { perk: 'Your news inside MG', checked: true }, - { perk: 'Post calls to action', checked: false }, - { perk: 'Search & filter people', checked: false }, - { perk: 'We shill your grant', checked: false }, - { perk: 'X thread about you', checked: false }, - { perk: 'In the follow list on X', checked: false }, - { perk: 'Your news in the newsletter', checked: false }, - { perk: 'A podcast interview', checked: false }, - { perk: 'Part of MetaAlliance', checked: false }, - { perk: 'A post about you', checked: false }, - { perk: 'Branch in The Onboarding Game', checked: false }, -]; - -export const guildBasicList: Perk[] = [ - { perk: 'Guild page in MG', checked: true }, - { perk: 'Members directory', checked: true }, - { perk: 'Your leaderboard', checked: true }, - { perk: 'Onboarding paths', checked: true }, - { perk: 'A guild2guild meetup', checked: true }, - { perk: 'Your news inside MG', checked: true }, - { perk: 'Post calls to action', checked: true }, - { perk: 'Search & filter people', checked: true }, - { perk: 'We shill your grant', checked: true }, - { perk: 'X thread about you', checked: true }, - { perk: 'In the follow list on X', checked: true }, - { perk: 'Your news in the newsletter', checked: true }, - { perk: 'A podcast interview', checked: true }, - { perk: 'Part of MetaAlliance', checked: false }, - { perk: 'A post about you', checked: false }, - { perk: 'Branch in The Onboarding Game', checked: false }, -]; - -export const guildProList: Perk[] = [ - { perk: 'Guild page in MG', checked: true }, - { perk: 'Members directory', checked: true }, - { perk: 'Your leaderboard', checked: true }, - { perk: 'Onboarding paths', checked: true }, - { perk: 'A guild2guild meetup', checked: true }, - { perk: 'Your news inside MG', checked: true }, - { perk: 'Post calls to action', checked: true }, - { perk: 'Search & filter people', checked: true }, - { perk: 'We shill your grant', checked: true }, - { perk: 'X thread about you', checked: true }, - { perk: 'In the follow list on X', checked: true }, - { perk: 'Your news in the newsletter', checked: true }, - { perk: 'A podcast interview', checked: true }, - { perk: 'Part of MetaAlliance', checked: true }, - { perk: 'A post about you', checked: true }, - { perk: 'Branch in The Onboarding Game', checked: true }, +export const playerPerksList: Perk[] = [ + { + title: 'Access to educational resources', + type: 'Player', + visitor: true, + member: true, + }, + { + title: 'Access to community calls', + type: 'Player', + visitor: true, + member: true, + }, + { + title: 'List of MetaAlliance guilds', + type: 'Player', + visitor: true, + member: true, + }, + { title: 'Free newsletter', type: 'Player', visitor: true, member: true }, + { + title: 'Search & filter people', + type: 'Player', + visitor: false, + member: true, + }, + { + title: 'Access to the community', + type: 'Player', + visitor: false, + member: true, + }, + { + title: 'Ability to earn reputation', + type: 'Player', + visitor: false, + member: true, + }, + { + title: 'Ability to earn Seed tokens', + type: 'Player', + visitor: false, + member: true, + }, + { + title: 'Get ranked & unlock perks', + type: 'Player', + visitor: false, + member: true, + }, ]; - -export const patronFreeList: Perk[] = [ - { perk: 'Access to educational resources', checked: true }, - { perk: 'Access to community calls', checked: true }, - { perk: 'List of MetaAlliance guilds', checked: true }, - { perk: 'Free newsletter', checked: true }, - { perk: 'Search & filter people', checked: false }, - { perk: 'Access to the community', checked: false }, - { perk: 'Ability to earn reputation', checked: false }, - { perk: 'Ability to earn Seed tokens', checked: false }, - { perk: 'Get ranked & unlock perks', checked: false }, +export const guildPerksList: Perk[] = [ + { + title: 'Guild page in MG', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'Members directory', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'Your leaderboard', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'Onboarding paths', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'A guild2guild meetup', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'Your news inside MG', + type: 'Guild', + free: true, + basic: true, + pro: true, + }, + { + title: 'Post calls to action', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'Search & filter people', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'We shill your grant', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'X thread about you', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'In the follow list on X', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'Your news in the newsletter', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'A podcast interview', + type: 'Guild', + free: false, + basic: true, + pro: true, + }, + { + title: 'Part of MetaAlliance', + type: 'Guild', + free: false, + basic: false, + pro: true, + }, + { + title: 'A post about you', + type: 'Guild', + free: false, + basic: false, + pro: true, + }, + { + title: 'Branch in The Onboarding Game', + type: 'Guild', + free: false, + basic: false, + pro: true, + }, ]; -export const patronMemberList: Perk[] = [ - { perk: 'Access to educational resources', checked: true }, - { perk: 'Access to community calls', checked: true }, - { perk: 'List of MetaAlliance guilds', checked: true }, - { perk: 'Free newsletter', checked: true }, - { perk: 'Search & filter people', checked: true }, - { perk: 'Access to the community', checked: true }, - { perk: 'Ability to earn reputation', checked: true }, - { perk: 'Ability to earn Seed tokens', checked: true }, - { perk: 'Get ranked & unlock perks', checked: true }, +export const patronPerksList: Perk[] = [ + { + title: 'Access to educational resources', + free: true, + member: true, + type: 'Patron', + }, + { + title: 'Access to community calls', + free: true, + member: true, + type: 'Patron', + }, + { + title: 'List of MetaAlliance guilds', + free: true, + member: true, + type: 'Patron', + }, + { title: 'Free newsletter', free: true, member: true, type: 'Patron' }, + { + title: 'Search & filter people', + free: false, + member: true, + type: 'Patron', + }, + { + title: 'Access to the community', + free: false, + member: true, + type: 'Patron', + }, + { + title: 'Ability to earn reputation', + free: false, + member: true, + type: 'Patron', + }, + { + title: 'Ability to earn Seed tokens', + free: false, + member: true, + type: 'Patron', + }, + { + title: 'Get ranked & unlock perks', + free: false, + member: true, + type: 'Patron', + }, ]; export const playerReasons: string[] = [ - 'Learn about Web3, DAOs, ReFi & the Metacrisis', - 'Join the ecosystem & start making friends', - 'Start accruing reputation (XP) & tokens (Seeds)', + 'Learn about DAOs, Web3 & the bigger picture', + 'Join the ecosystem & make friends', + 'Start accruing XP (reputation) & earning', 'Gain experience & increase chances of landing gigs', 'Get help for starting your own project', ]; @@ -160,9 +285,9 @@ export const guildReasons: string[] = [ export const patronReasons: string[] = [ 'Because you love the idea of MetaGame', - 'You want to help fix the onboarding problem for the DAO space', - 'You want to see building DAOs become 10x easier & better', - "Besides Web3 & DAOs, you're into ReFi, Game B & Network States", + 'You want the onboarding to the DAO space to improve', + 'You want to see building DAOs become 10x easier', + "Besides Web3, you're into Game B & the bigger picture", 'Membership & platform utility will be paid in Seeds', ]; @@ -170,17 +295,41 @@ export const playerPerks: PerkList[] = [ { title: 'Visitor', type: 'Free', - list: playerVisitorList, + list: playerPerksList, background: '#FFFFFF0A', }, { title: 'Member', type: 'Few contributions / month', - list: playerMemberList, + list: playerPerksList, background: '#00000029', }, ]; +export const guildPerks: PerkList[] = [ + { + type: 'Free', + price: '$0', + description: 'FOR BROKE GUILDS', + list: guildPerksList, + background: '#FFFFFF0A', + }, + { + type: 'Basic', + price: '$800 / year', + description: 'FOR ESTABLISHED GUILDS', + list: guildPerksList, + background: '#00000029', + }, + { + type: 'Pro', + price: 'Inquire', + description: 'FOR WELL-OFF GUILDS', + list: guildPerksList, + background: '#FFFFFF0A', + }, +]; + export const roles: Role[] = [ { tab: RoleTitle.Player, @@ -205,7 +354,7 @@ export const roles: Role[] = [ tab: RoleTitle.Guild, title: 'Player', image: PlayerImg.src, - description: 'Join MetaGame as an active member.', + description: 'An active contributor.', action: "Let's Go!", route: '/start', }, @@ -213,7 +362,7 @@ export const roles: Role[] = [ tab: RoleTitle.Guild, title: 'Patron', image: PatronsImg.src, - description: 'Join MetaGame as a passive player.', + description: 'A passive contributor.', action: "Let's Go!", route: '/join/patron', }, @@ -221,58 +370,33 @@ export const roles: Role[] = [ tab: RoleTitle.Patron, title: 'Do it yourself', image: YoungPlant.src, - description: - 'You’ll need some Ether & RAI ready on Polygon. Detailed instructions', - action: 'Yes Pls!', + description: 'Proceed to joining the regular way.', + action: 'Alright!', route: '/join/patron', }, { tab: RoleTitle.Patron, title: 'Buy it & forget it', image: PlayerImg.src, - description: 'Too busy to do it manually? We got you!', - info: 'For amounts over $1k only.', + description: 'Too busy to do it manually? $1k minimum!', action: 'Perfect!', link: 'https://tally.so/r/w4Jb6r', }, ]; -export const guildPerks: PerkList[] = [ +export const patronPerks: PerkList[] = [ { + title: 'Visitor', type: 'Free', - price: '$0', - description: 'FOR BROKE GUILDS', - list: guildFreeList, - background: '#FFFFFF0A', - }, - { - type: 'Basic', - price: '$800 / year', - description: 'FOR ESTABLISHED GUILDS', - list: guildBasicList, - background: '#00000029', - }, - { - type: 'Pro', - price: 'Inquire', - description: 'FOR WELL-OFF GUILDS', - list: guildProList, + description: '', + list: patronPerksList, background: '#FFFFFF0A', }, -]; -export const patronPerks: PerkList[] = [ - // { - // title: 'Visitor', - // type: 'Free', - // description: 'FOR BROKE GUILDS', - // list: patronFreeList, - // background: '#FFFFFF0A', - // }, { title: 'Member', - type: 'Tiered Memberships', + type: '$100/year', description: '', - list: patronMemberList, + list: patronPerksList, background: '#00000029', }, ]; diff --git a/packages/web/components/Landing/Signup/index.tsx b/packages/web/components/Landing/Signup/index.tsx index 91fcd6f74..f9fface41 100644 --- a/packages/web/components/Landing/Signup/index.tsx +++ b/packages/web/components/Landing/Signup/index.tsx @@ -4,6 +4,7 @@ import { Container, Flex, Image, + List, ListItem, MetaButton, Stack, @@ -23,17 +24,18 @@ import GuildsImg from 'assets/guilds-sun_800x800.webp'; import PatronsImg from 'assets/patrons-sun_800x820.webp'; import PlayerImg from 'assets/players-sun_800x822.webp'; import { FullPageContainer } from 'components/Container'; -import Link from 'next/link'; import { useRouter } from 'next/router'; import React, { Ref, RefObject, useState } from 'react'; import { Rain } from '../OnboardingGame/Rain'; -import { PerksCard, RoleCard } from './Cards'; +import { PerksCard, PerksChecklist, RoleCard } from './Cards'; import { guildPerks, + guildPerksList, guildReasons, patronPerks, patronReasons, + PerkType, playerPerks, playerReasons, roles, @@ -43,7 +45,6 @@ import { const tabs = ['Player', 'Guild', 'Patron']; const bgColors = ['green.200', '#6A88DF', '#ED61C5']; const textColors = ['green.900', 'purple.900', 'pink.900']; -const badgeColors = ['green', 'purple', 'pink']; const TabImg = ({ type, @@ -270,7 +271,7 @@ export const Signup: React.FC = () => { zIndex={5} > { color="white" overflowY="auto" > - - - Players are here to learn, get experience, contribute labor - and help build MetaGame. - - - Why become a player? - - - A few reasons! - - - {playerReasons.map((reason, idx) => ( - {reason} - ))} - - - Perks of Joining - - {isMobile ? ( - - + + + + Learn, earn, grow & build MetaGame. + + + Why become a player? + + + A few reasons! + + + {playerReasons.map((reason, idx) => ( + {reason} + ))} + + + + + Perks of Joining + + {isMobile ? ( + + + {playerPerks.map((perk, index) => ( + + {perk.title} + + ))} + + + {playerPerks.map((perk, index) => ( + + + + ))} + + + ) : ( + {playerPerks.map((perk, index) => ( - - {perk.title} - - ))} - - - {playerPerks.map((perk, index) => ( - - - + {...perk} + id={index === 0 ? 'visitor' : 'member'} + badgeColor={index === 0 ? 'green' : 'pink'} + /> ))} - - - ) : ( - - {playerPerks.map((perk, index) => ( - - ))} - - )} - - How to become a player? - - - Ready to rise & become one of the founders of MetaGame? - - - {roles.map((role, index) => ( - - {role.tab === activeTab && } - {role.tab === activeTab && - index === - roles.findIndex( - (r) => r.tab === RoleTitle.Player, - ) && ( - - OR - - )} - - ))} - + + )} + + + + How to become a player? + + + Ready to rise & become one of the founders of MetaGame? + + router.push("/onboarding")} alignSelf="center"> + Go + + @@ -431,36 +417,39 @@ export const Signup: React.FC = () => { color="white" overflowY="auto" > - - - Guilds are groups of people offering tools or services & - building projects. - - - Why join as a guild? - - - A bunch of reasons, actually! - - - {guildReasons.map((reason, idx) => ( - {reason} - ))} - - - Before joining as a guild... - - - Before trying to join as a guild, we recommend you join as a - person. - + + + + Get help, contributors & users to grow. + + + Why join as a guild? + + + A bunch of reasons, actually! + + + {guildReasons.map((reason, idx) => ( + {reason} + ))} + + + + + Before joining as a guild... + + + Before trying to join as a guild, we recommend you join as a + person. + + { {role.tab === activeTab && } {role.tab === activeTab && index === - roles.findIndex( - (r) => r.tab === RoleTitle.Guild, - ) && ( + roles.findIndex( + (r) => r.tab === RoleTitle.Guild, + ) && ( { {guildPerks.map((perk, index) => ( - + ))} ) : ( - - {guildPerks.map((perk, index) => ( - - ))} - + + + {guildPerksList.map(({ title }, perkIndex) => ( + {title} + ))} + + + + + )} { - Ready to become one of the Founding Guilds of MetaGame? - Apply now 👇 + Ready to become one of the founding guilds? - - APPLY AS GUILD - + APPLY AS GUILD @@ -571,76 +559,82 @@ export const Signup: React.FC = () => { color="white" overflowY="auto" > - - - Patrons are here to teach, contribute liquidity & support - MetaGame. - - - Why join as a patron? - - - Here are a few reasons: - - - {patronReasons.map((reason, idx) => ( - {reason} - ))} - - - Perks of joining - - {isMobile ? ( - - + + + + Buy, hodl & support passively. + + + Why join as a patron? + + + Here are a few reasons: + + + {patronReasons.map((reason, idx) => ( + {reason} + ))} + + + + + Perks of joining + + {isMobile ? ( + + + {patronPerks.map((perk, index) => ( + + {perk.title} + + ))} + + + {patronPerks.map((perk, index) => ( + + + + ))} + + + ) : ( + {patronPerks.map((perk, index) => ( - - {perk.title} - + {...perk} + id={index === 0 ? 'free' : 'member'} + badgeColor={index === 0 ? 'green' : 'pink'} + /> ))} - - - {patronPerks.map((perk, index) => ( - - - - ))} - - - ) : ( - - {patronPerks.map((perk, index) => ( - - ))} - - )} - - How to become a patron? - - - Ready to become one of the founding patrons of MetaGame? - + + )} + + + + How to become a patron? + + + Ready to become one of the founding patrons of MetaGame? + + { {role.tab === activeTab && } {role.tab === activeTab && index === - roles.findIndex( - (r) => r.tab === RoleTitle.Patron, - ) && ( + roles.findIndex( + (r) => r.tab === RoleTitle.Patron, + ) && ( { ))} - - - Not ready? - - - THE RABBIT HOLE - - - & / OR - - - THE PURPLEPAPER - -