add custom files

This commit is contained in:
Priyatham Sai Chand 2021-08-24 23:39:28 +05:30
parent d49ec98ef2
commit c0ebb768b3
29 changed files with 3027 additions and 186 deletions

View File

@ -1,7 +1,29 @@
module.exports = {
siteMetadata: {
siteUrl: "https://www.yourdomain.tld",
title: "aki_site",
siteTitle: `Akkkiiii site`,
siteTitleAlt: `Cara - @lekoarts/gatsby-theme-cara`,
siteHeadline: ``,
siteUrl: `localhost:8080`,
siteDescription: ``,
siteLanguage: `en`,
siteImage: `/banner.jpg`,
author: `Priyatham <priyathamsaichand@gmail.com>`,
},
plugins: [],
};
plugins: [
{
resolve: `gatsby-source-filesystem`,
options: {
name: `sections`,
path: `${__dirname}/src/sections`,
},
},
{
resolve: `gatsby-plugin-mdx`,
options: {
lessBabel: true,
},
},
`gatsby-plugin-react-helmet`,
`gatsby-plugin-theme-ui`,
],
}

12
gatsby-node.js Normal file
View File

@ -0,0 +1,12 @@
const standardBasePath = `/`
exports.createPages = async ({ actions }, themeOptions) => {
const { createPage } = actions
const basePath = themeOptions.basePath || standardBasePath
createPage({
path: basePath,
component: require.resolve(`./src/templates/cara.tsx`),
})
}

1
index.js Normal file
View File

@ -0,0 +1 @@
// noop

1995
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -15,8 +15,18 @@
"clean": "gatsby clean"
},
"dependencies": {
"@mdx-js/mdx": "^1.6.22",
"@react-spring/parallax": "^9.2.4",
"@react-spring/web": "^9.2.4",
"@theme-ui/presets": "^0.9.1",
"gatsby-plugin-mdx": "^2.10.1",
"gatsby-plugin-react-helmet": "^4.10.0",
"gatsby-plugin-theme-ui": "^0.9.1",
"gatsby-source-filesystem": "^3.10.0",
"react-helmet": "^6.1.0",
"gatsby": "^3.11.1",
"react": "^17.0.1",
"react-dom": "^17.0.1"
"react-dom": "^17.0.1",
"theme-ui": "^0.9.1"
}
}

46
src/components/about.tsx Normal file
View File

@ -0,0 +1,46 @@
import * as React from "react"
import Divider from "../elements/divider"
import Inner from "../elements/inner"
import Content from "../elements/content"
import Svg from "./svg"
import { UpDown, UpDownWide } from "../styles/animations"
// @ts-ignore
import AboutMDX from "../sections/about"
const About = ({ offset, factor = 1 }: { offset: number; factor?: number }) => (
<div>
<Divider
bg="divider"
clipPath="polygon(0 16%, 100% 4%, 100% 82%, 0 94%)"
speed={0.2}
offset={offset}
factor={factor}
/>
<Divider speed={0.1} offset={offset} factor={factor}>
<UpDown>
<Svg icon="box" hiddenMobile width={6} color="icon_blue" left="50%" top="75%" />
<Svg icon="upDown" hiddenMobile width={8} color="icon_darkest" left="70%" top="20%" />
<Svg icon="triangle" width={8} stroke color="icon_darkest" left="25%" top="5%" />
<Svg icon="upDown" hiddenMobile width={24} color="icon_orange" left="80%" top="80%" />
</UpDown>
<UpDownWide>
<Svg icon="arrowUp" hiddenMobile width={16} color="icon_purple" left="5%" top="80%" />
<Svg icon="triangle" width={12} stroke color="icon_brightest" left="95%" top="50%" />
<Svg icon="circle" hiddenMobile width={6} color="icon_brightest" left="85%" top="15%" />
<Svg icon="upDown" hiddenMobile width={8} color="icon_darkest" left="45%" top="10%" />
</UpDownWide>
<Svg icon="circle" hiddenMobile width={6} color="icon_brightest" left="4%" top="20%" />
<Svg icon="circle" width={12} color="icon_darkest" left="70%" top="60%" />
<Svg icon="box" width={6} color="icon_orange" left="10%" top="10%" />
<Svg icon="box" width={12} color="icon_darkest" left="20%" top="30%" />
<Svg icon="hexa" width={8} stroke color="icon_darkest" left="80%" top="70%" />
</Divider>
<Content speed={0.4} offset={offset} factor={factor}>
<Inner>
<AboutMDX />
</Inner>
</Content>
</div>
)
export default About

View File

@ -0,0 +1,61 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
import Divider from "../elements/divider"
import Inner from "../elements/inner"
import Content from "../elements/content"
import Svg from "./svg"
import { UpDown, UpDownWide, waveAnimation } from "../styles/animations"
import Footer from "./footer"
// @ts-ignore
import ContactMDX from "../sections/contact"
const Contact = ({ offset, factor = 1 }: { offset: number; factor?: number }) => (
<div>
<Divider fill="divider" speed={0.2} offset={offset} factor={factor}>
<div sx={{ position: `absolute`, bottom: 0, width: `full`, transform: `matrix(1, 0, 0, -1, 0, 0)` }}>
<div
sx={{
position: `relative`,
height: `full`,
svg: { width: `100%`, height: `40vh` },
path: { animation: waveAnimation(`20s`) },
}}
>
<svg xmlns="http://www.w3.org/2000/svg" id="contact-wave" viewBox="0 0 800 338.05" preserveAspectRatio="none">
<path>
<animate
attributeName="d"
values="M 0 100 Q 250 50 400 200 Q 550 350 800 300 L 800 0 L 0 0 L 0 100 Z;M 0 100 Q 200 150 400 200 Q 600 250 800 300 L 800 0 L 0 0 L 0 100 Z;M 0 100 Q 150 350 400 200 Q 650 50 800 300 L 800 0 L 0 0 L 0 100 Z"
repeatCount="indefinite"
dur="30s"
/>
</path>
</svg>
</div>
</div>
</Divider>
<Content speed={0.4} offset={offset} factor={factor}>
<Inner>
<ContactMDX />
</Inner>
<Footer />
</Content>
<Divider speed={0.1} offset={offset} factor={factor}>
<UpDown>
<Svg icon="upDown" hiddenMobile width={8} color="icon_darkest" left="70%" top="20%" />
<Svg icon="triangle" width={8} stroke color="icon_darkest" left="25%" top="5%" />
</UpDown>
<UpDownWide>
<Svg icon="triangle" width={12} stroke color="icon_brightest" left="95%" top="50%" />
<Svg icon="circle" width={6} color="icon_brightest" left="85%" top="15%" />
<Svg icon="upDown" hiddenMobile width={8} color="icon_darkest" left="45%" top="10%" />
</UpDownWide>
<Svg icon="circle" width={6} color="icon_brightest" left="4%" top="20%" />
<Svg icon="circle" width={12} color="icon_darkest" left="70%" top="60%" />
<Svg icon="box" width={12} color="icon_darkest" left="20%" top="30%" />
<Svg icon="hexa" width={8} stroke color="icon_darkest" left="80%" top="70%" />
</Divider>
</div>
)
export default Contact

59
src/components/footer.tsx Normal file
View File

@ -0,0 +1,59 @@
/** @jsx jsx */
import { Box, Flex, Link, useColorMode, jsx } from "theme-ui"
const Footer = () => {
const [colorMode, setColorMode] = useColorMode()
const isDark = colorMode === `dark`
const toggleColorMode = (e: any) => {
setColorMode(isDark ? `light` : `dark`)
}
return (
<Box as="footer" variant="footer">
<button
sx={{ variant: `buttons.toggle`, fontWeight: `semibold`, display: `block`, mx: `auto`, mb: 3 }}
onClick={toggleColorMode}
type="button"
aria-label="Toggle dark mode"
>
{isDark ? `Light` : `Dark`}
</button>
Copyright &copy; {new Date().getFullYear()}. All rights reserved.
<br />
<Flex
sx={{
justifyContent: `center`,
alignItems: `center`,
mt: 3,
color: `text`,
fontWeight: `semibold`,
a: { color: `text` },
}}
>
{isDark ? (
<img width="30" height="30" src="https://img.lekoarts.de/gatsby/logo_v2-light_w30.png" alt="LekoArts Logo" />
) : (
<img width="30" height="30" src="https://img.lekoarts.de/gatsby/logo_v2_w30.png" alt="LekoArts Logo" />
)}
{` `}
<Link
aria-label="Link to the theme's GitHub repository"
sx={{ ml: 2 }}
href="https://github.com/LekoArts/gatsby-themes/tree/master/themes/gatsby-theme-cara"
>
Theme
</Link>
<div sx={{ mx: 1 }}>by</div>
{` `}
<Link
aria-label="Link to the theme author's website"
href="https://www.lekoarts.de?utm_source=cara&utm_medium=Theme"
>
LekoArts
</Link>
</Flex>
</Box>
)
}
export default Footer

49
src/components/hero.tsx Normal file
View File

@ -0,0 +1,49 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
import Divider from "../elements/divider"
import Inner from "../elements/inner"
import Content from "../elements/content"
import Svg from "./svg"
import { UpDown, UpDownWide } from "../styles/animations"
// @ts-ignore
import Intro from "../sections/intro"
const Hero = ({ offset, factor = 1 }: { offset: number; factor?: number }) => (
<div>
<Divider speed={0.2} offset={offset} factor={factor}>
<UpDown>
<Svg icon="triangle" hiddenMobile width={48} stroke color="icon_orange" left="10%" top="20%" />
<Svg icon="hexa" width={48} stroke color="icon_red" left="60%" top="70%" />
<Svg icon="box" width={6} color="icon_darker" left="60%" top="15%" />
</UpDown>
<UpDownWide>
<Svg icon="arrowUp" hiddenMobile width={16} color="icon_blue" left="80%" top="10%" />
<Svg icon="triangle" width={12} stroke color="icon_brightest" left="90%" top="50%" />
<Svg icon="circle" width={16} color="icon_darker" left="70%" top="90%" />
<Svg icon="triangle" width={16} stroke color="icon_darkest" left="30%" top="65%" />
<Svg icon="cross" width={16} stroke color="icon_pink" left="28%" top="15%" />
<Svg icon="circle" width={6} color="icon_darkest" left="75%" top="10%" />
<Svg icon="upDown" hiddenMobile width={8} color="icon_darkest" left="45%" top="10%" />
</UpDownWide>
<Svg icon="circle" hiddenMobile width={24} color="icon_darker" left="5%" top="70%" />
<Svg icon="circle" width={6} color="icon_darkest" left="4%" top="20%" />
<Svg icon="circle" width={12} color="icon_darkest" left="50%" top="60%" />
<Svg icon="upDown" width={8} color="icon_darkest" left="95%" top="90%" />
<Svg icon="upDown" hiddenMobile width={24} color="icon_darker" left="40%" top="80%" />
<Svg icon="triangle" width={8} stroke color="icon_darker" left="25%" top="5%" />
<Svg icon="circle" width={64} color="icon_green" left="95%" top="5%" />
<Svg icon="box" hiddenMobile width={64} color="icon_purple" left="5%" top="90%" />
<Svg icon="box" width={6} color="icon_darkest" left="10%" top="10%" />
<Svg icon="box" width={12} color="icon_darkest" left="40%" top="30%" />
<Svg icon="hexa" width={16} stroke color="icon_darker" left="10%" top="50%" />
<Svg icon="hexa" width={8} stroke color="icon_darker" left="80%" top="70%" />
</Divider>
<Content sx={{ variant: `texts.bigger` }} speed={0.4} offset={offset} factor={factor}>
<Inner>
<Intro />
</Inner>
</Content>
</div>
)
export default Hero

45
src/components/layout.tsx Normal file
View File

@ -0,0 +1,45 @@
import * as React from "react"
import { Global } from "@emotion/react"
import SEO from "./seo"
type LayoutProps = { children: React.ReactNode; className?: string }
const Layout = ({ children, className = `` }: LayoutProps) => (
<React.Fragment>
<Global
styles={(theme) => ({
"*": {
boxSizing: `inherit`,
"&:before": {
boxSizing: `inherit`,
},
"&:after": {
boxSizing: `inherit`,
},
},
html: {
fontSize: `18px`,
WebkitTextSizeAdjust: `100%`,
},
img: {
borderStyle: `none`,
},
pre: {
fontFamily: `monospace`,
fontSize: `1em`,
},
"[hidden]": {
display: `none`,
},
"::selection": {
backgroundColor: theme.colors.primary,
color: theme.colors.background,
},
})}
/>
<SEO />
<main className={className}>{children}</main>
</React.Fragment>
)
export default Layout

View File

@ -0,0 +1,50 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
type ProjectCardProps = {
link: string
title: string
children: React.ReactNode
bg: string
}
const ProjectCard = ({ link, title, children, bg }: ProjectCardProps) => (
<a
href={link}
target="_blank"
rel="noreferrer noopener"
sx={{
width: `100%`,
boxShadow: `lg`,
position: `relative`,
textDecoration: `none`,
borderRadius: `lg`,
px: 4,
py: [4, 5],
color: `white`,
background: bg || `none`,
transition: `all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) !important`,
"&:hover": {
color: `white !important`,
transform: `translateY(-5px)`,
boxShadow: `xl`,
},
}}
>
<div sx={{ opacity: 0.85, textShadow: `0 2px 10px rgba(0, 0, 0, 0.3)` }}>{children}</div>
<div
sx={{
textTransform: `uppercase`,
letterSpacing: `wide`,
pt: 4,
fontSize: [4, 5],
fontWeight: `medium`,
lineHeight: 1,
}}
>
{title}
</div>
</a>
)
export default ProjectCard

View File

@ -0,0 +1,59 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
import Divider from "../elements/divider"
import Inner from "../elements/inner"
import Content from "../elements/content"
import Svg from "./svg"
import { UpDown, UpDownWide } from "../styles/animations"
// @ts-ignore
import ProjectsMDX from "../sections/projects"
const Projects = ({ offset, factor = 2 }: { offset: number; factor?: number }) => (
<div>
<Divider
bg="linear-gradient(to right, SlateBlue 0%, DeepSkyBlue 100%)"
sx={{ clipPath: `polygon(0 15%, 100% 25%, 100% 85%, 0 75%)` }}
speed={-0.2}
offset={1.1}
factor={factor}
/>
<Content speed={0.4} offset={offset + 0.2} factor={factor}>
<Inner>
<div
sx={{
display: `grid`,
gridGap: [4, 4, 4, 5],
gridTemplateColumns: [`1fr`, `1fr`, `repeat(2, 1fr)`],
h2: { gridColumn: `-1/1`, color: `white !important` },
}}
>
<ProjectsMDX />
</div>
</Inner>
</Content>
<Divider speed={0.1} offset={offset} factor={factor}>
<UpDown>
<Svg icon="box" width={6} color="icon_brightest" left="85%" top="75%" />
<Svg icon="upDown" width={8} color="icon_teal" left="70%" top="20%" />
<Svg icon="triangle" width={8} stroke color="icon_orange" left="25%" top="5%" />
<Svg icon="circle" hiddenMobile width={24} color="icon_brightest" left="17%" top="60%" />
</UpDown>
<UpDownWide>
<Svg icon="arrowUp" hiddenMobile width={16} color="icon_green" left="20%" top="90%" />
<Svg icon="triangle" width={12} stroke color="icon_brightest" left="90%" top="30%" />
<Svg icon="circle" width={16} color="icon_yellow" left="70%" top="90%" />
<Svg icon="triangle" hiddenMobile width={16} stroke color="icon_teal" left="18%" top="75%" />
<Svg icon="circle" width={6} color="icon_brightest" left="75%" top="10%" />
<Svg icon="upDown" hiddenMobile width={8} color="icon_green" left="45%" top="10%" />
</UpDownWide>
<Svg icon="circle" hiddenMobile width={6} color="icon_brightest" left="4%" top="20%" />
<Svg icon="circle" width={12} color="icon_pink" left="80%" top="60%" />
<Svg icon="box" width={6} color="icon_orange" left="10%" top="10%" />
<Svg icon="box" width={12} color="icon_yellow" left="29%" top="26%" />
<Svg icon="hexa" width={16} stroke color="icon_red" left="75%" top="30%" />
<Svg icon="hexa" width={8} stroke color="icon_yellow" left="80%" top="70%" />
</Divider>
</div>
)
export default Projects

60
src/components/seo.tsx Normal file
View File

@ -0,0 +1,60 @@
import * as React from "react"
import { Helmet } from "react-helmet"
import { withPrefix } from "gatsby"
import useSiteMetadata from "../hooks/use-site-metadata"
type Props = {
title?: string
description?: string
pathname?: string
image?: string
children?: React.ReactNode
}
const SEO = ({ title = ``, description = ``, pathname = ``, image = ``, children = null }: Props) => {
const site = useSiteMetadata()
const {
siteTitle,
siteTitleAlt: defaultTitle,
siteUrl,
siteDescription: defaultDescription,
siteLanguage,
siteImage: defaultImage,
author,
} = site
const seo = {
title: title || defaultTitle,
description: description || defaultDescription,
url: `${siteUrl}${pathname || ``}`,
image: `${siteUrl}${image || defaultImage}`,
}
return (
<Helmet title={title} defaultTitle={defaultTitle} titleTemplate={`%s | ${siteTitle}`}>
<html lang={siteLanguage} />
<meta name="description" content={seo.description} />
<meta name="image" content={seo.image} />
<meta property="og:title" content={seo.title} />
<meta property="og:url" content={seo.url} />
<meta property="og:description" content={seo.description} />
<meta property="og:image" content={seo.image} />
<meta property="og:type" content="website" />
<meta property="og:image:alt" content={seo.description} />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content={seo.title} />
<meta name="twitter:url" content={seo.url} />
<meta name="twitter:description" content={seo.description} />
<meta name="twitter:image" content={seo.image} />
<meta name="twitter:image:alt" content={seo.description} />
<meta name="twitter:creator" content={author} />
<meta name="gatsby-theme" content="@lekoarts/gatsby-theme-cara" />
<link rel="icon" type="image/png" sizes="32x32" href={withPrefix(`/favicon-32x32.png`)} />
<link rel="icon" type="image/png" sizes="16x16" href={withPrefix(`/favicon-16x16.png`)} />
<link rel="apple-touch-icon" sizes="180x180" href={withPrefix(`/apple-touch-icon.png`)} />
{children}
</Helmet>
)
}
export default SEO

100
src/components/svg.tsx Normal file
View File

@ -0,0 +1,100 @@
/** @jsx jsx */
import * as React from "react"
import { jsx } from "theme-ui"
import { hidden } from "../styles/utils"
const icons = {
triangle: {
shape: (
<polygon
strokeWidth="1px"
strokeLinejoin="round"
strokeMiterlimit="10"
points="14.921,2.27 28.667,25.5 1.175,25.5 "
/>
),
viewBox: `0 0 30 30`,
},
circle: {
shape: (
<path d="M15,30A15,15,0,1,1,30,15,15,15,0,0,1,15,30ZM15,6.23A8.77,8.77,0,1,0,23.77,15,8.77,8.77,0,0,0,15,6.23Z" />
),
viewBox: `0 0 30 30`,
},
arrowUp: {
shape: (
<React.Fragment>
<path d="M28.74,20.81H1.26a1.26,1.26,0,0,1-1-2L14.16.5a1.25,1.25,0,0,1,1-.5h0a1.24,1.24,0,0,1,1,.51L29.75,18.8a1.25,1.25,0,0,1-1,2ZM3.81,18.29H26.22L15.16,3.37Z" />
{` `}
<path d="M28.74,42H1.26a1.28,1.28,0,0,1-1.13-.71A1.26,1.26,0,0,1,.26,40l13.9-18.29a1.28,1.28,0,0,1,1-.5h0a1.24,1.24,0,0,1,1,.51L29.75,40a1.26,1.26,0,0,1,.12,1.32A1.28,1.28,0,0,1,28.74,42ZM3.81,39.47H26.22L15.16,24.55Z" />
</React.Fragment>
),
viewBox: `0 0 30 42`,
},
upDown: {
shape: (
<React.Fragment>
<path d="M28.74,44.58a1.28,1.28,0,0,1-1-.51L15.16,27.13l-12.89,17a1.26,1.26,0,1,1-2-1.53l13.9-18.29a1.34,1.34,0,0,1,1-.5,1.24,1.24,0,0,1,1,.51L29.75,42.56a1.27,1.27,0,0,1-1,2Z" />
<path d="M14.83,20.82h0a1.28,1.28,0,0,1-1-.52L.25,2a1.27,1.27,0,0,1,2-1.51L14.84,17.45,27.73.5a1.26,1.26,0,0,1,2,1.53L15.84,20.32A1.28,1.28,0,0,1,14.83,20.82Z" />
</React.Fragment>
),
viewBox: `0 0 30 44.58`,
},
box: {
shape: (
<path d="M28,2V28H2V2H28m.13-2H1.88A1.88,1.88,0,0,0,0,1.88V28.13A1.88,1.88,0,0,0,1.88,30H28.13A1.87,1.87,0,0,0,30,28.13V1.88A1.88,1.88,0,0,0,28.13,0Z" />
),
viewBox: `0 0 30 30`,
},
hexa: {
shape: (
<polygon
strokeLinejoin="round"
strokeMiterlimit="10"
points="27.5,21.904 15,28.809 2.5,21.904 2.5,8.095 15,1.19 27.5,8.095 "
/>
),
viewBox: `0 0 30 30`,
},
cross: {
shape: (
<path
strokeWidth="3px"
d="M60.5,50l34.8-34.8c2.9-2.9,2.9-7.6,0-10.5c-2.9-2.9-7.6-2.9-10.5,0L50,39.5L15.2,4.7c-2.9-2.9-7.6-2.9-10.5,0 c-2.9,2.9-2.9,7.6,0,10.5L39.5,50L4.7,84.8c-2.9,2.9-2.9,7.6,0,10.5c1.4,1.4,3.3,2.2,5.2,2.2s3.8-0.7,5.2-2.2L50,60.5l34.8,34.8 c1.4,1.4,3.3,2.2,5.2,2.2c1.9,0,3.8-0.7,5.2-2.2c2.9-2.9,2.9-7.6,0-10.5L60.5,50z"
/>
),
viewBox: `0 0 100 100`,
},
}
type IconType = "triangle" | "circle" | "arrowUp" | "upDown" | "box" | "hexa" | "cross"
type SVGProps = {
stroke?: boolean
color?: string | number | any
width: number
icon: IconType
left: string
top: string
hiddenMobile?: boolean
}
const Svg = ({ stroke = false, color = ``, width, icon, left, top, hiddenMobile = false }: SVGProps) => (
<svg
sx={{
position: `absolute`,
stroke: stroke ? `currentColor` : `none`,
fill: stroke ? `none` : `currentColor`,
display: hiddenMobile ? hidden : `block`,
color,
width,
left,
top,
}}
viewBox={icons[icon].viewBox}
>
{icons[icon].shape}
</svg>
)
export default Svg

32
src/elements/content.tsx Normal file
View File

@ -0,0 +1,32 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
import { ParallaxLayer } from "@react-spring/parallax"
type ContentProps = {
speed: number
offset: number
children: React.ReactNode
className?: string
factor?: number
}
const Content = ({ speed, offset, children, className = ``, factor = 1 }: ContentProps) => (
<ParallaxLayer
sx={{
padding: [3, 4, 4, 5],
display: `flex`,
flexDirection: `column`,
alignItems: `center`,
justifyContent: `center`,
zIndex: 50,
}}
speed={speed}
offset={offset}
factor={factor}
className={className}
>
{children}
</ParallaxLayer>
)
export default Content

48
src/elements/divider.tsx Normal file
View File

@ -0,0 +1,48 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
import { ParallaxLayer } from "@react-spring/parallax"
type DividerProps = {
speed: number
offset: number
children?: React.ReactNode
bg?: string
fill?: string
clipPath?: string
className?: string
factor?: number
}
const Divider = ({
speed,
offset,
factor = 1,
bg = ``,
fill = ``,
clipPath = ``,
children = null,
className = ``,
}: DividerProps) => (
<ParallaxLayer
sx={{
position: `absolute`,
width: `full`,
height: `full`,
background: bg,
backgroundColor: bg,
"#contact-wave": {
color: fill,
fill: `currentColor`,
},
clipPath,
}}
speed={speed}
offset={offset}
factor={factor}
className={className}
>
{children}
</ParallaxLayer>
)
export default Divider

15
src/elements/inner.tsx Normal file
View File

@ -0,0 +1,15 @@
/** @jsx jsx */
import { jsx } from "theme-ui"
type InnerProps = {
className?: string
children: React.ReactNode
}
const Inner = ({ className = ``, children }: InnerProps) => (
<div sx={{ width: [`full`, `full`, `full`, `full`, `full`, `2/3`], textAlign: `left` }} className={className}>
{children}
</div>
)
export default Inner

View File

@ -0,0 +1,13 @@
import * as React from "react"
import ProjectCard from "../components/project-card"
const components = {
// eslint-disable-next-line react/display-name
ProjectCard: ({ link, title, bg, children, ...props }) => (
<ProjectCard {...props} link={link} title={title} bg={bg}>
{children}
</ProjectCard>
),
}
export default components

View File

@ -0,0 +1,146 @@
import { merge } from "theme-ui"
import { tailwind } from "@theme-ui/presets"
const theme = merge(tailwind, {
initialColorModeName: `dark`,
config: {
useCustomProperties: true,
},
colors: {
primary: tailwind.colors.orange[4],
secondary: tailwind.colors.indigo[6],
text: tailwind.colors.gray[3],
heading: tailwind.colors.white,
background: `#141821`,
divider: tailwind.colors.gray[8],
textMuted: tailwind.colors.gray[5],
icon_brightest: tailwind.colors.white,
icon_darker: tailwind.colors.gray[7],
icon_darkest: tailwind.colors.gray[8],
icon_red: tailwind.colors.red[6],
icon_blue: tailwind.colors.blue[6],
icon_orange: tailwind.colors.orange[5],
icon_yellow: tailwind.colors.yellow[5],
icon_pink: tailwind.colors.pink[5],
icon_purple: tailwind.colors.purple[6],
icon_green: tailwind.colors.green[5],
modes: {
light: {
text: tailwind.colors.gray[8],
heading: tailwind.colors.black,
primary: tailwind.colors.orange[7],
background: tailwind.colors.gray[1],
divider: tailwind.colors.gray[2],
textMuted: tailwind.colors.gray[6],
icon_brightest: tailwind.colors.gray[2],
icon_darker: tailwind.colors.gray[4],
icon_darkest: tailwind.colors.gray[6],
},
},
},
breakpoints: [`400px`, `600px`, `900px`, `1200px`, `1600px`],
footer: {
textAlign: `center`,
display: `block`,
position: `absolute`,
bottom: 0,
color: `textMuted`,
px: [2, 3],
py: [3, 4],
},
styles: {
root: {
margin: 0,
padding: 0,
boxSizing: `border-box`,
textRendering: `optimizeLegibility`,
WebkitFontSmoothing: `antialiased`,
MozOsxFontSmoothing: `grayscale`,
color: `text`,
backgroundColor: `background`,
a: {
color: `primary`,
textDecoration: `none`,
transition: `all 0.3s ease-in-out`,
"&:hover": {
color: `primary`,
textDecoration: `none`,
},
},
},
p: {
fontSize: [1, 2],
letterSpacing: `-0.003em`,
lineHeight: `body`,
"--baseline-multiplier": 0.179,
"--x-height-multiplier": 0.35,
color: `text`,
},
blockquote: {
marginLeft: 0,
p: {
fontSize: [2, 3],
fontWeight: `medium`,
color: `heading`,
},
},
h1: {
fontSize: [6, 7, 8],
mt: 2,
mb: 3,
textShadow: `rgba(255, 255, 255, 0.15) 0px 5px 35px`,
letterSpacing: `wide`,
color: `heading`,
},
h2: {
fontSize: [4, 5, 6],
mt: 2,
mb: 2,
color: `heading`,
},
h3: {
fontSize: [3, 4, 5],
mt: 3,
color: `heading`,
},
h4: {
fontSize: [2, 3, 4],
color: `heading`,
},
h5: {
fontSize: [1, 2, 3],
color: `heading`,
},
h6: {
fontSize: 1,
mb: 2,
color: `heading`,
},
},
layout: {
container: {
maxWidth: `5xl`,
},
},
buttons: {
toggle: {
color: `background`,
border: `none`,
backgroundColor: `text`,
cursor: `pointer`,
alignSelf: `center`,
px: 3,
py: 2,
ml: 3,
},
},
texts: {
bigger: {
p: {
fontSize: [2, 3, 4],
},
},
},
})
export default theme

View File

@ -0,0 +1,40 @@
import { graphql, useStaticQuery } from "gatsby"
type UseSiteMetadataProps = {
site: {
siteMetadata: {
siteTitle: string
siteTitleAlt: string
siteHeadline: string
siteUrl: string
siteDescription: string
siteLanguage: string
siteImage: string
author: string
[key: string]: unknown
}
}
}
const useSiteMetadata = () => {
const data = useStaticQuery<UseSiteMetadataProps>(graphql`
query {
site {
siteMetadata {
siteTitle
siteTitleAlt
siteHeadline
siteUrl
siteDescription
siteLanguage
siteImage
author
}
}
}
`)
return data.site.siteMetadata
}
export default useSiteMetadata

1
src/index.d.ts vendored Normal file
View File

@ -0,0 +1 @@
declare module 'gatsby-plugin-mdx'

View File

@ -1,184 +1,20 @@
import * as React from "react"
import { Parallax } from "@react-spring/parallax"
import Layout from "../components/layout"
import Hero from "../components/hero"
import Projects from "../components/projects"
import About from "../components/about"
import Contact from "../components/contact"
// styles
const pageStyles = {
color: "#232129",
padding: 96,
fontFamily: "-apple-system, Roboto, sans-serif, serif",
}
const headingStyles = {
marginTop: 0,
marginBottom: 64,
maxWidth: 320,
}
const headingAccentStyles = {
color: "#663399",
}
const paragraphStyles = {
marginBottom: 48,
}
const codeStyles = {
color: "#8A6534",
padding: 4,
backgroundColor: "#FFF4DB",
fontSize: "1.25rem",
borderRadius: 4,
}
const listStyles = {
marginBottom: 96,
paddingLeft: 0,
}
const listItemStyles = {
fontWeight: 300,
fontSize: 24,
maxWidth: 560,
marginBottom: 30,
}
const linkStyle = {
color: "#8954A8",
fontWeight: "bold",
fontSize: 16,
verticalAlign: "5%",
}
const docLinkStyle = {
...linkStyle,
listStyleType: "none",
marginBottom: 24,
}
const descriptionStyle = {
color: "#232129",
fontSize: 14,
marginTop: 10,
marginBottom: 0,
lineHeight: 1.25,
}
const docLink = {
text: "Documentation",
url: "https://www.gatsbyjs.com/docs/",
color: "#8954A8",
}
const badgeStyle = {
color: "#fff",
backgroundColor: "#088413",
border: "1px solid #088413",
fontSize: 11,
fontWeight: "bold",
letterSpacing: 1,
borderRadius: 4,
padding: "4px 6px",
display: "inline-block",
position: "relative",
top: -2,
marginLeft: 10,
lineHeight: 1,
}
// data
const links = [
{
text: "Tutorial",
url: "https://www.gatsbyjs.com/docs/tutorial/",
description:
"A great place to get started if you're new to web development. Designed to guide you through setting up your first Gatsby site.",
color: "#E95800",
},
{
text: "How to Guides",
url: "https://www.gatsbyjs.com/docs/how-to/",
description:
"Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.",
color: "#1099A8",
},
{
text: "Reference Guides",
url: "https://www.gatsbyjs.com/docs/reference/",
description:
"Nitty-gritty technical descriptions of how Gatsby works. Most useful when you need detailed information about Gatsby's APIs.",
color: "#BC027F",
},
{
text: "Conceptual Guides",
url: "https://www.gatsbyjs.com/docs/conceptual/",
description:
"Big-picture explanations of higher-level Gatsby concepts. Most useful for building understanding of a particular topic.",
color: "#0D96F2",
},
{
text: "Plugin Library",
url: "https://www.gatsbyjs.com/plugins",
description:
"Add functionality and customize your Gatsby site or app with thousands of plugins built by our amazing developer community.",
color: "#8EB814",
},
{
text: "Build and Host",
url: "https://www.gatsbyjs.com/cloud",
badge: true,
description:
"Now youre ready to show the world! Give your Gatsby site superpowers: Build and host on Gatsby Cloud. Get started for free!",
color: "#663399",
},
]
// markup
const IndexPage = () => {
return (
<main style={pageStyles}>
<title>Home Page</title>
<h1 style={headingStyles}>
Congratulations
<br />
<span style={headingAccentStyles}> you just made a Gatsby site! </span>
<span role="img" aria-label="Party popper emojis">
🎉🎉🎉
</span>
</h1>
<p style={paragraphStyles}>
Edit <code style={codeStyles}>src/pages/index.js</code> to see this page
update in real-time.{" "}
<span role="img" aria-label="Sunglasses smiley emoji">
😎
</span>
</p>
<ul style={listStyles}>
<li style={docLinkStyle}>
<a
style={linkStyle}
href={`${docLink.url}?utm_source=starter&utm_medium=start-page&utm_campaign=minimal-starter`}
>
{docLink.text}
</a>
</li>
{links.map(link => (
<li key={link.url} style={{ ...listItemStyles, color: link.color }}>
<span>
<a
style={linkStyle}
href={`${link.url}?utm_source=starter&utm_medium=start-page&utm_campaign=minimal-starter`}
>
{link.text}
</a>
{link.badge && (
<span style={badgeStyle} aria-label="New Badge">
NEW!
</span>
)}
<p style={descriptionStyle}>{link.description}</p>
</span>
</li>
))}
</ul>
<img
alt="Gatsby G Logo"
src="data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2a10 10 0 110 20 10 10 0 010-20zm0 2c-3.73 0-6.86 2.55-7.75 6L14 19.75c3.45-.89 6-4.02 6-7.75h-5.25v1.5h3.45a6.37 6.37 0 01-3.89 4.44L6.06 9.69C7 7.31 9.3 5.63 12 5.63c2.13 0 4 1.04 5.18 2.65l1.23-1.06A7.959 7.959 0 0012 4zm-8 8a8 8 0 008 8c.04 0 .09 0-8-8z' fill='%23639'/%3E%3C/svg%3E"
/>
</main>
const Cara = () => (
<Layout>
<Parallax pages={5}>
<Hero offset={0} factor={1} />
<Projects offset={1} factor={2} />
<About offset={3} factor={1} />
<Contact offset={4} factor={1} />
</Parallax>
</Layout>
)
}
export default IndexPage
export default Cara

5
src/sections/about.mdx Normal file
View File

@ -0,0 +1,5 @@
## About
> The English language can not fully capture the depth and complexity of my thoughts. So I'm incorporating Emoji into my speech to better express myself. Winky face.
You know the way you feel when you see a picture of two otters holding hands? That's how you're gonna feel every day. My mother cried the day I was born because she knew shed never be prettier than me. You should make me your campaign manager. I was born for politics. I have great hair and I love lying. Captain? The kids want to know where Paulie the Pigeon is. I told them he got sucked up into an airplane engine, is that all right?

3
src/sections/contact.mdx Normal file
View File

@ -0,0 +1,3 @@
## Get in touch
Say [Hi](plizNoSp4m@domain.tld) or find me on other platforms: [Dribbble](https://dribbble.com/LekoArts) & [Twitter](https://www.twitter.com/lekoarts_de)

3
src/sections/intro.mdx Normal file
View File

@ -0,0 +1,3 @@
# Hello, I'm Aakanksha.
I'm creating noice web experiences for the next generation of consumer-facing companies

32
src/sections/projects.mdx Normal file
View File

@ -0,0 +1,32 @@
## Projects
<ProjectCard
title="Tips & Tricks for Gatsby"
link="https://www.lekoarts.de/gatsby/tips-and-tricks-for-gatsby?utm_source=cara&utm_medium=Theme"
bg="linear-gradient(to right, #D4145A 0%, #FBB03B 100%)"
>
A collection of short, but useful quick tips shared by me and the community
about Gatsby. From GraphQL over local development to deployment.
</ProjectCard>
<ProjectCard
title="Setting up a yarn Workspace"
link="https://www.lekoarts.de/javascript/setting-up-a-yarn-workspace-with-typescript-eslint-and-cypress?utm_source=cara&utm_medium=Theme"
bg="linear-gradient(to right, #662D8C 0%, #ED1E79 100%)"
>
A robust solution for multi-package repositories.
</ProjectCard>
<ProjectCard
title="Adding a Draft Feature to Gatsby"
link="https://www.lekoarts.de/garden/adding-a-draft-feature-to-gatsby?utm_source=cara&utm_medium=Theme"
bg="linear-gradient(to right, #009245 0%, #FCEE21 100%)"
>
A solution with the createSchemaCustomization API.
</ProjectCard>
<ProjectCard
title="Theme UI Plugin for Figma"
link="https://www.lekoarts.de/design/introducing-the-theme-ui-plugin-for-figma?utm_source=cara&utm_medium=Theme"
bg="linear-gradient(to right, #D585FF 0%, #00FFEE 100%)"
>
The Theme UI plugin for Figma allows for a workflow where Theme UI is the
starting point both for design & development.
</ProjectCard>

77
src/styles/animations.tsx Normal file
View File

@ -0,0 +1,77 @@
/** @jsx jsx */
import * as React from "react"
import { keyframes, css, jsx } from "@emotion/react"
const wave = keyframes`
0% {
d: path("M 0 100 Q 250 50 400 200 Q 550 350 800 300 L 800 0 L 0 0 L 0 100 Z");
}
50% {
d: path("M 0 100 Q 200 150 400 200 Q 600 250 800 300 L 800 0 L 0 0 L 0 100 Z");
}
100% {
d: path("M 0 100 Q 150 350 400 200 Q 650 50 800 300 L 800 0 L 0 0 L 0 100 Z");
}
`
const upDown = keyframes`
from {
transform: translateY(0);
}
to {
transform: translateY(30px);
}
`
const upDownWide = keyframes`
from {
transform: translateY(0);
}
to {
transform: translateY(200px);
}
`
const upDownAnimation = css`
${upDown} 4s ease-in-out infinite alternate;
`
const upDownWideAnimation = css`
${upDownWide} 18s ease-in-out infinite alternate;
`
export function UpDown({ children }: { children: React.ReactNode }) {
return (
<div
css={css`
animation: ${upDownAnimation};
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
`}
>
{children}
</div>
)
}
export function UpDownWide({ children }: { children: React.ReactNode }) {
return (
<div
css={css`
animation: ${upDownWideAnimation};
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
`}
>
{children}
</div>
)
}
export const waveAnimation = (length: string) => `${wave} ${length} linear infinite alternate`

1
src/styles/utils.tsx Normal file
View File

@ -0,0 +1 @@
export const hidden = [`none`, `none`, `block`]

20
src/templates/cara.tsx Normal file
View File

@ -0,0 +1,20 @@
import * as React from "react"
import { Parallax } from "@react-spring/parallax"
import Layout from "../components/layout"
import Hero from "../components/hero"
import Projects from "../components/projects"
import About from "../components/about"
import Contact from "../components/contact"
const Cara = () => (
<Layout>
<Parallax pages={5}>
<Hero offset={0} factor={1} />
<Projects offset={1} factor={2} />
<About offset={3} factor={1} />
<Contact offset={4} factor={1} />
</Parallax>
</Layout>
)
export default Cara