diff --git a/assets/css/_bs-colors.scss b/assets/css/_bs-colors.scss index 2cdd6bd..7679571 100644 --- a/assets/css/_bs-colors.scss +++ b/assets/css/_bs-colors.scss @@ -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: ( diff --git a/assets/css/_bs-load.scss b/assets/css/_bs-load.scss index 76db7d3..78984f6 100644 --- a/assets/css/_bs-load.scss +++ b/assets/css/_bs-load.scss @@ -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"; diff --git a/assets/css/_fonts.scss b/assets/css/_fonts.scss index 26fdbdf..ff553bf 100644 --- a/assets/css/_fonts.scss +++ b/assets/css/_fonts.scss @@ -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 */ diff --git a/assets/css/_nav-bar-help.scss b/assets/css/_nav-bar-help.scss new file mode 100644 index 0000000..8343560 --- /dev/null +++ b/assets/css/_nav-bar-help.scss @@ -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; + } + } + } + } +} diff --git a/assets/css/app.scss b/assets/css/app.scss index 05c1f4a..8ef090f 100644 --- a/assets/css/app.scss +++ b/assets/css/app.scss @@ -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 { diff --git a/assets/js/app.js b/assets/js/app.js index af556c9..5bbfc63 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -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 diff --git a/assets/raw/cat-roof.jpg b/assets/raw/cat-roof.jpg new file mode 100644 index 0000000..f742285 Binary files /dev/null and b/assets/raw/cat-roof.jpg differ diff --git a/assets/raw/gitea.svg b/assets/raw/gitea.svg new file mode 100644 index 0000000..0ad0016 --- /dev/null +++ b/assets/raw/gitea.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/DF185CEE29A3D443_public_key.asc b/assets/static/DF185CEE29A3D443_public_key.asc new file mode 100644 index 0000000..9f28bc1 --- /dev/null +++ b/assets/static/DF185CEE29A3D443_public_key.asc @@ -0,0 +1,283 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFuie2UBEADpl4jb39JN+mfuFGbXqGQG1xqPKUpfwXHKNV+s+v9FWoYqlvNv +5x0pnSLpEYBPzDy8TdU+ksseTn3swOL/6EhTf/Aix2uWZ72h5dH+S7wdFfUCtwRc +OmdOLIryQnTMP7jqJ5nJ8Cdni7RkRo7jFO1We5usRY3EkotToyDmcKPEZqoReWyp +J2Kl+ebogu+8vYGZVKJaVs3Y1pxZPS387NHOzTkySwsy7zYdJ+5daIuOLLxetK5m +2vjGUH8JUYOkMkDwbKzPUnUECxJ8/torNMlq2LsPboqKMXi/2tqMoCSyNasRTTDj +L/dijdVi9Nc40xkLioZ7PkWsnwYAEmA7qpo0MMMJi5NtKjOadKGBCm2zWNcylGsa +BGamnyuS4zVkiN5tCDrKjvyWeHiMJEXnkkoPu1uzrPXqDal9bIv7XSj6n3IAsPHt +DzuQH8gPAIP3cVC06ybz+s5aCtQ07IiO2CYAfDaNX+N6FQv9LnmF25pf1y8yz1jK +pFlnrR/hShbTPQmEX/hatS/bakCDC9m/1GWB5pO/a7Sb5G6zSdMc7yWBsvPUGrZG +nYmlOM3A3xXgugA48xRp9dexT42aRudxuaazgGKuQamrtHd+UTn8ifU0R18CCfq1 +zZ8h5Jyg/0/yRZW2w4Alpu9LlsLg65eMuuSuaXzZFl9w8F9F5KJVCqLOuQARAQAB +tCpBZGFtIFBpb250ZWsgKE5FVyBNQUlOIDIwMTgpIDxhZGFtQDczay51cz6JAk4E +EwEKADgWIQRUybZ7pCRpqGssmSnfGFzuKaPUQwUCW6J7ZQIbAwULCQgHAgYVCgkI +CwIEFgIDAQIeAQIXgAAKCRDfGFzuKaPUQxGhEADGsAR4fHMutD0CVb0/GWJvUM+A +wLOxpPxKPe+g35aU07ejT5iwMVvfl76WnpHTQX48s2HFLnXdznN+1/P9Zty6pt+F +2YdTz39AIXomh4K2ifEfHfnSEv6DT1n3yQBuT+l6l7vaiqOGopuNIu89eujnL49w +lrLTiwQ/awkiag1yCYqp+R5dG1twu8xHLIkqyjndZM4wmVmkewZPmjhIyvnAd6Y5 +glFDs7/oVaHKWcTmycXvzOcKhCo227wurcxEaFlS8GwqxoazBdOSRv/yjA7RSe+E +SGnw4kXTkh3W3EGzedhFV4JRxFRGTJS3El5WP+BQrN12cmId/yx9zGZyBh+rWKT3 +xyjY08FDNJz6IZ+X1AIjfCZ25i7Xt2jfm24ptbZF8KEfutOROwK7Hhfz2cvzd9wZ +N0gzo7sPkcwPUSNet4+IbU8Ymems4d7nm3IhfiRnl4Dr9dv2sQE1sUokNlUqX8mf +oxV/fXIaTk8wuQdMqWHl90zvW9dThk/tlq5Cs6gEnKfoKrMae1pNNrXuFGVyIuOE +EKuX2KkC2ZME0tPb20qrq13CsteHmp+qYu9TV/cRwBhyNwqkCQ6C9WGoXUbd8rmo +CVgGs88mIECrirTkk7/goOdR6DHxnxn2Ho4QIbp5bnNZd4jJZRHiw8X30aOKjCEb +E5zAuM2Jin0isAgqcIkBMwQQAQoAHRYhBFC18Wm2pscoX0JTDqFiJKZprTMfBQJb +onzvAAoJEKFiJKZprTMfgi8H/2vBaZez1eqSHfgNIOukijN5WvNARWUaKP4KhIkT +86q+3bfRO7LmOGOusgD/vQW8RmI8SmDEcXF5A/fD/jkA+sjnZUzFc2gZiX5RmTQ3 +CEunSvy0I8CBOH45PteEq3C5j3DAaEcl1MwexvNPP1+CHbCtPOSyIaVBP0byOc3P +dN5rlzyyo1/yL92Zut9wJpcMOveLB453l9H6DukdljAWAt6ORjOplQJ+uS1YW19J +JR+UyLNXHq2K3raBUCHkHdvo/fdMIPOMLVCvgtgkqKoneqNEISkUfopgoG7yuAE0 +OVgjl1eJbhxB8Pwhiycq/Dudfl14I+99v5Janm2xzwnNQa3R3W/dbQEQAAEBAAAA +AAAAAAAAAAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAQDAwMDAgQDAwMEBAQF +BgoGBgUFBgwICQcKDgwPDg4MDQ0PERYTDxAVEQ0NExoTFRcYGRkZDxIbHRsYHRYY +GRj/2wBDAQQEBAYFBgsGBgsYEA0QGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY +GBgYGBgYGBgYGBgYGBgYGBgYGBgYGBj/wgARCACAAIADAREAAhEBAxEB/8QAHAAA +AwADAQEBAAAAAAAAAAAABQYHAwQIAgEJ/8QAGQEAAwEBAQAAAAAAAAAAAAAAAgME +AQAF/9oADAMBAAIQAxAAAADZXB0N7UbfanAwcJ7jPvHYA87TBZKfEvUvOenwN02D +7uB7xWgXAObX/SmsnsSanEtochzVIiGyXyrsGunpdoF2+BHVrslUDVGhzYyPrw8S +3n1N51n9NeU7AJ7Y8vcOHt2h0YYL5ZqkGtpVGbOmtk9nAs5TBWekfFobu3x1f0Sg +aHMCQlq4W7mfO3D2Jrl9OjjNJ48gd6Sq6nyJFhPHwiCDa42MM2R1cwltiiY6PMae +WXdLEXfMjjPSI4epolwPKYugi1LYTWXsS0GDIiGRGk+8es0slqnS1yQWl60ayszI +kPwkPtAb2n2FM6jrKhdktKPod2ztD4/xoNc+0LdgQvIsHCyWaQ7j3VPH8ItqDA8y +avqtkyKl0lFkbqSQIMwMZ+5u7C6bI9uExodJ6dlbEpyEymHrd/mmZ3yBbI5pIVkt +TW3J3eB46zKRPcQEhgN3UUZFtV25QLvFd+nmE7ogfThyx7UVlVBgd8d08pnpc9ar +zQRpyC/c4aI2XppIyCd0mxs1pSpPReJnKLVr7BZ10U1dHtJtqyWMcLam9jpyry51 +NRG91AYE9smfUsqc582ehKwgTtN6NEV6FrFSqJeuBjYhzfAoL2IKcjl01sl3M6sz +0WI0cR2TfeLcFvZHn+1Vym0hFZFbg9QTlR8GyvqESiVeamuSVPuZcjX+eFiKsO3d +LWqdyGqhCJtfZLTuXJ1lKibM3Tp1U9FkpYw3oZ05iekW9WKamXiUsoSDLqiWdThk +8Q2Xi6aOUh1SsAayTOrL57ahqJNT/8QAKhAAAgIBBQACAQQCAwEAAAAAAgMBBAUA +BhESExQhIgcVFiQxMhAjMzT/2gAIAQEAAQwBfjJp5bFLUkFW8Jkrd2Wrsq/DU6n/ +AIgeZ1GcxJFAqtgwrFlFSuTmmPGc3CqxMjTcL0ovJmmusdJ3h7Vbf9SVCowpe1xf +hJBoMLKLFemytDLQUJs5CtUyzlJlU5TJLTi6ia8hkX0q9VlYPX52zvmYpvwpTB1Z +ZElMj9has1aYd7dpNcbW5sBUCDdklTFr9RcSDZGuYQt/6srBvCpqGNjdiTuE5Z1u +7dz/ADkyA3nc2M2fp5e10NJ3HlK7+YcI6DdF4GT9KapG6549g+h2nunHNyti1fd6 +PuVbN2x+42FPTrbeDUeLhJH0feR8rL2rFca6xx2VIcl3rOdXLLb+p0VDVpV7TzyO +esZE4sjUtuNd3KFPTmwEQ2wUysTrsG46v1Ea1AX6oBUa5oqD3mKOHZlfjhjRJuTq +YtPUXK7ajEI7wLjlIMrY7iYXfkp+FAF8iHzI+9gH9uyxPB7oth/Wcct1tXc2LvIv +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 +w3ms/NQxYao2psQzTID9ufaiCr2LNzdAYIbTMicq2LtU8zdDJZGSOrduQAytWsw2 +1Fk/AZEbuRaQ8TMyV273bPaYjXB2rUIDmdYSqGOR9jxqfgPPpWtHh25Cjla0wQ02 +GG2cjZdkVULPpVS/b+P/AJehijl1atjBpZGziHlwqMThgqSrxWWmY3HK5XWUMTax +abOQp4MQH1tYhWSoTjJCIQIJxWJVSq8Cq/kQQ0lBxOstlX2Y+2y07NrsuI5kCuN5 +ZwE8zt+h8eIstmO2Przkb/kH/nFoJjrP+Mdk7lUvOpcHyxmSosz4Ias67qxFX3Vj +6kx92Kte4nyfVBwuxCQ+ov20jV2/Lufj3si7WD2nNC6+0yE1yI2BZlYQPjkLsqUy +A+9Zq0MNismeurJSIzDPyjJWR9eqp+sLi5uOlrB+oWpSRQC5LWCofFrdx4JkUuZj +/vQUBVkCnrYraj5CDjrYUWqeJLLW8Zl0AXp8Ag/+lwqhtjE1YLqmGNt7umB8l/Ws +YDl0BtXTn3ymQemS8hgtZPJ2YSUtgYK5YgPyjiCu3CYv/adVEstWP8SUI7o6+ZwK +tu1Iu5MXsEpWBANbsMcSEG1vktXacN+nWfyg+r0xQTjdi7WwSgZeicjYtbnXWiEU +x6xd3O4ons6IG1nGEM8OmB2Xg5OIzeS55vO4XPXV57JsQftIryGRjvM/kWrzR6yU +zxqZKw6Fh/nFVlUkyL+ewx8y+NVa+YxqxpgIwJ6svBYR9yI0MTgtu9SoVlAdrcMD +zEsg9ZjcDluAF9C1dyjWqOS/2K8RDzM62Nt887d+fbifhWD6UyNUDpuVbZq/kk1a +yN6XtZEl+F2yC54niZt2PSesaxFHg4acjBX3DPdUsgJ2phYFEWnc91yC48tZLJU2 +uYpM/f8A/8QAOxAAAQMCBAMFBgQFBAMAAAAAAQACEQMhEjFBUSJhgQQTMnGxI0JS +kaHwEMHR4RRTYoKSM0NyoiBjsv/aAAgBAQANPwEvaZxyCeEmZuOmiaXCnVDYBAMf ++RIENQExIBjqu7h1AQHzB3G8aodm7vDqCCSSYyuNeSe+T2hxksEknIa5LtDiym6r +newHLJPAc+niIAJY3EDlH5KixrqdKoSZ5SYvOnNMqB/A2O7Bsb3trdUyGPqdoh8y +JiZzy0VXE8Ck/EGnlcyEBJK3qvDfVH4OL0Uf6tWDP9sj1R8LnU3t/wDkvRMnHVAx +dZB+YVyaBqji8iCJWfdvrH0cP1QtD2AiObch5hAzgqtxNPkTcdLJpnuqdnUjoQMj +681VYGCo4xxXs7FOCctQiHBjarZIcBI8xzPRSXnAMDcA0Ls4vkFXqFgpVrEENOKN +o+aqtFOkxtxnBM5RYGfqqUS4gadb9LIC9WrTIfO4IBPoosO0sIdzIdr1TDxvdi+R +P6lfGSGtafUlfy2sxU/+35IXeaZIps/fkERFICnJA0HP0CIJaHMbI2NsusWQOWAg +DmJ/JASDT18xojqBaNjyVMcAc44iNWg7j6qqJps8Dr3Dc4zMSnCafZaz5xG4fisN +OqqgdnHZq1E4aTswWDXzT3EF5YMAMyYtBF/EenMDCDIqOnQNz53P0TTD31IDbc7k +n7smG3DiIF7zlPlf0WTu/djOHcgyF776Fi47a8vuyHgotYSWbuM+nU2zeCCGnvS3 +nJtPkbejjwuqOd3cbnDF/MlMsfYNho6j90DetXoAFx0gCEGy9x4Gs2mDB+qa/hMu +cPmBH1KfejQOp+IqnbvWklpwsmZnXOFSpnDjnhB0kHNx6xyuiwF7ZhrDoIyAytvn +NgaZgsZI4+Zm3lsLwmwxncsAIn4dRby80LCi+t7WoZ3OQPVEtik3DhYPLeNbon2b +KbM+eVh9wi7EKIdhbO7ryT1Pmqd2UKUQT5D81PCx4w9fsFMPBSo8NMDUk6n7kquC +Gd6Yp02auMfKfNMZDKOCHP3OEeEH0iTeVQsLcVUjTkPLqgbSfyRZhYzswiG5Z6Em +2uaPtKlN4Bc+oTDWibm0TNoVQXqNAaKc6zvfPO/JScfafEAdhfIbprQX9tO06bE6 +foqgLWF1obtf9jMoQTXqgG/5K0Y34RfLkv6STHPNCxGyeIxDba0JtxUEuy1zj7sq +3H3rmgz5DXqLbaphxVjMx+5TeEBghAQN04udTZMEAmInqTHLmVRZxFn+5N4B5kx5 +HmVVdBpNeAADoBIAJF08xW4j0GeYGf7KrxgmYJ5lZ4jNvuEP9MA5Zj80PZBpuIyJ +80yGMeSZjPqE04H0ceVtITBtGLkQniA5u24+7KsZa74RzshALyfEdyiLMQt5plKp +TaRqRTkv+hKY3E8tzMXwg9QPNPdDCMm1Nbf0iI6c1iwveAABvERyXu6oEn76pxyA +0UmViidkamZGRQM8F093si33X/onAGqR4Z2HJHMzBATPFUJuuadScxhpTxEsOhzk +kap1VwZiuYMGfmPuQuNlNwYbG5c75z/kEx3dgxBA36mT8kBABRADT0QuCM1lcapx +Mx5oCC07clUhgaBeURL/AOk7BXIJvMIZp13fhPA9jP4gj/i6HX6oDjHtGAW0Ab1U +HuaX8WQZyHii+vRPGJznOxEdUc2sdjPyElN953Z3j1C5tIXIrZHNE+xYR/2hbHRN +4sLTMInOfwlO93tbWd4efeCD81VEFldoaTaLOBE2OpCxYwSXMxdSxwP+W6bhpMc8 +4gPMjPPRVajg9+wFoTIk7phuC39lSbibUpmDP5hQCR3On/KLqkffNqjuQ2TbcNgF +HG+oYBWvJb7om6A8WyP+08l9J3kZ/XzX8ymxpa/nDZCdLnlmwEngMweYhV2lzcZl +wMHVPqGvRn32nMDmDNuYRzk3RPhYZJVZ4rdoAM4KQM38zCezCYGQ5KmzC2BogJJn +VRcG3yWRH4E2kIGXwtWuv9U7OjXu1PxMAaZpuLgRrcZ7prcuZzWYxDI7jYr4cYeB +/mCv/Xhb9Q0eqfYNLzUqEczqeqi79ZWQBThxRmUbcwtUL9ETad0TdbNN/RZcRmPo +mGRJmCOihryGjMFs+pWwuU3J1a4+SyDQPSFVE4MU4OS3OSPwSozJuihsohwyMpnh +kfVTAMImwDb/AER9/tPi6NW9fwj+39ZTeEAABoHL5I5BqByGqN6FN3qVKzLCnHQ5 +LZHJH4RkpBkJoghozRExqtaruOof7itwcvNESXWU25n8Ozmw/mO28k0QAPRDNpzQ +MAARCOe4/B3hlAZtTxYoZuKHiK//xAAjEAEBAAICAgMAAgMAAAAAAAABEQAhMUFR +YXGBkRChscHR/9oACAEBAAE/EJgPO+IoHFdgFDdbbwpLK0bW86dCGP8AFY/wFs0Q +rFKzubZzp1gwQrNJ52PeuWZXlcIrlPoRInDiKhSSKFKJFgqCEoYrb+zICnJDTeQ1 +3qp7tKNGwKR3oLGzHEULZwmk5NmwdY3XL6pRpUJ0midzlMV7gTyO6WZR0EiFjDYc +ORG8QUk0WDCqWSAZB+MRrq6Jvv7ygU4GPxRlCARCGFdiYe7VZF4Lv0uJ9Zl/8Fhw +bBZ26ZPArDIX5ES+V/FG+jF3FabFelT9csgUsqvwI9kR85B3hyzlQ/b2cGIAOtjs +fD/mEcDNc026ADBKgLtDeXRp28dhAbDQbaU1v/3Kwd2duCFjzEuDQ7Q6aIVSauGl +cs0gLoYhba0Ta6DF1r1qm0UKx/UrOTuufsGghk+Sbx4kUWa5XnjaCBm1SvIWCN1C +pgwHGwMikUFL2a1kN8nd96l3jmBnOnKacj4Ok3dXhAKLtOIwEiq0q3d8Qd215EIo +JULg0tdlzUK0DA5o3p7PwmX9pQ0WNAim3ZU8010DaRcBE2juvW8mg0Zqo0+hS0GF +50AVK2AS9BipToBMQkkRTbSgmEwKoIACr2UM2qBzzu4AqBsAVBLw4cimFsktAUC7 +bHS6EAyrLTyF0I4DirBhwmGnyQu7TpCALQHjWoAdjdlQCdlVw3h0i5liq6NA2CMD +EjCQwZDaSWns4BiO17aW6L49aRo2YN5bEcVUQB8ihtyjHzCFwrSjYFU1c0O4aTYm +B4G8jTgfMSX2dJBTkNnq3GY7xWPNwNkDkd4ka7r+8vD1HeSOpJakqBS6KYKqWjwd +R7STYUQNyJgOO6aXZzsIwNPKFyCoiIQXBbC5UCCtSllvAVdqoLpprgS4xV3tvWar +BapoLEkWWMgpSKb1DTIBlbykRZebWtYeS8SFOnULva1IMQovaOIBIYcIyMadRnmN +eHSmmCDAVVSStEAWRVE62GBlB1LJrxvsp5JRhw1g8qgaiGlEDiYOAY+oLCa7ADxT +grQ1QJ8OPrA7aavg02VtahXAXH7YnxJLCaKgE5zky7YDSuigCpRCxiy3UN0LUJ5G +63GTHsKJL3odFXaugN/ujJKH7LaiSuL3MZXYEKgrDGBcF4VBRBdQweIUAiE7LyZT +6W5raV06+BxlJye3y0po1fkxWk9RjBy0TUd4S1DnrqWlQjNFCBii4hxZWlauqby7 +p4iQlk3hYWcpy7nWHjeB1BUAXbQo7VdmmwGkAmpDyh0gTXJNdAIMaDYpWjl+bIhW +TYn0ALovKUhE8JWsNycTxDJTMRyzQAgXa7IHeDqdVhUqj2HruO3BIXBKR9g630es +gtFKRNkej5OPQtrS2MdvZls+sS4ZVsDbw2Qoccms4eUkojTtU+9jLqBh2kbSGZwY +0HSAUu1n1Aw+Myi8eXznRiogdrDxjEVORhS9r6FJifjVGxkG1NrqOuXKmOVMqaug +GAvKwuk014IEQgQrapHEMogDTjgXs7fMwcwBV4DhflB8GasUJIdj8YfTioW0qyog +4ukGCdNpHwXv3jekDuFNL+v7hqm0ih7DeoXm4/mttapQ8uUvzXDFhdCjdfK6uBCa +VRS5MHuRGVKcXLkAo3a+a4ppGkbCVQi7MAxD3W+uoslrZYM2mBtiwiJRjVULHQWY +RkqohK72BeowwdviprnPKW0lCl73rAyiRbE/u46pFEIOH4TAxQQjkqfeSbGbb0V6 +xXjoCkw15HUwW+WXkPshh9JhAVNBgOCIjSvj9wJQJRLX/WUV5bby5EX+ryi28p2G +5Ot/DsZBgK8g0TtQ9XAO3Da5amuGSG1THhXbjYN4xX0hlLOOc+s9iicHzoxv7h1o +fZxhMycg4vYXZHBjRTEguseQ88GPPsnGTCN6lXvxlSiFBFP57xaIpAGenIaHsHRl +COBTV84xHR80BiutQmLIqqjUp10LpMyrxjatGwqWbS7YSyUUkNcHZV08YgFWArZr +wIsw+SArWmEOqvvAopGoRUpQpRHRiq8s5E1SUs3ix+girwpX38LgwerYGWcCHFmJ +BsT4vXxkcZMgm9N5wWZCtU9D2Yl4Sez1gNVgjvEEl0Tjz83Aea6/+04ngQeccytG +4XBlPpfLjDls9VJEaIBGLOcc5Sutd6cgIo6kb5kJG4mD824Cnna753iOhEhnRZ/3 +BbkHIpi5EAGQ8pwNUvgnWGkBHiGqvl84fr2yXSjiB2uWD0PfnDmRUcHpwXrmDh77 +IUh84DBY7Qo6MWnW7cfJy/f3BaKEuv4jfouPoKJ8KSXeVYjsIqbRdMnkUhPiTn2E +TKXVK9UFf95RWBozT24fjDfmBQbdioyqsDyBU0ux8ZJ5ra1v3jytzkV534yJRjlI +8YOAlQW1xKcrEZ8MkieF9DOx7yRfJ+YdjikZAc8sW1DUOh/g5q2ALpmpdETHehWA +uPwMlp45gNcPR/ePgZQWdg7mqXFVN+2K6B7esmfaiBnR4eK5oK47X4axPpoCBH53 +cR6CUIfTnIdHN395AjGwe8aAm3kPIcFgjS8nYy+zwY47DNuQB43o05yfPFsM88i/ +mXSQTVLah19LA59LrxgBIGgawXOigbds5/XK4UFNbdrdejBfIv8Ahp7brHRCtLeT +/WBiw8BA4vTcaqnFQJ4yr7Wp3T5w+osF4MlvcVoh4+s3RXkB3gaAdJaduDptySPU +wCUEFDOXeFONGcvMBGJdoG+CYjApGG3TtvHGJgEGtbi6O5TKdmuOMXvDU4Le/Y7y +tYm8AOmAImjg0fPEyF5IyAbp3lUU1O/RgcqSNNrmthb8vGOhoAo2/wB4Oc14kMFg +jsCDlKGj/i5//8QAIxEAAwADAAMBAAIDAQAAAAAAAAECAxESBBAhMQUTIiMzQf/a +AAgBAgEBPwDmMb+HjW3PwQhbEynpbZX8lj3yyvNlI8nzdj8vqWuSEnTbkwYvumV4 +SlbgxYoebjIzIqyf6cVfDO5b+Hhu0vhNrRWdIfnpFfyZfnZNaZUfembomExwPCyp +5PGt4/tGbvLl6aPDuda/9MvN0nP6YPJ1bl/o/JbRWRs36l7Keh2xWxWztm0aTMuF +mHHyKI8akq/Rzjq3S/T8O/euTXQtDOkf2GmJsV7HWjP4WS3tmGHiWmN7EbNCWh2L +KO9kz0JcipiFJZivM1/kKt/on6SEx2a2ORCvk/s6MbQ2h2Mn1rRVCobJZ0a6ONDk +n4W+mU9SVRCGhDsU7NCnZooV8iroRycaKezRigbOvdMhodopo6IyEyrFKhFWJi+G +JbJexyISHjOB42VDNEYzFLkyU36mTHPR1wOEhbFTZFaM1bZE7KSJ0czs3pF2NiRj +ka5Ls5ZLRk1BOXZlZ/e5Q8jZj2RNbHWkbJRMmOTLZM9CkuDLifJPydCGJCQkUvSR +E6Lsb2Qjo2P6L/o0KRoklFUbOTHBb0hvZCG9eu0isqY2MmRSOveORLSMlbIkaRTR +WUrIyHsUE4jnXqhCIRkyaJ+n4U2Umf/EACMRAAMAAwABBQADAQAAAAAAAAABAgMR +EgQQEyExMgUiQlL/2gAIAQMBAT8AZkR9Gz5N0a2exT+icF2YvEaFgomKRVVLKy7R ++jrgkyoZGNsnxMjJ/jrZH8fyRhmRRjkemdSbkcTZ5Pja+iJ0PF0TK0cbMPhbZj8d +QKRIpEoSGjg4NM2PHD+i5uPyKmePDoieT79NmxHRLODk2j4FKke2LJ/kwY+VsS9N +GxMRyKRsZz6MgweN18i/5GhGzQoEIRycjv0mSZEjRvZMinYsZye2MVCYzJj0Y42S +jQmImTeiB2STJ7RUDj0VdkrklGW9CkSNGjHPwe02xYWyJ4NbLwbLTxI7dMmRI+0Z +XoRs2bIyrRGb5F5CRGVUIeRI83OqekYktEFMu+RLsl+nwloUdvR4kGXJwY8tWzLL +0Sssr5ZVNv5YoJn0ti/uRHIh1o8PE82XRk8b2sujCuR4VkZGKYQ10zP7Sn4ZM7fw +a9HZdmJclWLIdH8b5Ht5pZ59+55HaON/ZOFL6KUT+2Pycc/ky5dsi/gTY2XWzHBr +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 +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 +x+RdIZL07hf4loFu +=dyLD +-----END PGP PUBLIC KEY BLOCK----- diff --git a/assets/static/images/cat-roof_portrait.jpg b/assets/static/images/cat-roof_portrait.jpg new file mode 100644 index 0000000..ddc7ce6 Binary files /dev/null and b/assets/static/images/cat-roof_portrait.jpg differ diff --git a/assets/static/images/construct.gif b/assets/static/images/construct.gif new file mode 100644 index 0000000..73ac013 Binary files /dev/null and b/assets/static/images/construct.gif differ diff --git a/assets/static/images/phoenix.png b/assets/static/images/phoenix.png deleted file mode 100644 index 9c81075..0000000 Binary files a/assets/static/images/phoenix.png and /dev/null differ diff --git a/lib/home73k_web/controllers/home_controller.ex b/lib/home73k_web/controllers/home_controller.ex new file mode 100644 index 0000000..fe7e1f4 --- /dev/null +++ b/lib/home73k_web/controllers/home_controller.ex @@ -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 diff --git a/lib/home73k_web/endpoint.ex b/lib/home73k_web/endpoint.ex index ca6221a..3e9a938 100644 --- a/lib/home73k_web/endpoint.ex +++ b/lib/home73k_web/endpoint.ex @@ -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. diff --git a/lib/home73k_web/live/page_live.ex b/lib/home73k_web/live/page_live.ex index 0da930c..fe36b7a 100644 --- a/lib/home73k_web/live/page_live.ex +++ b/lib/home73k_web/live/page_live.ex @@ -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 diff --git a/lib/home73k_web/router.ex b/lib/home73k_web/router.ex index 2bd8a20..a2bd4cc 100644 --- a/lib/home73k_web/router.ex +++ b/lib/home73k_web/router.ex @@ -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. diff --git a/lib/home73k_web/templates/home/folio.html.eex b/lib/home73k_web/templates/home/folio.html.eex new file mode 100644 index 0000000..257e5c2 --- /dev/null +++ b/lib/home73k_web/templates/home/folio.html.eex @@ -0,0 +1,27 @@ +
+ +
+ +
+ <%= 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!" + %> +
+ + +
+ +

+ <%= icon_div @conn, "mdi-account-hard-hat", [class: "icon baseline me-2"] %>Working on it! +

+ +
I've made some things over the years (like this site!), and at some point I'll highlight some here.
+ +
+ + +
+ +
diff --git a/lib/home73k_web/templates/home/index.html.eex b/lib/home73k_web/templates/home/index.html.eex new file mode 100644 index 0000000..e333cd4 --- /dev/null +++ b/lib/home73k_web/templates/home/index.html.eex @@ -0,0 +1,34 @@ +
+ +
+ +
+ <%= 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." + %> +
+ + +
+ +

+ <%= icon_div @conn, "mdi-account", [class: "icon baseline me-2"] %>Adam Piontek +

+ +
Desktop Systems Engineer. Human.
+ +
+ <%= 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 %> +
+ +
+ +
+ +
diff --git a/lib/home73k_web/templates/home/resume.html.eex b/lib/home73k_web/templates/home/resume.html.eex new file mode 100644 index 0000000..f512d24 --- /dev/null +++ b/lib/home73k_web/templates/home/resume.html.eex @@ -0,0 +1,51 @@ +
+ +
+ +
+ +

+ <%= icon_div @conn, "mdi-account", [class: "icon baseline me-2"] %>Adam Piontek +

+ +
Desktop Systems Engineer.
+ +
+ <%= 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 %> +
+ +
+ +
+ +
qualifications
+ +
    + <%= for qualif <- resume_qualifs() do %> + <%= content_tag :li, qualif %> + <% end %> +
+ +
experience
+ + <%= for %{employer: employer, positions: positions} <- resume_experience() do %> +
<%= employer%>
+
+ <%= for position <- positions do %> +
+ <%= position.title %> + · <%= position.start %> — <%= position.end %> +
+ <% end %> +
+ <% end %> + +
+ +
+ +
diff --git a/lib/home73k_web/templates/layout/_navbar.html.eex b/lib/home73k_web/templates/layout/_navbar.html.eex index edc6496..3ecf682 100644 --- a/lib/home73k_web/templates/layout/_navbar.html.eex +++ b/lib/home73k_web/templates/layout/_navbar.html.eex @@ -1,14 +1,14 @@ -