fix: commit

This commit is contained in:
orion 2024-01-08 17:09:06 -06:00
parent 50357563e4
commit 8ac9ba5dad
Signed by: orion
GPG Key ID: 6D4165AE4C928719
42 changed files with 1457 additions and 0 deletions

176
.gitignore vendored Normal file
View File

@ -0,0 +1,176 @@
# Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore
# Logs
logs
_.log
npm-debug.log_
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json
# Runtime data
pids
_.pid
_.seed
\*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
\*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
\*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
\*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.\*
# IntelliJ based IDEs
.idea
# Finder (MacOS) folder config
.DS_Store

8
.prettierrc.cjs Normal file
View File

@ -0,0 +1,8 @@
module.exports = {
tabWidth: 2,
trailingComma: 'all',
singleQuote: true,
semi: false,
arrowParens: 'avoid',
plugins: [],
}

15
README.md Normal file
View File

@ -0,0 +1,15 @@
# resume
To install dependencies:
```bash
bun install
```
To run:
```bash
bun run index.ts
```
This project was created using `bun init` in bun v1.0.3. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

233
assets/iosevka.css Normal file
View File

@ -0,0 +1,233 @@
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Thin.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-ThinOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 100;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-ThinItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-ExtraLight.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-ExtraLightOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 200;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-ExtraLightItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 300;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Light.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 300;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-LightOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Regular.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-Oblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-Italic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Medium.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-MediumOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 500;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-MediumItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-SemiBold.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-SemiBoldOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 600;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-SemiBoldItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Bold.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-BoldOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-BoldItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-ExtraBold.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-ExtraBoldOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 800;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-ExtraBoldItalic.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: normal;
src: url('./IosevkaAile-Heavy.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: oblique;
src: url('./IosevkaAile-HeavyOblique.woff2') format('woff2');
}
@font-face {
font-family: 'Iosevka Aile';
font-display: swap;
font-weight: 900;
font-stretch: normal;
font-style: italic;
src: url('./IosevkaAile-HeavyItalic.woff2') format('woff2');
}

BIN
assets/orion.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
assets/star_0.0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

BIN
assets/star_0.5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

BIN
assets/star_1.0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
bun.lockb Executable file

Binary file not shown.

15
bun/fmt.js Normal file
View File

@ -0,0 +1,15 @@
/** @type {(parser: string, ps: string[]) => import("bun").Subprocess} */
const prettier = (parser, ps) =>
Bun.spawn(['bun', 'x', 'prettier', '--write', '--parser', parser, ...ps], {
stdout: 'inherit',
stderr: 'inherit',
})
const procs = [
prettier('babel', ['./index.js', './bun/**/*.js', './.prettierrc.cjs']),
prettier('json', ['./package.json', './jsconfig.json']),
prettier('html', ['./resume.html']),
prettier('css', ['./assets/iosevka.css']),
]
await Promise.all(procs.map(p => p.exited))

41
index.js Normal file
View File

@ -0,0 +1,41 @@
import { $ } from 'zx'
import * as Fs from 'fs'
import * as Path from 'path'
import * as Stream from 'stream/promises'
import * as Puppeteer from 'puppeteer'
/** @type {import('puppeteer').PDFOptions} */
const PDF_OPTIONS = {
format: 'letter',
printBackground: true,
margin: { bottom: '0.25in', top: '0.25in', left: '0.25in', right: '0.25in' },
}
const DEBUG = !!process.env['DEBUG']
const root = 'file://' + Path.resolve(import.meta.dir, './dist')
console.log(root)
await $`bun bundle --public-url ${root}`
const pup = await Puppeteer.launch({ headless: DEBUG ? false : 'new' })
const page = await pup.newPage()
await page.goto(root + '/resume.html')
await page.waitForNetworkIdle()
const pdf = await page.createPDFStream(PDF_OPTIONS)
const out = Fs.createWriteStream('./resume.pdf', { flags: 'w+' })
await Stream.pipeline(pdf, out)
if (!DEBUG) await pup.close()
console.log('wrote ./resume.pdf')
process.on('SIGINT', () => {
pup.close()
})
process.on('SIGHUP', () => {
pup.close()
})
process.on('exit', () => {
pup.close()
})

16
jsconfig.json Normal file
View File

@ -0,0 +1,16 @@
{
"compilerOptions": {
"types": ["bun-types"],
"lib": ["esnext"],
"target": "esnext",
"module": "esnext",
"moduleResolution": "bundler",
"moduleDetection": "force",
"jsx": "react",
"allowJs": true,
"checkJs": true,
"noEmit": true,
"strict": true
},
"include": ["index.js", "bun/**/*.js"]
}

21
package.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "resume",
"type": "module",
"scripts": {
"bundle": "parcel build --no-cache ./resume.html",
"export": "bun index.js",
"fmt": "bun bun/fmt.js"
},
"devDependencies": {
"bun-types": "latest",
"prettier": "^3.1.1"
},
"peerDependencies": {
"typescript": "^5.0.0"
},
"dependencies": {
"parcel": "latest",
"puppeteer": "^21.7.0",
"zx": "^7.2.3"
}
}

932
resume.html Normal file
View File

@ -0,0 +1,932 @@
<html>
<head>
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=DM+Serif+Display"
/>
<link rel="stylesheet" href="./assets/iosevka.css" />
<style>
body {
display: flex;
gap: 10pt;
width: 100%;
flex-direction: column;
}
body * {
box-sizing: border-box;
}
body,
p,
span,
h1,
h2,
h3,
h4,
h5,
h6,
div {
padding: 0;
margin: 0;
}
ul, li {
margin: 0;
}
h1,
h2,
h3 {
font-family: 'DM Serif Display';
font-weight: normal;
}
h1 {
font-size: 48pt;
margin-top: -8pt;
margin-bottom: -6pt;
}
h2 {
font-size: 32pt;
margin-top: -4pt;
margin-bottom: -4pt;
}
h3 {
font-size: 24pt;
margin-top: -4pt;
margin-bottom: -3pt;
}
h4 {
font-family: 'Iosevka Aile';
font-size: 16pt;
font-weight: 700;
margin-top: -1pt;
margin-bottom: -2pt;
}
h5 {
font-family: 'Iosevka Aile';
font-size: 12pt;
font-weight: 700;
margin-top: -1pt;
margin-bottom: -2pt;
}
h6 {
font-family: 'Iosevka Aile';
font-size: 10pt;
font-weight: 700;
margin-top: -1pt;
margin-bottom: -1pt;
}
p,
span, li {
font-family: 'Iosevka Aile';
font-size: 10pt;
}
.nowrap {
white-space: nowrap;
}
a,
a:visited {
text-decoration: none;
font-style: none;
color: hsl(251deg, 60%, 40%);
}
div.star-1\.0 {
background-image: url('./assets/star_1.0.png');
}
div.star-0\.5 {
background-image: url('./assets/star_0.5.png');
}
div.star-0\.0 {
background-image: url('./assets/star_0.0.png');
}
div.star-1\.0,
div.star-0\.5,
div.star-0\.0 {
height: 12pt;
width: 12pt;
background-repeat: no-repeat;
background-size: cover;
}
div.hr {
height: 2pt;
width: 100%;
background-color: hsl(0deg 0% 80%);
}
.break {
page-break-after: always;
}
div.row {
display: flex;
align-items: center;
gap: 3pt;
}
div.col {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: 3pt;
}
div.row,
div.col {
break-inside: avoid;
}
div.col.right {
display: flex;
flex-direction: column;
align-items: flex-end;
}
div.row.packed,
div.col.packed {
gap: 0;
}
.grow-x {
width: 100%;
}
.grow-y {
height: 100%;
}
.col > *,
.row > * {
flex-grow: 0;
flex-shrink: 1;
}
div.space {
justify-content: space-between;
}
div.cols_2 {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-auto-rows: min-content;
gap: 10pt;
}
div.cols_4 {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-auto-rows: min-content;
gap: 5pt;
}
</style>
</head>
<body>
<div class="row space">
<h1 style="display: inline">Orion Kindel</h1>
<div class="row">
<div class="col right">
<a href="mailto:orionkindel@gmail.com">
<h5>orionkindel@gmail.com</h5></a
>
<a href="https://git.orionkindel.com">
<h5>git.orionkindel.com</h5></a
>
<a href="https://linkedin.com/in/orion-kindel">
<h5>linkedin.com/in/orion-kindel</h5></a
>
<a href="https://instagram.com/orion.kindel">
<p>instagram.com/orion.kindel</p></a
>
<a href="tel:9894430197"> <p>+1 989 443 0197</p></a>
</div>
<img
style="display: inline; height: 72pt; width: 72pt"
src="./assets/orion.jpg"
/>
</div>
</div>
<div class="hr"></div>
<h2>Brief</h2>
<h5>
A flexible and experienced tech professional who can reliably leverage his
insights to empower and accelerate teams and organizations.
</h5>
<h5>
Orion is a powerful force multiplier with 7 years experience as a
software engineer, leader, systems architect, and product manager.
</h5>
<div class="hr"></div>
<div class="row space">
<h2>Key Skills</h2>
<div class="col right">
<div class="row">
<h5>Expert</h5>
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
</div>
<div class="row">
<h5>Very Strong</h5>
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
</div>
<div class="row">
<h5>Strong</h5>
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.0"></div>
</div>
</div>
</div>
</div>
<div class="cols_2">
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Javascript</h5>
<span class="nowrap">8 years</span>
</div>
<p>
Designed and implemented full-stack high scale production systems at
every position held.
</p>
<p>
Deep understanding of language semantics, exception handling,
runtimes, performance characteristics and tooling.
</p>
<p>
Architected & implemented complex production interfaces in React, as
well as angular, vue and svelte. Deep experience using hooks &
functional components to manage state and complexity as the product
scales.
</p>
<p>
Guided teams to best practices, building systems with 5-40 active
contributors handling 1MM requests / second with %99.999 uptime
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Rust</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Active Open Source community member; language contributions and
discussions.
</p>
<p>
Deep understanding of language semantics, exception handling,
runtimes, performance characteristics and tooling.
</p>
<p>
Owner of the primary implementation of the CoAP networking protocol,
which brings high performance REST semantics to bare metal and
distributed systems.
</p>
<p>
Built teams using the language, training teammates reaching productive
and capable in &lt;2mo.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Purescript</h5>
<span class="nowrap">5 years</span>
</div>
<p>
Active Open Source community member; language contributions,
discussions, discord member.
</p>
<p>Owner of many popular packages and abstractions.</p>
<p>
Deep understanding of language semantics, exception handling,
runtimes, performance characteristics, abstractions and tooling.
</p>
<p>
Built teams using the language, training teammates reaching productive
and capable in &lt;2mo.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Git</h5>
<span class="nowrap">7 years</span>
</div>
<p>
Manage 100s of open source repositories, highly active open source
member and contributor.
</p>
<p>
Managed & built git teams at scale, with some repos having hundreds of
daily contributors.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Systems Architecture</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Have designed, implemented and modified systems across scales and
stacks.
</p>
<p>
Have designed and implemented Distributed (Microservices or Services),
Monolithic, and Event Driven systems - choosing the model based on the
product and organizations requirements, capacity, and time
constraints.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">Docker</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Use docker in most projects for 4 years for making version management,
reproducible deploy artifacts, pull-based deployment models and
security isolation.
</p>
<p>
Have used kubernetes to manage deployments of complex distributed
systems handling millions of requests and $500K MRR with high
reliability.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h5 class="grow-x">CICD</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Use comprehensive automated testing and CI platforms to automate
quality checks and deployment, significantly accelerating product
development.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h5 class="grow-x">Linux</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Have used linux personally & in production. Choose VMs (EC2) in lieu
of kubernetes or managed environments for almost all production needs
for many reasons.
</p>
<p>
Deep understanding of systems semantics, filesystems, security model,
networking, resource management, shells, scripting and tooling.
</p>
<p>
Guided teams to best practices, building systems with 5-40 active
contributors handling 1MM requests / second with %99.999 uptime
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h5 class="grow-x">SQL</h5>
<span class="nowrap">7 years</span>
</div>
<p>
Have designed & implemented highly normalized and scalable relational
schemas (both for monolithic and distributed systems)
</p>
<p>
Have used read replication, partitioning and indexing to manage pain
points inherent in maintaining a relational database while the product
and organization scale.
</p>
<p>
Have used many strategies to integrate relational databases with
dynamic and strongly-typed business logic layers from highly-managed
ORMs (ex. Flask, Entity Framework, PrismaJS) to mini-ORMs.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h5 class="grow-x">Player-Coach</h5>
<span class="nowrap">6 years</span>
</div>
<p>
Have managed teams of sizes 3-10 as a team lead (player-coach),
accountable for success of individual team members as well as the
team. Able to consistenly make & meet data-driven commitments, develop
and maintain excellent relationships with team members and
stakeholders based on accountability, candor and transparency.
</p>
<p>
Use tools like CICD, Scrum, TDD and pair programming to increase team
velocity without applying pressure to individual team members.
</p>
<p>
Use frequent touchpoints with team members and a shared understanding
of my expectations and their goals, decomposing them into measurable
actionable steps and holding them accountable.
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h5 class="grow-x">AWS</h5>
<span class="nowrap">7 years</span>
</div>
<p>
Have used AWS to deploy and manage systems at scale, both persistent
and on-demand (serverless) applications.
</p>
<p>
Deep understanding of networking model (VPC), database hosting (RDS),
persistent managed or unmanaged servers (EC2), on-demand compute
(Lambda), event-driven architecture (SQS), machine learning
(SageMaker), permissions management (IAM).
</p>
</div>
<div class="col">
<div class="row grow-x">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h5 class="grow-x">Scrum</h5>
<span class="nowrap">7 years</span>
</div>
<p>
Have led 5 scrum-informed process transformations to improve team
performance, transparency and clarity.
</p>
<p>
Trained and mentored product managers on their role and
responsibilities, solving many sources of friction and conflict on
under-performing teams.
</p>
<p>
Have filled roles of scrum master and product owner on several product
teams to much success.
</p>
</div>
</div>
<h3>Other Skills</h3>
<div class="cols_4">
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>REST</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>HATEOAS</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>JIRA</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>Figma</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>Slack API</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>OSS Mgmt</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>OAuth, OIDC</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
</div>
<h6>Networking</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Python</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Scala</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Java</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>OCaml</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>C#</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Java</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>GraphQL</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>NoSQL</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Data Insights</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.5"></div>
</div>
<h6>Machine Learning</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.0"></div>
</div>
<h6>Cryptography</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.0"></div>
</div>
<h6>Terraform</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.0"></div>
</div>
<h6>gRPC</h6>
</div>
<div class="row">
<div class="row packed">
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-1.0"></div>
<div class="star-0.0"></div>
</div>
<h6>Embedded</h6>
</div>
</div>
<div class="hr break"></div>
<div class="hr"></div>
<h2>Experience</h2>
<div class="col">
<h3>thunderstrike.ai</h3>
<h4>Technical Founder & CTO</h4>
<p>2023 - Present</p>
<ul>
<li>
Built product MVP in Purescript & Rust in 4mo fully covered by
automated testing, automated deployments, load testing @ 100K messages
/ second yields &lt;100ms latency
</li>
<li>
With CEO have signed over $100K in contract value with customers since
foundation in October
</li>
<li>
Perform competitor analysis, user interviews, and develop KPIs to
continuously refresh our understanding of the problem were solving -
pivoting when necessary.
</li>
<li>
Maintain living backlog in JIRA* for transparency and accountability
</li>
<li>
Manage 2 junior engineers, placed directly from bootcamp graduation
2mo ago who are now formidable and productive in Rust and Purescript.
</li>
<li>
Develop and manage local Chicago tech community presence both for
networking and startup representation.
</li>
</ul>
</div>
<div class="col">
<h3>Qwick</h3>
<h4>Senior Software Engineer</h4>
<p>2021 - 2023</p>
<ul>
<li>
Overhauled onboarding process, helping accelerate new junior hires
</li>
<li>
Architected invoicing system to handle $500K MRR with near-zero
downtime
</li>
<li>
Oversaw team of 4 junior engineers & 1 senior engineer executing on
invoicing system. Was responsible for individual & team outcomes.
</li>
<li>
Led initiative to decouple and modularize existing monolithic
architecture, transforming into a services model with several
event-driven components, adding independent deployability and
automated testing. This increased developer velocity by 40%,
reliability up from %99.9 to %99.999 in 6mo
</li>
<li>
Led agile & scrum transformation with CTO, contributing to velocity
increase of 40%
</li>
<li>
Led DevSecOps team, adding automated testing, CICD, system
rearchitecture, documentation, DX improvements
</li>
<li>
Mentored product managers helping them relax into a role of vision and
user-advocacy, allowing dev teams to execute on well-structured
problem statements
</li>
<li>
Led Google Design Sprints to quickly define and validate new product
initiatives, introducing data-driven and qualitative user research
</li>
<li>
Organized grassroots presentations, helped team members develop and
present their own topics
</li>
</ul>
</div>
<div class="col">
<h3>TheoremOne</h3>
<h4>Senior Lead Software Engineer</h4>
<p>2020 - 2021</p>
<ul>
<li>
Architected robust systems on AWS in Python, Ruby, React, Typescript
</li>
<li>
Developed excellent relationships with stakeholders, communicating
clear and frequent progress updates via demos, gathering feedback and
requirements
</li>
<li>
Managed 2 teams of 5-6, overhauling process increasing velocity by
30-40%.
</li>
</ul>
</div>
<div class="col">
<h4>Software Engineering Manager</h4>
<p>2021</p>
<ul>
<li>Onboarded new Client Coordinator & Product Manager</li>
<li>
Managed team of 4 full-stack engineers, 1 QA, 1 GIS engineer working
on seed-stage MVP
</li>
<li>Negotiated deadlines and rebuilt damaged trust with client</li>
</ul>
</div>
<div class="col">
<h4>Product Manager</h4>
<p>2021</p>
<ul>
<li>
Owned living backlog with aggressive culling of speculative epics and
stories so as to reduce noise and keep meaningful
</li>
<li>
Communicated frequently with client to continually adjust forecasts,
refine backlog and improve understanding of requirements
</li>
<li>
Held dev team accountable for refining tickets into tasks and having
implementation discussions with 1-2 sprint lead time.
</li>
<li>
Ensured prior to Planning, tickets had accurate estimates, subtasks,
and had been seen and touched by everyone who could execute on it,
making it a 15min ceremony.
</li>
</ul>
</div>
<div class="col">
<h3>Strongmind</h3>
<h4>Software Engineer</h4>
<p>2017 - 2020</p>
<ul>
<li>
Architected & executed on robust production systems in .NET, JS, TS,
Python & Rust on AWS & Azure. Several greenfield and legacy projects
incl. complex distributed systems, OLAP data pipeline, data warehouse,
mobile app development and learning management system (Canvas LMS)
integration.
</li>
<li>
Led several team process transformations, using process changes and
product vision improvements to increase team velocity and happiness.
</li>
<li>
Led adoption of new technical practices, improving maintainability and
velcoity. Ex. transitioning from TFVC to git, automating deployment
and UAT, containerizing products, introducing automated testing.
</li>
<li>
Mentored several junior engineers, led 2 teams developing production
systems that are still used with few changes today.
</li>
</ul>
</div>
<div class="hr"></div>
<h2>Education</h2>
<div class="col">
<h4>Associates of Science, Physics</h4>
<p>Scottsdale Community College, 2014 - 2016</p>
</div>
<div class="col">
<h4>Certified Scrum Developer</h4>
<p>Scrum Alliance, 2019</p>
</div>
<div class="col">
<h4>Certified Scrum Product Owner</h4>
<p>Scrum Alliance, 2020</p>
</div>
<div class="hr"></div>
</body>
</html>

BIN
resume.pdf Normal file

Binary file not shown.