mirror of https://github.com/mkrhere/pw2
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.
152 lines
3.1 KiB
152 lines
3.1 KiB
4 years ago
|
import React from "react";
|
||
5 years ago
|
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"],
|
||
|
},
|
||
|
{
|
||
5 years ago
|
title: "mkr/bin",
|
||
|
description: "Frontend JavaScript-free code-sharing pastebin app.",
|
||
|
url: "https://github.com/mkrhere/bin",
|
||
5 years ago
|
cat: "web",
|
||
5 years ago
|
tags: ["mithril", "ssr", "pastebin"],
|
||
5 years ago
|
},
|
||
|
{
|
||
5 years ago
|
title: "The Guard",
|
||
|
description: "Telegram bot to help administer networks with large number of groups.",
|
||
|
url: "https://github.com/thedevs-network/the-guard",
|
||
|
cat: "bot",
|
||
|
tags: ["telegram", "bot"],
|
||
5 years ago
|
},
|
||
|
{
|
||
5 years ago
|
title: "vy",
|
||
|
description: "(in dev) Stream-first functional utilities library.",
|
||
|
url: "https://github.com/MKRhere/vy",
|
||
|
cat: "lib",
|
||
|
tags: ["typescript", "stream", "functional-programming"],
|
||
5 years ago
|
},
|
||
|
];
|
||
|
|
||
4 years ago
|
type Project = {
|
||
|
title: string;
|
||
|
url: string;
|
||
|
description: string;
|
||
|
cat: string;
|
||
|
tags: string[];
|
||
|
};
|
||
|
|
||
|
const ProjectUnit: React.FunctionComponent<Project> = ({ title, url, description, cat, tags }) => {
|
||
5 years ago
|
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;
|
||
5 years ago
|
color: #bbbbbb;
|
||
5 years ago
|
font-size: 0.8rem;
|
||
|
`}>
|
||
|
{cat}
|
||
|
</span>
|
||
|
</a>
|
||
|
</div>
|
||
|
);
|
||
|
};
|
||
|
|
||
4 years ago
|
const Exp: React.FunctionComponent = () => {
|
||
5 years ago
|
return (
|
||
5 years ago
|
<Container next="/contact">
|
||
5 years ago
|
<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 => (
|
||
5 years ago
|
<ProjectUnit {...unit} key={unit.title} />
|
||
5 years ago
|
))}
|
||
|
</div>
|
||
|
</Container>
|
||
|
);
|
||
4 years ago
|
};
|
||
5 years ago
|
|
||
|
export default Exp;
|