34 Commits

Author SHA1 Message Date
Bel LaPointe
6ed9ff1071 updated for 2025
All checks were successful
cicd / cicd (push) Successful in 2m4s
2026-01-08 08:25:36 -07:00
Bel LaPointe
a0b60021cf resolve todo 2025-12-18 13:34:51 -07:00
Bel LaPointe
8487f1577e notes to explain resume bullets
Some checks failed
cicd / cicd (push) Failing after 1m26s
2025-12-18 13:33:32 -07:00
Bel LaPointe
da21248adb TODOs in readme 2025-12-18 13:16:12 -07:00
bel
28dd611b7b pdf
All checks were successful
cicd / cicd (push) Successful in 1m51s
2025-09-15 22:22:15 -06:00
bel
7f7256fe07 prettier uwu 2025-09-15 22:21:50 -06:00
bel
a79740c871 pdf
All checks were successful
cicd / cicd (push) Successful in 2m29s
2025-09-15 22:01:51 -06:00
bel
d644cf7be1 i know psql 2025-09-15 21:58:07 -06:00
bel
0bb733ac90 bigger bolder fonter 2025-09-15 21:53:55 -06:00
bel
53ac3de436 shorten first job descriptions 2025-09-15 21:53:25 -06:00
Bel LaPointe
e11eeddb6a only gitea important 2025-09-11 17:21:33 -06:00
Bel LaPointe
c5e75cb2fb +render, +render as sr
Some checks failed
cicd / cicd (push) Failing after 2m8s
2025-09-11 17:14:51 -06:00
Bel LaPointe
b00b568fa0 empty 2025-09-11 16:58:28 -06:00
bel
ec063d080c Add Render stub
All checks were successful
cicd / cicd (push) Successful in 1m57s
2024-02-10 16:44:20 -07:00
Bel LaPointe
c19a6741c1 shuffle
All checks were successful
cicd / cicd (push) Successful in 1m4s
2023-10-29 16:53:20 -06:00
Bel LaPointe
8afa0a8be4 needed export 2023-10-29 16:52:58 -06:00
Bel LaPointe
dcd4d2676b maybei dont need
Some checks failed
cicd / cicd (push) Failing after 15s
2023-10-29 16:52:20 -06:00
Bel LaPointe
fa86ad236a maybe i gotta set in btoh
Some checks failed
cicd / cicd (push) Failing after 14s
2023-10-29 16:51:39 -06:00
Bel LaPointe
8e37db681c oops no nest
Some checks failed
cicd / cicd (push) Failing after 17s
2023-10-29 16:49:51 -06:00
Bel LaPointe
7d0489efc1 deploy
Some checks failed
cicd / cicd (push) Failing after 9s
2023-10-29 16:49:03 -06:00
Bel LaPointe
c106e71369 bash
Some checks failed
cicd / cicd (push) Failing after 11s
2023-10-29 16:48:05 -06:00
Bel LaPointe
a3a24a1e62 debug
Some checks failed
cicd / cicd (push) Failing after 11s
2023-10-29 16:46:59 -06:00
Bel LaPointe
9e28fc0499 apparently cant docker run and mount so lets try this
Some checks failed
cicd / cicd (push) Failing after 13s
2023-10-29 16:46:13 -06:00
Bel LaPointe
6bdeb5c2d4 realpath maybe
Some checks failed
cicd / cicd (push) Failing after 10s
2023-10-29 16:39:40 -06:00
Bel LaPointe
066949aec5 try unalias mount
Some checks failed
cicd / cicd (push) Failing after 14s
2023-10-29 16:38:25 -06:00
Bel LaPointe
fddd8c380e fix docker run in cicd
Some checks failed
cicd / cicd (push) Failing after 16s
2023-10-29 16:37:05 -06:00
Bel LaPointe
bfcb62f3fd secrets
Some checks failed
cicd / cicd (push) Failing after 8s
2023-10-29 16:36:04 -06:00
Bel LaPointe
ac1a48261c whitespace because secrets are weird
Some checks failed
cicd / cicd (push) Failing after 10s
2023-10-29 16:32:00 -06:00
Bel LaPointe
69ee836205 whitespace go
Some checks failed
cicd / cicd (push) Failing after 15s
2023-10-29 16:31:13 -06:00
Bel LaPointe
a55ac869b7 prune old 2023-10-29 16:22:46 -06:00
Bel LaPointe
2f8590e3e2 whitespace and declined from cloudflare boo
Some checks failed
cicd / cicd (push) Failing after 13s
2023-10-29 16:19:45 -06:00
Bel LaPointe
746b4c2c24 whitespace
All checks were successful
builder / builder (push) Successful in 5m11s
2023-10-29 16:18:20 -06:00
Bel LaPointe
d7b07f8317 from harness to gitea maybe less secrets 2023-10-29 16:17:42 -06:00
Bel LaPointe
7676e1f443 go 2023-10-29 16:09:46 -06:00
10 changed files with 229 additions and 175 deletions

View File

@@ -0,0 +1,24 @@
name: builder
on:
push:
branches:
- main
paths:
- 'Dockerfile.cicd'
jobs:
builder:
name: builder
runs-on: dind
steps:
- name: checkout
uses: actions/checkout@v3
- name: builder
run: |
t=registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
until docker ps; do
sleep 5
done
docker build -t "$t" -f ./Dockerfile.cicd .
docker push "$t"
docker rmi $(docker ps | grep ${t%:*} | grep '<none>' | awk '{print $3}') || true

View File

@@ -0,0 +1,30 @@
name: cicd
on:
push:
branches:
- main
paths:
- 'src/**'
jobs:
cicd:
name: cicd
runs-on: dind
steps:
- name: checkout
uses: actions/checkout@v3
- name: cicd
run: |
echo "export FIREBASE_CI_TOKEN='${{ secrets.FIREBASE_CI_TOKEN }}'" >> ./.env
echo "export GITLAB_PAT='${{ secrets.GITLAB_PAT }}'" >> ./.env
f=$(mktemp)
echo '
FROM registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
WORKDIR /mnt
COPY ./ /mnt/
RUN bash -c "true; source ./.env; bash ./deploy.firebase.sh"
' | sed 's/^ *//' > $f
docker build -f $f -t resume-build:resume-build .
result=$?
docker rmi resume-build:resume-build || true
exit $?

View File

@@ -1,86 +0,0 @@
version: 1
kind: pipeline
spec:
stages:
- name: debug
type: ci
spec:
steps:
- name: debug
type: run
spec:
name: debug
container: alpine/git
shell: sh
script: |
export build_event=${{ build.event }}
export build_target=${{ build.target }}
export build_before=${{ build.before }}
export build_after=${{ build.after }}
env | grep ^build_
git --no-pager diff --name-only $build_before..$build_after
- name: dockers
type: ci
spec:
volumes:
- name: dockersock
spec: {}
type: temp
steps:
- name: dind
when: build.event == "push" && build.target == "main"
type: background
spec:
container:
image: registry-app.inhome.blapointe.com:5001/docker:latest
privileged: true
mount:
- name: dockersock
path: /var/run
- name: docker
type: run
when: build.event == "push" && build.target == "main"
spec:
name: docker
container: registry-app.inhome.blapointe.com:5001/docker:latest
mount:
- name: dockersock
path: /var/run
shell: sh
script: |
set -ueo pipefail
export build_before=${{ build.before }}
export build_after=${{ build.after }}
apk add --no-cache git
t=registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
if git diff --name-only $build_before..$build_after | grep Dockerfile.cicd; then
until docker ps; do
sleep 5
done
docker build -t "$t" -f ./Dockerfile.cicd .
docker push "$t"
fi
- name: build
type: ci
spec:
steps:
- name: build
type: run
when: build.event == "push" && build.target == "main"
spec:
name: build
container:
image: registry-app.inhome.blapointe.com:5001/portfolio/resume/builder:latest
user: root
envs:
FIREBASE_CI_TOKEN: ${{ secrets.get("resume-firebase-squeaky2x3-gmail-token") }}
GITLAB_PAT: ${{ secrets.get("resume-gitlab-gitlab-breel-dev-token") }}
shell: sh
script: |
export build_before=${{ build.before }}
export build_after=${{ build.after }}
if git --no-pager diff --name-only $build_before..$build_after | grep src.homebrew; then
bash ./deploy.firebase.sh
fi

View File

@@ -19,4 +19,3 @@ RUN echo copying vale...
COPY --from=vale /bin/vale /bin/vale
RUN echo OK

View File

@@ -1,18 +1,16 @@
# Resume
* todo
* prepare stories
* cross-team project with a hitch and deadline pressure
* an urgent incident
* in interviews, do the dumb version first
## Usage
1. modify [homebrew.yaml](./src/homebrew/homebrew.yaml)
1. generate `cd ./src/homebrew; bash ./homebrew.sh`
1. generate `cd ./src/homebrew; bash ./homebrew.sh` (interrupt when it starts timestamping)
1. `open ./src/homebrew/homebrew.html`
1. `ctrl + p` and save as pdf
1. `ctrl + p` and save as `./src/homebrew/homebrew.pdf`
1. commit + push
## CICD
1. `gitness.inhome.blapointe.com` has a `./.harness` pipeline
1. the pipeline
1. renders [Resume](#resume) as `$(mktemp -d)/public`
1. clones [gitlab](https://gitlab.com/breel/resume.git)
1. replaces [gitlab](https://gitlab.com/breel/resume.git) with `.../public/`
1. pushes [gitlab](https://gitlab.com/breel/resume.git)
1. [render](https://dashboard.render.com/static/srv-cklkk8o710pc73d7fn7g) detects public repo event and updates its static site hosting for [breel.dev](https://breel.dev)
1. [firebase](https://console.firebase.google.com/u/0/project/blapointe-com/overview) deploys `.../public/` for [blapointe.com](https://blapointe.com)
1. `.gitea/...` CICD pushes to firebase + gitlab

View File

@@ -77,7 +77,7 @@ cd $outdir
git commit -m "$(date -u +%Y-%m-%dT%H:%M:%S)"
git push origin main
fi
) || true
)
(
set -ueo pipefail
@@ -93,4 +93,4 @@ cd $outdir
fi
echo firebase deploy "${log_args[@]}"
firebase deploy "${args[@]}"
)
) || true

View File

@@ -75,11 +75,11 @@
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
</view>
<text style="font-weight: bold; letter-spacing: 0.3pt;">WORK EXPERIENCE</text>
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Work Experience</text>
</view>
@@ -87,15 +87,17 @@
<view>
<text style="color: rgb(23, 23, 23); font-weight: bold;">Qualtrics</text>
<span style="font-size: 14pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Render</text>
</span>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Senior Software Engineer, Team Lead</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">May 2022 - Present
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2025 - Present
</text>
</view>
@@ -103,32 +105,79 @@
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Cut new PostgreSQL major version support development cost from 8 weeks to 1 week.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Reduced point-in-time-recovery restore failure volume 60% and restore runtime up to 80% with dynamic tuning.</text>
</view>
</view>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Dec 2023 - May 2025
</text>
</view>
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.</text>
</view>
</view>
</view>
<view>
<span style="font-size: 14pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">Qualtrics</text>
</span>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Senior Software Engineer, Team Lead</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">May 2022 - Dec 2023
</text>
</view>
<view style="display: flex; flex-direction: column; margin-top: 4.5pt;">
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.</text>
</view>
@@ -136,8 +185,8 @@
</view>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Software Engineer II</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">Oct 2019 - May 2022
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer II</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Oct 2019 - May 2022
</text>
</view>
@@ -145,26 +194,16 @@
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Administered on-call training, including 6 chaos tests gamedays across 5 systems.</text>
</view>
</view>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Software Engineer I</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">Feb 2018 - Oct 2019
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">Software Engineer I</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">Feb 2018 - Oct 2019
</text>
</view>
@@ -172,13 +211,13 @@
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years.</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.</text>
</view>
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different datastore.</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.</text>
</view>
@@ -190,11 +229,11 @@
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
</view>
<text style="font-weight: bold; letter-spacing: 0.3pt;">EDUCATION</text>
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Education</text>
</view>
@@ -203,7 +242,7 @@
<view>
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;">Wake Forest University</text>
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">Wake Forest University</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;"><no value>
</text>
</view>
@@ -223,32 +262,29 @@
</view>
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
</view>
<text style="font-weight: bold; letter-spacing: 0.3pt;">SKILLS</text>
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">Skills</text>
</view>
<view>
<view style="display: flex; flex-direction: row; justify-content: space-between;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: Go (Golang), Bash, Python3
</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226
<text style="color: rgb(23, 23, 23); font-weight: normal;">Languages: Go (Golang), Bash, Python3</text>
</view>
<view style="display: flex; flex-direction: row; justify-content: space-between;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git
</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226
<text style="color: rgb(23, 23, 23); font-weight: normal;">Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices</text>
</view>
<view style="display: flex; flex-direction: row; justify-content: space-between;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB
</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226
<text style="color: rgb(23, 23, 23); font-weight: normal;">Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB</text>
</view>
</view>

Binary file not shown.

View File

@@ -61,20 +61,19 @@
</view>
{{ range .resume.headings }}
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 12pt;">
<view style="display: flex; flex-direction: row; align-items: center;">
<view style="display: flex; flex-direction: column; gap: 6pt; margin-top: 9pt;">
<view style="display: flex; flex-direction: row; align-items: center; font-size: 14pt;">
<view style="height: 3.75pt; width: 30pt; background-color: rgb(129, 140, 248); margin-right: 10.5pt;">
</view>
<text style="font-weight: bold; letter-spacing: 0.3pt;">{{ .title }}</text>
<text style="font-weight: bold; letter-spacing: 0.3pt;" class="resume-headings-i-title">{{ .title }}</text>
</view>
{{ if .what }}
<view>
{{ range .what }}
<view style="display: flex; flex-direction: row; justify-content: space-between;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}
</text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ . }}</text>
</view>
{{ end }}
</view>
@@ -83,10 +82,12 @@
{{ range .headings }}
<view>
{{ if .headings }}
<text style="color: rgb(23, 23, 23); font-weight: bold;">{{ .title }}</text>
<span style="font-size: 14pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-w-headings">{{ .title }}</text>
</span>
{{ else }}
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: bold;">{{ .title }}</text>
<text style="color: rgb(23, 23, 23); font-weight: bold;" class="resume-headings-i-headings-i-title-wo-headings">{{ .title }}</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
</text>
</view>
@@ -101,8 +102,8 @@
{{ range .headings }}
<view style="display: flex; flex-direction: row; justify-content: space-between; margin-top: 4.5pt;">
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .title }}</text>
<text style="color: rgb(23, 23, 23); font-weight: normal;">{{ .when }}
<text style="color: rgb(23, 23, 23); font-weight: normal; font-style: italic;" class="resume-headings-i-headings-i-headings-i-title">{{ .title }}</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; font-size: 9.5pt;">{{ .when }}
</text>
</view>
@@ -110,7 +111,7 @@
{{ range .what }}
<view style="display: flex; flex-direction: row;">
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;"></text>
<text style="color: rgb(23, 23, 23); font-weight: bold; padding-left: 6pt; padding-right: 6pt; line-height: 1.35; margin-top: 0pt;">&#8226</text>
<text style="color: rgb(23, 23, 23); font-weight: normal; line-height: 1.35; flex-grow: 1; flex-basis: 0px;">{{ . }}</text>
</view>
{{ end }}

View File

@@ -18,31 +18,82 @@ resume:
link: https://linkedin.com/in/breeldev
svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width: 13pt; height: 13pt; fill: rgb(82, 82, 82);"><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"></path></svg>'
headings:
- title: WORK EXPERIENCE
- title: Work Experience
headings:
- title: Render
headings:
- title: Senior Software Engineer
when: May 2025 - Present
what:
- Cut new PostgreSQL major version support development cost from 8 weeks to 1 week.
# refactored + go generated + templated CI from PG17 to PG18
# had to wait 4w for TimescaleDB to ship, but no active time for us
- Reduced point-in-time-recovery restore failure volume 60% and restore runtime up to 80% with dynamic tuning.
# 40k paid, 30k free in 2025-12
# performance tuning -> PGExport queries
# pitr -> pitr holes, synchronous success tracking
# -50% restore failure rate by limiting postgresql.conf memory
# increment backups after 10k WAL files (1h of replay)
# render_pg_archive.sh synchronously tracks PITR health
#- Shipped autoscaling storage, in-place managed credential rotation
- title: Software Engineer
when: Dec 2023 - May 2025
what:
- Crafted PostgreSQL low-downtime migrations and in-place major version upgrades.
# PGUpgrades
# continuous canary testing matrix
# 3 major version targets
# FCR
# all-in-one solution for cross-region, cross-account, cross-provider migrations
# via physical replication
# customer-triggered promotion
# coupled to power HIPAA migration
- title: Qualtrics
headings:
- title: Senior Software Engineer, Team Lead
when: May 2022 - Present
when: May 2022 - Dec 2023
what:
- Optimized a Go application to increase consumption rate from Kafka by 340%, costing half the engineering effort of the proposed rewrite.
- Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index.
# Atlas QMP Consumer
# optimized garbage collection of many small objects
# from maps and allocs to pointers and slices
#- Devised a MongoDB live indexing strategy, which supported both current and future use cases, and saved the computing and filling of a new 99% unused native database index.
- Spearheaded AWS asset replication tooling, sparing 9 teams from duplicating work relocating up to 7 AWS technologies each.
# Scanned AWS assets -> interactive script replicated configs to new AWS region
# cloned S3, SQS, SNS, DynamoDB assets
- Mentored 2 intern, 2 new grad, and 4 mid-level engineers on operational tools, best practices for maintainable software, and career development.
- Founded the in-house standard system to continuously verify 16 teams' compliance with disaster recovery requirements.
# Mongosback backup-check lists S3 for last backup timestamp
- Created automated release test suites for 11 services, which catches 10 would-be customer facing bugs per month on average.
# CRUDdy
# tied to Nomad spec
# on boot, healthchecks fail for new instance until e2e tests pass per-instance
# blocked releases to staging
- title: Software Engineer II
when: Oct 2019 - May 2022
what:
- "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances."
#- "Scripted no-downtime database reconfiguration, which was leveraged by 3 teams to update 168 instances."
- Automated infrastructure patching for 30 microservices and 25 database clusters by creating a modular and testable Bash script framework.
- Administered on-call training, including 6 chaos tests gamedays across 5 systems.
# Nexpose-Remediations
# Couchbase, Mongo, GaleraDB covered
# spindown, isSpindownComplete, patch, reboot, pollRebooted, spinup, isSpinupComplete
# used cross-team for all Mongo instances
# bash tested via `source unit_test_setup.sh; test my_method`
#- Administered on-call training, including 6 chaos tests gamedays across 5 systems.
- title: Software Engineer I
when: Feb 2018 - Oct 2019
what:
- Created custom Python tooling to create, increment, restore, and check for MongoDB database backups for standalone, replicated, and sharded deployments without customer impact, and has been the in-house standard for 21 teams for 4 years.
- Decreased backend service's annual outages by 91% and reduced hardware costs by 40% by selecting, training owners on, and migrating without downtime to a different datastore.
- title: EDUCATION
- Founded Python tookit for full and incremental MongoDB backups, supporting partitioned deployments. The in-house standard for 21 teams.
# Mongosback
# Python3 script
# Handles sharded AND replica sets
# watches for any shard in progress AND replica set healthy enough to continue
- Decreased internal service's annual outages by 91% and hardware costs by 40% via database migration. Scoped alternatives, projected costs, and designed cutover.
# Couchbase for GENI (MaraudersMap) was a mess
# indexes just kinda disappeared, meaning table scans often
# evaluated Mongo, Galera, CockroachDB
# Mongo ran with little RAM on laptop + fast startup + lowest latency
- title: Education
headings:
- title: Wake Forest University
not-when: Dec 2017
@@ -58,8 +109,9 @@ resume:
# when: Jun 2018
# what:
# - Refactored to correct bugs and improve efficiency by orders of magnitude
- title: SKILLS
- title: Skills
what:
- 'Languages: Go (Golang), Bash, Python3'
- 'Platforms: Docker, Hashicorp, Linux/Unix, AWS, REST, Microservices, Git'
- 'Datastores: MongoDB, Redis, S3, Couchbase, DynamoDB'
- 'Platforms: Kubernetes, Temporal, Hashicorp, Linux/Unix, AWS, REST, Microservices'
- 'Datastores: PostgreSQL, MongoDB, Redis, S3, Couchbase, DynamoDB'