computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.3 KiB
172 lines
5.3 KiB
import { |
|
Box, |
|
Container, |
|
Heading, |
|
Link, |
|
SimpleGrid, |
|
Text, |
|
useMediaQuery, |
|
} from '@chakra-ui/react'; |
|
import { GlobalHeader } from '../components/global-header'; |
|
import { Footer } from '../components/footer'; |
|
import { UpdatesBanner } from '../components/updates-banner'; |
|
import { OpensourceBanner } from '../components/opensource-banner'; |
|
import { DimmedMore } from '../components/dimmed-more'; |
|
import { LinksListItem } from '../components/links-list-item'; |
|
import { VideoIcon } from '../components/icons/video-icon'; |
|
import { LinksList } from '../components/links-list'; |
|
import { HomeRoadmapItem } from '../components/roadmap/home-roadmap-item'; |
|
import { getFeaturedRoadmaps, RoadmapType } from '../lib/roadmap'; |
|
import { getAllGuides, GuideType } from '../lib/guide'; |
|
import { getAllVideos, VideoType } from '../lib/video'; |
|
import siteConfig from '../content/site.json'; |
|
import Helmet from '../components/helmet'; |
|
import { event } from '../lib/gtag'; |
|
import { PageWrapper } from '../components/page-wrapper'; |
|
|
|
type HomeProps = { |
|
roadmaps: RoadmapType[]; |
|
guides: GuideType[]; |
|
videos: VideoType[]; |
|
}; |
|
|
|
export default function Home(props: HomeProps) { |
|
const { roadmaps, guides, videos } = props; |
|
|
|
return ( |
|
<PageWrapper> |
|
<GlobalHeader variant={'transparent'} /> |
|
<Helmet title="Developer Roadmaps" /> |
|
<Box> |
|
<Container maxW="container.md" pb="90px"> |
|
<Box py={['23px', '23px', '35px']} color="gray.200"> |
|
<Heading |
|
color="gray.50" |
|
fontSize={['22px', '22px', '28px']} |
|
mb={['8px', '8px', '15px']} |
|
> |
|
Hey there! 👋 |
|
</Heading> |
|
<Text fontSize={['14px', '14px', '16px']} mb="10px"> |
|
<Text fontWeight={500} as="span"> |
|
roadmap.sh |
|
</Text>{' '} |
|
is a community effort to create roadmaps, guides and other |
|
educational content to help guide the developers in picking up the |
|
path and guide their learnings. |
|
</Text> |
|
|
|
<Text fontSize={['14px', '14px', '16px']}> |
|
We also have a{' '} |
|
<Link |
|
textDecoration={'underline'} |
|
href={siteConfig.url.youtube} |
|
onClick={() => |
|
event({ |
|
category: 'Subscription', |
|
action: 'Clicked the YouTube link', |
|
label: 'YouTube link on home', |
|
}) |
|
} |
|
target="_blank" |
|
fontWeight={600} |
|
> |
|
YouTube channel |
|
</Link>{' '} |
|
which we hope you are going to love. |
|
</Text> |
|
</Box> |
|
<SimpleGrid columns={[1, 2, 3]} spacing={['10px', '10px', '15px']}> |
|
{roadmaps.map((roadmap: RoadmapType, counter: number) => ( |
|
<HomeRoadmapItem |
|
isUpcoming={roadmap.isUpcoming} |
|
url={`/${roadmap.id}`} |
|
key={roadmap.id} |
|
colorIndex={counter} |
|
title={roadmap.featuredTitle} |
|
isCommunity={roadmap.isCommunity} |
|
subtitle={roadmap.featuredDescription} |
|
/> |
|
))} |
|
</SimpleGrid> |
|
</Container> |
|
</Box> |
|
|
|
<Box bg="white"> |
|
<Container maxW="container.md"> |
|
<Box pt="60px" mb={['10px', '15px', '20px']}> |
|
<Heading |
|
color="green.500" |
|
fontSize={['20px', '20px', '25px']} |
|
mb="5px" |
|
> |
|
Video Explanations |
|
</Heading> |
|
</Box> |
|
|
|
<LinksList> |
|
{videos.map((video) => ( |
|
<LinksListItem |
|
target={'_blank'} |
|
key={video.id} |
|
href={video.youtubeLink!} |
|
badgeText={video.isPro ? 'PRO' : ''} |
|
hideSubtitleOnMobile |
|
title={video.title} |
|
subtitle={video.duration} |
|
icon={ |
|
<VideoIcon |
|
style={{ |
|
marginRight: '7px', |
|
width: '18px', |
|
height: '18px', |
|
color: '#9c9c9c', |
|
}} |
|
/> |
|
} |
|
/> |
|
))} |
|
<DimmedMore href="/watch" text={'View all Videos'} /> |
|
</LinksList> |
|
</Container> |
|
</Box> |
|
|
|
<Box pb="80px" bg="white"> |
|
<Container maxW="container.md" position="relative"> |
|
<Box pt="40px" mb="20px"> |
|
<Heading color="green.500" fontSize="25px" mb="5px"> |
|
Visual Guides |
|
</Heading> |
|
</Box> |
|
|
|
<LinksList> |
|
{guides.map((guide) => ( |
|
<LinksListItem |
|
key={guide.id} |
|
href={`/guides/${guide.id}`} |
|
title={guide.title} |
|
badgeText={guide.isPro ? 'PRO' : ''} |
|
subtitle={guide.formattedUpdatedAt!} |
|
/> |
|
))} |
|
<DimmedMore href={'/guides'} text="View all Guides" /> |
|
</LinksList> |
|
</Container> |
|
</Box> |
|
|
|
<OpensourceBanner /> |
|
<UpdatesBanner /> |
|
<Footer /> |
|
</PageWrapper> |
|
); |
|
} |
|
|
|
export async function getStaticProps() { |
|
return { |
|
props: { |
|
roadmaps: getFeaturedRoadmaps(), |
|
guides: getAllGuides(10), |
|
videos: getAllVideos(10), |
|
}, |
|
}; |
|
}
|
|
|