Fix post dates: 2025 -> 2026 (dirs, links, canonicals, display)

This commit is contained in:
Your Name
2026-08-23 07:05:38 -04:00
parent be153848cd
commit ec987f24f0
5 changed files with 19 additions and 19 deletions
@@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Introducing Simcoe Trades Journal - Showcasing Local Craftsmanship</title>
<meta name="description" content="I'm excited to launch Simcoe Trades Journal, a new platform dedicated to highlighting verified local contractors, real project case studies, and exceptional craftsmanship across Barrie, Orillia, Severn, and Simcoe County.">
<link rel="stylesheet" href="/css/main.css">
<link rel="canonical" href="http://krisforbes.ca/2026/07/31/simcoe-trades-journal-launch.html">
<link rel="alternate" type="application/rss+xml" title="Kris Forbes Blog" href="http://krisforbes.ca/feed.xml">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7J4BKPGWR1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7J4BKPGWR1');
</script>
</head>
<body>
<header class="site-header" role="banner">
<div class="wrapper">
<a class="site-title" href="/">Kris Forbes Blog</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
<a class="page-link" href="/about/">About</a>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-label="Content">
<div class="wrapper">
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">Introducing Simcoe Trades Journal - Showcasing Local Craftsmanship</h1>
<p class="post-meta"><time datetime="2026-07-31T00:00:00-04:00" itemprop="datePublished">Jul 31, 2026</time></p>
</header>
<div class="post-content" itemprop="articleBody">
<p>I'm excited to announce the launch of <a href="https://simcoetradesjournal.ca">Simcoe Trades Journal</a> — a new platform dedicated to highlighting the skilled tradespeople who build, repair, and transform our communities across Simcoe County.</p>
<p>After years of working in tech infrastructure, I've always admired the craftsmanship that goes into the physical world around us. The local contractors, roofers, and carpenters in our region consistently deliver exceptional work — yet they rarely get the spotlight their work deserves.</p>
<h2>What is Simcoe Trades Journal?</h2>
<p>Simcoe Trades Journal is an independent trade journal and directory that showcases:</p>
<ul>
<li><strong>Verified contractor profiles</strong> — Every listed business is vetted and confirmed as a local Simcoe County operation.</li>
<li><strong>Detailed case studies</strong> — In-depth project breakdowns with full specifications and photo documentation, giving homeowners and businesses a real sense of the quality and scope of work.</li>
<li><strong>Craftsmanship spotlights</strong> — Features on the techniques, materials, and expertise that go into commercial roofing, residential installations, and custom timber work.</li>
</ul>
<h2>Who We're Featuring</h2>
<p>At launch, Simcoe Trades Journal is spotlighting three outstanding local contractors:</p>
<p><strong>Midhurst Roofing</strong> — Based in Barrie, specializing in commercial flat roofing, TPO membranes, and industrial repair across Simcoe County. Their recent work includes a complete TPO flat roof restoration at a Barrie industrial facility.</p>
<p><strong>Severn Roofing &amp; Contracting</strong> — Serving Orillia and Severn with expertise in high-wind architectural shingle installations, emergency repairs, and copper flashings. Their recent Lake Couchiching architectural shingle overhaul with custom copper valleys is a standout project.</p>
<p><strong>Sean Pro Contracting</strong> — A custom timber framing and carpentry specialist across Simcoe County. From heavy timber pavilions to cedar soffits and outdoor living structures, their craftsmanship is truly exceptional. Their recent Douglas Fir heavy timber porch build with a full cedar ceiling is a masterclass in custom carpentry.</p>
<h2>Coverage Area</h2>
<p>Simcoe Trades Journal covers <strong>Barrie, Orillia, Severn, and the greater Simcoe County region</strong>. Whether you're looking for commercial roofing solutions, residential roof replacements, or custom carpentry work, the journal connects you with verified local experts who know the region's unique building challenges — from harsh lake-effect winters to the specific architectural styles of our heritage communities.</p>
<h2>Why This Matters</h2>
<p>Homeowners and business owners deserve better than a generic Google search when it comes to finding qualified tradespeople. Simcoe Trades Journal provides:</p>
<ul>
<li><strong>Real project documentation</strong> — Not stock photos, but actual before-and-after work with full project specifications.</li>
<li><strong>Local expertise</strong> — Contractors who understand Simcoe County's climate, building codes, and architectural heritage.</li>
<li><strong>Transparency</strong> — Every listing is verified. Every case study is real work, real contractors, real results.</li>
</ul>
<p>The site is built on Jekyll and hosted on DigitalOcean — same stack as this blog. Clean, fast, and designed to showcase the work that matters.</p>
<p>Check it out at <a href="https://simcoetradesjournal.ca"><strong>simcoetradesjournal.ca</strong></a> and let's give our local tradespeople the recognition they've earned.</p>
</div>
</article>
</div>
</main>
<footer class="site-footer">
<div class="wrapper">
<h2 class="footer-heading">Kris Forbes Blog</h2>
<div class="footer-col-wrapper">
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li>Kris Forbes Blog</li>
</ul>
</div>
<div class="footer-col footer-col-2">
<ul class="social-media-list">
<li>
<a href="https://github.com/krisf"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
</span><span class="username">krisf</span></a>
</li>
<li>
<a href="https://twitter.com/forbes_kris"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
</span><span class="username">forbes_kris</span></a>
</li>
</ul>
</div>
<div class="footer-col footer-col-3">
<p>Kris Forbes - Personal blog covering experiences with tech such as Docker, Azure, OVH, Linux, Windows, etc.</p>
</div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,155 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Why Hiring a Trusted Local Contractor Matters for Your Simcoe County Project</title>
<meta name="description" content="Finding the right local contractor in Simcoe County protects your investment, ensures quality work, and supports family-owned businesses. Learn why going local matters for construction and renovation projects.">
<link rel="stylesheet" href="/css/main.css">
<link rel="canonical" href="http://krisforbes.ca/2026/08/03/why-hire-a-trusted-local-contractor.html">
<link rel="alternate" type="application/rss+xml" title="Kris Forbes Blog" href="http://krisforbes.ca/feed.xml">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7J4BKPGWR1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7J4BKPGWR1');
</script>
</head>
<body>
<header class="site-header" role="banner">
<div class="wrapper">
<a class="site-title" href="/">Kris Forbes Blog</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
<a class="page-link" href="/about/">About</a>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-label="Content">
<div class="wrapper">
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">Why Hiring a Trusted Local Contractor Matters for Your Simcoe County Project</h1>
<p class="post-meta"><time datetime="2026-08-03T00:00:00-04:00" itemprop="datePublished">Aug 3, 2026</time></p>
</header>
<div class="post-content" itemprop="articleBody">
<p>When it comes to construction, renovation, or any major home improvement project, the decision of who to hire is just as important as the work itself. In Simcoe County, where harsh winters, lake-effect weather, and unique architectural heritage present real challenges, choosing a local contractor isn't just a preference — it's the smartest move you can make for your investment.</p>
<h2>Local contractors know the region</h2>
<p>There's a reason family-owned contracting businesses have served communities like Barrie, Orillia, Severn, and Midhurst for decades. They understand the specific demands of building in Simcoe County. They know how our freeze-thaw cycles affect foundations, how lake winds impact roofing systems, and what materials hold up best against our climate. That local knowledge is something no national franchise can replicate.</p>
<p>A contractor who has worked extensively in the area has already solved the problems you're likely to face. They've seen what works, what doesn't, and how to build things right the first time. That experience translates directly into better workmanship, fewer callbacks, and a project that stands the test of time.</p>
<h2>Accountability and reputation matter</h2>
<p>When you hire a local, family-owned business, you're hiring someone whose reputation is built on word of mouth within the community. They live here. Their family lives here. Their future depends on the quality of work they deliver to their neighbours. That level of accountability doesn't exist with fly-in crews or faceless corporations.</p>
<p>A trusted local contractor has skin in the game. They want you to be happy because they want your recommendation. They want your project to be the one they talk about at the hardware store. That personal investment in their craft is what separates exceptional work from mediocre results.</p>
<h2>Supporting the local economy</h2>
<p>Every dollar spent with a local contractor circulates within the community. Family-owned businesses hire local labour, buy from local suppliers, and contribute to the tax base that supports our schools, roads, and emergency services. When you choose to work with a Simcoe County contractor, you're not just getting quality work — you're investing in the community you call home.</p>
<p>Too often, homeowners search online and pick the first result that comes up, never realizing that a highly qualified contractor is right down the road. The local tradespeople in our region consistently deliver exceptional work, yet they rarely get the visibility their work deserves. That's a shame for homeowners who could be getting a better experience right in their own backyard.</p>
<h2>Communication and accessibility</h2>
<p>Working with a local contractor means easier communication, faster response times, and someone who can be on-site when you need them. There's no time zone difference, no language barrier, and no corporate call centre standing between you and the person managing your project. When something comes up — and it always does — you can reach your contractor directly.</p>
<p>This is especially important during the project itself. Construction rarely goes exactly according to plan, and having a contractor who is responsive, communicable, and willing to work with you through unexpected challenges makes all the difference between a stressful experience and a smooth one.</p>
<h2>How to find a verified local contractor</h2>
<p>The challenge is finding a contractor you can trust. Online reviews can be misleading, and a polished website doesn't guarantee quality work. What you need is a resource that showcases real projects, verified local businesses, and documented case studies so you can see exactly what a contractor has done before you hire them.</p>
<p>That's why I created <a href="https://simcoetradesjournal.ca">Simcoe Trades Journal</a> — an independent platform dedicated to highlighting verified local contractors across Simcoe County. Every business listed is vetted and confirmed as a local operation. Every case study features real projects with full specifications and photo documentation. Whether you're looking for commercial roofing, residential renovation, or custom carpentry, the journal connects you with contractors who have proven track records in our community.</p>
<p>Don't settle for the first name you find online. Take the time to find a local contractor you can trust — your project, your investment, and your peace of mind are worth it. Check out <a href="https://simcoetradesjournal.ca"><strong>simcoetradesjournal.ca</strong></a> to discover verified contractors in the Barrie, Orillia, Severn, and greater Simcoe County area.</p>
</div>
</article>
</div>
</main>
<footer class="site-footer">
<div class="wrapper">
<h2 class="footer-heading">Kris Forbes Blog</h2>
<div class="footer-col-wrapper">
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li>Kris Forbes Blog</li>
</ul>
</div>
<div class="footer-col footer-col-2">
<ul class="social-media-list">
<li>
<a href="https://github.com/krisf"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
</span><span class="username">krisf</span></a>
</li>
<li>
<a href="https://twitter.com/forbes_kris"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
</span><span class="username">forbes_kris</span></a>
</li>
</ul>
</div>
<div class="footer-col footer-col-3">
<p>Kris Forbes - Personal blog covering experiences with tech such as Docker, Azure, OVH, Linux, Windows, etc.</p>
</div>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Red Flags to Watch for When Hiring a Contractor in Simcoe County</title>
<meta name="description" content="Avoid costly mistakes when hiring a contractor. Learn the warning signs that separate reliable local tradespeople from the rest, and how to verify a contractor's track record in Simcoe County.">
<link rel="stylesheet" href="/css/main.css">
<link rel="canonical" href="http://krisforbes.ca/2026/08/04/red-flags-when-hiring-a-contractor.html">
<link rel="alternate" type="application/rss+xml" title="Kris Forbes Blog" href="http://krisforbes.ca/feed.xml">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7J4BKPGWR1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7J4BKPGWR1');
</script>
</head>
<body>
<header class="site-header" role="banner">
<div class="wrapper">
<a class="site-title" href="/">Kris Forbes Blog</a>
<nav class="site-nav">
<a href="#" class="menu-icon">
<svg viewBox="0 0 18 15">
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
</svg>
</a>
<div class="trigger">
<a class="page-link" href="/about/">About</a>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-label="Content">
<div class="wrapper">
<article class="post" itemscope itemtype="http://schema.org/BlogPosting">
<header class="post-header">
<h1 class="post-title" itemprop="name headline">Red Flags to Watch for When Hiring a Contractor in Simcoe County</h1>
<p class="post-meta"><time datetime="2026-08-04T00:00:00-04:00" itemprop="datePublished">Aug 4, 2026</time></p>
</header>
<div class="post-content" itemprop="articleBody">
<p>Every year, homeowners across Simcoe County fall victim to contractors who overpromise and underdeliver. A shoddy roof job that leaks in the first winter, a deck that sags within a season, or a renovation that runs months behind schedule and double the quoted price — these aren't just inconveniences. They're costly mistakes that could have been avoided with a little due diligence.</p>
<p>The construction industry is full of operators who show up, take your deposit, and disappear. Knowing what to look for before you sign a contract is the single best way to protect yourself. Here are the red flags that separate the pros from the rest.</p>
<h2>No verifiable project history</h2>
<p>One of the first things a reputable contractor will have is a portfolio of completed work. If they can't show you photos of past projects, can't tell you about the scope and specifications of what they've done, or can't provide references from previous clients, that's a major warning sign.</p>
<p>Legitimate contractors are proud of their work. They'll gladly walk you through their recent projects, explain the challenges they faced, and show you the results. If a contractor is vague about their experience or deflects when you ask to see examples, it's usually because they don't have anything substantial to show.</p>
<p>This is why I built <a href="https://simcoetradesjournal.ca">Simcoe Trades Journal</a> — a platform where every contractor is verified and every listing includes detailed case studies with full project specifications and photo documentation. It's the kind of transparency that should be standard across the industry.</p>
<h2>Pressure to pay upfront</h2>
<p>A contractor who demands a large deposit — especially cash — before any work begins is raising a serious red flag. Standard practice in Ontario is a deposit of around one-third of the total project cost, with progress payments tied to completed milestones. Anyone asking for full payment upfront is gambling with your money.</p>
<p>Legitimate contractors work on a payment schedule that protects both parties. They'll provide a detailed written contract outlining the scope of work, materials, timeline, and payment terms. If they're reluctant to put anything in writing or push you to make a quick decision, walk away.</p>
<h2>No local presence</h2>
<p>While this isn't always a dealbreaker on its own, a contractor who doesn't have a physical presence in the area is harder to hold accountable. They won't be around when something goes wrong, and they won't have the local knowledge that makes a difference in our climate.</p>
<p>Simcoe County has specific building challenges. The freeze-thaw cycles near Lake Simcoe and Lake Couchiching require roofing materials and installation techniques that a contractor from Toronto or the GTA might not be familiar with. Local contractors understand these nuances because they deal with them every day.</p>
<p>When you hire locally, you're hiring someone who understands the regional building codes, knows which suppliers carry the right materials, and has a reputation to protect within the community. A contractor who lives in Barrie isn't going to risk their standing in Orillia by cutting corners.</p>
<h2>Poor communication</h2>
<p>Pay attention to how a contractor communicates during the quoting process. If they're slow to return calls, vague in their estimates, or unwilling to answer your questions before you hire them, that communication problem will only get worse once the project starts.</p>
<p>Good contractors listen. They'll ask about your timeline, your budget, and your expectations. They'll explain what's realistic and what isn't. They'll provide a clear, itemized quote rather than a vague ballpark figure. If the initial conversation feels rushed or dismissive, that's a preview of the experience you're signing up for.</p>
<h2>Unrealistically low bids</h2>
<p>If one contractor's bid is significantly lower than the others, there's a reason. They're either cutting corners on materials, underestimating the scope of work, or planning to hit you with change orders once they're already on the job.</p>
<p>Quality materials cost money, and skilled labour costs money. A contractor who can deliver exceptional work at a fraction of the market rate is simply lying. Get at least three quotes, and when one stands out as suspiciously cheap, ask yourself what they're not telling you.</p>
<h2>How to find a contractor you can trust</h2>
<p>The best defence against a bad contractor is doing your homework before you start calling. Look for businesses with documented project histories, verified local presence, and real client references. Check their work, not just their reviews — anyone can post a five-star review, but not everyone can show you a completed project.</p>
<p>That's exactly what <a href="https://simcoetradesjournal.ca">Simcoe Trades Journal</a> is designed to do. It's a curated directory of verified contractors across Barrie, Orillia, Severn, and Simcoe County, with detailed case studies that show real work, real specifications, and real results. No fluff, no stock photos, no guesswork — just the information you need to make an informed decision.</p>
<p>Your home is your biggest investment. Don't leave it in the hands of someone you haven't properly vetted. Take the time to find a contractor with a proven track record, and you'll save yourself from headaches, extra costs, and substandard work. Visit <a href="https://simcoetradesjournal.ca"><strong>simcoetradesjournal.ca</strong></a> to browse verified local contractors and see their actual project portfolios before you make your choice.</p>
</div>
</article>
</div>
</main>
<footer class="site-footer">
<div class="wrapper">
<h2 class="footer-heading">Kris Forbes Blog</h2>
<div class="footer-col-wrapper">
<div class="footer-col footer-col-1">
<ul class="contact-list">
<li>Kris Forbes Blog</li>
</ul>
</div>
<div class="footer-col footer-col-2">
<ul class="social-media-list">
<li>
<a href="https://github.com/krisf"><span class="icon icon--github"><svg viewBox="0 0 16 16"><path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/></svg>
</span><span class="username">krisf</span></a>
</li>
<li>
<a href="https://twitter.com/forbes_kris"><span class="icon icon--twitter"><svg viewBox="0 0 16 16"><path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/></svg>
</span><span class="username">forbes_kris</span></a>
</li>
</ul>
</div>
<div class="footer-col footer-col-3">
<p>Kris Forbes - Personal blog covering experiences with tech such as Docker, Azure, OVH, Linux, Windows, etc.</p>
</div>
</div>
</div>
</footer>
</body>
</html>
+107
View File
@@ -0,0 +1,107 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>My Adventures Running Large Language Models Locally</title>
<meta name="description" content="A practical, opinion-free account of what it takes to run a 27-billion-parameter LLM on local hardware — model quantization, Ollama quirks, and the patience tax.">
<meta property="og:title" content="My Adventures Running Large Language Models Locally">
<meta property="og:description" content="What it takes to run a 27-billion-parameter LLM on local hardware — quantization, Ollama quirks, and the patience tax.">
<meta property="og:type" content="article">
<meta property="og:url" content="https://krisforbes.ca/2026/08/05/local-llm-adventures.html">
<link rel="canonical" href="https://krisforbes.ca/2026/08/05/local-llm-adventures.html">
<link rel="stylesheet" href="/css/main.css">
<link rel="canonical" href="https://krisforbes.ca/2026/08/05/local-llm-adventures.html">
<link rel="alternate" type="application/rss+xml" title="https://krisforbes.ca" href="/feed.xml">
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7J4BKPGWR1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-7J4BKPGWR1');
</script>
</head>
<body>
<header class="site-header" role="banner">
<div class="wrapper">
<a class="site-title" href="/">Kris Forbes</a>
<nav class="site-nav">
<input type="checkbox" id="nav-trigger" class="nav-trigger" />
<label for="nav-trigger">
<span class="menu-icon">
<svg viewBox="0 0 18 15" width="18px" height="15px">
<path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.695,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
</svg>
</span>
</label>
<div class="trigger">
<a class="page-link" href="/">Blog</a>
</div>
</nav>
</div>
</header>
<main class="page-content" aria-role="main">
<div class="wrapper">
<article class="post">
<header class="post-header">
<h1 class="post-title">My Adventures Running Large Language Models Locally</h1>
<p class="post-meta">Aug 5, 2026</p>
</header>
<div class="post-content">
<p>A couple of years ago I ran my AI experiments through hosted APIs: fast, easy, and entirely out of my control — on privacy, cost, and availability. A while back I decided to move the heavy lifting onto my own hardware, and since then my "cloud bill" has been a power meter and an ongoing education in what running a real, 27-billion-parameter language model at home actually involves. This is a (non-sensitive) tour of that journey.</p>
<h2 id="quantization">The Model Was Too Big, So I Made It Smaller</h2>
<p>Full-precision copies of modern open-weight models don't fit on consumer GPUs — not even close. The answer is <strong>quantization</strong>: compressing the model's internal weights to lower-precision numbers. The GGUF container format has become the de facto standard for this, and the naming is its own little cryptic language. A filename like <code>Qwen3.6-27B-UD-Q5_K_XL</code> tells you everything: a 27-billion-parameter model, quantized to 5-bit with a K-quant scheme, in an "extra large" variant that keeps a few sensitive layers at higher precision to protect quality. You trade raw fidelity for fit — and the sweet spot on my hardware turned out to be right around 5-bit, where output quality is genuinely impressive and the model actually loads in a reasonable amount of memory.</p>
<h2 id="ollama">Serving: Ollama's Good, but It Has Quirks</h2>
<p>For actually running the model I've been serving it with <a href="https://ollama.com" rel="noopener">Ollama</a>, which wraps model downloads, quantization, and inference behind a clean local API. It has been mostly great — but I've hit quirks that cost me real debugging time.</p>
<p>The most maddening: pulling a fresh GGUF for the first time triggers a <em>materialization</em> step — Ollama fetches, verifies, and unpacks the multi-gigabyte file into a usable model. During that window (which can take <em>hours</em> depending on your link), any request for the model returns a dead <code>404 — model does not exist</code>. It's not a typo. The model is mid-flight. If you catch several pull processes racing each other at once, the state gets even murkier. The correct response, learned the hard way, is to <strong>leave it alone</strong> and come back later — killing and restarting the pull just resets the clock and wastes another hour of bandwidth.</p>
<p>That single lesson — <em>when in doubt, wait</em> — is worth more to me than any tuning knob, because impatience is exactly what made it so expensive to discover.</p>
<h2 id="frontends">A Front End Worth Having</h2>
<p>A raw API endpoint is not a product. I put <a href="https://openwebui.com" rel="noopener">Open WebUI</a> in front of the local model for a proper chat experience, complete with document upload and retrieval-augmented generation. Pairing it with a small local embedding model means my documents get chunked, embedded, and stored on my own box too — so "ask your documents" is genuinely private. The combination of a big local chat model plus a small local embedder turned out to be a very satisfying self-contained stack.</p>
<h2 id="patience">The Patience Tax</h2>
<p>Honest accounting: running a 27B model locally is not faster than a frontier API. First-token times are measured in seconds, not milliseconds, and a long document takes its time. What you get in return is <strong>sovereignty</strong> — no per-token meter, no data leaving the building, no provider outage between you and your own words, and a system that behaves identically at 2 a.m. as it does at noon.</p>
<p>The adventures have been less about raw capability — the local model is good enough for the work I give it — and more about learning the operational side: quantization formats, serving quirks, embedding pipelines, and the discipline of not poking a multi-hour download in the head. For anyone considering their own local stack, I'd say: pick the middle quantization, use Ollama, put a UI in front of it, and budget your patience in hours. The payoff is a system that is entirely yours.</p>
<p><em>— Kris</em></p>
</div>
<a class="u-url" href="/2026/08/05/local-llm-adventures.html" rel="permalink">Permalink</a>
</article>
</div>
</main>
<footer class="site-footer">
<div class="wrapper">
<h2 class="footer-heading">Kris Forbes</h2>
<div class="footer-col-wrapper">
<div class="footer-col">
<ul class="contact-list">
<li>Kris Forbes</li>
</ul>
</div>
</div>
</div>
</footer>
</body>
</html>