dwysokinski.me/src/features/HomePage/components/Portfolio/Portfolio.js

198 lines
4.8 KiB
JavaScript

import React from "react"
import { useStaticQuery, graphql } from "gatsby"
import { makeStyles } from "@material-ui/core/styles"
import { Typography, Container } from "@material-ui/core"
import Section, { BG_COLOR } from "@components/Section"
import Project from "./Project"
const useStyles = makeStyles(theme => ({
section: {
transform: "skewY(-7deg)",
padding: "8rem 0",
margin: "6rem 0",
"& > *": {
transform: "skewY(7deg)",
},
[theme.breakpoints.down("sm")]: {
margin: "3rem 0",
},
},
projects: {
"& > *:not(:last-child)": {
marginBottom: theme.spacing(2),
},
},
}))
export const SECTION_ID = "portfolio"
function Portfolio() {
const classes = useStyles()
const data = useStaticQuery(graphql`
{
allCoverImages: allFile(
filter: { absolutePath: { regex: "/projects/" } }
) {
edges {
node {
relativePath
childImageSharp {
id
fluid(maxWidth: 1000) {
...GatsbyImageSharpFluid
}
}
}
}
}
}
`)
return (
<Section
id={SECTION_ID}
className={classes.section}
bgColor={BG_COLOR.PRIMARY}
>
<Container>
<Typography variant="h2" align="center" gutterBottom>
My work
</Typography>
<div className={classes.projects}>
{projects.map((project, index) => {
let fluid = undefined
if (project.fluid) {
const edge = data.allCoverImages.edges.find(
img => img.node.relativePath === project.fluid
)
if (edge) {
fluid = edge.node.childImageSharp.fluid
}
}
return (
<Project
key={project.title}
{...project}
fluid={fluid}
reverse={(index + 1) % 2 === 0}
/>
)
})}
</div>
</Container>
</Section>
)
}
const projects = [
{
title: "TWHelp",
description:
"A stat tracking and tools website, scripts, a public GraphQL API and a Discord bot for the browser-based game Tribal Wars.",
technologies: [
"GraphQL",
"Golang",
"gqlgen",
"Gin",
"discordgo",
"robfig/cron",
"Redis",
"PostgreSQL",
"TypeScript",
"React",
"Gatsby",
"Material-UI",
"Create React App",
"Apollo",
"Parcel",
"Docker",
"Traefik",
],
github: "https://github.com/tribalwarshelp",
fluid: "projects/twhelp.png",
live: "https://tribalwarshelp.com/",
},
{
title: "Zdam Egzamin Zawodowy",
description:
"A mobile and web app for practising the theoretical part of the vocational exam.",
technologies: [
"GraphQL",
"Golang",
"gqlgen",
"Echo",
"PostgreSQL",
"React",
"Next.JS",
"Material-UI",
"Apollo",
"React Native",
],
github: "",
fluid: "projects/zdam.png",
live: "https://zdamegzaminzawodowy.pl/",
},
{
title: "matura-z-informatyki.pl",
description: "",
technologies: ["React", "Next.JS", "Bulma", "Ghost"],
github: "https://github.com/Kichiyaki/matura-z-informatyki.pl",
live: "https://matura-z-informatyki.pl/",
fluid: "projects/maturazinf.png",
},
{
title: "dwysokinski.me",
description: "",
technologies: ["React", "Gatsby", "Material-UI"],
github: "https://github.com/Kichiyaki/dwysokinski.me",
live: "https://dwysokinski.me",
fluid: "projects/dw.png",
},
{
title: "OLX Crawler",
description: "An app written in Go to observe olx.pl ads.",
technologies: [
"Golang",
"Colly",
"SQLite3",
"Echo",
"React",
"Material-UI",
],
fluid: "projects/olx.png",
github: "https://github.com/Kichiyaki/olx-crawler",
},
{
title: "Instaling.pl Bot",
description: "A bot that solves the instaling.pl vocabulary test for you.",
technologies: ["Golang", "Lorca"],
fluid: "projects/instaling.png",
github: "https://github.com/Kichiyaki/Instaling-Bot",
},
{
title: "Margonem Mini Bot",
description:
"A bot for the mobile client of the browser-based MMORPG game Margonem.",
technologies: ["Golang", "Colly"],
fluid: "projects/margonem.png",
github: "https://github.com/Kichiyaki/margonem-mini-bot",
},
{
title: "Akademia Młodego Inżyniera",
description: "",
technologies: ["HTML", "CSS", "Bootstrap"],
live: "https://dwysokinski.me/preview/akademia/",
fluid: "projects/amz.png",
},
{
title: "Freshline",
description: "",
technologies: ["Wordpress", "CSS", "Bootstrap"],
live: "http://fresh-line.pl/",
fluid: "projects/freshline.png",
},
]
export default Portfolio