reproduced previous static website

This commit is contained in:
Adam Piontek 2021-03-29 19:50:47 -04:00
parent 0a83f8f317
commit e3f7522cf1
26 changed files with 718 additions and 127 deletions

View file

@ -1,9 +1,22 @@
// Colors
// $primary: #662c91;
// $secondary: #ee6c4d;
// $success: #3f784c;
// $info: #3f84e5;
// $warning: #ffec51;
$primary: #e48663;
$secondary: #00b0b0;
$success: #99c24d;
$info: #a67db8;
$warning: #f4d35e;
$white: #fff;
$gray-100: #e8e8e8;
$gray-200: #cfcfcf;
$gray-300: #b5b5b5;
$gray-400: #9c9c9c;
$gray-500: #828282;
$gray-600: #696969;
$gray-700: #4f4f4f;
$gray-800: #363636;
$gray-900: #242424;
$black: #000;
$light: $gray-200;
$dark: $gray-800;
@ -17,7 +30,8 @@ $custom-colors: (
"danger": $danger,
"light": $light,
"dark": $dark,
"gray": $gray-500,
"gray": $gray-600,
"gray-dark": $gray-800,
);
// $custom-colors: (

View file

@ -27,7 +27,7 @@
// @import "../node_modules/bootstrap/scss/button-group";
@import "../node_modules/bootstrap/scss/nav";
@import "../node_modules/bootstrap/scss/navbar";
@import "../node_modules/bootstrap/scss/card";
// @import "../node_modules/bootstrap/scss/card";
// @import "../node_modules/bootstrap/scss/accordion";
// @import "../node_modules/bootstrap/scss/breadcrumb";
// @import "../node_modules/bootstrap/scss/pagination";

View file

@ -16,7 +16,7 @@
/* Fontsource Fira Mono */
@import "../node_modules/@fontsource/fira-mono/400.css"; /* normal | normal */
// @import "../node_modules/@fontsource/fira-mono/500.css"; /* heavier normal? */
@import "../node_modules/@fontsource/fira-mono/700.css"; /* bold | normal */
// @import "../node_modules/@fontsource/fira-mono/700.css"; /* bold | normal */
/* Fontsource Fira Code */
@import "../node_modules/@fontsource/fira-code/300.css"; /* light | normal */

View file

@ -0,0 +1,45 @@
.navbar-expand-lg {
.nav-item {
margin-left: 2px;
.nav-link {
padding: 0 0 0 6px;
margin: 8px 0 8px 0;
border-left: 6px transparent solid;
&.active {
border-left: 6px $secondary solid;
}
}
&:hover {
.nav-link {
color: $primary !important;
border-left: 6px $secondary solid;
}
}
}
}
@include media-breakpoint-up(lg) {
.navbar-expand-lg {
.nav-item {
margin-left: 0;
.nav-link {
padding: 0 0 6px 0;
margin: 0 12px 0 12px;
border-left: 0;
border-top: 6px transparent solid;
border-bottom: 6px transparent solid;
&.active {
border-left: 0;
border-bottom: 6px $secondary solid;
}
}
&:hover {
.nav-link {
color: $primary !important;
border-left: 0;
border-bottom: 6px $secondary solid;
}
}
}
}
}

View file

@ -13,6 +13,64 @@
/* Navbar toggler icon override */
@import "nav-burger";
/* Navbar custom styling */
@import "nav-bar-help";
/* main */
html,
body {
color: $gray-100;
background-color: $gray-800;
height: 100%;
}
.border-gray-900 {
border-color: $gray-900 !important;
}
.text-gray-300 {
color: $gray-300;
}
.border-10 {
border-width: 10px !important;
}
.border-20 {
border-width: 20px !important;
}
.fw-600 {
font-weight: 600;
}
/* social icons */
#social-icons .link-light:hover {
color: $primary;
}
/* resume separators */
.separator {
display: flex;
align-items: center;
text-align: center;
color: $gray-300;
font-family: $font-family-monospace;
font-size: smaller;
text-transform: uppercase;
font-weight: 600;
}
.separator::before,
.separator::after {
content: "";
flex: 1;
border-bottom: 1px solid $secondary;
}
.separator:not(:empty)::before {
margin-right: 0.5em;
}
.separator:not(:empty)::after {
margin-left: 0.33em;
}
/* extra */
.was-validated .no-valid-style .form-check-input:valid,
.form-check-input.is-valid {

View file

@ -7,6 +7,24 @@ import "../css/app.scss";
// navbar brand icon
import "../node_modules/@mdi/svg/svg/desktop-classic.svg"; // brand
// other:///
import "../node_modules/@mdi/svg/svg/home.svg";
import "../node_modules/@mdi/svg/svg/account.svg";
import "../node_modules/@mdi/svg/svg/briefcase-account.svg";
import "../node_modules/@mdi/svg/svg/zip-disk.svg";
import "../node_modules/@mdi/svg/svg/typewriter.svg";
import "../node_modules/@mdi/svg/svg/rss.svg";
import "../node_modules/@mdi/svg/svg/account-hard-hat.svg";
// social
import "../node_modules/@mdi/svg/svg/linkedin.svg";
import "../node_modules/@mdi/svg/svg/github.svg";
import "../node_modules/@mdi/svg/svg/key-variant.svg";
import "../raw/gitea.svg";
import "../node_modules/@mdi/svg/svg/goodreads.svg";
import "../node_modules/@mdi/svg/svg/twitter.svg";
import "../node_modules/@mdi/svg/svg/facebook.svg";
import "../node_modules/@mdi/svg/svg/instagram.svg";
import "../node_modules/@mdi/svg/svg/steam.svg";
import "../node_modules/@mdi/svg/svg/discord.svg";
// webpack automatically bundles all modules in your
// entry points. Those entry points can be configured
@ -23,6 +41,7 @@ import topbar from "topbar";
import { LiveSocket } from "phoenix_live_view";
// // Bootstrap v5 js imports
// import "bootstrap/js/dist/alert";
import "bootstrap/js/dist/collapse";
// import "bootstrap/js/dist/dropdown";
// Bootstrap helpers

BIN
assets/raw/cat-roof.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

39
assets/raw/gitea.svg Normal file
View file

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1"
id="svg8" inkscape:export-filename="" inkscape:export-xdpi="48.000004" inkscape:export-ydpi="48.000004" inkscape:version="0.92.1 r15371" sodipodi:docname="logo.svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 512 512"
style="enable-background:new 0 0 512 512;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:none;stroke:#000000;stroke-width:2.68;}
</style>
<sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer2" inkscape:cx="418.13805" inkscape:cy="177.57445" inkscape:document-units="mm" inkscape:measure-end="290.267,236.527" inkscape:measure-start="283.373,243.952" inkscape:pagecheckerboard="false" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-height="1137" inkscape:window-maximized="1" inkscape:window-width="1920" inkscape:window-x="1912" inkscape:window-y="-8" inkscape:zoom="0.70710678" pagecolor="#ffffff" showgrid="false" showguides="false" units="px" width="256px">
<sodipodi:guide id="guide3699" inkscape:locked="false" orientation="0,512" position="0,0"></sodipodi:guide>
<sodipodi:guide id="guide3701" inkscape:locked="false" orientation="-512,0" position="135.46667,0"></sodipodi:guide>
<sodipodi:guide id="guide3703" inkscape:locked="false" orientation="0,-512" position="135.46667,135.46667"></sodipodi:guide>
<sodipodi:guide id="guide3705" inkscape:locked="false" orientation="512,0" position="0,135.46667"></sodipodi:guide>
</sodipodi:namedview>
<g id="layer2" inkscape:groupmode="layer" inkscape:label="Layer 2">
<path id="rect4599" class="st0" d="M258.2,225.4c5-10.3,17.4-14.6,27.7-9.6"/>
<g>
<path d="M476.3,129c-77.3,4.1-123.1,6.2-162.4,6.5v87.4l-12.3-6.1l-0.1-81.3c-45.1,0-84.8-2.4-160.1-6.5
c-9.4-0.1-22.6-1.9-36.7-1.9C68.6,127,20.3,152.8,23,217.4c4.2,101,96.2,110.4,133,111.2c4,18.9,47.3,84.3,79.4,87.7h140.4
C460,410.1,523,130,476.3,129z M58.1,218.9c-3.6-28,9-57.3,56.1-56.1c5.1,51.8,13.4,82,30.3,128.3
C101.4,285.4,64.8,271.4,58.1,218.9z M376.4,282.8l-39.3,80.9c-5,10.3-17.4,14.6-27.7,9.6L228.5,334c-10.3-5-14.6-17.4-9.6-27.7
l39.3-80.9l27.7-9.6l80.9,39.3C377.1,260.1,381.4,272.5,376.4,282.8z"/>
</g>
<path id="path4525" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" class="st0" d="M301.5,135.5l0.1,81.3"/>
</g>
<g id="layer3" inkscape:groupmode="layer" inkscape:label="Layer 3">
<g id="g4539">
<circle id="path4606" cx="289.8" cy="257.5" r="13.1"/>
<circle id="path4606-3" cx="261.6" cy="316" r="13.1"/>
<circle id="path4606-1" cx="308" cy="336.8" r="13.1"/>
<rect id="rect4629-8" x="231" y="266.2" transform="matrix(0.4388 -0.8986 0.8986 0.4388 -85.169 406.1544)" width="103" height="10.1"/>
<path id="path4514" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" class="st1" d="M289.4,257.4
c49,24.2,49.2,15.5,18.5,79"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,283 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
e5r+RW29Vo/2GFBv3M6ri1Ks0ZR6f27JusGHqRrq1lDavMHSGKyzjUhFr4yXCvGD
Kanilb8vlLMrp+vhLTp1SrVqoar2nVBhaaMuaJVAt/JbZX7SvmY8Vk7Xw3SuW2rN
OvCHV2BEV6Y2CmuGVb1WmvOn40FL+Su4An+nm1JAP37Nr4DKbdzNe0MVAOwW5nR8
gKpIl7C71JEPSHW2LFtkq95o2DtuNagqgPlqujpEsvsSlV60y6Xh8isOqm3Mg2Za
2ixgls/cRo6xT4H+J36UsvXKRMh3zrNiIYBVqz+lmx3mHOUc2EqFoQTGECib3yDo
XX2XhpzGV/cZAEYnJ5FkcJV0AcnuhuOC1iPkek1Sc0isZNbCS1ze7hoq4tYjB9qR
16V1RPrUA9vhUmSwg2XDCmxZvLQGLobZwCIE/JrJz6IXBJtoKK+Rly5h4gLJzCEx
MFyzVivissjzeCRnObYoYpwPr1WFrIObX/Ksh7j2ltK9uHL82jmK9l1PGUV1KiFq
U/NqmyZzETor9y/RuOBKwmmcKrKRIk4WZK+yrKyfPOIVSSX7bTSvtYbS26cp+MfU
M2VpPBqUYnam/XtkYjIMRB2ZUvgAnMWlN+JBESjyltxqsqeRFjM3VvcD6gLztKuV
vh3FQaZ/T1rL3RFwHpCtRwmBTQqayjJmzAMYMazNuBdMRwM0Cl7nHFifCTmaEKWX
lqniwQxNgi7WMAFSEFZWzuWdIchMBz2g8kpCZWsdfL6JLy4GKYk1YF96mosW8tnS
+MfeOWR9WkK+rKI6zhrllkroSZTqpE43HCkyE7Oas25jyT14y+Qkf64yJayF0pPi
Jnmsa1ZOBSKVxjxsBhVsSE/JTTdHHgt5MKweN2xNGuMhrA122K5m3njI4x9DJTXa
MyIYS6ypyCCLWKxzxTIWFSMhiIcsu8TrJYRygYQQTQry8XiAQRxtva6cJVU24IE/
IWpFc/lHGYyViUkf1A2bhHzH12vvHtxH3oitYw1FKMRQRGWsPPy/klhQyFqy55Vs
9FgbVllDFVabeTtYvK4WjQBLsnX9X5rbjf8A1Q5uv5bhUR0VPQV52hbCSS0D1FiF
Jk9Wc2qZkfrW19uoHrn3piJyVuCLiJnWVtgMcfmWstdLpAFE8WXQASQlrGUW5K9B
deRjNOpRBZLHIdqclg8n2HxCs0cRUBa1spmKswuLmeVS9fJWzwRj9onc6RFi7krF
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
RTODRGTX9jLa4mheVr8lXWT7OJ/0ytL8FCS0Joy5dELZK0XRM7NCgnGTDIxpHwjJ
fZK0KRSX6ROiqJJgiCcQ50O9HbHTNaIXQpLvRdGONjGTBJ//2YkCTgQTAQoAOBYh
BFTJtnukJGmoayyZKd8YXO4po9RDBQJbooCLAhsDBQsJCAcCBhUKCQgLAgQWAgMB
Ah4BAheAAAoJEN8YXO4po9RDeO4P/2ZZHSfw4iCryp//6m79DaRmX5DsaDdT+Ben
Vk2ARP9OKsLF0yw0b+jLwyXwzZSPT3oNNoW695GitBs2SLwpgG+tKKoOQUA9tGCU
km1ukSCJMbytMZKdS3ho9EsEQ4WHcKjfrPDbxXbk94jwr9XANaH6UADBZv5C02FI
TnWPsUmVpVwR9TM9pT4voE7teJgudli7lN3dm03OWAy4clIQyPKtCWUwPz9r4+Pi
yssw80uCmFAZqDC4Ap0xqGOPp0nDSu8nFYg0dPTLrm6m5+MQWQ5wnBmwG2yWENN5
5ajs2PsHueXj9w62bG7lH7rvipQSH34tlc2CQhoQFDZpxPueEKwuMotcUhzTM36L
q1SxSvUyZ2s3+X+RRxNdVDpyhuHDKV75jqbfouXDzvUQlo88d7OHvUFZPHI0uL9a
qSm3Rp5eri+i9lFrgActvw0zSvjrGwN8hHZ5Rv3EyopMzp3oXC3s3AQ+cAK27b1z
4fn4a3FfCLSS2ngj0LIogLUZ/RYv3UZqIq3xi7zE5G/PzspByuzZgVRL+LWDfrEw
T90FZYf9JZZ+WeBfDw14sWSRxqGyw/GvzYTQT5KQ6WXhjAMx78VYO1G+LrTDTT17
L8DdSXY2WoOlm/vslffTl98vpStSkAPmfLcVmyMGu9th7KhgaprScdKxaa/Hyg2a
M/yAWtTPtDVBZGFtIFBpb250ZWsgKE5FVyBNQUlOIDIwMTgpIDxkYW1la3Bpb250
ZWtAZ21haWwuY29tPokCTgQTAQoAOBYhBFTJtnukJGmoayyZKd8YXO4po9RDBQJb
ooC6AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEN8YXO4po9RDQgYQALsU
El9PUdIT0+u5RC5A1iepYGcs0yM0ac1Qp5rRPM2jvfBmqE/0obIF9clx3IY+Rfyv
adAz/9qzMDWax+qP2hkff3/2Uoy8LWUyyba/XcyOhol4cVbTgRsSeWJIigk6DIgV
dW/EoyxfbaAtlSyvXCZPQIYNXadiRMGIEyy4mu/z+cHqr66euIw6ejzuw0kF5211
iujzY8gtNCO56FcvyhvAF66QLdliQbueQDCvNuXLFCBHSpDByAmihAXKwprQGHDd
qUWj8sbVbkA5mS5Ik8jdhUkz6JX1i2KM8lwAG5NwDwCh+IpxvNTLuYNqhWIPYW72
6/rC6X9rgbCbugBSvDPLDouh8q4evt57Hke18e5gYuyMZJJic/FubqRc/m0wkV7N
Q4kLSp2uj+nA5jUG8tpZ7JT3KDNunn5dpVtAy/fZQj0zTSrG2dyjR2F6wz46Ygne
Wz/t6z7Nf8jxIOcELTV3UGCLzDcEekvaSRtBe5JR8BhmgZeCNiGBquMWFUSDgkgr
dBTe8VLYtr4oNPcHvTpZq7LUQVP//YkJ6dFWObFZtqSO9E9KZtB2LiIQvB9Xk6Xg
7UeMmArQQVAK25H1/7idDF4ULTTFDoMxSFn7UhvaU5yhcpDvFMBGf2ml8yJ55tsW
CeFFjBhodqhqgiLfOpyFTe6c0Emuo3jXZOOkKOXptC1BZGFtIFBpb250ZWsgKE5F
VyBNQUlOIDIwMTgpIDxhZGFtQGRhbWVrLm9yZz6JAk4EEwEKADgWIQRUybZ7pCRp
qGssmSnfGFzuKaPUQwUCW6KBBwIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAK
CRDfGFzuKaPUQ8m8D/916lk72TRme2h2flVvid43sIhX10MELsle/ZLwNyrsayrt
4jUiVj/AOQEJlGFOZ/p+61pJ9+3lG+0a+hPIWilx4UzlxBS7DY7O02CFgaz70HKB
H2YN1pJPXsRAQttbUtwb44+CUe/lYKmVBmrNZAczHwBuGEZHKqZjK6RCLVa7Ov3F
XDgLjkj/NTfe1HZFjt72niCCq8OqS8wxBALTaN7W8rqAnxN1or848O3NMcQqzve8
MCN9XCEfWez/E/WoPDGHAz+C8P8yMI1FyOScrxPmtEEsfTuzNyajF32eNI0Cnce/
srTuwU792dIau93SwFoNnbfyq5sW6XRd7TTK9heU54Vjuq/N4TA37dAjvT3wEwFd
QMP9u07ZTafyJrbU143tCde+1GmvXy35Nhm2ts5GpKek4lnMmdZnvVbI9XGHvZe3
JLJsPqjPxjm3CruBZ0s/IeYluVxRlYZo9tKkVsE7WglBDPNxWQjSVwxia/hjggrw
pm1gdO/QqBzPXzQQwdBoH7e/vXmZYATIjfTLqli61hH/w27GRyKJyRlvxTwUo7RW
trlZwzjeR7R3EaVlbhXFscGj+l+Pm8N5qEghKTR8we9XuvroKKR/+8YCvVCJaDJy
PGRN/eBehv7KlsVa9Pi/aQd4HSRCVruebx0mSa8H8QDrizJVqU3mf2de99TdkbQz
QWRhbSBQaW9udGVrIChORVcgTUFJTiAyMDE4KSA8YWRhbUBhZGFtcGlvbnRlay5u
ZXQ+iQJOBBMBCgA4FiEEVMm2e6QkaahrLJkp3xhc7imj1EMFAluigRYCGwMFCwkI
BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ3xhc7imj1EMtnxAAhnrsyhzqIBU35YtJ
OWvMw77MsQxXhExPQL6qvp11vBjgMeid1mdS9NxsCiCHOVDQT0my3/aueTz9krrX
vbIqFyH5OZdkfyn2+CT1fO4wzNmUzbs9HCe6HHXtjqPVsPQ5zCORJwCS6L8JaqV2
Y8fPZItr96KxyV+Vf0zhkP/LqdShBKQNyvgZYt8G8p6ez13djLPIQNRfATSdKo5N
qe2WNgSyRoxKfw+6DDChTVd8cKE79bIbL4eg4lQvi3nx4Rc2Jy+jyQ/FtZRXvYVH
1ULpyJtqy0DuLkBqfYSWUS+ssAtdxQ8NT8vhb+8xB8RUb7v7NjdZBwThz+j0o+Om
pof8ceoupa1P6TPtqxayvfNoDdH11N1m1untDL4MbPZgJVG9v6/rqf7N9akWVLd4
trUr9Hq3+qrWf9Z6K4iamX+xnGjyFKhqhfKUJDbBa7LzH9aAzud/y4wXmacd5fKf
T6nmyqPLzxk++rjNA2ibUlwn+4VmOg+3WO1Q1bez23jjBE5YVyYDsQfvtKrFUhmT
NMG/48wT57IsF8rVWSX+yBQVWQtFGU0O1x1jVr0hBEorbk8t9OxX3wntyM4YIqo6
nOCyNo50JsKM5KPwX5NZGp0dMxaIEyuwx3+E77o55SSrvfBRBtHAMfOg4Qk+QOYE
zKIUYHyT1J2NFqNeshcbxQ1JPZy0PEFkYW0gUGlvbnRlayAoTkVXIE1BSU4gMjAx
OCkgPEFkYW0uUGlvbnRlazM5QHFtYWlsLmN1bnkuZWR1PokCTgQTAQoAOBYhBFTJ
tnukJGmoayyZKd8YXO4po9RDBQJbooF0AhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4B
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
x+RdIZL07hf4loFu
=dyLD
-----END PGP PUBLIC KEY BLOCK-----

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,15 @@
defmodule Home73kWeb.HomeController do
use Home73kWeb, :controller
def index(conn, _params) do
render(conn, "index.html")
end
def resume(conn, _params) do
render(conn, "resume.html", page_title: "Résumé")
end
def folio(conn, _params) do
render(conn, "folio.html", page_title: "Folio")
end
end

View file

@ -24,7 +24,7 @@ defmodule Home73kWeb.Endpoint do
at: "/",
from: :home73k,
gzip: true,
only: ~w(css fonts images js favicon.ico robots.txt)
only: ~w(css fonts images js favicon.ico robots.txt DF185CEE29A3D443_public_key.asc)
# Code reloading can be explicitly enabled under the
# :code_reloader configuration of your endpoint.

View file

@ -3,7 +3,16 @@ defmodule Home73kWeb.PageLive do
@impl true
def mount(_params, _session, socket) do
{:ok, assign(socket, query: "", results: %{}, page_title: "~")}
{:ok,
assign(socket, query: "", results: %{}, page_title: "~")
|> put_flash(:success, "Log in was a success. Good for you.")
|> put_flash(:error, "Lorem ipsum dolor sit amet consectetur adipisicing elit.")
|> put_flash(
:info,
"Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatibus dolore sunt quia aperiam sint id reprehenderit? Dolore incidunt alias inventore accusantium nulla optio, ducimus eius aliquam hic, pariatur voluptate distinctio."
)
|> put_flash(:warning, "Oh no, there's nothing to worry about!")
|> put_flash(:primary, "Something in the brand color.")}
end
@impl true

View file

@ -17,7 +17,10 @@ defmodule Home73kWeb.Router do
scope "/", Home73kWeb do
pipe_through :browser
live "/", PageLive, :index
get "/", HomeController, :index
get "/resume", HomeController, :resume
get "/folio", HomeController, :folio
live "/live", PageLive, :index
end
# Other scopes may use custom stacks.

View file

@ -0,0 +1,27 @@
<main class="container-fluid h-100 d-flex justify-content-center align-items-center">
<div class="d-flex flex-column align-items-center flex-lg-row align-items-lg-end justify-content-lg-center mt-5">
<div class="col-12 col-sm-10 col-md-7 col-lg-auto mb-3 mb-lg-0">
<%= img_tag Routes.static_path(@conn, "/images/construct.gif"),
class: "img-fluid",
alt: "Classic 1990s-style simple animation depicting a construction site digger. Text reads 'page under construction'",
title: "Put on your hard hat!"
%>
</div>
<div class="col-12 col-sm-10 col-md-7 col-lg-6 col-xl-5 col-xxl-4 justify-content-start ms-lg-3">
<h2 class="font-monospace fs-2 fw-600 mb-0">
<%= icon_div @conn, "mdi-account-hard-hat", [class: "icon baseline me-2"] %><span>Working on it!</span>
</h2>
<div class="font-monospace fs-5">I've made some things over the years (like this site!), and at some point I'll highlight some here.</div>
</div>
</div>
</main>

View file

@ -0,0 +1,34 @@
<main class="container-fluid h-100 d-flex justify-content-center align-items-center">
<div class="d-flex flex-column-reverse flex-lg-row align-items-lg-end mt-5">
<div class="col-auto mt-3 mt-lg-0">
<%= img_tag Routes.static_path(@conn, "/images/cat-roof_portrait.jpg"),
class: "img-fluid border border-20 border-gray-900 rounded-2",
alt: "My cat Babka, stuck on a roof when she was still just a stray.",
title: "My cat Babka, stuck on a roof when she was still just a stray."
%>
</div>
<div class="col-auto justify-content-start ms-lg-3">
<h2 class="font-monospace fs-2 fw-600 mb-0">
<%= icon_div @conn, "mdi-account", [class: "icon baseline me-2"] %><span>Adam Piontek</span>
</h2>
<div class="font-monospace fs-5">Desktop Systems Engineer. Human.</div>
<div id="social-icons" class="mt-1">
<%= for s <- socials(@conn) do %>
<%= link to: s.url, target: "_blank", class: "fs-3 link-light text-decoration-none" do %>
<%= icon_div @conn, s.icon, [class: "icon baseline"] %>
<% end %>
<% end %>
</div>
</div>
</div>
</main>

View file

@ -0,0 +1,51 @@
<main class="container-fluid h-100 d-flex justify-content-center align-items-center">
<div class="d-flex flex-column mt-5">
<div class="col-auto justify-content-start">
<h2 class="font-monospace fs-2 fw-600 mb-0">
<%= icon_div @conn, "mdi-account", [class: "icon baseline me-2"] %><span>Adam Piontek</span>
</h2>
<div class="font-monospace fs-5">Desktop Systems Engineer.</div>
<div id="social-icons" class="mt-1">
<%= for s <- socials_prof(@conn) do %>
<%= link to: s.url, target: "_blank", class: "fs-3 link-light text-decoration-none" do %>
<%= icon_div @conn, s.icon, [class: "icon baseline"] %>
<% end %>
<% end %>
</div>
</div>
<div class="col-auto">
<div class="separator mt-4 mb-2">qualifications</div>
<ul>
<%= for qualif <- resume_qualifs() do %>
<%= content_tag :li, qualif %>
<% end %>
</ul>
<div class="separator mt-4 mb-2">experience</div>
<%= for %{employer: employer, positions: positions} <- resume_experience() do %>
<div class="fs-5 border-bottom border-gray mt"><%= employer%></div>
<div class="mb-3">
<%= for position <- positions do %>
<div>
<span><%= position.title %></span>
<span class="text-gray-300">&middot; <%= position.start %> &mdash; <%= position.end %></span>
</div>
<% end %>
</div>
<% end %>
</div>
</div>
</main>

View file

@ -1,14 +1,14 @@
<nav class="navbar navbar-expand-lg navbar-light bg-light mb-4">
<div class="container">
<nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark px-1 px-sm-2 px-lg-3 px-xl-4 px-xxl-5 py-3">
<div class="container-fluid">
<h1 class="fs-4 my-0 py-0 lh-base">
<%= link to: Routes.page_path(@conn, :index), class: "navbar-brand fs-4" do %>
<%= icon_div @conn, "mdi-desktop-classic", [class: "icon baseline me-1 fs-3"] %>
<span class="fw-light" style="font-family: Righteous;">\\AdamPion73k</span>
<% end %>
<h1 class="my-0 py-0 lh-base">
<%= link to: Routes.home_path(@conn, :index), class: "navbar-brand fs-1 text-secondary" do %>
<%= icon_div @conn, "mdi-desktop-classic", [class: "icon baseline"] %>
<span class="fw-light" style="font-family: Righteous;">\\73k</span>
<% end %>
</h1>
<button class="hamburger hamburger--squeeze collapsed navbar-toggler" id="navbarSupportedContentToggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<button class="hamburger hamburger--vortex collapsed navbar-toggler" id="navbarSupportedContentToggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="hamburger-box d-flex">
<span class="hamburger-inner"></span>
</span>
@ -17,41 +17,34 @@
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<%# nav LEFT items %>
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<%# ACTIVE page link example %>
<%# <li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</a>
</li> %>
<%# DISABLED page link example %>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
<%# <li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownExample" data-bs-toggle="dropdown" aria-expanded="false">Dropdown</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdownExample">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li> %>
</ul>
<ul class="navbar-nav me-auto mb-2 mb-lg-0"></ul>
<%# nav RIGHT items %>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Resume</a>
<%= link nav_link_opts(@conn, to: Routes.home_path(@conn, :index), class: "nav-link font-monospace fs-6") do %>
<%= icon_div @conn, "mdi-home", [class: "icon baseline"] %><span>\~</span>
<% end %>
</li>
<%= link nav_link_opts(@conn, to: Routes.page_path(@conn, :index), class: "btn btn-outline-dark d-none d-lg-block") do %>
<%#= icon_div @conn, "bi-door-open", [class: "icon baseline"] %>
Log in
<li class="nav-item">
<%= link nav_link_opts(@conn, to: Routes.home_path(@conn, :resume), class: "nav-link font-monospace fs-6") do %>
<%= icon_div @conn, "mdi-briefcase-account", [class: "icon baseline"] %><span>\R&eacute;sum&eacute;</span>
<% end %>
</li>
<li class="nav-item">
<%= link nav_link_opts(@conn, to: Routes.home_path(@conn, :folio), class: "nav-link font-monospace fs-6") do %>
<%= icon_div @conn, "mdi-zip-disk", [class: "icon baseline"] %><span>\Portfolio</span>
<% end %>
</li>
<li class="nav-item">
<%= link nav_link_opts(@conn, to: Routes.page_path(@conn, :index), class: "nav-link font-monospace fs-6") do %>
<%= icon_div @conn, "mdi-typewriter", [class: "icon baseline"] %><span>\Blog</span>
<% end %>
</li>
</ul>

View file

@ -1,19 +1 @@
<main role="main" class="container">
<%# phoenix flash alerts: %>
<div class="row justify-content-center">
<div class="col-md-12 col-lg-10 col-xxl-8 ">
<%= for {kind, class} <- alert_kinds() do %>
<%= if flash_content = get_flash(@conn, kind) do %>
<div class="alert <%= class %> alert-dismissible fade show" role="alert">
<%= flash_content %>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<% end %>
<% end %>
</div>
</div>
<%= @inner_content %>
</main>
<%= @inner_content %>

View file

@ -1,19 +1 @@
<main role="main" class="container">
<%# liveview flash alerts: %>
<div class="row justify-content-center">
<div class="col-md-12 col-lg-10 col-xxl-8 ">
<%= for {kind, class} <- alert_kinds() do %>
<%= if flash_content = live_flash(@flash, kind) do %>
<div class="alert <%= class %> alert-dismissible fade show" role="alert" id="lv-alert-<%= kind %>" phx-hook="AlertRemover" data-key="<%= kind %>">
<%= flash_content %>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
<% end %>
<% end %>
</div>
</div>
<%= @inner_content %>
</main>
<%= @inner_content %>

View file

@ -1,29 +0,0 @@
<li class="nav-item dropdown">
<a href="#" class="nav-link dropdown-toggle" id="navbarDropdownUserMenu" data-bs-toggle="dropdown" aria-expanded="false">
<%= icon_div @conn, "bi-person-circle", [class: "icon baseline me-1"] %>
Hello
</a>
<ul class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdownUserMenu">
<li><hr class="dropdown-divider"></li>
<li>
<%= link nav_link_opts(@conn, to: Routes.page_path(@conn, :index), class: "dropdown-item") do %>
<%= icon_div @conn, "bi-people", [class: "icon baseline me-1"] %>
Users
<% end %>
</li>
<li><hr class="dropdown-divider"></li>
<li>
<%= link nav_link_opts(@conn, to: Routes.page_path(@conn, :index), class: "dropdown-item") do %>
<%= icon_div @conn, "bi-sliders", [class: "icon baseline me-1"] %>
Settings
<% end %>
</li>
</ul>
</li>

View file

@ -5,7 +5,7 @@
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<%= csrf_meta_tag() %>
<%= live_title_tag assigns[:page_title] || "", prefix: assigns[:page_title] && "73k.us \\ " || "73k.us" %>
<%= live_title_tag assigns[:page_title] || "", prefix: assigns[:page_title] && "73k \\ " || "73k" %>
<meta name="author" content="Adam Piontek"/>
<link rel="me" href="mailto:adam@73k.us"/>
<link rel="me" href="sms:+16462341697"/>
@ -15,9 +15,9 @@
</head>
<body>
<%= render "_navbar.html", assigns %>
<%= render "_navbar.html", assigns %>
<%= @inner_content %>
<%= @inner_content %>
</body>
</html>

View file

@ -0,0 +1,77 @@
defmodule Home73kWeb.HomeView do
use Home73kWeb, :view
def socials(conn) do
[
%{
icon: "mdi-typewriter",
url: "https://w.73k.us/",
prof: false
},
%{icon: "mdi-rss", url: "https://w.73k.us/feed/", prof: false},
%{
icon: "mdi-linkedin",
url: "https://www.linkedin.com/in/adampiontek/",
prof: true
},
%{icon: "mdi-github", url: "https://github.com/apiontek", prof: true},
%{icon: "gitea", url: "https://73k.us/git/adam", prof: true},
%{
icon: "mdi-key-variant",
url: Routes.static_path(conn, "/DF185CEE29A3D443_public_key.asc"),
prof: true
},
%{
icon: "mdi-goodreads",
url: "https://www.goodreads.com/user/show/2450014-adam-piontek",
prof: false
},
%{icon: "mdi-twitter", url: "https://twitter.com/adampiontek", prof: false},
%{icon: "mdi-facebook", url: "https://facebook.com/damek", prof: false},
%{
icon: "mdi-instagram",
url: "https://www.instagram.com/adampiontek/",
prof: false
},
%{
icon: "mdi-steam",
url: "https://steamcommunity.com/id/apiontek/",
prof: false
},
%{
icon: "mdi-discord",
url: "https://discordapp.com/users/328583977629646848",
prof: false
}
]
end
def socials_prof(conn), do: Enum.filter(socials(conn), fn s -> s.prof end)
def resume_qualifs,
do: [
"Programming (Powershell, Bash, Python, Javascript, Elixir)",
"Windows deployment & support (SCCM, MDT, esoteric configuration)",
"Application infrastructure planning & implementation (end-to-end)",
"Quickly grasping inherited & new projects"
]
def resume_experience do
[
%{
employer: "Cleary Gottlieb Steen & Hamilton",
positions: [
%{title: "End User Systems Engineer", start: "Jan 2021", end: "Present"},
%{title: "End User Systems Analyst", start: "Feb 2019", end: "Dec 2020"},
%{title: "Service Desk Analyst", start: "Jun 2014", end: "Jan 2019"}
]
},
%{
employer: "Practising Law Institute",
positions: [
%{title: "Service Desk Analyst", start: "May 2010", end: "May 2014"}
]
}
]
end
end

View file

@ -7,15 +7,4 @@ defmodule Home73kWeb.LayoutView do
true -> Keyword.update(opts, :class, "active", fn c -> "#{c} active" end)
end
end
def alert_kinds do
[
success: "alert-success",
info: "alert-info",
error: "alert-danger",
warning: "alert-warning",
primary: "alert-primary",
secondary: "alert-secondary"
]
end
end