create CV page

master
TBS093A 2022-02-09 21:22:20 +01:00
parent 75dedede16
commit 075981a4e8
5 changed files with 400 additions and 176 deletions

Binary file not shown.

Binary file not shown.

BIN
src/images/me.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -1,183 +1,270 @@
import * as React from "react" import * as React from "react"
import "../styles/general.scss"
import MePng from "../images/me.png"
// styles const SegmentWithImage = ({ segment }) => {
const pageStyles = { return (
color: "#232129", <div>
padding: 96, <img
fontFamily: "-apple-system, Roboto, sans-serif, serif", src={ MePng }
} className="segment_image"
const headingStyles = { />
marginTop: 0, <div className="segment_title segment_title_image">
marginBottom: 64, { segment.title }
maxWidth: 320, </div>
} <div className="segment_content_image">
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", typeof segment.content === "object" ?
url: "https://www.gatsbyjs.com/docs/tutorial/", Object.keys(segment.content).map( (key) => {
description: return (
"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", <div
className="segment_image_item"
key={ "item_" + key }
>
{ key + ": " }
</div>
<div
className="segment_image_item subitem"
>
{
segment.content[key].includes("github.com") ?
<a href={ "https://" + segment.content[key] }>
{ segment.content[key] }
</a>
:
segment.content[key]
}
</div>
</>
)
}
)
:
"lol"
}
</div>
</div>
)
}
const SegmentNormal = ({ segment }) => {
return (
<div>
<div className="segment_title">
{ segment.title }
</div>
<div className="segment_content">
<ul>
{
typeof segment.content === "object" ?
Object.keys(segment.content).map( (key) => {
return (
<li key={ "item_" + key }>
{
typeof segment.content[key] === "object" ?
key + ": "
:
key + ","
}
<ul>
{
typeof segment.content[key] === "object" ?
segment.content[key].map( (value, index) => {
return (
<li key={ index }>
{
typeof value === "object" ?
Object.keys( value ).map( ( key_two, index_two) => {
return (
<>
{ key_two + ": " }
<ul key={ index_two }>
{
typeof value === "object" ?
value[key_two].map( (item, index_three) => {
return (
<li>
{ item + "," }
</li>
)
}
)
:
value + ","
}
</ul>
</>
)
}
)
:
value + ","
}
</li>
)
}
)
:
""
}
</ul>
</li>
)
}
)
:
"lol"
}
</ul>
</div>
</div>
)
}
const SegmentRODO = ({ segment }) => {
return (
<div>
<div className="segment_content foot_content">
{ segment.content }
</div>
</div>
)
}
const Segment = ({ index, segment }) => {
let segment_index = "segment_" + index
return (
<div
className="segment_general"
id={ segment_index }
key={ segment_index }
>
{
"image" in segment ?
<SegmentWithImage
segment={ segment }
/>
:
segment.title === "" ?
<SegmentRODO
segment={ segment }
/>
:
<SegmentNormal
segment={ segment }
/>
}
</div>
)
}
const IndexPage = () => {
let content = [
{
title: "Kamil Żuk",
image: "me.png",
content: {
"E-mail": "zukkamil.44@gmail.com",
"Github": "github.com/tbs093a",
"Wykształcenie": "Wyższe / Inżynier",
"Miejsce Zamieszkania": "Rzeszów / Polska",
"Data Urodzenia": "30.06.1997 r.",
}
}, },
{ {
text: "How to Guides", title: "Umiejętności",
url: "https://www.gatsbyjs.com/docs/how-to/", content: {
description: "Programowanie": [
"Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.", "Python - Django / Django REST Framework / Channels 3.0",
color: "#1099A8", "Javascript - ReactJS / Redux Toolkit",
],
"Obsługa Narzędzi DevOps": [
"Jenkins / Ansible / Docker / Docker-Compose / Docker Swarm / Kubernetes / Automatyzacja w Bash",
],
"Konfiguracja & Administracja Baz Danych": [
"SQL - MariaDB / MySQL / PostgreSQL",
"NoSQL - MongoDb / ElasticSearch / Redis"
],
"Język Angielski": [
"Poziom B2",
],
}
}, },
{ {
text: "Reference Guides", title: "Doświadczenie",
url: "https://www.gatsbyjs.com/docs/reference/", content: {
description: "Zespół Szkół Elektronicznych w Rzeszowie / Technikum nr 6 - Technik Informatyk - od 2013 do 2017": "",
"Nitty-gritty technical descriptions of how Gatsby works. Most useful when you need detailed information about Gatsby's APIs.", "Uniwersytet Rzeszowski - Studia Inżynierskie - Informatyka - od 2017 do 2021": [
color: "#BC027F", {
"Praca Inżynierska - Graficzna baza układów dłoni na potrzeby systemu rozpoznawania Polskiego Języka Migowego (PJM)": [
"integracja Django / Django REST Framework z oprogramowaniem Blender",
"integracja Djnago / Django REST Framework z bazą danych MongoDb podzielonej na fragmenty (shards)",
"implementacja protokołu WebSocket (moduł Channles 3.0) do monitorowania procesu renderowania układów dłoni w czasie rzeczywistym",
"implementacja synchronicznego API w Django REST Framework do zarządzania wyrenderowanymi obrazami oraz modelami 3D",
"implementacja asynchronicznego API w Django + Channels 3.0 + Redis do nadzorowania procesu renderowania na serwerze w czasie rzeczywistym",
"implementacja aplikacji klienckiej w ReactJS / Gatsby + Redux Toolkit do obsługi synchronicznego i asynchronicznego API",
"wdrożenie aplikacji w formie rozproszonej dzięki narzędziom konteneryzacji i orkiestracji Docker + Docker-Compose",
"implementacja skryptów Bash automatyzujących migrację / konfigurację wszystkich środowisk konteneryzacyjnych na podstawie zmeinnych środowiskowych",
"wykonanie modelu trójwymiarowgo dłoni przeznaczonego do renderowania realistycznych próbek (zdjęć) układów dłoni, jako materiały do nauki systemu rozpoznawania PJM",
]
}
],
"Sembot Sp. z o. o. - DevOps Engineer & Python Developer - od 01.11.2020": [
"Obowiązki związane z administracją serwerów (OVH / AWS / Digital Ocean)",
"Obowiązki związane z automatyzacją operacji rutynowych (Ansible / Jenkins pipeline / Bash scripts)",
"Obowiązki związane z wdrażaniem produkcyjnym oprogramowania zorientowanego na kontenerach (Docker / Docker-Compose / Docker Swarm)",
"Obowiązki związane z konfiguracją serwerową (Nginx / Apache / Docker)",
"Obowiązki związane z programowaniem narzędzi marchtech (Python / Django / Django REST Framework)",
"Obowiązki związane z implementacją i konfiguracją baz danych do obsługi narzędzi marchtech (Big Data) (MongoDb / Elasticsearch / MariaDb / MySQL / Redis / AWS SQS)"
]
}
}, },
{ {
text: "Conceptual Guides", title: "Zainteresowania",
url: "https://www.gatsbyjs.com/docs/conceptual/", content: {
description: "Web3.0": [
"Big-picture explanations of higher-level Gatsby concepts. Most useful for building understanding of a particular topic.", "Blockchain / Cryptography",
color: "#0D96F2", ],
"Artificial Intelligence / Machine Learning": "",
"IT Security": "",
"Grafika Trójwymiarowa & Dwuwymiarowa": "",
}
}, },
{ {
text: "Plugin Library", title: "",
url: "https://www.gatsbyjs.com/plugins", content: "Wyrażam zgodę na przetwarzanie moich danych osobowych dla potrzeb niezbędnych do realizacji procesu rekrutacji zgodnie z Rozporządzeniem Parlamentu Europejskiego i Rady (UE) 2016/679 z dnia 27 kwietnia 2016 r. w sprawie ochrony osób fizycznych w związku z przetwarzaniem danych osobowych i w sprawie swobodnego przepływu takich danych oraz uchylenia dyrektywy 95/46/WE (RODO)."
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 ( return (
<main style={pageStyles}> <>
<title>Home Page</title> <div className="global_segment">
<h1 style={headingStyles}> {
Congratulations content.map( (value, index) => {
<br /> return (
<span style={headingAccentStyles}> you just made a Gatsby site! </span> <Segment
<span role="img" aria-label="Party popper emojis"> index={ index }
🎉🎉🎉 segment={ value }
</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> )
}
)
}
</div>
<div className="foot">
</div>
</>
) )
} }

View File

@ -0,0 +1,137 @@
body {
background-color: #272727;
color: white;
}
@font-face {
font-family: 'Roboto';
src: url("../images/Roboto-Regular.ttf");
}
@font-face {
font-family: 'Lato';
src: url("../images/Lato-Regular.ttf");
}
$div_background_color: rgba(26, 83, 187, 1);
$title_font_family: Roboto;
$title_font_size: 21pt;
$regular_font_family: Lato;
$regular_font_size: 12pt;
$regular_image_font_size: 10.5pt;
$foot_font_size: 9.8pt;
.global_segment {
margin-left: auto;
margin-right: auto;
width: 21cm;
a:link {
color: #0d2956;
}
a:visited {
color: white;
}
a:hover {
color: #000000;
}
a:active {
color: #5478b3;
}
ul {
margin-bottom: 0;
list-style-type: none;
}
li {
padding-top: 15px;
}
ul li::before {
content: ">> ";
color: $div_background_color;
font-weight: bold;
display: inline-block;
width: 2em;
margin-left: -2em;
}
.segment_general {
float: left;
margin-top: 30px;
width: 100%;
.segment_image {
float: left;
width: 210px;
height:250px;
color: white;
font-weight: bold;
background-color: $div_background_color;
}
.segment_content {
float: left;
width: 100%;
font-family: $regular_font_family;
font-size: $regular_font_size;
text-align: justify;
}
.foot_content {
font-size: $foot_font_size;
}
.segment_content_image {
float: right;
padding: 15px;
width: 180px;
height:220px;
color: white;
font-size: $regular_image_font_size;
font-family: $regular_font_family;
font-weight: bold;
background-color: $div_background_color;
.segment_image_item {
margin-top: 5px;
}
}
.segment_title {
float: left;
width: 250px;
padding-top: 12px;
height: 45px;
color: white;
font-family: $title_font_family;
font-size: $title_font_size;
text-align: center;
background-color: $div_background_color;
}
.segment_title_image {
float: left;
margin-top: 100px;
margin-left: -50px;
}
}
.subitem {
margin-left: 15px;
}
}
.foot {
float: left;
width: 100%;
height: 30px;
}