1<!DOCTYPE html><html lang="en" data-beasties-container><head> 2 <meta charset="utf-8"> 3 <title>John Bieniek's Portfolio</title> 4 <base href="/"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <meta property="og:title" content="John Bieniek | Lead Software Engineer"> 7 <meta property="og:description" content="Software engineering portfolio featuring cloud architecture, distributed systems, full-stack development, and AI."> 8 <meta property="og:type" content="website"> 9 <meta property="og:url" content="https://johnbieniek.com/"> 10 <meta property="og:image" content="https://johnbieniek.com/assets/brand/social/social-preview-v4.png"> 11 <meta property="og:image:secure_url" content="https://johnbieniek.com/assets/brand/social/social-preview-v4.png"> 12 <meta property="og:image:type" content="image/png"> 13 <meta property="og:image:width" content="1200"> 14 <meta property="og:image:height" content="627"> 15 <meta name="twitter:card" content="summary_large_image"> 16 <meta name="twitter:title" content="John Bieniek | Lead Software Engineer"> 17 <meta name="twitter:description" content="Software engineering portfolio featuring cloud architecture, distributed systems, full-stack development, and AI."> 18 <meta name="twitter:image" content="https://johnbieniek.com/assets/brand/social/social-preview-v4.png"> 19 <link rel="icon" type="image/png" href="/assets/brand/logos/sigil-favicon.png"> 20 <style>:root{--bg: #070916;--bg-elevated: #101320;--bg-card: #151823;--bg-card-soft: #1a1d2b;--text: #f4f6ff;--text-muted: #b9bfd6;--text-soft: #d7dbeb;--border: rgba(255, 255, 255, .09);--border-strong: rgba(255, 255, 255, .16);--primary: #24568a;--primary-hover: #1b466f;--primary-soft: rgba(36, 86, 138, .12);--accent: #315d91;--accent-cyan: #527ca8;--shadow: 0 18px 60px rgba(0, 0, 0, .28);--radius: 18px;--page-width: 1720px}*{box-sizing:border-box}html{min-height:100%;color-scheme:dark;background:var(--bg)}body{min-height:100vh;margin:0;background:#f7f9fc;color:var(--text);font-family:Inter,Arial,Helvetica,sans-serif;line-height:1.5}a{color:inherit;text-decoration:none}img,video{display:block;max-width:100%}h1,h2,h3,p{margin-top:0}p{color:var(--text-muted)}router-outlet{display:none}.page-shell{width:min(var(--page-width),calc(100% - 96px));margin-inline:auto}.button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;min-width:160px;gap:10px;padding:14px 24px;border:1px solid var(--border);border-radius:10px;font-weight:900;line-height:1;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease,background .15s ease,border-color .15s ease}.button:hover{transform:translateY(-1px);box-shadow:0 8px 18px #00000038}@media(max-width:900px){.page-shell{width:min(100% - 32px,var(--page-width))}}@media(max-width:700px){.page-shell{width:min(100% - 24px,var(--page-width))}.button{width:100%}} 21</style><link rel="stylesheet" href="styles-7JJV5ZSY.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-7JJV5ZSY.css"></noscript><style ng-app-id="ng">[_nghost-ng-c107474791]{display:block;min-height:100vh;color:#f6f7fb;background:#f7f9fc;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*[_ngcontent-ng-c107474791]{box-sizing:border-box}a[_ngcontent-ng-c107474791]{color:inherit;text-decoration:none}.site-header[_ngcontent-ng-c107474791]{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:2rem;padding:1.25rem 6vw;background:#050816c7;border-bottom:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.brand[_ngcontent-ng-c107474791]{display:flex;align-items:center;gap:.9rem}.brand[_ngcontent-ng-c107474791] strong[_ngcontent-ng-c107474791], .brand[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{display:block}.brand[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{margin-top:.15rem;color:#aab2c5;font-size:.85rem}.site-nav[_ngcontent-ng-c107474791]{display:flex;align-items:center;gap:1.4rem;color:#d8deec;font-size:.95rem}.site-nav[_ngcontent-ng-c107474791] a[_ngcontent-ng-c107474791]:hover{color:#fff}.hero-section[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:minmax(260px,420px) minmax(0,1fr);gap:clamp(2rem,6vw,5rem);align-items:center;padding:4rem 6vw 3rem}.hero-photo-card[_ngcontent-ng-c107474791]{padding:.5rem;border-radius:1.5rem;background:linear-gradient(#10172a,#10172a) padding-box,linear-gradient(135deg,#2f7cffbf,#9b5cffbf) border-box;border:1px solid transparent;box-shadow:0 24px 70px #00000059}.profile-photo[_ngcontent-ng-c107474791]{display:block;width:100%;height:520px;object-fit:cover;object-position:center;border-radius:1.1rem}.eyebrow[_ngcontent-ng-c107474791]{margin:0 0 1rem;color:#9b8cff;font-size:.82rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.hero-copy[_ngcontent-ng-c107474791] h1[_ngcontent-ng-c107474791]{margin:0;font-size:clamp(3rem,7vw,5rem);line-height:.95;letter-spacing:-.07em}.hero-blurb[_ngcontent-ng-c107474791]{margin:1.5rem 0 0;color:#c9d0df;font-size:clamp(1.05rem,1.7vw,1.3rem);line-height:1.7}.hero-actions[_ngcontent-ng-c107474791]{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2rem}.button[_ngcontent-ng-c107474791]{display:inline-flex;align-items:center;justify-content:center;min-height:3rem;padding:0 1.25rem;border-radius:.85rem;font-weight:800}.button.primary[_ngcontent-ng-c107474791]{background:linear-gradient(135deg,#2f7cff,#9b5cff);color:#fff;box-shadow:0 16px 40px #505aff42}.button.secondary[_ngcontent-ng-c107474791]{border:1px solid rgba(255,255,255,.2);color:#eef2ff;background:#ffffff0a}.hero-highlights[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:repeat(6,minmax(0,2fr));gap:1rem;margin-top:2.5rem}.hero-highlights[_ngcontent-ng-c107474791] div[_ngcontent-ng-c107474791], .about-card[_ngcontent-ng-c107474791], .project-card[_ngcontent-ng-c107474791]{border:1px solid rgba(255,255,255,.09);background:#ffffff0b;box-shadow:0 24px 70px #0000002e}.hero-highlights[_ngcontent-ng-c107474791] div[_ngcontent-ng-c107474791]{padding:1rem;border-radius:1rem}.hero-highlights[_ngcontent-ng-c107474791] strong[_ngcontent-ng-c107474791], .hero-highlights[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{display:block}.hero-highlights[_ngcontent-ng-c107474791] strong[_ngcontent-ng-c107474791]{margin-bottom:.25rem;font-size:1.05rem}.hero-highlights[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{color:#aab2c5;font-size:.9rem;line-height:1.4}.section[_ngcontent-ng-c107474791]{padding:3rem 6vw}.section-header[_ngcontent-ng-c107474791]{display:flex;align-items:end;justify-content:space-between;gap:2rem;margin-bottom:1.5rem}.section-header[_ngcontent-ng-c107474791] h2[_ngcontent-ng-c107474791], .about-section[_ngcontent-ng-c107474791] h2[_ngcontent-ng-c107474791]{margin:0;font-size:clamp(2rem,4vw,3.5rem);line-height:1;letter-spacing:-.05em}.section-header[_ngcontent-ng-c107474791] p[_ngcontent-ng-c107474791]{max-width:620px;margin:0;color:#aab2c5;line-height:1.6}.project-grid[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem}.project-card[_ngcontent-ng-c107474791]{overflow:hidden;border-radius:1.25rem}.project-image[_ngcontent-ng-c107474791]{display:grid;place-items:center;min-height:220px;color:#ffffffc2;font-weight:800}.scheduling-preview[_ngcontent-ng-c107474791]{background:linear-gradient(135deg,#2f7cff57,#ffffff0f),repeating-linear-gradient(90deg,rgba(255,255,255,.08) 0 1px,transparent 1px 76px),#101827}.game-preview[_ngcontent-ng-c107474791]{background:radial-gradient(circle at center,rgba(245,158,11,.28),transparent 11rem),linear-gradient(135deg,#9b5cff47,#ffffff0d),#17111c}.java-preview[_ngcontent-ng-c107474791]{background:linear-gradient(135deg,#22c55e33,#2f7cff38),repeating-linear-gradient(0deg,rgba(255,255,255,.06) 0 1px,transparent 1px 34px),#07111f}.project-content[_ngcontent-ng-c107474791]{padding:1.25rem}.project-title-row[_ngcontent-ng-c107474791]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.project-title-row[_ngcontent-ng-c107474791] h3[_ngcontent-ng-c107474791]{margin:0;font-size:1.25rem}.project-title-row[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{padding:.35rem .65rem;border-radius:999px;color:#c7d2fe;background:#ffffff14;font-size:.78rem}.project-content[_ngcontent-ng-c107474791] p[_ngcontent-ng-c107474791]{margin:1rem 0 0;color:#c9d0df;line-height:1.65}.project-links[_ngcontent-ng-c107474791]{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:1.25rem}.project-links[_ngcontent-ng-c107474791] a[_ngcontent-ng-c107474791]{color:#8fb4ff;font-weight:800}.project-links[_ngcontent-ng-c107474791] a[_ngcontent-ng-c107474791]:hover{color:#c4b5fd}.about-section[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:2rem;align-items:start}.about-section[_ngcontent-ng-c107474791] p[_ngcontent-ng-c107474791]{max-width:720px;color:#c9d0df;line-height:1.75}.about-card-grid[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.about-card[_ngcontent-ng-c107474791]{min-height:150px;padding:1.25rem;border-radius:1.1rem}.about-card[_ngcontent-ng-c107474791] strong[_ngcontent-ng-c107474791], .about-card[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{display:block}.about-card[_ngcontent-ng-c107474791] strong[_ngcontent-ng-c107474791]{margin-bottom:.6rem;font-size:1.05rem}.about-card[_ngcontent-ng-c107474791] span[_ngcontent-ng-c107474791]{color:#aab2c5;line-height:1.55}.site-footer[_ngcontent-ng-c107474791]{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1rem;padding:2rem 6vw;color:#b8c6d5;background:#122338;border-top:1px solid rgba(255,255,255,.12)}.site-footer[_ngcontent-ng-c107474791] p[_ngcontent-ng-c107474791]{margin:0}.site-version[_ngcontent-ng-c107474791]{grid-column:2;justify-self:center}.site-footer[_ngcontent-ng-c107474791] div[_ngcontent-ng-c107474791]{display:flex;justify-self:end;gap:1rem}.site-footer[_ngcontent-ng-c107474791] a[_ngcontent-ng-c107474791]:hover{color:#fff}@media(max-width:980px){.hero-section[_ngcontent-ng-c107474791], .about-section[_ngcontent-ng-c107474791], .project-grid[_ngcontent-ng-c107474791]{grid-template-columns:1fr}.profile-photo[_ngcontent-ng-c107474791]{height:360px}}@media(max-width:720px){.site-header[_ngcontent-ng-c107474791]{align-items:flex-start;flex-direction:column}.site-nav[_ngcontent-ng-c107474791]{flex-wrap:wrap}.hero-highlights[_ngcontent-ng-c107474791], .about-card-grid[_ngcontent-ng-c107474791]{grid-template-columns:1fr}.section-header[_ngcontent-ng-c107474791], .site-footer[_ngcontent-ng-c107474791]{align-items:flex-start;flex-direction:column}.site-footer[_ngcontent-ng-c107474791]{grid-template-columns:1fr auto;width:100%}.site-version[_ngcontent-ng-c107474791]{grid-column:2;justify-self:end}.site-footer[_ngcontent-ng-c107474791] div[_ngcontent-ng-c107474791]{grid-column:1 / -1;justify-self:center}}</style><style ng-app-id="ng">.site-header[_ngcontent-ng-c3325693878]{position:sticky;top:0;z-index:100;background:#122338f7;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border-bottom:1px solid rgba(255,255,255,.12)}.site-nav[_ngcontent-ng-c3325693878]{min-height:76px;display:flex;align-items:center;justify-content:space-between;gap:32px}.brand[_ngcontent-ng-c3325693878]{display:inline-flex;align-items:center;gap:14px}.brand-mark[_ngcontent-ng-c3325693878]{display:grid;place-items:center;width:2.4rem;height:2.4rem;border-radius:.35rem;background:#fff;letter-spacing:-.08em}.brand-mark[_ngcontent-ng-c3325693878] img[_ngcontent-ng-c3325693878]{width:100%;height:100%;object-fit:contain}.brand-copy[_ngcontent-ng-c3325693878]{display:grid;gap:2px}
21.brand-name[_ngcontent-ng-c3325693878]{font-weight:900;line-height:1}.brand-title[_ngcontent-ng-c3325693878]{color:#b8c6d5;font-size:.82rem}.nav-links[_ngcontent-ng-c3325693878]{display:flex;align-items:center;gap:28px;color:#d8e0e9;font-size:.9rem;font-weight:700}.nav-links[_ngcontent-ng-c3325693878] a[_ngcontent-ng-c3325693878]{padding:28px 0 24px;border-bottom:3px solid transparent}.nav-links[_ngcontent-ng-c3325693878] a[_ngcontent-ng-c3325693878]:hover, .nav-links[_ngcontent-ng-c3325693878] a.active[_ngcontent-ng-c3325693878]{color:#fff;border-bottom-color:#79a8d8}@media(max-width:800px){.site-nav[_ngcontent-ng-c3325693878]{align-items:center;flex-direction:column;gap:12px;padding-block:16px;text-align:center}.brand[_ngcontent-ng-c3325693878]{gap:8px}.brand-mark[_ngcontent-ng-c3325693878]{width:1.75rem;height:1.75rem}.brand-copy[_ngcontent-ng-c3325693878]{display:flex;align-items:baseline;gap:8px;white-space:nowrap}.brand-name[_ngcontent-ng-c3325693878]{font-size:.95rem}.brand-title[_ngcontent-ng-c3325693878]{font-size:.76rem}.nav-links[_ngcontent-ng-c3325693878]{flex-wrap:wrap;justify-content:center;gap:16px;width:100%}.nav-links[_ngcontent-ng-c3325693878] a[_ngcontent-ng-c3325693878]{padding:0;border-bottom:0}}</style><style ng-app-id="ng">[_nghost-ng-c917822928]{display:block;min-height:100vh;color:#f6f7fb;background:radial-gradient(circle at top right,rgba(132,79,255,.3),transparent 34rem),radial-gradient(circle at top left,rgba(37,99,235,.22),transparent 28rem),#050816;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*[_ngcontent-ng-c917822928]{box-sizing:border-box}a[_ngcontent-ng-c917822928]{color:inherit;text-decoration:none}.site-header[_ngcontent-ng-c917822928]{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:2rem;padding:1.25rem 6vw;background:#050816c7;border-bottom:1px solid rgba(255,255,255,.08);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}.brand[_ngcontent-ng-c917822928]{display:flex;align-items:center;gap:.9rem}.brand[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928], .brand[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{display:block}.brand[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{margin-top:.15rem;color:#aab2c5;font-size:.85rem}.site-nav[_ngcontent-ng-c917822928]{display:flex;align-items:center;gap:1.4rem;color:#d8deec;font-size:.95rem}.site-nav[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]:hover{color:#fff}.hero-section[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:minmax(260px,420px) minmax(0,1fr);gap:clamp(2rem,6vw,5rem);align-items:start;padding:4rem 6vw 3rem}.hero-photo-card[_ngcontent-ng-c917822928]{padding:.5rem;border-radius:1.5rem;background:linear-gradient(#10172a,#10172a) padding-box,linear-gradient(135deg,#2f7cffbf,#9b5cffbf) border-box;border:1px solid transparent;box-shadow:0 24px 70px #00000059}.profile-photo[_ngcontent-ng-c917822928]{display:block;width:100%;height:520px;object-fit:cover;object-position:center;border-radius:1.1rem}.eyebrow[_ngcontent-ng-c917822928]{margin:0 0 1rem;color:#9b8cff;font-size:.82rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.projects-note[_ngcontent-ng-c917822928]{text-align:center}.hero-copy[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{margin:0;font-size:clamp(1.125rem,2.625vw,1.875rem);line-height:.95;letter-spacing:-.07em}.hero-blurb[_ngcontent-ng-c917822928]{margin:1.5rem 0 0;color:#c9d0df;font-size:clamp(1.05rem,1.7vw,1.3rem);line-height:1.7}.hero-actions[_ngcontent-ng-c917822928]{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2rem}.button[_ngcontent-ng-c917822928]{display:inline-flex;align-items:center;justify-content:center;min-height:3rem;padding:0 1.25rem;border-radius:.85rem;font-weight:800}.button.primary[_ngcontent-ng-c917822928]{background:linear-gradient(135deg,#2f7cff,#9b5cff);color:#fff;box-shadow:0 16px 40px #505aff42}.button.secondary[_ngcontent-ng-c917822928]{border:1px solid rgba(255,255,255,.2);color:#eef2ff;background:#ffffff0a}.hero-highlights[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:repeat(6,minmax(0,2fr));gap:1rem;margin-top:2.5rem}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928], .about-card[_ngcontent-ng-c917822928], .project-card[_ngcontent-ng-c917822928]{border:1px solid rgba(255,255,255,.09);background:#ffffff0b;box-shadow:0 24px 70px #0000002e}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]{padding:1rem;border-radius:1rem}.hero-highlights[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928], .hero-highlights[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{display:block}.hero-highlights[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928]{margin-bottom:.25rem;font-size:1.05rem}.hero-highlights[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{color:#aab2c5;font-size:.9rem;line-height:1.4}.section[_ngcontent-ng-c917822928]{padding:3rem 6vw}.section-header[_ngcontent-ng-c917822928]{display:flex;align-items:end;justify-content:space-between;gap:2rem;margin-bottom:1.5rem}.section-header[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928], .about-section[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928]{margin:0;font-size:clamp(2rem,4vw,3.5rem);line-height:1;letter-spacing:-.05em}.section-header[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928]{max-width:620px;margin:0;color:#aab2c5;line-height:1.6}.projects-summary-mobile[_ngcontent-ng-c917822928], .bloomberg-label-mobile[_ngcontent-ng-c917822928], .kiosk-demo-label-mobile[_ngcontent-ng-c917822928]{display:none}.project-grid[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.25rem}.project-group-heading[_ngcontent-ng-c917822928]{display:flex;align-items:end;justify-content:space-between;gap:2rem;margin-bottom:1rem;padding-bottom:.9rem;border-bottom:1px solid #cfd8e3}.project-group-heading-secondary[_ngcontent-ng-c917822928]{margin-top:2.5rem}.project-group-label[_ngcontent-ng-c917822928]{margin:0 0 .35rem;color:#315d91;font-size:.72rem;font-weight:800;letter-spacing:.13em;text-transform:uppercase}.project-group-heading[_ngcontent-ng-c917822928] h3[_ngcontent-ng-c917822928]{margin:0;color:#17263c;font-size:clamp(1.45rem,2.5vw,2.1rem);line-height:1.1;letter-spacing:-.025em}.project-group-heading[_ngcontent-ng-c917822928] > p[_ngcontent-ng-c917822928]{max-width:680px;margin:0;color:#465568;line-height:1.55;text-align:right}.project-card[_ngcontent-ng-c917822928]{overflow:hidden;border-radius:1.25rem}.project-image[_ngcontent-ng-c917822928]{display:grid;place-items:center;min-height:220px;color:#ffffffc2;font-weight:800}.project-image-link[_ngcontent-ng-c917822928]{display:block;width:100%;height:100%}.project-image-link[_ngcontent-ng-c917822928]:focus-visible{outline:3px solid #24568a;outline-offset:-3px}.scheduling-preview[_ngcontent-ng-c917822928]{background:linear-gradient(135deg,#2f7cff57,#ffffff0f),repeating-linear-gradient(90deg,rgba(255,255,255,.08) 0 1px,transparent 1px 76px),#101827}.sonic-shielding-preview[_ngcontent-ng-c917822928]{background:#0a1c38}.sonic-shielding-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{width:100%;height:100%;object-fit:cover}.game-preview[_ngcontent-ng-c917822928]{background:radial-gradient(circle at center,rgba(245,158,11,.28),transparent 11rem),linear-gradient(135deg,#9b5cff47,#ffffff0d),#17111c}.robotics-preview[_ngcontent-ng-c917822928]{background:#10243f}.propane-preview[_ngcontent-ng-c917822928]{background:#273447}.paint-preview[_ngcontent-ng-c917822928]{background:#eee9df}
21.cabaret-preview[_ngcontent-ng-c917822928]{background:#173e63}.warden-preview[_ngcontent-ng-c917822928]{background:#080808}.whimsy-preview[_ngcontent-ng-c917822928]{background:#f5effa}.warden-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{width:100%;height:100%;object-fit:cover;object-position:top center}.paint-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{width:100%;aspect-ratio:16 / 10;object-fit:cover;object-position:top center}.propane-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{width:100%;height:100%;object-fit:cover;object-position:center}.robotics-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{width:100%;aspect-ratio:16 / 10;margin-top:-15px;margin-bottom:-15px;object-fit:cover;object-position:center 48%}.java-preview[_ngcontent-ng-c917822928]{background:linear-gradient(135deg,#22c55e33,#2f7cff38),repeating-linear-gradient(0deg,rgba(255,255,255,.06) 0 1px,transparent 1px 34px),#07111f}.project-content[_ngcontent-ng-c917822928]{padding:1.25rem}.project-title-row[_ngcontent-ng-c917822928]{display:flex;align-items:center;justify-content:space-between;gap:1rem}.project-title-row[_ngcontent-ng-c917822928] h3[_ngcontent-ng-c917822928]{margin:0;font-size:1.25rem}.vision-title-standard[_ngcontent-ng-c917822928]{display:none}.project-title-row[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{padding:.35rem .65rem;border-radius:999px;color:#c7d2fe;background:#ffffff14;font-size:.78rem;line-height:1.35;text-align:center}.project-content[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928]{margin:1rem 0 0;color:#c9d0df;line-height:1.65}.project-links[_ngcontent-ng-c917822928]{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:1.25rem}.project-links[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]{color:#8fb4ff;font-weight:800}.project-links[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]:hover{color:#c4b5fd}.about-section[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:2rem;align-items:start}.mag-preview[_ngcontent-ng-c917822928]{background:#eef2f6}.mag-preview[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928]{aspect-ratio:3807 / 1869;object-fit:contain}.about-section[_ngcontent-ng-c917822928] > div[_ngcontent-ng-c917822928]:first-child{min-width:0}.about-section[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928]{max-width:100%;margin-bottom:1.5rem;line-height:1.1;overflow-wrap:anywhere;text-wrap:balance}.about-section[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928] + p[_ngcontent-ng-c917822928]{margin-top:0}.about-section[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928]{max-width:720px;color:#c9d0df;line-height:1.75}.about-card-grid[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.about-card[_ngcontent-ng-c917822928]{min-height:150px;padding:1.25rem;border-radius:1.1rem}.about-card[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928], .about-card[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{display:block}.about-card[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928]{margin-bottom:.6rem;font-size:1.05rem}.about-card[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{color:#aab2c5;line-height:1.55}.site-footer[_ngcontent-ng-c917822928]{display:flex;justify-content:space-between;gap:1rem;padding:2rem 6vw;color:#aab2c5;border-top:1px solid rgba(255,255,255,.08)}.site-footer[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]{display:flex;gap:1rem}.site-footer[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]:hover{color:#fff}@media(hover:hover)and (pointer:fine){.hero-section[_ngcontent-ng-c917822928]{align-items:start!important;padding-top:2rem}.hero-copy[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{font-size:clamp(1.125rem,2.625vw,1.875rem)!important}#projects[_ngcontent-ng-c917822928]{padding-top:1rem}}@media(max-width:980px){.hero-section[_ngcontent-ng-c917822928], .about-section[_ngcontent-ng-c917822928], .project-grid[_ngcontent-ng-c917822928]{grid-template-columns:1fr}.profile-photo[_ngcontent-ng-c917822928]{height:360px}}@media(max-width:980px)and (hover:none)and (pointer:coarse){.hero-section[_ngcontent-ng-c917822928]{align-items:center}.hero-copy[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{font-size:clamp(3rem,7vw,5rem)}}
21@media(max-width:720px){#home[_ngcontent-ng-c917822928], #home[_ngcontent-ng-c917822928] > *[_ngcontent-ng-c917822928], .project-card[_ngcontent-ng-c917822928], .project-card[_ngcontent-ng-c917822928] > *[_ngcontent-ng-c917822928]{min-width:0;max-width:100%}.section[_ngcontent-ng-c917822928]{padding-block:2rem}.project-grid[_ngcontent-ng-c917822928]{gap:.85rem}.project-group-heading-secondary[_ngcontent-ng-c917822928]{margin-top:1.75rem}.kiosk-demo-label-desktop[_ngcontent-ng-c917822928]{display:none}.kiosk-demo-label-mobile[_ngcontent-ng-c917822928]{display:inline}.bloomberg-label-desktop[_ngcontent-ng-c917822928]{display:none}.bloomberg-label-mobile[_ngcontent-ng-c917822928]{display:inline}.project-group-heading[_ngcontent-ng-c917822928]{display:grid;gap:.65rem}.project-group-heading-secondary[_ngcontent-ng-c917822928] h3[_ngcontent-ng-c917822928]{font-size:clamp(.85rem,4.6vw,1.2rem);white-space:normal}.project-group-heading[_ngcontent-ng-c917822928] > p[_ngcontent-ng-c917822928]{font-size:.88rem;text-align:left}#projects[_ngcontent-ng-c917822928]{padding-top:1rem}#projects[_ngcontent-ng-c917822928] .section-header[_ngcontent-ng-c917822928]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:end;gap:1rem}#projects[_ngcontent-ng-c917822928] .section-header[_ngcontent-ng-c917822928] > p[_ngcontent-ng-c917822928]{text-align:right}.projects-summary-desktop[_ngcontent-ng-c917822928]{display:none}.projects-summary-mobile[_ngcontent-ng-c917822928]{display:-webkit-box;overflow:hidden;font-size:.8rem;line-height:1.4;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2}.hero-section[_ngcontent-ng-c917822928]{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem;row-gap:1rem;padding-top:1.5rem}.hero-section[_ngcontent-ng-c917822928] > .hero-photo-card[_ngcontent-ng-c917822928]{grid-column:1;grid-row:1;padding:0;border:0;background:none;box-shadow:none}.profile-photo[_ngcontent-ng-c917822928]{height:180px}.hero-copy[_ngcontent-ng-c917822928]{display:contents}.hero-heading[_ngcontent-ng-c917822928]{grid-column:2;grid-row:1;align-self:start}.hero-heading[_ngcontent-ng-c917822928] .eyebrow[_ngcontent-ng-c917822928]{margin-bottom:.75rem}.hero-heading[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{font-size:clamp(1rem,5vw,1.4rem);line-height:1.1}.hero-copy[_ngcontent-ng-c917822928] > [_ngcontent-ng-c917822928]:not(.hero-heading){grid-column:1 / -1}.site-header[_ngcontent-ng-c917822928]{align-items:flex-start;flex-direction:column}.site-nav[_ngcontent-ng-c917822928]{flex-wrap:wrap}.hero-highlights[_ngcontent-ng-c917822928], .about-card-grid[_ngcontent-ng-c917822928]{grid-template-columns:1fr}.section-header[_ngcontent-ng-c917822928], .site-footer[_ngcontent-ng-c917822928]{align-items:flex-start;flex-direction:column}}[_nghost-ng-c917822928]{color:#172033;background:#f7f9fc}.hero-section[_ngcontent-ng-c917822928]{align-items:center;max-width:1720px;margin-inline:auto;padding-top:1rem;padding-bottom:2rem}.hero-photo-card[_ngcontent-ng-c917822928]{padding:.4rem;border:1px solid #d8e0eb;border-radius:1rem;background:#fff;box-shadow:0 18px 45px #1720331f}.profile-photo[_ngcontent-ng-c917822928]{border-radius:.7rem}.eyebrow[_ngcontent-ng-c917822928]{color:#315d91;font-size:.78rem;letter-spacing:.14em}.hero-copy[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{max-width:980px;color:#14233a;font-size:clamp(2.4rem,5vw,4.5rem);line-height:1.06;letter-spacing:-.045em;text-wrap:balance}.hero-blurb[_ngcontent-ng-c917822928]{max-width:960px;color:#4c5b70;font-size:clamp(1rem,1.4vw,1.18rem);line-height:1.75}.button[_ngcontent-ng-c917822928]{border-radius:.4rem;font-weight:700;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,transform .15s ease}.button[_ngcontent-ng-c917822928]:hover{transform:translateY(-1px)}.button.primary[_ngcontent-ng-c917822928]{color:#fff;background:#24568a;box-shadow:0 8px 20px #24568a33}.button.primary[_ngcontent-ng-c917822928]:hover{background:#1b466f}.button.secondary[_ngcontent-ng-c917822928]{color:#203651;background:#fff;border-color:#b9c5d4}.button.secondary[_ngcontent-ng-c917822928]:hover{border-color:#7c8fa6;background:#f3f6fa}.hero-highlights[_ngcontent-ng-c917822928]{grid-template-columns:repeat(3,minmax(0,1fr));gap:0;padding-block:1.15rem;border-top:1px solid #d7dee8;border-bottom:1px solid #d7dee8}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928], .about-card[_ngcontent-ng-c917822928], .project-card[_ngcontent-ng-c917822928]{border:1px solid #dce3ec;background:#fff;box-shadow:0 8px 24px #1720330f}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]{padding:.4rem 1rem;border:0;border-right:1px solid #d7dee8;border-radius:0;background:transparent;box-shadow:none}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]:nth-child(3n){border-right:0}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]:nth-child(n+4){margin-top:1rem}.hero-highlights[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928]{color:#1c304a}.hero-highlights[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928], .section-header[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928], .project-content[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928], .about-section[_ngcontent-ng-c917822928] p[_ngcontent-ng-c917822928], .about-card[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{color:#465568}.section[_ngcontent-ng-c917822928]{max-width:1720px;margin-inline:auto}#projects[_ngcontent-ng-c917822928]{scroll-margin-top:88px}#projects[_ngcontent-ng-c917822928]{max-width:none;padding-top:1.5rem;padding-bottom:2rem;background:#eef2f6}@media(max-width:800px){#projects[_ngcontent-ng-c917822928]{scroll-margin-top:164px}}#projects[_ngcontent-ng-c917822928] > *[_ngcontent-ng-c917822928]{max-width:1790px;margin-right:auto;margin-left:auto}.projects-note[_ngcontent-ng-c917822928]{width:100%;max-width:none!important;margin-bottom:2rem!important;color:#34465b;line-height:1.7}.section-header[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928], .about-section[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928]{color:#17263c;letter-spacing:-.035em}.project-card[_ngcontent-ng-c917822928]{display:flex;flex-direction:column;border-radius:.65rem;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.project-card[_ngcontent-ng-c917822928]:hover{transform:translateY(-2px);border-color:#c4ceda;box-shadow:0 14px 32px #1720331a}.project-image[_ngcontent-ng-c917822928]{overflow:hidden;min-height:0;color:#fff;border-bottom:1px solid #dce3ec}.project-image[_ngcontent-ng-c917822928] img[_ngcontent-ng-c917822928], .project-image[_ngcontent-ng-c917822928] video[_ngcontent-ng-c917822928]{display:block;width:100%;height:auto}.project-content[_ngcontent-ng-c917822928]{display:flex;flex:1;flex-direction:column}.project-title-row[_ngcontent-ng-c917822928] h3[_ngcontent-ng-c917822928], .about-card[_ngcontent-ng-c917822928] strong[_ngcontent-ng-c917822928]{color:#1b2d46}.project-title-row[_ngcontent-ng-c917822928] span[_ngcontent-ng-c917822928]{color:#315d91;background:#e9f0f7;border:1px solid #d3dfeb}.project-links[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]{color:#24568a;font-weight:700}.project-links[_ngcontent-ng-c917822928]{margin-top:auto;padding-top:.625rem}@media(min-width:721px){.project-links[_ngcontent-ng-c917822928]{column-gap:1.35rem}}.project-links[_ngcontent-ng-c917822928] a[_ngcontent-ng-c917822928]:hover{color:#173c61;text-decoration:underline;text-underline-offset:.2rem}.inline-project-link[_ngcontent-ng-c917822928]{color:#24568a;text-decoration:underline;text-underline-offset:.16em}.about-section[_ngcontent-ng-c917822928]{padding-top:1.5rem;padding-bottom:1rem}.about-card[_ngcontent-ng-c917822928]{min-height:145px;border-radius:.55rem;box-shadow:none}@media(max-width:980px){.hero-section[_ngcontent-ng-c917822928]{align-items:start}}@media(min-width:981px){.about-section[_ngcontent-ng-c917822928] h2[_ngcontent-ng-c917822928]{font-size:clamp(1.3rem,2vw,2.5rem);overflow-wrap:normal;white-space:nowrap}.hero-section[_ngcontent-ng-c917822928], .section[_ngcontent-ng-c917822928]{padding-right:3vw;padding-left:3vw}}@media(min-width:981px)and (max-width:1920px){#projects[_ngcontent-ng-c917822928]{padding-right:1.5vw;padding-left:1.5vw}}@media(min-width:981px)and (max-width:1920px){.project-content[_ngcontent-ng-c917822928]{padding:.625rem}}@media(max-width:1920px){.vision-title-wide[_ngcontent-ng-c917822928]{display:none}.vision-title-standard[_ngcontent-ng-c917822928]{display:block}}@media(max-width:720px){.vision-title-wide[_ngcontent-ng-c917822928]{display:block}.vision-title-standard[_ngcontent-ng-c917822928]{display:none}.hero-section[_ngcontent-ng-c917822928]{padding-top:1.5rem}.hero-heading[_ngcontent-ng-c917822928] h1[_ngcontent-ng-c917822928]{color:#14233a;font-size:clamp(1.25rem,5.6vw,1.75rem);line-height:1.15;letter-spacing:-.035em}.hero-highlights[_ngcontent-ng-c917822928]{grid-template-columns:1fr 1fr}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928], .hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]:nth-child(3n){margin-top:0;padding:.7rem;border-right:1px solid #d7dee8;border-bottom:1px solid #d7dee8}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]:nth-child(2n){border-right:0}.hero-highlights[_ngcontent-ng-c917822928] div[_ngcontent-ng-c917822928]:nth-last-child(-n+2){border-bottom:0}}</style></head> 22 <body><!--nghm-->
22<script type="text/javascript" id="ng-event-dispatch-contract">(()=>{function p(t,n,r,o,e,i,f,m){return{eventType:t,event:n,targetElement:r,eic:o,timeStamp:e,eia:i,eirp:f,eiack:m}}function u(t){let n=[],r=e=>{n.push(e)};return{c:t,q:n,et:[],etc:[],d:r,h:e=>{r(p(e.type,e,e.target,t,Date.now()))}}}function s(t,n,r){for(let o=0;o<n.length;o++){let e=n[o];(r?t.etc:t.et).push(e),t.c.addEventListener(e,t.h,r)}}function c(t,n,r,o,e=window){let i=u(t);e._ejsas||(e._ejsas={}),e._ejsas[n]=i,s(i,r),s(i,o,!0)}window.__jsaction_bootstrap=c;})(); 23</script>
23<script>window.__jsaction_bootstrap(document.body,"ng",["click"],[]);</script>
23 24 <app-root ng-version="21.2.17" _nghost-ng-c107474791 ngh="2" ng-server-context="ssg"><app-site-header _ngcontent-ng-c107474791 _nghost-ng-c3325693878 ngh="0"><header _ngcontent-ng-c3325693878 class="site-header"><nav _ngcontent-ng-c3325693878 aria-label="Main navigation" class="site-nav page-shell"><a _ngcontent-ng-c3325693878 routerlink="/" aria-label="John Bieniek portfolio home" class="brand" href="/" jsaction="click:;"><span _ngcontent-ng-c3325693878 class="brand-mark"><img _ngcontent-ng-c3325693878 src="/assets/brand/logos/sigil-small-blue.png" alt="John Bieniek"></span><span _ngcontent-ng-c3325693878 class="brand-copy"><span _ngcontent-ng-c3325693878 class="brand-name">John Bieniek</span><span _ngcontent-ng-c3325693878 class="brand-title">Lead Software Engineer</span></span></a><div _ngcontent-ng-c3325693878 class="nav-links"><a _ngcontent-ng-c3325693878 routerlink="/" routerlinkactive="active" href="/" class="active" jsaction="click:;">Home</a><a _ngcontent-ng-c3325693878 appprojectslink href="/#projects" jsaction="click:;">Projects</a><a _ngcontent-ng-c3325693878 href="/assets/documents/John_Bieniek_Portfolio_Resume_Public.pdf" target="_blank" rel="noopener noreferrer">Resume</a><a _ngcontent-ng-c3325693878 href="https://www.linkedin.com/in/johnathanbieniek/" target="_blank" rel="noopener noreferrer">LinkedIn</a><a _ngcontent-ng-c3325693878 routerlink="/contact" routerlinkactive="active" href="/contact" class jsaction="click:;">Contact</a></div></nav></header></app-site-header><router-outlet _ngcontent-ng-c107474791></router-outlet><app-home _nghost-ng-c917822928 ngh="1"><main _ngcontent-ng-c917822928 id="home"><section _ngcontent-ng-c917822928 class="hero-section"><div _ngcontent-ng-c917822928 class="hero-photo-card"><img _ngcontent-ng-c917822928 src="/assets/brand/profile.jpg" alt="John Bieniek" class="profile-photo"></div><div _ngcontent-ng-c917822928 class="hero-copy"><div _ngcontent-ng-c917822928 class="hero-heading"><p _ngcontent-ng-c917822928 class="eyebrow">Lead software engineer</p><h1 _ngcontent-ng-c917822928> Technical Leader, Software Architect, and Full-Stack Engineer </h1></div><p _ngcontent-ng-c917822928 class="hero-blurb"> Staff Engineer specializing in distributed systems, cloud-native architecture, and full stack engineering. Over 15 years of experience designing, modernizing, and scaling high-availability systems that support national-scale operations. Proven track record leading cross-functional Agile and Waterfall teams, driving architectural strategy, and delivering reliable software in fast-moving enterprise environments. </p><div _ngcontent-ng-c917822928 class="hero-actions"><a _ngcontent-ng-c917822928 appprojectslink href="/#projects" class="button primary" jsaction="click:;">View Projects</a><a _ngcontent-ng-c917822928 href="/assets/documents/John_Bieniek_Portfolio_Resume_Public.pdf" target="_blank" rel="noopener" class="button secondary"> View Resume </a></div><div _ngcontent-ng-c917822928 class="hero-highlights"><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>15+</strong><span _ngcontent-ng-c917822928>Years experience</span></div><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>Cloud</strong><span _ngcontent-ng-c917822928>Systems and services</span></div><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>Architecture</strong><span _ngcontent-ng-c917822928>Scalable and reliable</span></div><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>Full-stack</strong><span _ngcontent-ng-c917822928>Frontend to backend</span></div><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>AI</strong><span _ngcontent-ng-c917822928>Agentic systems</span></div><div _ngcontent-ng-c917822928><strong _ngcontent-ng-c917822928>Robotics</strong><span _ngcontent-ng-c917822928>Automation and control</span></div></div></div></section><section _ngcontent-ng-c917822928 id="projects" class="section"><div _ngcontent-ng-c917822928 class="section-header"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="eyebrow">Featured work</p><h2 _ngcontent-ng-c917822928>Projects</h2></div><p _ngcontent-ng-c917822928 class="projects-summary"><span _ngcontent-ng-c917822928 class="projects-summary-desktop">A mix of professional systems, independent software, games, and coding demos.</span><span _ngcontent-ng-c917822928 class="projects-summary-mobile">Systems, software, games, demos and more.</span></p></div><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="projects-note"> The projects below highlight a cross-section of my work in enterprise systems, independent software, games, and technical demos. Additional public projects are available on GitHub. While much of my professional work is proprietary, I am happy to discu
24ss the scope, constraints, and technical ownership of that work in a professional setting. </p></div><div _ngcontent-ng-c917822928 class="project-group-heading"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="project-group-label">Built for scale</p><h3 _ngcontent-ng-c917822928>Modern enterprise systems</h3></div><p _ngcontent-ng-c917822928> Large-scale retail platforms spanning cloud modernization, connected hardware, robotics, and cross-system integration for The Home Depot. </p></div><div _ngcontent-ng-c917822928 class="project-grid"><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image propane-preview"><a _ngcontent-ng-c917822928 href="/projects/propane-kiosk-platform" aria-label="View Propane Kiosks overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/propane-kiosks/hardware.jpg" alt="AmeriGas 24/7 self-service propane exchange kiosk" loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Propane Kiosks</h3><span _ngcontent-ng-c917822928>Enterprise Platform</span></div><p _ngcontent-ng-c917822928> Built reservation and dispensing workflows for propane kiosks across 2,000+ Home Depot stores, integrating physical hardware with payments, accounting, and inventory state. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/propane-kiosk-platform">Overview</a><a _ngcontent-ng-c917822928 href="https://www.youtube.com/watch?v=N-X54R9S9oY" target="_blank" rel="noopener noreferrer"><span _ngcontent-ng-c917822928 class="kiosk-demo-label-desktop">Kiosk Demo</span><span _ngcontent-ng-c917822928 class="kiosk-demo-label-mobile">Demo</span></a><a _ngcontent-ng-c917822928 href="https://oilandenergyonline.com/articles/all/increase-sales-easing-buying-process" target="_blank" rel="noopener noreferrer">Automated Exchange</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image robotics-preview"><a _ngcontent-ng-c917822928 href="/projects/retail-robotics" aria-label="View Retail Vision Mapping overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="https://www.teachkidsrobotics.com/wp-content/uploads/2023/01/IMG_8495-768x1024.jpg" alt="Zippedi shelf-scanning robot inside a Home Depot store" loading="lazy" referrerpolicy="no-referrer"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928 class="vision-title-wide">Retail Vision Mapping</h3><h3 _ngcontent-ng-c917822928 class="vision-title-standard">Vision Mapping</h3><span _ngcontent-ng-c917822928>Enterprise Integration</span></div><p _ngcontent-ng-c917822928> Built the data-matching layer that connected shelf imagery from autonomous Zippedi robots to The Home Depot's store layouts and planograms, translating camera observations into physical aisle, bay, shelf, and product context. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/retail-robotics">Overview</a><a _ngcontent-ng-c917822928 href="https://www.bloomberglinea.com/english/chilean-robot-as-a-service-company-zippedi-raises-69-million-to-digitize-stores/" target="_blank" rel="noopener noreferrer"><span _ngcontent-ng-c917822928 class="bloomberg-label-desktop">Bloomberg LÃnea</span><span _ngcontent-ng-c917822928 class="bloomberg-label-mobile">Bloomberg</span></a><a _ngcontent-ng-c917822928 href="https://www.hkstp.org/publication/publication-3/publication-3-story-3/" target="_blank" rel="noopener noreferrer">Case Study</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image paint-preview"><a _ngcontent-ng-c917822928 href="/projects/paint-reorder-platform" aria-label="View Paint Reorder Platform overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/paint-reorder/product-page-tight.png" alt="Home Depot paint product page showing color, product, paint type, brand, and sheen options" loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Paint Reorder Platform</h3><span _ngcontent-ng-c917822928>Cloud Modernization</span></div><p _ngcontent-ng-c917822928> Led architecture and implementation for several paint-platform capabilities supporting online reordering, including cloud modernization and stable service interfaces for search, configuration, ordering, and purchase history. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/paint-reorder-platform">Overview</a><a _ngcontent-ng-c917822928 href="https://corporate.homedepot.com/news/products/new-technology-shows-you-perfect-paint-color-its-your-walls" target="_blank" rel="noopener noreferrer">Project Color</a><a _ngcontent-ng-c917822928 href="https://www.homedepot.com/b/Paint-Paint-Colors/N-5yc1vZcaw8" target="_blank" rel="noopener noreferrer">Shop Paint</a></div></div></article></div><div _ngcontent-ng-c917822928 class="project-group-heading project-group-heading-secondary"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="project-group-label">Responsive websites</p><h3 _ngcontent-ng-c917822928>Independent products & client work</h3></div><p _ngcontent-ng-c917822928> Products and production websites shaped through hands-on ownership, customer needs, accessible design, and practical delivery. </p></div><div _ngcontent-ng-c917822928 class="project-grid"><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image mag-preview"><a _ngcontent-ng-c917822928 href="/projects/multiverse-adventurers-guild" aria-label="View Multiverse Adventurers Guild overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/multiverse-adventurers-guild/playable-sheet-small.png?v=2" alt="Multiverse Adventurers Guild playable character sheet"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Multiverse Adventurers Guild</h3><span _ngcontent-ng-c917822928>Blind-Accessible Tabletop RPG</span></div><p _ngcontent-ng-c917822928> A setting-flexible tabletop roleplaying game. With streamlined rules and a playable character sheet, this website makes starting a game a few clicks away. It uses an accessible design built to accommodate blind players. A consistent voice-command interface can read the rules, build and manage a character, make rolls, report results, and guide play without requiring the player to see the site. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/multiverse-adventurers-guild">Overview</a><a _ngcontent-ng-c917822928 href="https://multiverseadventurersguild.com/" target="_blank" rel="noopener">New Site</a><a _ngcontent-ng-c917822928 href="https://scottbieniek.wixsite.com/mag1" target="_blank" rel="noopener">Old Site</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/MultiverseAdventurersGuild-Portfolio" target="_blank" rel="noopener">
24Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image whimsy-preview"><a _ngcontent-ng-c917822928 href="/projects/whimsy" aria-label="View Whimsy overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/whimsy/home-card.webp" alt="Whimsy website with a colorful collage of campaigns, community events, and creative work" width="800" height="486" loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Whimsy</h3><span _ngcontent-ng-c917822928>Creative Business Website</span></div><p _ngcontent-ng-c917822928> An image-rich home for consulting, media, marketing, and web development. Dozens of pages bring together seasonal campaigns, community events, local businesses, and software. Distinct art direction gives each story its own character, from festive illustrations and colorful advertising to food photography and farm branding. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/whimsy">Overview</a><a _ngcontent-ng-c917822928 href="https://experiencewhimsy.com/" target="_blank" rel="noopener noreferrer">Visit Whimsy</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/WhimsyUI" target="_blank" rel="noopener noreferrer">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image warden-preview"><a _ngcontent-ng-c917822928 href="/projects/whimsy-warden" aria-label="View Whimsy Warden overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/whimsy-warden/dashboard.png" alt="Whimsy Warden dashboard showing healthy services, latency, and alert status" loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Whimsy's Warden</h3><span _ngcontent-ng-c917822928>Go Monitoring & Alerting</span></div><p _ngcontent-ng-c917822928> A Golang powered availability monitor for <a _ngcontent-ng-c917822928 href="https://experiencewhimsy.com/" target="_blank" rel="noopener noreferrer" class="inline-project-link">Whimsy</a> applications, with concurrent health checks, a live operational dashboard, and transition-aware e-mail alerts from the edge. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/whimsy-warden">Overview</a><a _ngcontent-ng-c917822928 href="https://experiencewhimsy.com/warden/" target="_blank" rel="noopener noreferrer">View the Warden</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/GoHealthMonitor" target="_blank" rel="noopener noreferrer">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image scheduling-preview"><a _ngcontent-ng-c917822928 href="/projects/accessible-scheduling" aria-label="View Accessible Scheduling overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/accessible-scheduling/overview.png" alt="Accessible Scheduling preview"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Accessible Scheduling</h3><span _ngcontent-ng-c917822928>SaaS Web App</span></div><p _ngcontent-ng-c917822928> A scheduling platform for nurses and client care work. It reduced manual scheduling from roughly 10 hours to about 5 minutes while handling availability, travel, certifications, overtime, and client needs. Built with Angular, Spring, and MongoDB. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/accessible-scheduling">Overview</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/PCF_AccessibleScheduling">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image cabaret-preview"><a _ngcontent-ng-c917822928 href="/projects/lakeland-cabaret" aria-label="View Lakeland Cabaret overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/lakeland-cabaret/site.png" alt="Lakeland Cabaret website featuring its Mid-Michigan entertainment services" loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Lakeland Cabaret</h3><span _ngcontent-ng-c917822928>Commercial Website</span></div><p _ngcontent-ng-c917822928> Designed and built the production website for a Mid-Michigan entertainment business, defining its information architecture, service and pricing presentation, visual direction, responsive experience, and inquiry flow. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/lakeland-cabaret">Overview</a><a _ngcontent-ng-c917822928 href="https://lakelandcabaret.com/" target="_blank" rel="noopener noreferrer">Live Site</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/LakelandCabaretUI" target="_blank" rel="noopener noreferrer">
24Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image portfolio-preview"><a _ngcontent-ng-c917822928 href="/projects/angular-portfolio" aria-label="View Angular Portfolio overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/brand/social/social-preview-v4.png" alt="John Bieniek Angular portfolio preview"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>John Bieniek's Portfolio</h3><span _ngcontent-ng-c917822928>Angular Web App</span></div><p _ngcontent-ng-c917822928> This responsive portfolio brings project case studies, interactive demos, and professional experience together in one Angular application. It uses server-side rendering, prerendered routes, reusable components, and production-ready social metadata. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/angular-portfolio">Overview</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/JohnsPortfolio" target="_blank" rel="noopener noreferrer">Code</a></div></div></article></div><div _ngcontent-ng-c917822928 class="project-group-heading project-group-heading-secondary"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="project-group-label">Selected projects</p><h3 _ngcontent-ng-c917822928>Software systems & technical tools</h3></div><p _ngcontent-ng-c917822928> Purpose-built software and playful experiments spanning scientific visualization, game development, portfolio engineering, and runnable code demos. </p></div><div _ngcontent-ng-c917822928 class="project-grid"><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image sonic-shielding-preview"><a _ngcontent-ng-c917822928 href="/projects/sonic-shielding" aria-label="View Sonic Shielding overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/sonic-shielding/promo-tile.png" alt="Sonic Shielding: Softer sound. Smarter browsing." loading="lazy"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Sonic Shielding</h3><span _ngcontent-ng-c917822928>Browser Extension</span></div><p _ngcontent-ng-c917822928> A privacy-first Chrome and Brave extension that softens sudden peaks, beeps, alarms, and uncomfortable frequencies while preserving speech and everyday browser audio. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/sonic-shielding">Overview</a><a _ngcontent-ng-c917822928 href="/assets/projects/sonic-shielding/sonic-shielding-ad.mp4" target="_blank" rel="noopener noreferrer">Video</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/SonicShielding" target="_blank" rel="noopener noreferrer">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image scheduling-preview"><a _ngcontent-ng-c917822928 href="/projects/sophia" aria-label="View SOPHIA overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/sophia/overview.png" alt="SOPHIA preview"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>SOPHIA</h3><span _ngcontent-ng-c917822928>Molecular Dynamics Simulator</span></div><p _ngcontent-ng-c917822928> A Java desktop research application built for the Physics Department at the Georgia Institute of Technology. SOPHIA imports molecular models, runs molecular-dynamics and energy-minimization simulations, and provides interactive 3D playback and graphing for analyzing the results. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/sophia">Overview</a><a _ngcontent-ng-c917822928 href="https://youtu.be/x9STcU9hGS8?si=TmR8LyeOv25FiAP0">Demo</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/Sophia">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image java-preview"><a _ngcontent-ng-c917822928 href="/java-demo" aria-label="View Java Demo Site overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/java-demo/swagger-small.png" alt="Auto-generated API documentation"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Java Demo Site</h3><span _ngcontent-ng-c917822928>Demo Lab</span></div><p _ngcontent-ng-c917822928> A technical demo site with runnable Java examples for algorithms, collections, streams, strings, records, enums, sealed interfaces, and backend-style utility functions. Hosted on AWS Elastic Beanstalk and built with Java, Spring, SQL, and GraphQL. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/java-demo">Overview</a><a _ngcontent-ng-c917822928 href="http://java26demo-env.eba-tsngktpv.us-east-2.elasticbeanstalk.com/swagger-ui/index.html" target="_blank" rel="noopener noreferrer"> Swagger UI </a><!----><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/Java26Demo" target="_blank" rel="noopener noreferrer">
24Code</a></div></div></article></div><div _ngcontent-ng-c917822928 class="project-group-heading project-group-heading-secondary"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="project-group-label">Games</p><h3 _ngcontent-ng-c917822928>Playable projects</h3></div><p _ngcontent-ng-c917822928> Interactive experiments built around playful mechanics, original presentation, and hands-on game development. </p></div><div _ngcontent-ng-c917822928 class="project-grid"><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image game-preview"><a _ngcontent-ng-c917822928 href="/projects/trial-by-rotation" aria-label="View Trial by Rotation overview" class="project-image-link"><video _ngcontent-ng-c917822928 autoplay muted loop playsinline preload="metadata" aria-label="Trial by Rotation gameplay preview"><source _ngcontent-ng-c917822928 src="/assets/projects/trial-by-rotation/gameplay-light.mp4" type="video/mp4"></video></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Trial by Rotation</h3><span _ngcontent-ng-c917822928>Game</span></div><p _ngcontent-ng-c917822928> A Unity game jam project about spinning tops battling in an absurd courtroom arena. Built in C# with Unity, WebGL support, custom AI, music, graphics, and more. Made for The Very Serious Juniper Dev Game Jam. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/trial-by-rotation/">Overview</a><a _ngcontent-ng-c917822928 href="https://rotationaljustice.itch.io/trial-by-rotation" target="_blank" rel="noopener">Play</a><a _ngcontent-ng-c917822928 href="https://itch.io/jam/theveryseriousjuniperdevgamejam" target="_blank" rel="noopener">The Jam</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/Trial-by-Rotation">Code</a></div></div></article><article _ngcontent-ng-c917822928 class="project-card"><div _ngcontent-ng-c917822928 class="project-image game-preview"><a _ngcontent-ng-c917822928 href="/projects/disease-destroyer" aria-label="View Louie & Clara overview" class="project-image-link"><img _ngcontent-ng-c917822928 src="/assets/projects/disease-destroyer/splash-screen.png" alt="Louie and Clara title screen over a red microscopic background"></a></div><div _ngcontent-ng-c917822928 class="project-content"><div _ngcontent-ng-c917822928 class="project-title-row"><h3 _ngcontent-ng-c917822928>Louie & Clara</h3><span _ngcontent-ng-c917822928>Game</span></div><p _ngcontent-ng-c917822928> A Unity action game about piloting a surgical nanobot, destroying viruses, and protecting healthy cells before the infection takes over. Created for Georgia Tech's Video Game Design class with Talia Knapp, who created the UI, wrote the story, and named the game. </p><div _ngcontent-ng-c917822928 class="project-links"><a _ngcontent-ng-c917822928 href="/projects/disease-destroyer">Overview</a><a _ngcontent-ng-c917822928 href="https://themultiverseguild.itch.io/louie-and-clara-a-tragic-darwinian-quest" target="_blank" rel="noopener">Play</a><a _ngcontent-ng-c917822928 href="https://github.com/JohnBieniek/LouieAndClara" target="_blank" rel="noopener">Code</a></div></div></article></div></section><section _ngcontent-ng-c917822928 id="about" class="section about-section"><div _ngcontent-ng-c917822928><p _ngcontent-ng-c917822928 class="eyebrow">About</p><h2 _ngcontent-ng-c917822928>Engineer, builder, and problem solver.</h2><p _ngcontent-ng-c917822928> Iâve worked on high-scale enterprise systems, independent SaaS-style software, creative technical projects, and games. I care about clean architecture, practical interfaces, stable systems, and software that people can actually use. </p><p _ngcontent-ng-c917822928> Outside of software, I build and repair things, work on a small homestead, play bass, make art in many mediums, and perform with various groups. </p></div><div _ngcontent-ng-c917822928 class="about-card-grid"><div _ngcontent-ng-c917822928 class="about-card"><strong _ngcontent-ng-c917822928>Enterprise systems</strong><span _ngcontent-ng-c917822928>High-availability services, cloud platforms, reliability, modernization, and support.</sp
24an></div><div _ngcontent-ng-c917822928 class="about-card"><strong _ngcontent-ng-c917822928>Project management</strong><span _ngcontent-ng-c917822928>Leadership, budgeting, hiring, accountability, mentoring, story creation, SLO definition, development, and execution.</span></div><div _ngcontent-ng-c917822928 class="about-card"><strong _ngcontent-ng-c917822928>Product ownership</strong><span _ngcontent-ng-c917822928>Requirements, architecture, implementation, deployment, and iteration.</span></div><div _ngcontent-ng-c917822928 class="about-card"><strong _ngcontent-ng-c917822928>Broad knowledge</strong><span _ngcontent-ng-c917822928>Retail, e-commerce, finance, healthcare, robotics, arts, and other areas of specialization.</span></div></div></section></main></app-home><!----><footer _ngcontent-ng-c107474791 class="site-footer"><p _ngcontent-ng-c107474791>© 2026 John Bieniek</p><span _ngcontent-ng-c107474791 aria-label="Application version" class="site-version">v1.9.4</span><div _ngcontent-ng-c107474791><a _ngcontent-ng-c107474791 href="/cdn-cgi/l/email-protection#13507c7d6772706753597c7b7d517a767d7a76783d707c7e">Email</a><a _ngcontent-ng-c107474791 href="https://github.com/JohnBieniek" target="_blank" rel="noopener">GitHub</a><a _ngcontent-ng-c107474791 href="https://www.linkedin.com/in/johnathanbieniek/" target="_blank" rel="noopener">LinkedIn</a></div></footer></app-root>
vendor: 111 bytes, lines 24-25
24 25 <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
25<script src="main-COQAWQBA.js" type="module"></script>
25 26
27<script id="ng-state" type="application/json">{"__nghData__":[{},{"t":{"323":"t0"},"c":{"323":[{"i":"t0","r":1}]}},{"c":{"1":[{"i":"c917822928","r":1}]}}]}</script>
27<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"fffb926eb08247dfbb94e97594b85d69","r":1,"spa":2}' crossorigin="anonymous"></script>
27 28</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.