<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mike Kipruto</title>
    <description>The latest articles on Forem by Mike Kipruto (@kipmyk).</description>
    <link>https://forem.com/kipmyk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F57542%2F1e94feba-6ab1-4b29-a844-d455df1402ea.jpg</url>
      <title>Forem: Mike Kipruto</title>
      <link>https://forem.com/kipmyk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kipmyk"/>
    <language>en</language>
    <item>
      <title>High-Performance WordPress Development: Architectural Lessons from the mike.co.ke Rebrand</title>
      <dc:creator>Mike Kipruto</dc:creator>
      <pubDate>Fri, 08 May 2026 06:59:15 +0000</pubDate>
      <link>https://forem.com/kipmyk/high-performance-wordpress-development-architectural-lessons-from-the-mikecoke-rebrand-20pp</link>
      <guid>https://forem.com/kipmyk/high-performance-wordpress-development-architectural-lessons-from-the-mikecoke-rebrand-20pp</guid>
      <description>&lt;h2&gt;
  
  
  High-Performance WordPress Development: Architectural Lessons from the mike.co.ke Rebrand
&lt;/h2&gt;

&lt;p&gt;WordPress has a performance problem, and we refused to be part of it.&lt;/p&gt;

&lt;p&gt;During the recent rebranding of &lt;strong&gt;&lt;a href="https://mike.co.ke/" rel="noopener noreferrer"&gt;mike.co.ke&lt;/a&gt;&lt;/strong&gt;, we executed a ruthless technical audit of our custom plugins and themes. We discovered the silent killers of site speed: heavy PHP loops, bloated 3rd-party JavaScript libraries, and unoptimized DOM manipulation. &lt;/p&gt;

&lt;p&gt;Instead of slapping a caching plugin on top of bad code, we treated performance as a strict architectural requirement. We rebuilt our core tools—including our custom analytics dashboard—from the ground up. The results were massive:&lt;/p&gt;

&lt;h3&gt;
  
  
  The Rebrand Results at a Glance
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before (Standard Architecture)&lt;/th&gt;
&lt;th&gt;After (Zero-Bloat Architecture)&lt;/th&gt;
&lt;th&gt;Improvement&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JS Bundle Size&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~240KB&lt;/td&gt;
&lt;td&gt;~12KB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;95% Reduction&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database TTFB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;600ms (Heavy SQL Grouping)&lt;/td&gt;
&lt;td&gt;45ms (Raw JSON)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;92% Faster&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Client Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;500MB+ (Leaking over time)&lt;/td&gt;
&lt;td&gt;Stable ~40MB&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Eliminated Leaks&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;(Note: Dropping our JS payload by 95% wasn't magic. We simply ripped out heavy dependencies like Chart.js and Moment.js, replacing them entirely with native browser APIs.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdb3o8yxzz3ynz9k5pmp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdb3o8yxzz3ynz9k5pmp.png" alt="Zero-Bloat Architecture" width="626" height="850"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnpc62sfrr7sluouhgzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgnpc62sfrr7sluouhgzb.png" alt="Standard Architecture" width="622" height="864"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a technical breakdown of the performance-first strategies we implemented, complete with actionable code for your own WordPress projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Escaping the 3rd-Party Library Trap
&lt;/h2&gt;

&lt;p&gt;The most common mistake in modern development is loading massive external libraries for localized UI problems. Enqueuing libraries like &lt;em&gt;Slick.js&lt;/em&gt; or &lt;em&gt;Chart.js&lt;/em&gt; adds parsing time, render-blocking latency, and plugin conflicts. &lt;/p&gt;

&lt;h3&gt;
  
  
  Native SVG vs. Canvas Libraries
&lt;/h3&gt;

&lt;p&gt;In our legacy plugin, we loaded a 200KB charting library just to draw simple trend lines. By utilizing the browser's &lt;strong&gt;Native SVG API&lt;/strong&gt;, we reduced our external graphing dependency to &lt;strong&gt;0 bytes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When data spikes massively, standard graph curves "oversteer" like a race car taking a corner too fast, creating ugly loops. To fix this natively, we implemented a concise &lt;strong&gt;Monotonic Bézier&lt;/strong&gt; algorithm. It mathematically forces the curve to stay strictly between data points—no overshoots, no dips.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// AFTER: Zero-dependency SVG generation using Monotonic Bezier&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;generateSmoothPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`M &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;p0&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;p1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

        &lt;span class="c1"&gt;// The midX control point mathematically guarantees ZERO vertical overshoot&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;midX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s2"&gt;` C &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;midX&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;midX&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;p1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is an ultra-smooth line generated entirely by the browser's GPU in microseconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Offloading Server-Side PHP to the Client GPU
&lt;/h2&gt;

&lt;p&gt;WordPress developers often force MySQL to aggregate data before sending it to the client. Running massive &lt;code&gt;GROUP BY&lt;/code&gt; queries on 50,000+ row log tables on every page load destroys server response times.&lt;/p&gt;

&lt;h3&gt;
  
  
  Client-Side Array Chunking
&lt;/h3&gt;

&lt;p&gt;Our legacy SQL query took &lt;strong&gt;600ms&lt;/strong&gt; to execute. By shifting this logic to the client, our raw query takes just &lt;strong&gt;45ms&lt;/strong&gt;. We ship a lightweight JSON payload and let the client’s GPU/CPU do the heavy lifting via native JavaScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// If we have over 90 days of data, down-sample natively on the client&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;activeDataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;90&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;downsampled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;

    &lt;span class="c1"&gt;// Chunk the array into 7-day blocks&lt;/span&gt;
    &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;activeDataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;activeDataset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;aggregatedValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;downsampled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;aggregatedValue&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;activeDataset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;downsampled&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Client-side chunking keeps the UI highly responsive while drastically lowering server compute costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Eradicating DOM Thrashing and Memory Leaks
&lt;/h2&gt;

&lt;p&gt;If you build dynamic interfaces within the WordPress admin, memory management is critical. A common anti-pattern is constantly destroying and recreating HTML elements (e.g., &lt;code&gt;element.innerHTML = newTable&lt;/code&gt;). This aggressive "DOM thrashing" forces layout recalculations and triggers garbage collection spikes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hardware-Accelerated Interactions
&lt;/h3&gt;

&lt;p&gt;Our old dashboard leaked RAM, eventually hitting 500MB+ in prolonged sessions. By preventing node destruction, memory now idles at a stable ~40MB.&lt;/p&gt;

&lt;p&gt;Never destroy elements for interactive states like tooltips. Render a single hidden &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; once, and move it using CSS absolute positioning.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// BAD: Thrashing the DOM on every mouse move&lt;/span&gt;
&lt;span class="nx"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmousemove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;div class="tooltip" style="left:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientX&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px"&amp;gt;Data&amp;lt;/div&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// GOOD: Hardware-accelerated movement of a single, persistent node&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;tooltipNode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;persistent-tooltip&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;svg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onmousemove&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;tooltipNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;block&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;// Modifying absolute coordinates triggers a lightweight GPU composite update&lt;/span&gt;
    &lt;span class="nx"&gt;tooltipNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;left&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientX&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;tooltipNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;top&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientY&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;px`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;tooltipNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getDynamicData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientX&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Modern CSS Architecture for Layout Stability
&lt;/h2&gt;

&lt;p&gt;Visual bugs and Cumulative Layout Shifts (CLS) occur when developers rely on fragile CSS hacks—such as pairing &lt;code&gt;justify-content: space-between&lt;/code&gt; with &lt;code&gt;margin-left: auto&lt;/code&gt;. When dynamic content hydrates, these containers often collapse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strict Flex Gaps
&lt;/h3&gt;

&lt;p&gt;Stop relying on the browser to guess your spacing. Enforce strict &lt;code&gt;gap&lt;/code&gt; parameters on flex containers to mathematically guarantee safe spacing, eliminating layout jitter during AJAX requests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Fragile: Prone to collapsing when content hydrates */&lt;/span&gt;
&lt;span class="nc"&gt;.admin-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;space-between&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.admin-header&lt;/span&gt; &lt;span class="nc"&gt;.legend&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Bulletproof: Mathematically guaranteed layout stability */&lt;/span&gt;
&lt;span class="nc"&gt;.admin-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Takeaways for High-Performance WordPress Development
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Dependency UI:&lt;/strong&gt; Stop loading 200KB libraries for simple UI features. Use Vanilla JS and native browser APIs (like SVG) wherever possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client-Side Aggregation:&lt;/strong&gt; Offload heavy data grouping from MySQL/PHP to the client's GPU using JavaScript array methods to drastically reduce TTFB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware-Accelerated DOM:&lt;/strong&gt; Never destroy and recreate DOM nodes for interactive states. Use persistent nodes and CSS absolute positioning (&lt;code&gt;style.left&lt;/code&gt;/&lt;code&gt;style.top&lt;/code&gt;) to trigger GPU composite updates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bulletproof CSS:&lt;/strong&gt; Prevent Cumulative Layout Shifts (CLS) by abandoning fragile &lt;code&gt;auto-margins&lt;/code&gt; in favor of strict &lt;code&gt;gap&lt;/code&gt; spacing in Flexbox and Grid.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building for WordPress means taking responsibility for both the server and the browser. High performance isn't a caching plugin you install right before launch—it is a deliberate, line-by-line architectural choice. &lt;/p&gt;

&lt;p&gt;When you respect the browser and abandon bloat, you can build WordPress tools that feel as instantaneous and premium as custom enterprise software.&lt;/p&gt;

</description>
      <category>performance</category>
      <category>wordpress</category>
      <category>plugin</category>
      <category>optimization</category>
    </item>
    <item>
      <title>Offline Qwen3 AI Coding Setup for VS Code – No Internet, No Cost, Full Privacy</title>
      <dc:creator>Mike Kipruto</dc:creator>
      <pubDate>Thu, 07 May 2026 19:16:54 +0000</pubDate>
      <link>https://forem.com/kipmyk/offline-qwen3-ai-coding-setup-for-vs-code-no-internet-no-cost-full-privacy-1585</link>
      <guid>https://forem.com/kipmyk/offline-qwen3-ai-coding-setup-for-vs-code-no-internet-no-cost-full-privacy-1585</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyd4kowhaedjokhu6nz5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyd4kowhaedjokhu6nz5.png" alt="Offline Qwen3 AI Coding Assistant" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run a powerful, private AI coding assistant on your laptop — completely offline.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No API keys. No monthly fees. No telemetry. Your code never leaves your machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  What You'll Get
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent code generation, refactoring, debugging, and explanation&lt;/li&gt;
&lt;li&gt;Support for Python, JavaScript, TypeScript, Go, Rust, Java, C++, PHP, SQL, and more&lt;/li&gt;
&lt;li&gt;Works on airplanes, remote sites, air-gapped networks, or when internet is down&lt;/li&gt;
&lt;li&gt;Full privacy and zero cost after initial setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requirement&lt;/th&gt;
&lt;th&gt;Minimum&lt;/th&gt;
&lt;th&gt;Recommended&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating System&lt;/td&gt;
&lt;td&gt;macOS 12+, Windows 10/11, Linux&lt;/td&gt;
&lt;td&gt;Latest macOS / Windows 11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RAM&lt;/td&gt;
&lt;td&gt;8 GB&lt;/td&gt;
&lt;td&gt;16 GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disk Space&lt;/td&gt;
&lt;td&gt;6 GB&lt;/td&gt;
&lt;td&gt;10 GB+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;td&gt;Latest version&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPU (Optional)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;NVIDIA 6GB+ / Apple Silicon&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Step-by-Step Setup
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Step 1: Install Ollama
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;macOS / Linux&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://ollama.com/install.sh | sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Download the installer from &lt;a href="https://ollama.com/download" rel="noopener noreferrer"&gt;ollama.com/download&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2: Download Qwen3 8B Model
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull qwen3:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(≈5.2 GB – This is the &lt;strong&gt;only&lt;/strong&gt; step that needs internet)&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Install Continue.dev in VS Code
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Open VS Code&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Extensions&lt;/strong&gt; (&lt;code&gt;Ctrl/Cmd + Shift + X&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;"Continue"&lt;/strong&gt; (by Continue Dev, Inc. — blue spiral icon)&lt;/li&gt;
&lt;li&gt;Install it&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Step 4: Configure Continue for Local Qwen3
&lt;/h4&gt;

&lt;p&gt;Press &lt;code&gt;Ctrl/Cmd + Shift + P&lt;/code&gt; → search &lt;strong&gt;"Continue: Open Config File"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replace everything with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"models"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Qwen3-8B (Code)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3:8b"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"contextLength"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32768&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"completionOptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"temperature"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"maxTokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4096&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tabAutocompleteModel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Qwen3-8B Autocomplete"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ollama"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3:8b"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5: Test It Offline
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Open Continue sidebar (&lt;code&gt;Ctrl/Cmd + Shift + L&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Qwen3-8B (Code)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Turn off your internet completely&lt;/li&gt;
&lt;li&gt;Type in the chat: &lt;code&gt;"Write a fast Python function to validate email addresses"&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If it responds, your offline setup is working perfectly.&lt;/p&gt;




&lt;h3&gt;
  
  
  Useful Daily Workflows
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Review&lt;/strong&gt;: &lt;code&gt;@Current File&lt;/code&gt; + "Review this function for bugs, security issues and performance"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refactoring&lt;/strong&gt;: Highlight code → &lt;code&gt;Ctrl/Cmd + Shift + I&lt;/code&gt; → "Refactor with proper error handling and type hints"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Generation&lt;/strong&gt;: "Write comprehensive pytest tests covering edge cases"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster responses&lt;/strong&gt;: Set temperature to &lt;code&gt;0.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deeper analysis&lt;/strong&gt;: Type &lt;code&gt;/think&lt;/code&gt; in the chat&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hardware Performance Guide
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Hardware&lt;/th&gt;
&lt;th&gt;Tokens/sec&lt;/th&gt;
&lt;th&gt;Experience&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Apple M1/M2 (16GB)&lt;/td&gt;
&lt;td&gt;18–28&lt;/td&gt;
&lt;td&gt;Very Good&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA RTX 3060 / 4060&lt;/td&gt;
&lt;td&gt;25–45&lt;/td&gt;
&lt;td&gt;Excellent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NVIDIA RTX 4090&lt;/td&gt;
&lt;td&gt;50–80+&lt;/td&gt;
&lt;td&gt;Near Instant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Only (8-core)&lt;/td&gt;
&lt;td&gt;2–6&lt;/td&gt;
&lt;td&gt;Usable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Troubleshooting
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Issue&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Model not appearing&lt;/td&gt;
&lt;td&gt;Save config → Reload VS Code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow generation&lt;/td&gt;
&lt;td&gt;Check GPU usage (&lt;code&gt;nvidia-smi&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ollama not running&lt;/td&gt;
&lt;td&gt;Run &lt;code&gt;ollama serve&lt;/code&gt; in terminal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connection refused&lt;/td&gt;
&lt;td&gt;Restart Ollama desktop app&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  Why This Setup Matters in 2026
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Complete &lt;strong&gt;privacy&lt;/strong&gt; for client or proprietary code&lt;/li&gt;
&lt;li&gt;Zero recurring costs&lt;/li&gt;
&lt;li&gt;True offline capability anywhere&lt;/li&gt;
&lt;li&gt;Full control over your AI tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is currently one of the strongest local AI coding setups available.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Originally published on &lt;a href="https://mike.co.ke/ai/offline-qwen3-vs-code-setup/" rel="noopener noreferrer"&gt;mike.co.ke&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow me for more practical WordPress, AI, and development guides.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ollama</category>
      <category>qwen</category>
      <category>offline</category>
    </item>
    <item>
      <title>WP CLI Commands</title>
      <dc:creator>Mike Kipruto</dc:creator>
      <pubDate>Wed, 17 May 2023 12:40:50 +0000</pubDate>
      <link>https://forem.com/kipmyk/wp-cli-commands-2hcm</link>
      <guid>https://forem.com/kipmyk/wp-cli-commands-2hcm</guid>
      <description>&lt;p&gt;This is a list of the WP CLI commands. As I test it out, I am updating the lists here.&lt;/p&gt;

&lt;h2&gt;
  
  
  WP Core 
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.wordpress.org/cli/commands/core/"&gt;&lt;code&gt;wp core&lt;/code&gt;&lt;/a&gt; command helps to download, install, update, and manage WordPress installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delete the core updater lock option
&lt;/h2&gt;

&lt;p&gt;wp option delete core_updater.lock&lt;/p&gt;

&lt;h2&gt;
  
  
  Update WordPress to Specific version forcefully
&lt;/h2&gt;

&lt;p&gt;wp core update --version= --force&lt;/p&gt;

&lt;p&gt;For example : &lt;code&gt;wp core update --version=6.1.1 --force&lt;/code&gt;, this will update to the WP 6.1.1&lt;/p&gt;

&lt;h2&gt;
  
  
  Display the WordPress version
&lt;/h2&gt;

&lt;p&gt;wp core version&lt;/p&gt;

&lt;h2&gt;
  
  
  Checks for WordPress updates via Version Check API.
&lt;/h2&gt;

&lt;p&gt;wp core check-update&lt;/p&gt;

&lt;h2&gt;
  
  
  Update the WordPress database
&lt;/h2&gt;

&lt;p&gt;wp core update-db&lt;/p&gt;

&lt;h2&gt;
  
  
  wp theme 
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.wordpress.org/cli/commands/theme/"&gt;&lt;code&gt;wp theme&lt;/code&gt;&lt;/a&gt; helps in managing themes, including installs, activations, and updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update multiple default themes from wordpress.org
&lt;/h2&gt;

&lt;p&gt;wp theme update twentynineteen twentytwenty twentytwentyone twentytwentytwo twentytwentythree&lt;/p&gt;

&lt;h2&gt;
  
  
  Delete older default themes
&lt;/h2&gt;

&lt;p&gt;wp theme delete twentysixteen twentyseventeen&lt;/p&gt;

&lt;h2&gt;
  
  
  Update all themes
&lt;/h2&gt;

&lt;p&gt;wp theme update --all&lt;/p&gt;

&lt;h2&gt;
  
  
  Install the new default theme
&lt;/h2&gt;

&lt;p&gt;wp theme install twentytwentyone&lt;/p&gt;

&lt;h2&gt;
  
  
  wp theme search
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.wordpress.org/cli/commands/theme/search/"&gt;&lt;code&gt;wp theme search&lt;/code&gt;&lt;/a&gt; searches the WordPress.org theme directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;wp theme search photo --per-page=6&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  wp theme get
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://developer.wordpress.org/cli/commands/theme/get/"&gt;&lt;code&gt;wp theme get&lt;/code&gt;&lt;/a&gt; Gets details about a theme.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;wp theme get twentytwentythree --fields=name,title,version&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/kipmyk/WP-CLI-Commands"&gt;WP CLI Commands&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
