Browse Source

front page ready to go, time to do resume

master
Adam Piontek 8 months ago
parent
commit
41770e3c71
  1. 250
      README.md
  2. 161
      package-lock.json
  3. 3
      package.json
  4. 0
      src/images/content/cat-roof.jpg
  5. BIN
      src/images/design/cat-roof_edit.jpg
  6. 39
      src/images/svgs/gitea1.svg
  7. 36
      src/images/svgs/gitea2.svg
  8. 1
      src/images/svgs/keybase.svg
  9. 4
      src/images/svgs/tiktok.svg
  10. 2
      src/js/73kus.js
  11. 24
      src/pug/includes/footer.pug
  12. 7
      src/pug/includes/head.pug
  13. 41
      src/pug/includes/social-links.pug
  14. 52
      src/pug/mixins/navbar.pug
  15. 283
      src/raw/DF185CEE29A3D443_public_key.asc
  16. 133
      src/scss/73kus.scss
  17. 13
      src/scss/base/_vars.scss
  18. 66
      src/templates/index.pug
  19. 37
      webpack.config.js

250
README.md

@ -1,184 +1,68 @@
# Webpack 5 Boilerplate
![Maintenance](https://img.shields.io/maintenance/yes/2020?logo=github)
![webpack-current](https://img.shields.io/badge/webpack-v5.9.0-green?logo=webpack)
![node-current (scoped)](https://img.shields.io/node/v/@weareathlon/frontend-webpack-boilerplate)
[![Build Status](https://api.travis-ci.org/weareathlon/frontend-webpack-boilerplate.svg?branch=master)](https://travis-ci.org/weareathlon/frontend-webpack-boilerplate)
[![GitHub Issues](https://img.shields.io/github/issues-raw/WeAreAthlon/frontend-webpack-boilerplate)](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/issues)
[![Known Vulnerabilities](https://snyk.io/test/github/WeAreAthlon/frontend-webpack-boilerplate/badge.svg?targetFile=package.json)](https://snyk.io/test/github/WeAreAthlon/frontend-webpack-boilerplate?targetFile=package.json)
[![devDependency Status](https://david-dm.org/WeAreAthlon/frontend-webpack-boilerplate/dev-status.svg)](https://david-dm.org/WeAreAthlon/frontend-webpack-boilerplate?type=dev)
[![npm](https://img.shields.io/npm/dm/@weareathlon/frontend-webpack-boilerplate)](https://www.npmjs.com/package/@weareathlon/frontend-webpack-boilerplate)
[![GitHub License](https://img.shields.io/github/license/WeAreAthlon/frontend-webpack-boilerplate)](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/blob/master/LICENSE)
![Front-end Webpack Boilerplate](https://repository-images.githubusercontent.com/96102257/4be7b600-61f1-11e9-9ebf-67b17d5ba125)
## Features
* **Simple setup** instructions
* Start development of a project right away with **simple**, **configured**, **linter enabled**, **browser synced** asset files.
* Configuration per **environment**
* `development` - [`sourcemaps`](https://webpack.js.org/configuration/devtool/), [`browser synced developmentment server`](https://webpack.js.org/configuration/dev-server/)
* `production` - [`minification`](https://webpack.js.org/plugins/terser-webpack-plugin/), [`sourcemaps`](https://webpack.js.org/configuration/devtool/)
* Configurable **browsers versions support**. It uses [`browserslist`](https://github.com/browserslist/browserslist#full-list) - just specify the browsers you want to support in the `package.json` file for `browserslist`:
```js
"browserslist": [
"last 2 versions",
"> 5%"
]
```
* The built CSS / JavaScript files will respect the **configured supported browsers** using the following tools:
* [`autoprefixer`](https://github.com/postcss/autoprefixer) - automatically adds vendor prefixes to CSS rules
* [`babel-preset-env`](https://babeljs.io/docs/en/babel-preset-env) - smart preset that allows you to use the latest JavaScript without needing to micromanage which syntax transforms (*and optionally, browser polyfills*) are needed by your target environment(s).
* Demo project files to be used as a reference and **demo example** building of:
* *JavaScript*
* *SASS / PostCSS*
* *HTML* templates
* *Images* (*CSS backgrounds and image tags*)
* *Fonts*
* Support for **assets optimization** for production environment with ability to configure:
* **Code Minification** of *JavaScript* and *CSS* processed files.
* **Optimize Assets Loading** - inline and embed **images** / **fonts** files having file size below a *configurable* threshold value.
* **Images Optimisation** - optimize `jpeg`, `jpg`, `png`, `gif`, `svg` filesize and loading type via [`imagemin`](https://github.com/imagemin/imagemin). Plugin and Loader for webpack to optimize (*compress*) all images using `imagemin`. Do not worry about size of images, now they are always optimized/compressed.
* Support for **source code syntax style and formatting linters** that analyze source code to flag programming errors, bugs, stylistic errors, and suspicious constructs:
* **SASS/PostCSS syntax cheker** - you can change or add additional rules in `.sasslintrc` file. Configuration options can be found on [`sass-lint`](https://github.com/sasstools/sass-lint/blob/master/lib/config/sass-lint.yml) documentation.
* **JavaScript syntax checker** - following the `airbnb` style, you can review and configure the rules in `.eslintrc` file. Configuration options can be found on [`eslint`](https://eslint.org/docs/user-guide/configuring) documentation.
* Latest [Webpack 5](https://github.com/webpack/webpack) - *JavaScript* module bundler.
* Latest [SASS/PostCSS](https://github.com/sass/sass) compiler based on Dart `sass`.
* Latest [Babel 7](https://github.com/babel/babel) (`@babel/core`) - JavaScript compiler - _Use next generation JavaScript, today._
* Integration with [Travis CI](https://travis-ci.org/)
* [Demo deployment available to GitHub pages](https://weareathlon.github.io/frontend-webpack-boilerplate/)
* Configured and ready to use **Webpack Dev Server** plugin for faster local development - [`webpack-dev-server`](https://webpack.js.org/configuration/dev-server/)
## Requirements
* `node` : `^10 || ^12 || >=14`
* `npm`
# Setup
## Installation
1. Choose and download the latest template release from [List of Releases](https://github.com/WeAreAthlon/frontend-webpack-boilerplate/releases).
2. Extract the release archive to a new directory, rename it to your project name and browse the directory.
3. Install all dependencies using `npm` *clean install* command.
```sh
$ npm ci
# 73k.us front page
Front page/home for Adam at 73k.us.
Webpack setup derived from [WeAreAthlon/frontend-webpack-boilerplate](https://github.com/WeAreAthlon/frontend-webpack-boilerplate) with extra modifications.
## w.73k.us blog CSS
Blog is managed separately by WriteFreely. Coordinated CSS for the blog follows:
```css
@import url("https://fonts.googleapis.com/css2?family=Righteous&display=swap");
/* Entire page background */
body {
background-color: #363636;
color: #fff;
}
/* Blog header on index and post pages */
#blog-title a {
color: #00b0b0;
font-family: Righteous, Lato, -apple-system, BlinkMacSystemFont, "Segoe UI",
Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
font-size: 125%;
}
#blog-title a:hover {
color: rgb(0, 125, 125);
}
/* Blog header on post pages ONLY */
body#post #blog-title a {
padding: 4px 8px;
}
/* Blog description (underneath title) on index page */
header p.description {
color: rgba(255, 255, 255, 0.9);
font-style: italic;
}
/* Post titles on blog index */
.post-title {
font-weight: normal;
}
.post-title a.u-url:link,
.post-title a.u-url:visited {
color: #00b0b0;
}
/* "Read more..." links */
body#collection a.read-more {
color: #00b0b0;
text-decoration: none;
border-bottom: 1px solid rgb(228, 134, 99);
}
/* Links inside blog posts */
nav a.pinned,
article p a {
color: rgb(228, 134, 99);
text-decoration: none;
}
article p a:hover {
color: white;
text-decoration: none;
}
```
> More on the clean install npm command can be read here [`npm ci`](https://docs.npmjs.com/cli/ci.html)
> You can still use `npm install` in cases the `npm ci` raises system error due to specific platform incompatibilities.
## Define Package Metadata
* Amend `package.json` file and optionally specify:
* `name` - Name of your project. A name can be optionally prefixed by a scope, e.g. `@myorg/mypackage`.
* `version` - Specify and maintain a version number indicator for your project code.
* `author` - Your organisation or just yourself. You can also specify [`contributors`](https://docs.npmjs.com/files/package.json#people-fields-author-contributors).
* `description` - Short description of your project.
* `keywords` - Put keywords in it. It’s an array of strings.
* `repository` - Specify the place where your code lives.
* `license` - Announce your code license, figure out the license from [Choose an Open Source License](https://choosealicense.com) .
* `browserslist` - Specify the supported browsers versions - you can refer to [full list](https://github.com/browserslist/browserslist#full-list) of availalbe options.
## Configuration
### Environment Configuration
* Edit the [`configuration/environment.js`](configuration/environment.js) if you want to specify:
* **`server`**: configure development server, specify `host`, `port`. Refer to the full development server configuration options for [`webpack-dev-server`](https://webpack.js.org/configuration/dev-server/).
* **`limits`**: configure file size thresholds for assets optimizations.
* Image/Font files size in bytes. Below this value the image file will be served as Data URL (_inline base64_).
* **`paths`**: `src` or `dist` directories names and file system location.
### Additional `webpack` configuration
You can additionally configure `webpack` for specific environment:
* `development` - [`configuration/webpack.dev.config.js`](configuration/webpack.dev.config.js)
* `production` - [`configuration/webpack.prod.config.js`](configuration/webpack.prod.config.js)
* Note that if you prefer to build and deploy [`sourcemap`](https://webpack.js.org/configuration/devtool/#production) files:
> You should configure your server to disallow access to the Source Map file for normal users!
## Development
### Assets Source
* **SASS/PostCSS** files are located under `src/scss/`
* **JavaScript** files with support of _ES6 / ECMAScript 2016(ES7)_ files are located under `src/js/`
* **Image** files are located under `src/images/`
* **Font** files are located under `src/fonts/`
* **HTML** files are located under `src/templates/`
* It will **automatically** build **all HTML files** placed under `src/templates/` directory, no need to manually configure each template anymore!
## Build Assets
### One time build assets for development
```sh
$ npm run build
```
### Build assets and enable source files watcher
```sh
$ npm run watch
```
This command is suitable if you develop with external web server.
**Note:** File watching does not work with *NFS* (*Windows*) and machines in *VirtualBox*.
Extend the configuration in such cases by:
```js
module.exports = {
//...
watchOptions: {
poll: 1000 // Check for changes every second
}
};
```
### Start a development server - reloading automatically after each file change.
```sh
$ npm run dev
```
## Production / Build Assets
* Optimize assets for production by:
```sh
$ npm run production
```
## Processed Built Assets
* _CSS_ files are located under `/dist/css/`
* _JavaScript_ files with support of _ES6 / ECMAScript 2016(ES7)_ files are located under `/dist/js/`
* _Images_ are located under `/dist/images/`
* Images part of the _design_ (_usually referenced in the CSS_) are located under `/dist/images/design/`
* Images part of the _content_ (_usually referenced via `<img>` tags_) are located under `/dist/images/content/`
* _Fonts_ are located under `/dist/fonts/`
* _HTML_ files are located under `/dist/`
## Run Code Style Linters
* **SASS**
```sh
$ npm run lint:sass
```
* **JS**
```sh
$ npm run lint:js
```
## Continuous Integration
This boilerplate template contains integration with [Travis CI](https://travis-ci.org/). The build system runs all linting scripts and deploys production optimized pages to _GitHub_ pages upon push to the `master` branch. However, note that this deployment flow only works for _Project Pages_, as User and Organization pages [only support the master branch flow](https://help.github.com/articles/user-organization-and-project-pages/).
For more information on how to set up alternative deployment processes, check out the [Travis CI documentation on deployment](https://docs.travis-ci.com/user/deployment). The service can deploy to dozens of cloud providers, including Heroku, AWS, and Firebase.

161
package-lock.json

@ -1939,6 +1939,41 @@
}
}
},
"axios": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
"integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
"dev": true,
"requires": {
"follow-redirects": "1.5.10"
},
"dependencies": {
"debug": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"follow-redirects": {
"version": "1.5.10",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
"integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
"dev": true,
"requires": {
"debug": "=3.1.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
}
}
},
"babel-loader": {
"version": "8.2.2",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz",
@ -2845,6 +2880,53 @@
"is-regex": "^1.0.3"
}
},
"cheerio": {
"version": "1.0.0-rc.3",
"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz",
"integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==",
"dev": true,
"requires": {
"css-select": "~1.2.0",
"dom-serializer": "~0.1.1",
"entities": "~1.1.1",
"htmlparser2": "^3.9.1",
"lodash": "^4.15.0",
"parse5": "^3.0.1"
},
"dependencies": {
"css-select": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
"integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
"dev": true,
"requires": {
"boolbase": "~1.0.0",
"css-what": "2.1",
"domutils": "1.5.1",
"nth-check": "~1.0.1"
}
},
"domutils": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
"integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
"dev": true,
"requires": {
"dom-serializer": "0",
"domelementtype": "1"
}
},
"parse5": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
"integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
"dev": true,
"requires": {
"@types/node": "*"
}
}
}
},
"chokidar": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz",
@ -6128,10 +6210,10 @@
"integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==",
"dev": true
},
"fontsource-fira-code": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/fontsource-fira-code/-/fontsource-fira-code-3.0.5.tgz",
"integrity": "sha512-pxhYUSBdgXYFnGIdO3QQTuemncqdRE3NEoVu94tm+jCx5/sUUGDugOdNdZqSY7Gd8w7Xk98hHbT5zFGgrxDL+A=="
"fontsource-fira-mono": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/fontsource-fira-mono/-/fontsource-fira-mono-3.0.9.tgz",
"integrity": "sha512-g1hJWCSR0OgrAh/GAKlSbzAhHf9J9gpXKB1qkAqX2AUEGMq7QCo2+M0A7ugg9o86WrBkeAwhgKIcVRD+iG6j+A=="
},
"fontsource-righteous": {
"version": "3.0.9",
@ -6790,6 +6872,71 @@
}
}
},
"html-webpack-inline-svg-plugin": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/html-webpack-inline-svg-plugin/-/html-webpack-inline-svg-plugin-2.3.0.tgz",
"integrity": "sha512-NMeirc/kQX2/5qwr6fYrWwqYQsQt5ZcasgR2Jpm04fgZLr1eVm55cetgd5Dr/w7TyEYb+ZlWhAugZCktbgbUNw==",
"dev": true,
"requires": {
"axios": "^0.19.2",
"chalk": "^4.1.0",
"cheerio": "^1.0.0-rc.3",
"lodash": "^4.17.19",
"parse5": "^6.0.1",
"svgo": "^1.3.2"
},
"dependencies": {
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"requires": {
"color-convert": "^2.0.1"
}
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
}
}
},
"html-webpack-plugin": {
"version": "5.0.0-alpha.15",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.0.0-alpha.15.tgz",
@ -9061,6 +9208,12 @@
"error-ex": "^1.2.0"
}
},
"parse5": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",

3
package.json

@ -29,7 +29,7 @@
"@fullhuman/postcss-purgecss": "^3.0.0",
"@mdi/svg": "^5.8.55",
"autoprefixer": "^10.0.4",
"fontsource-fira-code": "^3.0.5",
"fontsource-fira-mono": "^3.0.9",
"fontsource-righteous": "^3.0.9"
},
"devDependencies": {
@ -48,6 +48,7 @@
"eslint-config-prettier": "^7.0.0",
"eslint-plugin-import": "^2.22.1",
"file-loader": "^6.2.0",
"html-webpack-inline-svg-plugin": "^2.3.0",
"html-webpack-plugin": "^5.0.0-alpha.15",
"image-minimizer-webpack-plugin": "^1.0.0",
"imagemin-gifsicle": "^7.0.0",

0
src/images/design/cat-roof.jpg → src/images/content/cat-roof.jpg

Before

Width: 4032  |  Height: 3024  |  Size: 1.4 MiB

After

Width: 4032  |  Height: 3024  |  Size: 1.4 MiB

BIN
src/images/design/cat-roof_edit.jpg

Before

Width: 4032  |  Height: 2410  |  Size: 417 KiB

39
src/images/svgs/gitea1.svg

@ -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>

36
src/images/svgs/gitea2.svg

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="512" height="512" viewBox="0 0 135.46667 135.46667" version="1.1" id="svg8" sodipodi:docname="logo.svg" inkscape:version="0.92.1 r15371" inkscape:export-filename="" inkscape:export-xdpi="48.000004" inkscape:export-ydpi="48.000004">
<defs id="defs2"/>
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="0.70710678" inkscape:cx="418.13805" inkscape:cy="177.57445" inkscape:document-units="mm" inkscape:current-layer="layer2" showgrid="false" units="px" width="256px" showguides="false" inkscape:window-width="1920" inkscape:window-height="1137" inkscape:window-x="1912" inkscape:window-y="-8" inkscape:window-maximized="1" inkscape:pagecheckerboard="false" inkscape:measure-start="283.373,243.952" inkscape:measure-end="290.267,236.527">
<sodipodi:guide position="0,0" orientation="0,512" id="guide3699" inkscape:locked="false"/>
<sodipodi:guide position="135.46667,0" orientation="-512,0" id="guide3701" inkscape:locked="false"/>
<sodipodi:guide position="135.46667,135.46667" orientation="0,-512" id="guide3703" inkscape:locked="false"/>
<sodipodi:guide position="0,135.46667" orientation="512,0" id="guide3705" inkscape:locked="false"/>
</sodipodi:namedview>
<metadata id="metadata5">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-161.53334)" style="display:inline">
<path style="fill:#609926;fill-opacity:1;stroke:#428f29;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none" d="m 27.709937,195.15095 c -9.546573,-0.0272 -22.3392732,6.79805 -21.6317552,23.90397 1.105534,26.72889 25.4565952,29.20839 35.1916502,29.42301 1.068023,5.01357 12.521798,22.30563 21.001818,23.21667 h 37.15277 c 22.27763,-1.66785 38.9607,-75.75671 26.59321,-76.03825 -46.781583,2.47691 -49.995146,2.13838 -88.599758,0 -2.495053,-0.0266 -5.972321,-0.49474 -9.707935,-0.5054 z m 2.491319,9.45886 c 1.351378,13.69267 3.555849,21.70359 8.018216,33.94345 -11.382872,-1.50473 -21.069822,-5.22443 -22.851515,-19.10984 -0.950962,-7.4112 2.390428,-15.16769 14.833299,-14.83361 z" id="path3722" inkscape:connector-curvature="0" sodipodi:nodetypes="sscccccsccsc"/>
</g>
<g inkscape:groupmode="layer" id="layer2" inkscape:label="Layer 2" style="display:inline">
<rect style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.24757317;stroke-opacity:1" id="rect4599" width="34.762054" height="34.762054" x="87.508659" y="18.291576" transform="rotate(25.914715)" ry="5.4825778"/>
<path style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26644793px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" d="m 79.804947,57.359056 3.241146,1.609954 V 35.255731 h -3.262698 z" id="path4525" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
</g>
<g inkscape:groupmode="layer" id="layer3" class="detail-remove" inkscape:label="Layer 3" style="display:inline">
<g style="display:inline" id="g4539">
<circle transform="rotate(-19.796137)" r="3.4745038" cy="90.077766" cx="49.064713" id="path4606" style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1"/>
<circle transform="rotate(-19.796137)" r="3.4745038" cy="102.1049" cx="36.810425" id="path4606-3" style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1"/>
<circle transform="rotate(-19.796137)" r="3.4745038" cy="111.43928" cx="46.484283" id="path4606-1" style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.26458332;stroke-opacity:1"/>
<rect transform="rotate(26.024158)" y="18.061695" x="97.333458" height="27.261492" width="2.6726954" id="rect4629-8" style="fill:#609926;fill-opacity:1;stroke:none;stroke-width:0.27444693;stroke-opacity:1"/>
<path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path4514" d="m 76.558096,68.116343 c 12.97589,6.395378 13.012989,4.101862 4.890858,20.907244" style="fill:none;stroke:#609926;stroke-width:2.68000007;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
</g>
</g>
</svg>

1
src/images/svgs/keybase.svg

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 14.716797 4 C 14.177797 4.75 13.783297 5.2906563 13.404297 5.8476562 C 13.100297 5.4836562 12.6595 5.2623281 12.1875 5.2363281 C 10.6665 5.1403281 10.750641 5.1464844 10.681641 5.1464844 C 9.7646406 5.1514844 9.0072656 5.8661562 8.9472656 6.7851562 L 8.8632812 8.1894531 L 8.8632812 8.1953125 C 8.8112812 9.1553125 9.5400937 9.9790625 10.496094 10.039062 L 11.558594 10.103516 C 11.467594 11.003516 11.611609 11.845359 11.974609 12.568359 C 10.591609 13.147359 9.3381094 13.997312 8.2871094 15.070312 C 4.9381094 18.418312 5.0058594 22.588562 5.0058594 26.601562 L 6.2753906 25.251953 C 6.5383906 26.219953 6.9379375 27.145 7.4609375 28 L 8.9960938 28 C 8.1520938 26.854 7.5820781 25.527953 7.3300781 24.126953 L 9.4609375 21.859375 L 8.4511719 25.037109 C 10.698172 23.398109 14.151703 20.332797 20.970703 22.341797 C 22.773703 22.866797 24.693734 22.379828 25.552734 20.798828 C 25.984734 22.914828 25.611422 25.920141 24.357422 27.994141 L 25.814453 27.994141 C 26.593453 26.435141 27 24.560562 27 22.476562 C 27 19.839562 25.873875 17.17125 23.921875 15.15625 C 22.261875 13.44625 20.539391 12.707859 19.525391 12.380859 C 19.570391 12.274859 19.610484 12.165641 19.646484 12.056641 C 20.351484 9.9156406 19.195453 7.6074375 17.064453 6.8984375 C 16.077453 6.5664375 15.543938 6.59375 15.335938 6.59375 C 15.329937 6.58875 15.090406 6.2024375 15.816406 4.6484375 L 14.716797 4 z M 10.6875 6.4277344 C 10.7095 6.4277344 10.592281 6.4176719 12.113281 6.5136719 C 12.646281 6.5506719 12.534297 7.1469062 12.529297 7.2539062 C 12.245297 7.7539063 12.010078 8.281125 11.830078 8.828125 L 10.576172 8.7539062 C 10.324172 8.7369063 10.131531 8.519625 10.144531 8.265625 L 10.228516 6.8613281 C 10.241516 6.6173281 10.4435 6.4267344 10.6875 6.4277344 z M 14.146484 7.0429688 C 14.350484 7.5599687 14.857156 7.8902813 15.410156 7.8632812 C 15.805156 7.8472813 17.572594 8.0035 18.308594 9.5625 C 18.697594 10.3985 18.772109 11.817219 17.662109 12.824219 L 17.214844 12.273438 C 15.918844 10.966437 14.396484 12.074938 14.396484 13.210938 C 13.904484 12.977938 13.491031 12.604672 13.207031 12.138672 C 12.161031 10.391672 13.415484 8.1799688 14.146484 7.0429688 z M 10.955078 7.1875 L 10.902344 8.0234375 L 11.734375 8.078125 L 11.787109 7.2421875 L 10.955078 7.1875 z M 16.007812 12.96875 C 16.085047 12.971828 16.163812 13.007641 16.226562 13.087891 C 16.963563 13.998891 15.783734 12.540328 19.177734 16.736328 C 19.433734 17.052328 18.958266 17.448953 18.697266 17.126953 L 18.404297 16.763672 L 17.357422 17.619141 C 17.255422 17.703141 17.105484 17.689891 17.021484 17.587891 L 16.546875 17.003906 C 16.463875 16.901906 16.476125 16.751969 16.578125 16.667969 L 17.630859 15.804688 L 17.203125 15.277344 L 16.685547 15.707031 C 16.429547 15.916031 16.044062 15.407125 16.289062 15.203125 L 16.802734 14.779297 C 16.728734 14.688297 15.847094 13.601516 15.746094 13.478516 C 15.549594 13.241516 15.776109 12.959516 16.007812 12.96875 z M 18.810547 13.484375 C 19.226547 13.614375 19.63325 13.768313 20.03125 13.945312 C 21.67425 14.679312 23.045266 15.911641 23.947266 17.181641 C 24.763266 18.338641 24.9025 19.523422 24.3125 20.357422 C 23.7305 21.188422 22.583219 21.471563 21.324219 21.101562 C 17.407219 19.944562 13.876969 20.207047 10.792969 21.873047 L 12.386719 16.859375 C 6.0957187 23.557375 6.7426875 22.871891 6.3046875 23.337891 C 6.3636875 21.767891 6.5702344 20.121906 7.3652344 18.503906 C 8.0742344 17.067906 9.7944844 14.726187 12.771484 13.617188 C 13.624484 14.432187 14.664828 14.693672 15.048828 14.763672 C 14.816828 15.302672 14.912922 15.927094 15.294922 16.371094 C 15.135922 16.864094 15.234547 17.406594 15.560547 17.808594 L 16.035156 18.392578 C 16.323156 18.749578 16.757844 18.956078 17.214844 18.955078 C 17.860844 18.955078 18.245391 18.548781 18.400391 18.425781 C 19.248391 18.735781 19.878266 18.221109 19.947266 18.162109 C 20.625266 17.604109 20.725875 16.599969 20.171875 15.917969 L 18.46875 13.816406 C 18.58975 13.714406 18.704547 13.603375 18.810547 13.484375 z M 19.40625 24.404297 C 18.88125 24.404297 18.457031 24.832375 18.457031 25.359375 C 18.457031 25.886375 18.88125 26.3125 19.40625 26.3125 C 19.93125 26.3125 20.357422 25.886375 20.357422 25.359375 C 20.355422 24.832375 19.93025 24.405297 19.40625 24.404297 z M 13.505859 24.410156 C 12.980859 24.410156 12.556641 24.836281 12.556641 25.363281 C 12.556641 25.890281 12.980859 26.318359 13.505859 26.318359 C 14.030859 26.318359 14.455078 25.890281 14.455078 25.363281 C 14.453078 24.836281 14.029859 24.411156 13.505859 24.410156 z"></path></svg>

4
src/images/svgs/tiktok.svg

@ -0,0 +1,4 @@
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 -5 42 42">
<title>tiktok</title>
<path d="M16.708 0.027c1.745-0.027 3.48-0.011 5.213-0.027 0.105 2.041 0.839 4.12 2.333 5.563 1.491 1.479 3.6 2.156 5.652 2.385v5.369c-1.923-0.063-3.855-0.463-5.6-1.291-0.76-0.344-1.468-0.787-2.161-1.24-0.009 3.896 0.016 7.787-0.025 11.667-0.104 1.864-0.719 3.719-1.803 5.255-1.744 2.557-4.771 4.224-7.88 4.276-1.907 0.109-3.812-0.411-5.437-1.369-2.693-1.588-4.588-4.495-4.864-7.615-0.032-0.667-0.043-1.333-0.016-1.984 0.24-2.537 1.495-4.964 3.443-6.615 2.208-1.923 5.301-2.839 8.197-2.297 0.027 1.975-0.052 3.948-0.052 5.923-1.323-0.428-2.869-0.308-4.025 0.495-0.844 0.547-1.485 1.385-1.819 2.333-0.276 0.676-0.197 1.427-0.181 2.145 0.317 2.188 2.421 4.027 4.667 3.828 1.489-0.016 2.916-0.88 3.692-2.145 0.251-0.443 0.532-0.896 0.547-1.417 0.131-2.385 0.079-4.76 0.095-7.145 0.011-5.375-0.016-10.735 0.025-16.093z"/>
</svg>

2
src/js/73kus.js

@ -1,7 +1,7 @@
// custom font
// 73kus fonts
import 'fontsource-righteous'
import 'fontsource-fira-code'
import 'fontsource-fira-mono'
// bulma navbar mobile burger menu toggle
document.addEventListener('DOMContentLoaded', () => {

24
src/pug/includes/footer.pug

@ -0,0 +1,24 @@
#site-footer
p.is-pulled-right.mb-3.mx-5.is-size-7 &copy; 2021 Adam Piontek
//- .container
//- .columns
//- .column
//- .column.is-narrow.mb-3.mx-2
//- address.vcard.h-card
//- a.url.u-url(href='https://73k.us/', rel='me') 73k.us
//- |
//- | is the online home of
//- |
//- a.email.fn.p-name.u-email(href='mailto:adam@73k.us') Adam Piontek
//- | , a
//- |
//- span.role.p-role desktop systems engineer
//- |
//- | living and working in
//- |
//- span.adr.p-adr
//- span.locality.p-locality New York,
//- |
//- |
//- span.country-name.p-country-name USA
//- | .

7
src/pug/includes/head.pug

@ -0,0 +1,7 @@
head
meta(charset='UTF-u')
meta(name='viewport', content='width=device-width, initial-scale=1')
title= title
meta(name='author', content='Adam Piontek')
link(rel='me', href='mailto:adam@73k.us')
link(rel='me', href='sms:+16462341697')

41
src/pug/includes/social-links.pug

@ -0,0 +1,41 @@
#social-links
-
let socials = [
{ icon: "node_modules/@mdi/svg/svg/typewriter.svg", url: "https://w.73k.us/" },
{ icon: "node_modules/@mdi/svg/svg/rss.svg", url: "https://w.73k.us/feed/" },
{ icon: "node_modules/@mdi/svg/svg/key-variant.svg", url: "DF185CEE29A3D443_public_key.asc" },
{ icon: "src/images/svgs/gitea1.svg", url: "https://73k.us/git/adam" },
{ icon: "node_modules/@mdi/svg/svg/github.svg", url: "https://github.com/apiontek" },
{ icon: "node_modules/@mdi/svg/svg/goodreads.svg", url: "https://www.goodreads.com/user/show/2450014-adam-piontek" },
{ icon: "src/images/svgs/keybase.svg", url: "https://keybase.io/adampiontek" },
{ icon: "node_modules/@mdi/svg/svg/twitter.svg", url: "https://twitter.com/adampiontek" },
{ icon: "node_modules/@mdi/svg/svg/facebook.svg", url: "https://facebook.com/damek" },
{ icon: "node_modules/@mdi/svg/svg/instagram.svg", url: "https://www.instagram.com/adampiontek/" },
{ icon: "node_modules/@mdi/svg/svg/linkedin.svg", url: "https://www.linkedin.com/in/adampiontek/" },
{ icon: "node_modules/@mdi/svg/svg/steam.svg", url: "https://steamcommunity.com/id/apiontek/" },
{ icon: "node_modules/@mdi/svg/svg/discord.svg", url: "https://discordapp.com/users/328583977629646848" },
{ icon: "src/images/svgs/tiktok.svg", url: "https://vm.tiktok.com/ZMJVn2uT1/" }
];
.block
each item in socials
a.has-text-white.mr-2(href=item.url, target='_blank')
span.icon.is-medium.mt-4
img(inline, src=item.icon)
//- - var i = 0
//- .block
//- while i < (socials.length / 2)
//- - let item = socials[i]
//- a.has-text-white.mr-2(href=item.url, target='_blank')
//- span.icon.is-medium
//- img(inline, src=item.icon)
//- - i++
//- .block
//- while i < socials.length
//- - let item = socials[i]
//- a.has-text-white.mr-2(href=item.url, target='_blank')
//- span.icon.is-medium
//- img(inline, src=item.icon)
//- - i++
//-
mastodon/pleroma when i have it,

52
src/pug/mixins/navbar.pug

@ -0,0 +1,52 @@
mixin navbar(slug)
-
let menu = [
{
text: "\\~",
active: slug == "home",
url: "index.html",
icon: "home"
},
{
text: "\\Resume",
active: slug == "resume",
url: "resume.html",
icon: "briefcase-account"
},
{
text: "\\Portfolio",
active: slug == "portfolio",
url: "portfolio.html",
icon: "zip-disk"
}
]
nav.navbar.is-ark.is-spaced(role='navigation', aria-label='main navigation')
.navbar-brand
a#nav-brand-title.is-size-3.has-text-primary(href='https://73k.us/')
span.icon
img(inline, src='node_modules/@mdi/svg/svg/desktop-classic.svg')
span.ml-1 \\AdamPion73k
a.navbar-burger.has-text-grey-light(
role='button',
aria-label='menu',
aria-expanded='false',
data-target='navMenu'
)
each i in [1,2,3]
span(aria-hidden='true')
#navMenu.navbar-menu
.navbar-end
each item in menu
a.navbar-item(href=item.url, class=item.active && "is-active")
if item.icon
span.icon
img(inline, src=`node_modules/@mdi/svg/svg/${item.icon}.svg`)
span.menu-text #{item.text}
.navbar-item
a.button.is-link.pr-3.pl-19px(
href='https://w.73k.us',
target='_blank'
)
span.icon.is-small
img(inline, src='node_modules/@mdi/svg/svg/typewriter.svg')
span Blog

283
src/raw/DF185CEE29A3D443_public_key.asc

@ -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-----

133
src/scss/73kus.scss

@ -1,59 +1,60 @@
// body {
// background: $body-background-color;
// color: $foreground-color;
// background-image: url('../images/design/cat-roof.jpg');
// background-size: cover;
// background-position: center;
// background-repeat: no-repeat;
// }
// header {
// font-size: 2em;
// margin: 20px;
// color: $caption-color;
// text-align: center;
// background: $foreground-color url('../images/design/heading.png') center 20px no-repeat;
// padding: 60px 30px 30px;
// background-size: 160px;
// }
// main {
// color: $foreground-color;
// text-align: center;
// padding: 10px;
// }
// .badges {
// img {
// display: inline;
// }
// }
// a {
// color: $link-color;
// }
// address {
// color: $accent-color;
// }
// .logo {
// margin: 0 auto;
// display: block;
// }
// navbar mods
#nav-brand-title {
font-family: Righteous, Lato, -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;
@include until($desktop) {
margin-left: 0.75rem;
}
}
// .hero-body {
// background-image: url('../images/design/cat-roof_edit.jpg');
// background-size: cover;
// background-position: center;
// background-repeat: no-repeat;
// }
.navbar.is-spaced a.navbar-item,
.navbar.is-spaced .navbar-link {
border-radius: 0;
}
.hero a.navbar-item,
.hero .navbar-link {
@include until($desktop) {
padding: 0rem 0.4rem;
margin: 0.5rem 1.25rem;
border-left: 6px transparent solid;
}
@include from($desktop) {
padding: 0.4rem 0;
margin: 0 0.75rem;
border-bottom: 6px transparent solid;
}
}
.hero.is-dark a.navbar-item:hover,
.hero.is-dark a.navbar-item.is-active,
.hero.is-dark .navbar-link:hover,
.hero.is-dark .navbar-link.is-active {
background-color: transparent;
@include until($desktop) {
border-left: 6px teal solid;
}
@include from($desktop) {
border-bottom: 6px teal solid;
}
}
// front page image
#front-portrait {
border-radius: 5px;
@include until($tablet) {
width: 60%;
max-width: 285px;
max-height: 380px;
padding: 15px;
}
@include from($tablet) {
width: 285px;
height: 380px;
padding: 20px;
}
}
// svg icon helper
[class*=' icon'],
[class^='icon'] {
display: inline-block;
@ -67,3 +68,35 @@
top: -0.05em;
vertical-align: middle;
}
// button icon helpers
.button .icon.is-small {
width: 1em;
height: 1em;
}
#social-links .button {
border-radius: 50%;
border-width: 2px;
}
misc .hero-body .container .columns .column h1.title span.icon {
margin-top: -0.15rem !important;
}
#nav-brand-title span.icon {
margin-top: -0.35rem !important;
}
#site-footer {
font-family: $family-sans-serif;
}
// trying orange
.hero.is-dark .navbar-item:hover,
a.has-text-white:hover,
a.has-text-white:focus {
color: rgb(228, 134, 99) !important;
}
.pl-19px {
padding-left: 19px !important;
}

13
src/scss/base/_vars.scss

@ -3,7 +3,7 @@
*/
/* Typography */
$family-monospace: 'Fira Code', monospace;
$family-monospace: 'Fira Mono', monospace;
$family-primary: $family-monospace;
/* Breakpoints */
@ -14,10 +14,11 @@ $black: #000;
$white: #fff;
$primary: #00b0b0;
$link: #0000b0;
$info: #5800b0;
$success: #58b000;
$warning: #b0b000;
$danger: #b00000;
// $link: #0000b0;
// $info: #5800b0;
// $info: orangered;
// $success: #58b000;
// $warning: #b0b000;
// $danger: #b00000;
/* Components */

66
src/templates/index.pug

@ -1,60 +1,28 @@
doctype html
html(lang='en')
head
meta(charset='UTF-u')
meta(name='viewport', content='width=device-width, initial-scale=1')
title Adam Pion73k
- let title = "\\\\73k\\~"
- let slug = "home"
include ../pug/includes/head.pug
body
section.hero.is-dark.is-fullheight
.hero-head
nav.navbar.is-ark.is-spaced(
role='navigation',
aria-label='main navigation'
)
.navbar-brand
a#nav-brand-title.is-size-3.has-text-primary(
href='https://73k.us/'
) AdamPion73k~&#62;
a.navbar-burger(
role='button',
aria-label='menu',
aria-expanded='false',
data-target='navMenu'
)
span(aria-hidden='true')
span(aria-hidden='true')
span(aria-hidden='true')
#navMenu.navbar-menu
.navbar-end
a.navbar-item.is-active Home
a.navbar-item Resume
a.navbar-item Portfolio
include ../pug/mixins/navbar.pug
+navbar(slug)
.hero-body
.container
.columns.is-flex.is-justify-content-space-evenly.is-vcentered
.column.is-narrow
.box.has-background-black-ter
img(
src='images/content/cat-roof_portrait.jpg',
style='width: 285px; height: 380px'
)
.columns.is-centered
.column.is-narrow
img#front-portrait.has-background-black-ter(
src='images/content/cat-roof_portrait.jpg'
)
.column.is-narrow(style='margin-top: auto')
h1.title
span.icon !{require("raw-loader!../../node_modules/@mdi/svg/svg/zip-disk.svg").default}
span.icon.mr-2
img(inline, src='node_modules/@mdi/svg/svg/account.svg')
| Adam Piontek
h2.subtitle Desktop Systems Engineer. Human.
h2.subtitle.mb-1 Desktop Systems Engineer. Human.
include ../pug/includes/social-links.pug
.hero-foot
p footer here if we want
//- section.section
//- .container
//- h1.title
//- a(href='https://73k.us/') Adam Pion73k
//- p.subtitle
//- | I'm a guy you
//- |
//- em know
//- |
//- | will always be there for you
//- .columns
//- .column
//- button.button Say hi
include ../pug/includes/footer.pug

37
webpack.config.js

@ -8,6 +8,7 @@ const CopyWebpackPlugin = require('copy-webpack-plugin')
const HTMLWebpackPlugin = require('html-webpack-plugin')
const ImageMinimizerPlugin = require('image-minimizer-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackInlineSVGPlugin = require('html-webpack-inline-svg-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const environment = require('./configuration/environment')
@ -40,6 +41,14 @@ module.exports = {
test: /\.pug$/,
loader: 'pug-loader',
},
// {
// test: /\.svg$/,
// loader: 'file-loader',
// options: {
// name: 'images/svgs/[name].[ext]',
// publicPath: '../',
// },
// },
{
test: /\.((c|sa|sc)ss)$/i,
use: [
@ -83,6 +92,26 @@ module.exports = {
],
},
plugins: [
new HtmlWebpackInlineSVGPlugin({
runPreEmit: true,
svgoConfig: [
{ removeDimensions: true },
{
removeDoctype: true,
},
{
removeXMLProcInst: true,
},
{
removeViewBox: false,
},
{
inlineStyles: {
onlyMatchedOnce: false,
},
},
],
}),
new MiniCssExtractPlugin({
filename: 'css/[name].css',
}),
@ -121,6 +150,14 @@ module.exports = {
ignore: ['*.DS_Store', 'Thumbs.db'],
},
},
{
from: path.resolve(environment.paths.source, 'raw'),
to: path.resolve(environment.paths.output),
toType: 'dir',
globOptions: {
ignore: ['*.DS_Store', 'Thumbs.db'],
},
},
],
}),
].concat(htmlPluginEntries),

Loading…
Cancel
Save