PageSourceSearch

https://johnbieniek.com/projects/paint-reorder-platform/

html johnbieniek.com collected 2026-10-02 01:32:54 UTC 39,974 bytes, 28 lines download raw bytes

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{display:block;max-width:100%}h1,h2,p,figure{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}.page-stack{display:grid;gap:14px;padding-block:0 16px}@media(max-width:1100px){.hero{grid-template-columns:1fr}}@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))}.page-stack{padding-block:0 16px}}
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-c542921727]{display:block}*[_ngcontent-ng-c542921727]{box-sizing:border-box}.paint-page[_ngcontent-ng-c542921727]{min-height:100vh;padding-bottom:48px;color:#172d46;background:radial-gradient(circle at 85% 7%,rgba(36,86,138,.08),transparent 24rem),linear-gradient(rgba(36,86,138,.045) 1px,transparent 1px),#f4f8fb;background-size:auto,100% 34px,auto}.page-stack[_ngcontent-ng-c542921727]{display:grid;gap:18px}.hero[_ngcontent-ng-c542921727], .outcome-strip[_ngcontent-ng-c542921727], .architecture-section[_ngcontent-ng-c542921727], .detail-grid[_ngcontent-ng-c542921727] > article[_ngcontent-ng-c542921727], .journey-section[_ngcontent-ng-c542921727], .experience-section[_ngcontent-ng-c542921727], .order-section[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]{border:1px solid #d5e0ea;border-radius:16px;background:#fff;box-shadow:0 14px 38px #292f3714}.hero[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:minmax(0,1.02fr) minmax(380px,.98fr);gap:clamp(28px,5vw,72px);align-items:center;padding:clamp(24px,4vw,56px);overflow:hidden}.eyebrow[_ngcontent-ng-c542921727], .section-label[_ngcontent-ng-c542921727]{margin:0 0 8px;color:#2b6394;font-size:.76rem;font-weight:900;letter-spacing:.13em;text-transform:uppercase}h1[_ngcontent-ng-c542921727], h2[_ngcontent-ng-c542921727], p[_ngcontent-ng-c542921727], figure[_ngcontent-ng-c542921727]{margin-top:0}h1[_ngcontent-ng-c542921727]{margin-bottom:16px;color:#10243f;font-size:clamp(3.1rem,5.7vw,6rem);line-height:.92;letter-spacing:-.06em}h2[_ngcontent-ng-c542921727]{margin-bottom:14px;color:#173e63;font-size:clamp(1.55rem,2.5vw,2.35rem);line-height:1.12;letter-spacing:-.035em}.capabilities-heading[_ngcontent-ng-c542921727]{font-size:clamp(.9rem,1.3vw,1.4rem);white-space:nowrap}.continuity-heading[_ngcontent-ng-c542921727]{font-size:clamp(.95rem,1.35vw,1.45rem);white-space:nowrap}p[_ngcontent-ng-c542921727]{color:#53657d;line-height:1.68}.hero-lede[_ngcontent-ng-c542921727]{margin-bottom:14px;color:#2b6394;font-size:1.1rem;font-weight:800}.tag-row[_ngcontent-ng-c542921727]{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}.tag-row[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{padding:7px 10px;border:1px solid #bdd5e8;border-radius:5px;color:#225782;background:#eaf4fb;font-size:.78rem;font-weight:800}.hero-image[_ngcontent-ng-c542921727]{margin:0;overflow:hidden;border-radius:10px;background:#173e63;box-shadow:14px 14px #dce7f0}.hero-image[_ngcontent-ng-c542921727]   img[_ngcontent-ng-c542921727]{display:block;width:100%;min-height:370px;aspect-ratio:16 / 10;object-fit:cover;object-position:top center}.outcome-strip[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:repeat(3,1fr);padding:0;overflow:hidden}.outcome-strip[_ngcontent-ng-c542921727]   div[_ngcontent-ng-c542921727]{display:grid;gap:4px;min-height:106px;place-content:center;padding:18px;text-align:center;border-right:1px solid #d5e0ea}.outcome-strip[_ngcontent-ng-c542921727]   div[_ngcontent-ng-c542921727]:last-child{border-right:0}.outcome-strip[_ngcontent-ng-c542921727]   strong[_ngcontent-ng-c542921727]{color:#173e63;font-size:clamp(1.15rem,2vw,1.65rem)}.outcome-strip[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{color:#697485;font-size:.8rem;font-weight:700}.architecture-section[_ngcontent-ng-c542921727], .journey-section[_ngcontent-ng-c542921727], .experience-section[_ngcontent-ng-c542921727]{padding:clamp(24px,4vw,48px)}.section-heading[_ngcontent-ng-c542921727]{margin-bottom:28px}.section-heading[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]:last-child{margin-bottom:0}.scope-grid[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;align-items:stretch}.scope-grid[_ngcontent-ng-c542921727]   article[_ngcontent-ng-c542921727]{display:grid;align-content:start;gap:6px;padding:17px;border:1px solid #d6dce4;border-radius:8px;background:#f8fafc}.scope-grid[_ngcontent-ng-c542921727]   small[_ngcontent-ng-c542921727]{color:#2b6394;font-size:.7rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.scope-grid[_ngcontent-ng-c542921727]   strong[_ngcontent-ng-c542921727]{color:#23364d}.scope-grid[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{color:#53657d;font-size:.8rem;line-height:1.45}.detail-grid[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.detail-grid[_ngcontent-ng-c542921727] > article[_ngcontent-ng-c542921727]{padding:clamp(24px,3vw,40px)}.detail-grid[_ngcontent-ng-c542921727]   ul[_ngcontent-ng-c542921727]{display:grid;gap:9px;margin-bottom:0;padding-left:20px;color:#53657d;line-height:1.55}.journey[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:0;padding:0;list-style:none}.journey[_ngcontent-ng-c542921727]   li[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:auto 1fr;column-gap:8px;align-content:start;min-height:150px;padding:16px;border:1px solid #d6dce4;border-radius:8px;background:#f8fafc}.journey[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{color:#23364d;font-size:1.1rem;font-weight:800}.journey[_ngcontent-ng-c542921727]   strong[_ngcontent-ng-c542921727]{color:#23364d;font-size:1.1rem}.journey[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]{grid-column:1 / -1;margin:7px 0 0;font-size:.82rem;line-height:1.5}.experience-gallery[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.experience-card[_ngcontent-ng-c542921727]{display:grid;gap:12px;align-content:start;min-height:230px;padding:clamp(22px,3vw,34px);border:1px solid #d6dce4;border-radius:10px;color:inherit;background:#f8fafc;text-decoration:none}.experience-card[_ngcontent-ng-c542921727]   .example-label[_ngcontent-ng-c542921727]{color:#2b6394;font-size:.7rem;font-weight:900;letter-spacing:.1em;text-transform:uppercase}.experience-card[_ngcontent-ng-c542921727]   strong[_ngcontent-ng-c542921727]{color:#173e63;font-size:1.35rem}.experience-card[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]{margin:0}.experience-card[_ngcontent-ng-c542921727]   small[_ngcontent-ng-c542921727]{align-self:end;color:#697485;font-weight:800;line-height:1.45}.experience-card[_ngcontent-ng-c542921727]:hover   strong[_ngcontent-ng-c542921727]{color:#235d8d;text-decoration:underline;text-underline-offset:.2rem}.experience-card[_ngcontent-ng-c542921727]:focus-visible{outline:3px solid #24568a;outline-offset:3px}
21.order-section[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]{display:grid;grid-template-columns:minmax(14rem,.72fr) minmax(0,1.25fr);gap:30px;padding:clamp(24px,3vw,38px)}.order-section[_ngcontent-ng-c542921727]{color:#fff;border-color:#173e63;background:#173e63}.order-section[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727], .order-section[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]{color:#fff}.order-section[_ngcontent-ng-c542921727]   .section-label[_ngcontent-ng-c542921727]{color:#a9d4f2}.order-section[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]{margin-bottom:0}.source-links[_ngcontent-ng-c542921727]{display:grid;gap:10px}.source-links[_ngcontent-ng-c542921727]   a[_ngcontent-ng-c542921727]{display:grid;min-height:50px;place-items:center;padding:10px;border:1px solid #bdd1e2;border-radius:6px;color:#235d8d;background:#f7f9fb;font-weight:800;text-align:center}.disclosure[_ngcontent-ng-c542921727]{grid-template-columns:minmax(14rem,.7fr) minmax(0,1.2fr) minmax(14rem,.8fr);background:#eef6fc}.disclosure[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]   p[_ngcontent-ng-c542921727]{margin-bottom:0}@media(min-width:1081px){.hero[_ngcontent-ng-c542921727]   h1[_ngcontent-ng-c542921727]{font-size:clamp(1.8rem,2.8vw,3.3rem);white-space:nowrap}.disclosure[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727]{font-size:clamp(1.15rem,1.5vw,1.6rem)}.disclosure[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{display:block;white-space:nowrap}}@media(max-width:1080px){.hero[_ngcontent-ng-c542921727]{grid-template-columns:1fr}.hero-image[_ngcontent-ng-c542921727]{max-width:760px}.scope-grid[_ngcontent-ng-c542921727], .journey[_ngcontent-ng-c542921727]{grid-template-columns:repeat(2,minmax(0,1fr))}.disclosure[_ngcontent-ng-c542921727]{grid-template-columns:1fr}}@media(max-width:680px){.paint-page[_ngcontent-ng-c542921727]{padding-bottom:28px}.hero[_ngcontent-ng-c542921727], .architecture-section[_ngcontent-ng-c542921727], .journey-section[_ngcontent-ng-c542921727], .experience-section[_ngcontent-ng-c542921727], .order-section[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]{padding:18px}h1[_ngcontent-ng-c542921727]{font-size:clamp(1.45rem,7.2vw,2.2rem);white-space:nowrap}.hero-lede[_ngcontent-ng-c542921727]{font-size:clamp(.72rem,3.2vw,.9rem);white-space:nowrap}#architecture-title[_ngcontent-ng-c542921727]{font-size:clamp(.95rem,4.45vw,1.25rem)}#architecture-title[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{display:block;white-space:nowrap}.continuity-heading[_ngcontent-ng-c542921727]{font-size:clamp(1.1rem,5.25vw,1.5rem)}.continuity-heading[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{display:block;white-space:nowrap}.capabilities-heading[_ngcontent-ng-c542921727]{font-size:clamp(1rem,4.8vw,1.35rem)}.capabilities-heading[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{display:block;white-space:nowrap}.disclosure[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727]{font-size:clamp(1.15rem,5.45vw,1.55rem)}.disclosure[_ngcontent-ng-c542921727]   h2[_ngcontent-ng-c542921727]   span[_ngcontent-ng-c542921727]{display:block;white-space:nowrap}.hero-image[_ngcontent-ng-c542921727]{box-shadow:8px 8px #dce7f0}.tag-row[_ngcontent-ng-c542921727]{justify-content:center}.outcome-strip[_ngcontent-ng-c542921727], .detail-grid[_ngcontent-ng-c542921727], .scope-grid[_ngcontent-ng-c542921727], .journey[_ngcontent-ng-c542921727], .experience-gallery[_ngcontent-ng-c542921727], .order-section[_ngcontent-ng-c542921727], .disclosure[_ngcontent-ng-c542921727]{grid-template-columns:1fr}.outcome-strip[_ngcontent-ng-c542921727]   div[_ngcontent-ng-c542921727]{min-height:82px;border-right:0;border-bottom:1px solid #d5e0ea}.outcome-strip[_ngcontent-ng-c542921727]   div[_ngcontent-ng-c542921727]:last-child{border-bottom:0}.journey[_ngcontent-ng-c542921727]   li[_ngcontent-ng-c542921727]{min-height:0}}</style><style ng-app-id="ng">[_nghost-ng-c2116659892]{display:block;font-size:16px}.breadcrumbs[_ngcontent-ng-c2116659892]{display:flex;align-items:center;gap:.75rem;width:min(100%,1440px);margin:0 auto;padding:1.3rem clamp(1rem,5vw,4rem);color:#465568;font-size:.95rem;line-height:1.25;border-bottom:1px solid #dce3ec}.breadcrumb-home[_ngcontent-ng-c2116659892]{display:inline-flex;align-items:center;justify-content:center;font-size:2rem;line-height:1;color:#315d91;text-decoration:none;transition:color .15s ease,transform .15s ease}.breadcrumb-link[_ngcontent-ng-c2116659892]{color:#315d91;text-decoration:none;transition:color .15s ease,transform .15s ease}.breadcrumb-home[_ngcontent-ng-c2116659892]:hover, .breadcrumb-link[_ngcontent-ng-c2116659892]:hover{color:#1b466f}.breadcrumb-current[_ngcontent-ng-c2116659892]{color:#17263c;font-weight:700}
21.breadcrumb-separator[_ngcontent-ng-c2116659892]{color:#8996a6}@media(min-width:761px){.breadcrumbs[_ngcontent-ng-c2116659892]{padding-block:0}}@media(max-width:700px){.breadcrumbs[_ngcontent-ng-c2116659892]{overflow-x:auto;white-space:nowrap;padding-inline:1rem}}</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 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-paint-reorder-platform _nghost-ng-c542921727 ngh="0"><main _ngcontent-ng-c542921727 class="paint-page"><app-breadcrumbs _ngcontent-ng-c542921727 _nghost-ng-c2116659892 ngh="1"><nav _ngcontent-ng-c2116659892 aria-label="Breadcrumb" class="breadcrumbs"><a _ngcontent-ng-c2116659892 routerlink="/" aria-label="Home" class="breadcrumb-home" href="/" jsaction="click:;"><span _ngcontent-ng-c2116659892 aria-hidden="true">⌂</span></a><span _ngcontent-ng-c2116659892 aria-hidden="true" class="breadcrumb-separator">›</span><a _ngcontent-ng-c2116659892 class="breadcrumb-link" href="/projects/paint-reorder-platform" jsaction="click:;"> Paint Reorder Platform </a><!----><!----><!----><span _ngcontent-ng-c2116659892 aria-hidden="true" class="breadcrumb-separator">›</span><!----><span _ngcontent-ng-c2116659892 class="breadcrumb-current"> Overview </span><!----><!----><!----></nav></app-breadcrumbs><div _ngcontent-ng-c542921727 class="page-shell page-stack"><section _ngcontent-ng-c542921727 class="hero"><div _ngcontent-ng-c542921727 class="hero-copy"><p _ngcontent-ng-c542921727 class="eyebrow">Enterprise commerce platform</p><h1 _ngcontent-ng-c542921727>Paint Reorder Platform</h1><p _ngcontent-ng-c542921727 class="hero-lede">The Home Depot | Paint-platform modernization</p><p _ngcontent-ng-c542921727> I led the architecture and implementation of several paint-platform capabilities supporting online reordering. The work modernized supporting services while maintaining compatibility with existing systems and gave the customer-facing team a stable interface for paint search, configuration, ordering, and purchase history. </p><div _ngcontent-ng-c542921727 aria-label="Project disciplines" class="tag-row"><span _ngcontent-ng-c542921727>Cloud platforms</span><span _ngcontent-ng-c542921727>Service architecture</span><span _ngcontent-ng-c542921727>Data modernization</span><span _ngcontent-ng-c542921727>System integration</span></div></div><figure _ngcontent-ng-c542921727 class="hero-image"><img _ngcontent-ng-c542921727 src="/assets/projects/paint-reorder/product-page-tight.png" alt="Home Depot paint product page showing color, product, paint type, brand, and sheen options"></figure></section><section _ngcontent-ng-c542921727 aria-label="Project scope" class="outcome-strip"><div _ngcontent-ng-c542921727><strong _ngcontent-ng-c542921727>Modernized services</strong><span _ngcontent-ng-c542921727>Existing and modern systems supported</span></div><div _ngcontent-ng-c542921727><strong _ngcontent-ng-c542921727>Stable interface</strong><span _ngcontent-ng-c542921727>Clear capabilities for customer-facing teams</span></div><div _ngcontent-ng-c542921727><strong _ngcontent-ng-c542921727>Visible capabilities</strong><span _ngcontent-ng-c542921727>Search, configure, reorder, and review history</span></div></section><section _ngcontent-ng-c542921727 aria-labelledby="architecture-title" class="architecture-section"><div _ngcontent-ng-c542921727 class="section-heading"><p _ngcontent-ng-c542921727 class="section-label">Engineering scope</p><h2 _ngcontent-ng-c542921727 id="architecture-title"><span _ngcontent-ng-c542921727>Modernized a customer-facing&nbsp;</span><span _ngcontent-ng-c542921727>capability without disrupting service.</span></h2><p _ngcontent-ng-c542921727> I helped evolve the services supporting online paint reordering while preserving compatibility with established systems. The work created a consistent way for the customer-facing experience to use paint search, configuration, ordering, and history. </p></div><div _ngcontent-ng-c542921727 class="scope-grid"><article _ngcontent-ng-c542921727><small _ngcontent-ng-c542921727>Modernize</small><strong _ngcontent-ng-c542921727>Evolve the platform</strong><span _ngcontent-ng-c542921727>Introduced modern capabilities alongside established enterprise systems.</span></article><article _ngcontent-ng-c542921727><small _ngcontent-ng-c542921727>Stabilize</small><strong _ngcontent-ng-c542921727>Define clear interfaces</strong><span _ngcontent-ng-c542921727>Translated paint-domain needs into dependable service capabilities.</span></article><article _ngcontent-ng-c542921727><small _ngcontent-ng-c542921727>Preserve continuity</small><strong _ngcontent-ng-c542921727>Modernize without disruption</strong><span _ngcontent-ng-c542921727>Maintained service continuity throughout a broader modernization effort.</span></article></div></section><section _ngcontent-ng-c542921727 class="detail-grid"><article _ngcontent-ng-c542921727><p _ngcontent-ng-c542921727 class="section-label">Data modernization</p><h2 _ngcontent-ng-c542921727 class="continuity-heading"><span _ngcontent-ng-c542921727>Moved the paint domain forward&nbsp;</span><span _ngcontent-ng-c542921727>without losing continuity.</span></h2><p _ngcontent-ng-c542921727> I helped modernize data workflows supporting paint reordering across multiple existing systems. The work focused on safe migration, continuity, and an information model aligned with customer-visible paint capabilities. </p><ul _ngcontent-ng-c542921727><li _ngcontent-ng-c542921727>Built cloud-based migration processes for data originating in multiple legacy systems.</li><li _ngcontent-ng-c542921727>Supported a staged migration while preserving service continuity.</li><li _ngcontent-ng-c542921727>Modeled information around catalog, configuration, and purchase-history use cases.</li><li _ngcontent-ng-c542921727>Designed for reliability, recoverability, and operational support.</li></ul></article><article _ngcontent-ng-c542921727><p _ngcontent-ng-c542921727 class="section-label">Service interface design</p><h2 _ngcontent-ng-c542921727 class="capabilities-heading"><span _ngcontent-ng-c542921727>Translated paint-domain complexity&nbsp;</span><span _ngcontent-ng-c542921727>into commerce capabilities.</span></h2><p _ngcontent-ng-c542921727> I worked with the paint and customer-facing teams to define the service capabilities needed for a coherent online reorder experience, then helped implement the supporting platform services. </p><ul _ngcontent-ng-c542921727><li _ngcontent-ng-c542921727>Supported paint catalog and color-search capabilities.</li><li _ngcontent-ng-c542921727>Provided brand, container size, sheen, formula, and display information.</li><li _ngcontent-ng-c542921727>Enabled changes to color and other compatible configuration options.
24</li><li _ngcontent-ng-c542921727>Accepted online orders and returned a consistent processing result.</li></ul></article></section><section _ngcontent-ng-c542921727 aria-labelledby="journey-title" class="journey-section"><div _ngcontent-ng-c542921727 class="section-heading"><p _ngcontent-ng-c542921727 class="section-label">Customer journey enabled</p><h2 _ngcontent-ng-c542921727 id="journey-title">Enough detail to confidently buy the same paint again.</h2><p _ngcontent-ng-c542921727> Paint is not a single SKU choice. A reorder depends on the exact combination of color, formula, brand, product, sheen, and container size, plus pricing and fulfillment context. </p></div><ol _ngcontent-ng-c542921727 class="journey"><li _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>01</span><strong _ngcontent-ng-c542921727>Find</strong><p _ngcontent-ng-c542921727>Search saved colors and paint catalog information.</p></li><li _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>02</span><strong _ngcontent-ng-c542921727>Configure</strong><p _ngcontent-ng-c542921727>Select compatible brand, size, sheen, and formula.</p></li><li _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>03</span><strong _ngcontent-ng-c542921727>Review</strong><p _ngcontent-ng-c542921727>Confirm the paint configuration and order details.</p></li><li _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>04</span><strong _ngcontent-ng-c542921727>Order</strong><p _ngcontent-ng-c542921727>Submit the request and receive a clear result.</p></li><li _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>05</span><strong _ngcontent-ng-c542921727>Remember</strong><p _ngcontent-ng-c542921727>Make purchase information available for future use.</p></li></ol></section><section _ngcontent-ng-c542921727 aria-labelledby="experience-title" class="experience-section"><div _ngcontent-ng-c542921727 class="section-heading"><p _ngcontent-ng-c542921727 class="section-label">Customer-facing examples</p><h2 _ngcontent-ng-c542921727 id="experience-title">From a configured product to a remembered purchase.</h2><p _ngcontent-ng-c542921727> These links point to public Home Depot pages illustrating the customer-facing use cases described here. </p></div><div _ngcontent-ng-c542921727 class="experience-gallery"><a _ngcontent-ng-c542921727 href="https://www.homedepot.com/p/BEHR-PREMIUM-PLUS-1-gal-Designer-Collection-DC-010-Even-Better-Beige-Eggshell-Enamel-Low-Odor-Interior-Paint-Primer-205001/320626862" target="_blank" rel="noopener noreferrer" class="experience-card"><span _ngcontent-ng-c542921727 class="example-label">Public product example</span><strong _ngcontent-ng-c542921727>Online paint configuration</strong><p _ngcontent-ng-c542921727>See how product, color, container size, brand, paint type, and sheen appear in a public listing.</p><small _ngcontent-ng-c542921727>View on homedepot.com ↗</small></a><a _ngcontent-ng-c542921727 href="https://www.homedepot.com/c/view-your-purchase-history" target="_blank" rel="noopener noreferrer" class="experience-card"><span _ngcontent-ng-c542921727 class="example-label">Public service overview</span><strong _ngcontent-ng-c542921727>Purchase history</strong><p _ngcontent-ng-c542921727>See the public experience for finding orders, reviewing purchases, and buying again.</p><small _ngcontent-ng-c542921727>View on homedepot.com ↗</small></a></div></section><section _ngcontent-ng-c542921727 class="order-section"><div _ngcontent-ng-c542921727><p _ngcontent-ng-c542921727 class="section-label">Order integration</p><h2 _ngcontent-ng-c542921727>Connected online reordering to enterprise order processing.</h2></div><p _ngcontent-ng-c542921727> I integrated the online experience with existing enterprise ordering capabilities. The platform validated configured paint orders, coordinated downstream processing, updated the customer's saved paint information, and returned a consistent result to the customer-facing application. </p></section><section _ngcontent-ng-c542921727 class="disclosure"><div _ngcontent-ng-c542921727><p _ngcontent-ng-c542921727 class="section-label">Public case-study boundary</p><h2 _ngcontent-ng-c542921727><span _ngcontent-ng-c542921727>Paint-platform ownership,</span><span _ngcontent-ng-c542921727>responsibly presented.</span></h2></div><p _ngcontent-ng-c542921727> The Home Depot and related product names are trademarks of their respective owners. This independent portfolio is not affiliated with or endorsed by The Home Depot. The description reflects my personal work experience and excludes source code, proprietary specifications, nonpublic metrics, customer information, and operational procedures. I worked on the paint-platform capabilities described here, not the homedepot.com user interface. </p><div _ngcontent-ng-c542921727 class="source-links"><a _ngcontent-ng-c542921727 href="https://corporate.homedepot.com/news/products/new-technology-shows-you-perfect-paint-color-its-your-walls" target="_blank" rel="noopener noreferrer">Project Color overview</a><a _ngcontent-ng-c542921727 href="https://www.homedepot.com/b/Paint-Paint-Colors/N-5yc1vZcaw8" target="_blank" rel="noopener noreferrer">Current paint catalog</a></div></section></div></main></app-paint-reorder-platform><!----><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#3b7854554f5a584f7b7154535579525e55525e5015585456">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":{"4":"t1"},"c":{"4":[{"i":"t1","r":5,"e":{"0":4},"t":{"3":"t2","4":"t3"},"c":{"3":[{"i":"t2","r":1}],"4":[]}},{"i":"t1","r":5,"e":{"0":4},"t":{"3":"t2","4":"t3"},"c":{"3":[],"4":[{"i":"t3","r":1}]}}]}},{"c":{"1":[{"i":"c542921727","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.