mirror of https://github.com/mkrhere/pw2
Muthu Kumar
4 years ago
9 changed files with 326 additions and 2 deletions
@ -1,5 +1,17 @@ |
|||
import { Router } from "@reach/router"; |
|||
|
|||
import Home from "./pages/Home"; |
|||
import Exp from "./pages/Exp"; |
|||
import Projects from "./pages/Projects"; |
|||
|
|||
function App() { |
|||
return <div className="App"></div>; |
|||
return ( |
|||
<Router> |
|||
<Home path="/" /> |
|||
<Exp path="/experience" /> |
|||
<Projects path="/projects" /> |
|||
</Router> |
|||
); |
|||
} |
|||
|
|||
export default App; |
|||
|
@ -0,0 +1,28 @@ |
|||
import { css } from "emotion"; |
|||
|
|||
const Container = ({ children, ...props }) => ( |
|||
<div |
|||
className={css` |
|||
background: #000; |
|||
padding: calc(100vw / 8); |
|||
overflow-x: hidden; |
|||
min-height: 100vh; |
|||
`}>
|
|||
<div |
|||
className={css` |
|||
width: 100%; |
|||
max-width: 60rem; |
|||
min-height: 100%; |
|||
margin: auto; |
|||
|
|||
& > * { |
|||
margin-bottom: 2rem; |
|||
} |
|||
`}
|
|||
{...props}> |
|||
{children} |
|||
</div> |
|||
</div> |
|||
); |
|||
|
|||
export default Container; |
@ -0,0 +1,102 @@ |
|||
import { css } from "emotion"; |
|||
import Container from "../components/Container"; |
|||
|
|||
const exp = [ |
|||
{ title: "BlueCube", location: "Chennai", position: "Architectural Intern", year: "2015" }, |
|||
{ title: "Zoho", location: "Chennai", position: "Technical Content Writer", year: "2017" }, |
|||
{ |
|||
title: "Manoj Exports", |
|||
location: "Chennai", |
|||
position: "Designer & web developer", |
|||
year: "2017", |
|||
}, |
|||
{ title: "Klenty", location: "Chennai", position: "Full stack developer", year: "2018" }, |
|||
{ |
|||
title: "Hugo's Way", |
|||
location: "Ireland (remote)", |
|||
position: "Full stack developer", |
|||
year: "2018-19", |
|||
}, |
|||
{ title: "Feathers Studio", location: "Chennai", position: "Founder", year: "2019-present" }, |
|||
]; |
|||
|
|||
const Circle = () => ( |
|||
<div> |
|||
<div |
|||
className={css` |
|||
width: 200vw; |
|||
height: 1px; |
|||
background: #333333; |
|||
left: -50vw; |
|||
position: absolute; |
|||
top: calc(-2rem + 0.25rem / 2 - 0.5px); |
|||
z-index: 0; |
|||
`}></div>
|
|||
<div |
|||
className={css` |
|||
width: 0.25rem; |
|||
height: 0.25rem; |
|||
background: #ffffff; |
|||
border-radius: 100%; |
|||
position: absolute; |
|||
top: -2rem; |
|||
left: 0; |
|||
z-index: 100; |
|||
`}></div>
|
|||
</div> |
|||
); |
|||
|
|||
const ExpUnit = ({ title, location, position, year }) => { |
|||
return ( |
|||
<div |
|||
className={css` |
|||
position: relative; |
|||
`}>
|
|||
<Circle /> |
|||
<h3> |
|||
{title}, {location} |
|||
</h3> |
|||
<span |
|||
className={css` |
|||
color: #bdbdbd; |
|||
`}>
|
|||
{position} |
|||
</span> |
|||
{" . "} |
|||
<span |
|||
className={css` |
|||
font-weight: 100; |
|||
`}>
|
|||
{year} |
|||
</span> |
|||
</div> |
|||
); |
|||
}; |
|||
|
|||
function Exp() { |
|||
return ( |
|||
<Container> |
|||
<h2>I’m a 25 year old developer from Chennai, India.</h2> |
|||
<p>Here are some places I’ve worked at:</p> |
|||
<div |
|||
className={css` |
|||
display: flex; |
|||
width: 100%; |
|||
flex-wrap: wrap; |
|||
|
|||
& > * { |
|||
flex-basis: 15rem; |
|||
flex-grow: 1; |
|||
margin-top: 4rem; |
|||
margin-right: 3%; |
|||
} |
|||
`}>
|
|||
{exp.map(unit => ( |
|||
<ExpUnit {...unit} /> |
|||
))} |
|||
</div> |
|||
</Container> |
|||
); |
|||
} |
|||
|
|||
export default Exp; |
@ -0,0 +1,41 @@ |
|||
import { css } from "emotion"; |
|||
import Container from "../components/Container"; |
|||
|
|||
const Em = props => ( |
|||
<span |
|||
className={css` |
|||
border-bottom: 1px dashed #fff; |
|||
`}>
|
|||
{props.children} |
|||
</span> |
|||
); |
|||
|
|||
function Home() { |
|||
return ( |
|||
<Container> |
|||
<h1 |
|||
className={css` |
|||
line-height: 1em; |
|||
margin-bottom: 0; |
|||
|
|||
h1& { |
|||
margin-bottom: 0; |
|||
} |
|||
`}>
|
|||
MKRhere |
|||
</h1> |
|||
<p> |
|||
Web home of <Em>designer</Em>, <Em>developer</Em>, and <Em>architect</Em>{" "} |
|||
<span |
|||
className={css` |
|||
font-weight: 800; |
|||
/* color: var(--primary-color); */ |
|||
`}>
|
|||
Muthu Kumar. |
|||
</span> |
|||
</p> |
|||
</Container> |
|||
); |
|||
} |
|||
|
|||
export default Home; |
@ -0,0 +1,142 @@ |
|||
import { css } from "emotion"; |
|||
import Container from "../components/Container"; |
|||
|
|||
const exp = [ |
|||
{ |
|||
title: window.location.hostname, |
|||
description: "This website.", |
|||
url: "https://github.com/mkrhere/pw2", |
|||
cat: "web", |
|||
tags: ["react", "css-in-js"], |
|||
}, |
|||
{ |
|||
title: "runtype", |
|||
description: "Runtime-safe library to bring untyped values into TypeScript.", |
|||
url: "https://codefeathers.github.io/runtype", |
|||
cat: "lib", |
|||
tags: ["typescript", "runtime"], |
|||
}, |
|||
{ |
|||
title: "Telecraft", |
|||
description: "Pluggable Minecraft server management utils.", |
|||
url: "https://github.com/telecraft", |
|||
cat: "tool", |
|||
tags: ["minecraft", "node"], |
|||
}, |
|||
{ |
|||
title: window.location.hostname, |
|||
description: "This website.", |
|||
url: "https://github.com/mkrhere/pw2", |
|||
cat: "web", |
|||
tags: ["react", "css-in-js"], |
|||
}, |
|||
{ |
|||
title: "runtype", |
|||
description: "Runtime-safe library to bring untyped values into TypeScript.", |
|||
url: "https://codefeathers.github.io/runtype", |
|||
cat: "lib", |
|||
tags: ["typescript", "runtime"], |
|||
}, |
|||
{ |
|||
title: "Telecraft", |
|||
description: "Pluggable Minecraft server management utils.", |
|||
url: "https://github.com/telecraft", |
|||
cat: "tool", |
|||
tags: ["minecraft", "node"], |
|||
}, |
|||
]; |
|||
|
|||
const ExpUnit = ({ title, url, description, cat, tags }) => { |
|||
return ( |
|||
<div |
|||
className={css` |
|||
position: relative; |
|||
border: 0.2rem solid var(--primary-color); |
|||
padding: 1rem; |
|||
cursor: default; |
|||
|
|||
display: flex; |
|||
flex-direction: column; |
|||
transition: filter; |
|||
|
|||
:hover { |
|||
filter: hue-rotate(30deg); |
|||
} |
|||
`}>
|
|||
<div |
|||
className={css` |
|||
position: absolute; |
|||
border-top: 0.5rem solid var(--primary-color); |
|||
top: 0; |
|||
left: 0; |
|||
`}></div>
|
|||
<a |
|||
className={css` |
|||
display: block; |
|||
text-decoration: none; |
|||
`}
|
|||
href={url} |
|||
target="_blank" |
|||
rel="noreferrer"> |
|||
<h3>{title}</h3> |
|||
<p |
|||
className={css` |
|||
color: #bdbdbd; |
|||
margin-bottom: 0.8rem; |
|||
`}>
|
|||
{description} |
|||
</p> |
|||
<p |
|||
className={css` |
|||
font-weight: 800; |
|||
color: #9f9f9f; |
|||
font-size: 0.8rem; |
|||
margin-top: auto; |
|||
`}>
|
|||
{tags.map(tag => ( |
|||
<span key={tag}>#{tag} </span> |
|||
))} |
|||
</p> |
|||
<span |
|||
className={css` |
|||
position: absolute; |
|||
right: 1rem; |
|||
bottom: 1rem; |
|||
font-weight: bold; |
|||
color: #bbb; |
|||
font-size: 0.8rem; |
|||
`}>
|
|||
{cat} |
|||
</span> |
|||
</a> |
|||
</div> |
|||
); |
|||
}; |
|||
|
|||
function Exp() { |
|||
return ( |
|||
<Container> |
|||
<h2>What else have I built?</h2> |
|||
<p>Some tools, libraries, and apps over time:</p> |
|||
<div |
|||
className={css` |
|||
display: flex; |
|||
width: 100%; |
|||
flex-wrap: wrap; |
|||
|
|||
& > * { |
|||
flex-basis: 15rem; |
|||
flex-grow: 1; |
|||
margin-top: 2rem; |
|||
margin-right: 3%; |
|||
} |
|||
`}>
|
|||
{exp.map(unit => ( |
|||
<ExpUnit {...unit} /> |
|||
))} |
|||
</div> |
|||
</Container> |
|||
); |
|||
} |
|||
|
|||
export default Exp; |
Loading…
Reference in new issue