1<!DOCTYPE html><html lang="en" class="no-js"> <head><!-- Google tag (gtag.js) -->
vendor: 63 bytes, line 1
1<script async src="https://www.googletagmanager.com/gtag/js?id=
1G-L42YFKQQX1
vendor: 11 bytes, line 1
1"></script>
1<script> 2
vendor: 163 bytes, lines 2-8
2window.dataLayer = window.dataLayer || []; 3 function gtag() { 4 dataLayer.push(arguments); 5 } 6 gtag("js", new Date()); 7 8 gtag("config", "
8G-L42YFKQQX1
vendor: 8 bytes, lines 8-9
8"); 9
9</script>
9<meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Quiet Forge Software | Products | Websites, Apps, & Games</title><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, user-scalable=yes"><meta name="description" content="The products I have built or am building. This includes websites, apps, extensions, games, and anything else that I have built or am actively dabbling in."><meta name="author" content="Dru Harrison"><link rel="shortcut icon" href="/favicon.svg"><link rel="sitemap" href="/sitemap-index.xml"><link rel="canonical" href="https://www.quietforgesoftware.com/products/"><link rel="alternate" href="https://www.quietforgesoftware.com/products/" hreflang="en"><link rel="alternate" href="https://www.quietforgesoftware.com/ja/products/" hreflang="ja"><link rel="alternate" href="https://www.quietforgesoftware.com/products/" hreflang="x-default">
9<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://www.quietforgesoftware.com/#website","url":"https://www.quietforgesoftware.com/","name":"Quiet Forge Software","description":"Building and Encouraging Others","publisher":{"@type":"Organization","@id":"https://www.quietforgesoftware.com/#organization"},"inLanguage":"en"},{"@type":"Organization","@id":"https://www.quietforgesoftware.com/#organization","name":"Quiet Forge Software LLC","url":"https://www.quietforgesoftware.com/","logo":"https://www.quietforgesoftware.com/favicon.svg","founder":{"@id":"https://www.quietforgesoftware.com/#person"},"knowsAbout":["Software Development","DevOps","Infrastructure as Code","Kubernetes","Terraform","Docker","Linux","C#","SwiftUI","JavaScript","SQL"],"sameAs":["https://www.linkedin.com/in/dru-harrison-2372b658/","https://x.com/QuietFSoftware","https://www.tiktok.com/@quietforgesoftwar"]},{"@type":"Person","@id":"https://www.quietforgesoftware.com/#person","name":"Dru Harrison","url":"https://www.quietforgesoftware.com/about/","jobTitle":"DevOps Engineer","alumniOf":{"@type":"CollegeOrUniversity","name":"Colorado School of Mines"},"worksFor":{"@id":"https://www.quietforgesoftware.com/#organization"},"knowsAbout":["Software Development","DevOps","Infrastructure as Code","Kubernetes","Terraform","Docker","Linux","C#","SwiftUI","JavaScript","SQL"],"skills":["Kubernetes","Terraform","Docker","Linux","NGINX","HAProxy","Prometheus","GitHub Actions","Azure DevOps","SwiftUI","C#","JavaScript","SQL"],"sameAs":["https://www.linkedin.com/in/dru-harrison-2372b658/","https://x.com/QuietFSoftware","https://www.tiktok.com/@quietforgesoftwar"]}]}</script>
9<link rel="stylesheet" href="/css/normalize.css" type="text/css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/css/bootstrap.min.css" type="text/css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/css/owl.carousel.css" type="text/css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/css/magnific-popup.css" type="text/css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/css/fonts/linear-icons-font/style.css" type="text/css" media="print" onload="this.media='all'"><link rel="stylesheet" href="/css/fonts/fontawesome-free-5.12.1-web/css/all.min.css" type="text/css"><link rel="stylesheet" href="/css/fonts/linecons/lineicons-free.css" type="text/css">
9<script src="/js/modernizr.custom.js"></script>
9<link rel="stylesheet" href="/_astro/main.CvQAF2X6.css"></head> <body class="page"> <div class="lm-animated-bg"></div> <!-- Loading animation --> <div class="preloader"> <div class="preloader-animation"> <div class="preloader-spinner"></div> </div> </div> <!-- /Loading animation --> <!-- Scroll To Top Button --> <div class="lmpixels-scroll-to-top"><i class="lnr lnr-chevron-up"></i></div> <!-- /Scroll To Top Button --> <div class="page-scroll"> <div id="page_container" class="page-container bg-move-effect" data-animation="transition-flip-in-right"> <!-- Header --> <header id="site_header" class="header"> <div class="header-content clearfix"> <div class="row"> <div class="col"> <!-- Text Logo --> <div class="text-logo"> <a href="/"> <div class="logo-symbol">QFS</div> <div class="logo-text">Quiet Forge Software</div> </a> </div> <!-- /Text Logo --> </div> <!-- language picker start --> <!-- <div class="col-auto ms-auto"> 10 <div class="language-picker"> 11 <form> 12 <label 13 for="lang-select" 14 style="margin-right:0.5rem; margin-left:0.5rem;">Language:</label 15 > 16 <select 17 id="lang-select" 18 onchange=" 19 let path = window.location.pathname 20 if (this.value === 'ja' && !window.location.pathname.startsWith('/ja')) { 21 path = '/ja' + path 22 window.location.pathname = path 23 } 24 if (this.value === 'en' && window.location.pathname.startsWith('/ja/')) { 25 path = path.slice(3) 26 window.location.pathname = path; 27 } 28 " 29 > 30 <option value="en" selected={currentLocale === "en"}>English</option 31 > 32 <option value="ja" selected={currentLocale === "ja"}>æ¥æ¬èª</option> 33 </select> 34 </form> 35 </div> 36 </div> --> <!--language picker end--> </div> <!-- Navigation --> <div class="site-nav mobile-menu-hide"> <ul class="leven-classic-menu site-main-menu"> <li class="menu-item"> <a href="/">Home</a> </li> <li class="menu-item"> <a href="/about/">About Me</a> </li> <li class="menu-item"> <a href="/resume/">Resume</a> </li> <li class="menu-item"> <a href="/services/">Services</a> </li> <li class="menu-item current-menu-item"> <a href="/products/">Products</a> </li> <li class="menu-item"> <a href="/articles/"> Articles</a> </li> <li class="menu-item"> <a href="/resources/"> Resources</a> </li> <li class="menu-item"> <a href="/tools/"> Tools</a> </li> <li class="menu-item"> <a href="/contact/"> Contact Me</a> </li> </ul> </div> <!-- Mobile Menu Toggle --> <a class="menu-toggle mobile-visible"> <i class="fa fa-bars"></i> </a> <!-- Mobile Menu Toggle --> </div> </header> <!-- /Header -->
36<script type="application/ld+json">{"@context":"https://schema.org","@type":"CollectionPage","name":"Products","description":"The products I have built or am building. This includes websites, apps, extensions, games, and anything else that I have built or am actively dabbling in.","url":"https://www.quietforgesoftware.com/products/","mainEntity":{"@type":"ItemList"}}</script>
36 <div id="main" class="site-main"> <div id="main-content" class="single-page-content"> <div id="primary" class="content-area"> <div class="page-title"> <h1>Products</h1> <div class="page-subtitle"> <h4>My Products</h4> </div> </div> <div id="content" class="page-content site-content single-post" role="main"> <div class="row"> <div class=" col-xs-12 col-sm-12 "> <!-- Portfolio Content --> <div id="portfolio_content_q" class="portfolio-content"> <ul class="portfolio-filters"> <li class="active"> <a class="filter btn btn-sm btn-link" data-group="category_all">All</a> </li> <li> <a class="filter btn btn-sm btn-link" data-group="category_website">Websites</a> </li> <li> <a class="filter btn btn-sm btn-link" data-group="category_web_extension">Web Extensions</a> </li> <li> <a class="filter btn btn-sm btn-link" data-group="category_mobile_app">Mobile Apps</a> </li> </ul> <!-- Portfolio Grid --> <div class="portfolio-grid three-columns shuffle"> <!-- Portfolio Item 1 --> <figure class="item standard" data-groups="["category_all","category_website"]"> <div class="portfolio-item-img"> <picture> <source srcset="/_astro/wheatridgeappliancerepair-01.C-CEDrG6_ZMQXbz.avif 360w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_Z1K47bU.avif 540w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_2mURBF.avif 720w" type="image/avif" sizes="(max-width: 767px) 100vw, 50vw"><source srcset="/_astro/wheatridgeappliancerepair-01.C-CEDrG6_2vRGkN.webp 360w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_1yFxks.webp 540w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_Btok7.webp 720w" type="image/webp" sizes="(max-width: 767px) 100vw, 50vw"> <img src="/_astro/wheatridgeappliancerepair-01.C-CEDrG6_Z1axgPY.jpg" srcset="/_astro/wheatridgeappliancerepair-01.C-CEDrG6_ATaVI.jpg 360w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_ZlhX3C.jpg 540w, /_astro/wheatridgeappliancerepair-01.C-CEDrG6_Z1iu73X.jpg 720w" alt="Wheat Ridge Appliance Repair" title="Wheat Ridge Appliance Repair" sizes="(max-width: 767px) 100vw, 50vw" loading="eager" fetchpriority="high" decoding="async" width="2750" height="1518"> </picture> <a href="/Products/wheatridgeappliancerepair/" class="ajax-page-load" data-ajax-url="/Products/ajax/wheatridgeappliancerepair/"></a> </div> <i class="far fa-file-alt"></i> <h4 class="name">WheatRidge Appliance Repair</h4> <span class="category">Websites</span> </figure> <!-- /Portfolio Item 1 --> <figure class="item standard" data-groups="["category_all","category_web_extension"]"> <div class="portfolio-item-img"> <picture> <source srcset="/_astro/social-balance-overlay-healthy.O7a9izrX_2v70he.avif 360w, /_astro/social-balance-overlay-healthy.O7a9izrX_tIl4p.avif 512w" type="image/avif" sizes="(max-width: 767px) 100vw, 50vw"><source srcset="/_astro/social-balance-overlay-healthy.O7a9izrX_JEvYF.webp 360w, /_astro/social-balance-overlay-healthy.O7a9izrX_Z1gI8d9.webp 512w" type="image/webp" sizes="(max-width: 767px) 100vw, 50vw"> <img src="/_astro/social-balance-overlay-healthy.O7a9izrX_qt5rf.png" srcset="/_astro/social-balance-overlay-healthy.O7a9izrX_2rQJE4.png 360w, /_astro/social-balance-overlay-healthy.O7a9izrX_qt5rf.png 512w" alt="Social Balance health bar at the bottom of x.com" title="Social Balance" sizes="(max-width: 767px) 100vw, 50vw" loading="eager" fetchpriority="high" decoding="async" width="512" height="308"> </picture> <a href="/Products/socialbalance/" class="ajax-page-load" data-ajax-url="/Products/ajax/socialbalance/"></a> </div> <i class="far fa-file-alt"></i> <h4 class="name">Social Balance</h4> <span class="category">Web Extensions</span> </figure> <figure class="item standard" data-groups="["category_all","category_mobile_app"]"> <div class="portfolio-item-img"> <picture> <source srcset="/_astro/make-me-workout-icon.CEp_cZ2h_1BzErU.avif 360w, /_astro/make-me-workout-icon.CEp_cZ2h_1UNmcS.avif 512w" type="image/avif" sizes="(max-width: 767px) 100vw, 50vw"><source srcset="/_astro/make-me-workout-icon.CEp_cZ2h_Z2k10H4.webp 360w, /_astro/make-me-workout-icon.CEp_cZ2h_Z20MiW6.webp 512w" type="image/webp" sizes="(max-width: 767px) 100v
36w, 50vw"> <img src="/_astro/make-me-workout-icon.CEp_cZ2h_ZP8WCE.png" srcset="/_astro/make-me-workout-icon.CEp_cZ2h_Z19mEnC.png 360w, /_astro/make-me-workout-icon.CEp_cZ2h_ZP8WCE.png 512w" alt="Make Me Workout app interface" title="Make Me Workout" sizes="(max-width: 767px) 100vw, 50vw" loading="eager" fetchpriority="high" decoding="async" width="512" height="512"> </picture> <a href="/Products/makemeworkout/" class="ajax-page-load" data-ajax-url="/Products/ajax/makemeworkout/"></a> </div> <i class="far fa-file-alt"></i> <h4 class="name">Make Me Workout</h4> <span class="category">Mobile Apps</span> </figure> <!-- 37 <ProductCard 38 groups={["category_all", "category_video", "category_youtube-video"]} 39 imageSrc="./img/portfolio/2.jpg" 40 imageAlt="YouTube Video 2" 41 imageTitle="" 42 isInternalLink={false} 43 linkUrl="https://www.youtube.com/embed/F-1weFCiYBA" 44 linkClassName="lightbox mfp-iframe" 45 linkTitle="YouTube Video 2" 46 figureClassName="item lbvideo" 47 > 48 <i class="fab fa-youtube"></i> 49 <h4 class="name">YouTube Video 2</h4> 50 <span class="category">Video, YouTube Video</span> 51 </ProductCard> 52 <ProductCard 53 groups={["category_all", "category_image"]} 54 imageSrc="./img/portfolio/3.jpg" 55 imageAlt="Image 2" 56 imageTitle="" 57 isInternalLink={false} 58 linkUrl="./img/portfolio/full/3.jpg" 59 linkClassName="lightbox" 60 linkTitle="Image 2" 61 figureClassName="item lbimage" 62 > 63 <i class="fa fa-image"></i> 64 <h4 class="name">Image 2</h4> 65 <span class="category">Image</span> 66 </ProductCard> 67 <ProductCard 68 groups={["category_all", "category_soundcloud"]} 69 imageSrc="./img/portfolio/4.jpg" 70 imageAlt="SoundCloud Audio 1" 71 imageTitle="" 72 isInternalLink={false} 73 linkUrl="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/221650664&color=%23ff5500&auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true" 74 linkClassName="lightbox mfp-iframe" 75 linkTitle="SoundCloud Audio 1" 76 figureClassName="item lbaudio" 77 > 78 <i class="fas fa-volume-up"></i> 79 <h4 class="name">SoundCloud Audio 1</h4> 80 <span class="category">SoundCloud</span> 81 </ProductCard> 82 <ProductCard 83 groups={["category_all", "category_video", "category_vimeo-video"]} 84 imageSrc="./img/portfolio/5.jpg" 85 imageAlt="Vimeo Video" 86 imageTitle="" 87 isInternalLink={false} 88 linkUrl="https://player.vimeo.com/video/158284739" 89 linkClassName="lightbox mfp-iframe" 90 linkTitle="Vimeo Video" 91 figureClassName="item lbvideo" 92 > 93 <i class="fab fa-vimeo-v"></i> 94 <h4 class="name">Vimeo Video</h4> 95 <span class="category">Video, Vimeo Video</span> 96 </ProductCard> 97 <ProductCard 98 groups={["category_all", "category_video", "category_youtube-video"]} 99 imageSrc="./img/portfolio/6.jpg" 100 imageAlt="YouTube Video 1" 101 imageTitle="" 102 isInternalLink={false} 103 linkUrl="https://www.youtube.com/embed/ZK8REu-8pGw" 104 linkClassName="lightbox mfp-iframe" 105 linkTitle="YouTube Video 1" 106 figureClassName="item lbvideo" 107 > 108 <i class="fab fa-youtube"></i> 109 <h4 class="name">YouTube Video 1</h4>
110 <span class="category">Video, YouTube Video</span> 111 </ProductCard> 112 <ProductCard 113 groups={["category_all", "category_detailed"]} 114 imageSrc="./img/portfolio/7.jpg" 115 imageAlt="Full Project 1" 116 imageTitle="" 117 isInternalLink={true} 118 linkUrl="portfolio-project-1.html" 119 figureClassName="item standard" 120 > 121 <i class="far fa-file-alt"></i> 122 <h4 class="name">Full Project 1</h4> 123 <span class="category">Detailed</span> 124 </ProductCard> 125 <ProductCard 126 groups={["category_all", "category_direct-url"]} 127 imageSrc="./img/portfolio/8.jpg" 128 imageAlt="Direct URL" 129 imageTitle="" 130 isInternalLink={false} 131 linkUrl="https://themeforest.net/user/lmpixels/portfolio" 132 figureClassName="item direct" 133 > 134 <i class="fa fa-link"></i> 135 <h4 class="name">Direct URL</h4> 136 <span class="category">Direct URL</span> 137 </ProductCard> 138 <ProductCard 139 groups={["category_all", "category_image"]} 140 imageSrc="./img/portfolio/9.jpg" 141 imageAlt="Image 1" 142 imageTitle="" 143 isInternalLink={false} 144 linkUrl="./img/portfolio/full/5.jpg" 145 linkClassName="lightbox" 146 linkTitle="Image 1" 147 figureClassName="item lbimage" 148 > 149 <i class="fa fa-image"></i> 150 <h4 class="name">Image 1</h4> 151 <span class="category">Image</span> 152 </ProductCard> --> </div> <!-- /Portfolio Content --> </div> </div> </div> </div> </div> </div> </div> <!-- Footer --> <footer class="site-footer clearfix"> <div class="footer-social"> <ul class="footer-social-links"> <li> <a href="https://www.linkedin.com/in/dru-harrison-2372b658/" target="_blank" rel="noopener noreferrer nofollow">LinkedIn</a> </li> <li> <a href="https://x.com/QuietFSoftware" target="_blank" rel="noopener noreferrer nofollow">X</a> </li> <li> <a href="https://www.instagram.com/quietforgesoftware/" target="_blank" rel="noopener noreferrer nofollow">Instagram</a> </li> <li> <a href="https://www.tiktok.com/@quietforgesoftwar" target="_blank" rel="noopener noreferrer nofollow">TikTok</a> </li> </ul> </div> <div class="footer-copyrights"> <p>© 2026 All rights reserved.</p> </div> </footer> <!-- /Footer --> </div> </div>
152<script src="/js/jquery-3.5.1.min.js" defer></script>
152
152<script src="/js/imagesloaded.pkgd.min.js" defer></script>
152
152<script src="/js/bootstrap.bundle.min.js" defer></script>
152
152<script src="/js/jquery.shuffle.min.js" defer></script>
152
152<script src="/js/masonry.pkgd.min.js" defer></script>
152
152<script src="/js/owl.carousel.min.js" defer></script>
152
152<script src="/js/jquery.magnific-popup.min.js" defer></script>
152
152<script src="/js/validator.js" defer></script>
152
152<script type="module" src="/_astro/BaseLayout.astro_astro_type_script_index_0_lang.Ch3MZQiG.js"></script>
152 </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.