<?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>DEV Community: Gavin Builds</title>
    <description>The latest articles on DEV Community by Gavin Builds (@gavinbuildsai).</description>
    <link>https://dev.to/gavinbuildsai</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4025869%2Fc56f77ab-c1d1-4095-8296-147321382de9.png</url>
      <title>DEV Community: Gavin Builds</title>
      <link>https://dev.to/gavinbuildsai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gavinbuildsai"/>
    <language>en</language>
    <item>
      <title>Three Browser Tools I Am Validating Through Real User Actions</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Tue, 11 Aug 2026 23:48:21 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/three-browser-tools-i-am-validating-through-real-user-actions-576h</link>
      <guid>https://dev.to/gavinbuildsai/three-browser-tools-i-am-validating-through-real-user-actions-576h</guid>
      <description>&lt;p&gt;I stopped treating page count as progress and narrowed eight browser tools to three validation tracks.  ## 1. LivePhotoKit: prove conversion and download behavior  &lt;a href="https://livephotokit.com/livp-to-jpg/" rel="noopener noreferrer"&gt;LivePhotoKit&lt;/a&gt; handles LIVP and image conversion in the browser. The current experiment measures conversion starts, successful output, downloads, and share actions instead of adding more generic pages.  ## 2. iWorkViewer: prove that files actually open  &lt;a href="https://iworkviewer.com/" rel="noopener noreferrer"&gt;iWorkViewer&lt;/a&gt; helps users inspect Pages, Numbers, and Keynote files without installing iWork. The next useful signal is successful file opening and repeat use, not another deployment badge.  ## 3. InvoicePad: prove invoice completion before payment  &lt;a href="https://invoicepad.net/" rel="noopener noreferrer"&gt;InvoicePad&lt;/a&gt; is testing whether moving Print / Save PDF next to the desktop preview increases completed invoice actions. Payment stays blocked until users actually generate PDFs, reuse drafts, or ask for paid features.  The common rule is simple: keep all products online, focus measurement on the three with the clearest path to real use, and change one variable at a time.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What 119 Search Clicks Taught Me About Three Browser Tools</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Tue, 11 Aug 2026 03:50:20 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/what-119-search-clicks-taught-me-about-three-browser-tools-2lem</link>
      <guid>https://dev.to/gavinbuildsai/what-119-search-clicks-taught-me-about-three-browser-tools-2lem</guid>
      <description>&lt;p&gt;I run a small portfolio of browser tools and recently stopped treating deployment as success. The latest 28-day Search Console window showed &lt;strong&gt;119 clicks and 19,368 impressions&lt;/strong&gt; across eight sites, but the useful lesson came from three very different behaviors.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. InvoicePad: visits without completion
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://invoicepad.net/" rel="noopener noreferrer"&gt;InvoicePad&lt;/a&gt; had 20 active users in the last seven days, but the &lt;code&gt;invoice_pdf_started&lt;/code&gt; event was still zero. Instead of adding more templates, I changed one product variable: a second &lt;strong&gt;Print / Save PDF&lt;/strong&gt; action is now visible at the top of the live preview. The original editor button stays in place, and both placements report a source value so the next review can show which one works.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. LivePhotoKit: specific file intent beats generic copy
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://livephotokit.com/livp-to-jpg/" rel="noopener noreferrer"&gt;LivePhotoKit's LIVP-to-JPG converter&lt;/a&gt; already had a real query signal: &lt;code&gt;livp to jpg&lt;/code&gt; produced 57 impressions and 2 clicks. The current experiment changes only the search-result title to match that exact task. Download and share actions are tracked separately from page visits.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. iWorkViewer: access is the job
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://iworkviewer.com/keynote-viewer/" rel="noopener noreferrer"&gt;iWorkViewer&lt;/a&gt; recorded 38 clicks and 3,110 impressions. The product is not trying to replace an office suite. Its job is simpler: help someone inspect a Pages, Numbers, or Keynote file on a device without Apple's desktop apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  The operating rule
&lt;/h2&gt;

&lt;p&gt;For the next 7?14 days I am not adding a ninth site, mass-producing pages, or changing several variables at once. The review will focus on completed tool actions, repeat visits, and whether the single change moved behavior?not whether another deployment returned HTTP 200.&lt;/p&gt;

&lt;p&gt;Small tools become useful products when measurement changes what you build next.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Open Pages, Numbers, and Keynote Files on Android</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Mon, 10 Aug 2026 02:08:04 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/how-to-open-pages-numbers-and-keynote-files-on-android-41pi</link>
      <guid>https://dev.to/gavinbuildsai/how-to-open-pages-numbers-and-keynote-files-on-android-41pi</guid>
      <description>&lt;p&gt;Google Search Console showed a clear pattern across iWorkViewer this week: people are not searching for "iWork support". They are searching for a specific outcome on a specific device.&lt;/p&gt;

&lt;p&gt;The strongest visible queries included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;open pages file on android&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;how to open keynote file in android&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;how to open a numbers file on android&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;keynote viewer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pages online viewer&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matters because &lt;code&gt;.pages&lt;/code&gt;, &lt;code&gt;.numbers&lt;/code&gt;, and &lt;code&gt;.key&lt;/code&gt; files are still awkward outside Apple's ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical answer
&lt;/h2&gt;

&lt;p&gt;If you only need to inspect an Apple iWork file and do not want to install desktop software, use an online viewer that processes the file for the task you actually need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://iworkviewer.com/" rel="noopener noreferrer"&gt;iWorkViewer&lt;/a&gt; provides browser-based entry points for Pages, Numbers, and Keynote files.&lt;/p&gt;

&lt;h2&gt;
  
  
  A simple workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Identify the extension: &lt;code&gt;.pages&lt;/code&gt;, &lt;code&gt;.numbers&lt;/code&gt;, or &lt;code&gt;.key&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open the matching viewer.&lt;/li&gt;
&lt;li&gt;Select the file from your device.&lt;/li&gt;
&lt;li&gt;Check the rendered content before sharing or converting it further.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For Android users, this avoids hunting for an unofficial app just to inspect one file.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the search data changed
&lt;/h2&gt;

&lt;p&gt;The site currently has 38 clicks and 3,110 impressions in the latest 28-day GSC window. The useful lesson is not the traffic number. It is that device-specific intent is more concrete than a generic "file viewer" promise.&lt;/p&gt;

&lt;p&gt;I am not creating dozens of location or device variants. I am using the real queries to improve how the existing tool is explained, then waiting for enough data before changing another variable.&lt;/p&gt;

&lt;p&gt;Try the existing tool here: &lt;a href="https://iworkviewer.com/" rel="noopener noreferrer"&gt;Open Apple iWork files online&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Crawled 743 URLs Across 8 AI-Built Tool Sites — Here Is What Broke</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Sat, 08 Aug 2026 04:53:03 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/i-crawled-743-urls-across-8-ai-built-tool-sites-here-is-what-broke-1kba</link>
      <guid>https://dev.to/gavinbuildsai/i-crawled-743-urls-across-8-ai-built-tool-sites-here-is-what-broke-1kba</guid>
      <description>&lt;h1&gt;
  
  
  I Crawled 743 URLs Across 8 AI-Built Tool Sites — Here Is What Broke
&lt;/h1&gt;

&lt;p&gt;A homepage returning 200 does not mean a site is healthy. Today I ran a full crawl across eight free browser tools and checked every sitemap URL for HTTP status, redirects, canonical tags, noindex, missing titles, missing descriptions, missing H1s, duplicate text and orphan pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio result
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site&lt;/th&gt;
&lt;th&gt;Sitemap URLs&lt;/th&gt;
&lt;th&gt;Clicks&lt;/th&gt;
&lt;th&gt;Impressions&lt;/th&gt;
&lt;th&gt;CTR&lt;/th&gt;
&lt;th&gt;Avg position&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://iworkviewer.com/open-pages-file-android/" rel="noopener noreferrer"&gt;iWorkViewer&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;3,580&lt;/td&gt;
&lt;td&gt;1.3%&lt;/td&gt;
&lt;td&gt;31.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://livephotokit.com/send-live-photo-as-gif-whatsapp/" rel="noopener noreferrer"&gt;LivePhotoKit&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;2,140&lt;/td&gt;
&lt;td&gt;2.4%&lt;/td&gt;
&lt;td&gt;26.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://plantingcalendar.net/zones/8a/" rel="noopener noreferrer"&gt;PlantingCalendar&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;375&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;4,100&lt;/td&gt;
&lt;td&gt;0.3%&lt;/td&gt;
&lt;td&gt;29.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://freetdee.com/tdee-calculator-bodybuilding/" rel="noopener noreferrer"&gt;FreeTDEE&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;177&lt;/td&gt;
&lt;td&gt;0.6%&lt;/td&gt;
&lt;td&gt;54.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://babypercent.com/" rel="noopener noreferrer"&gt;BabyPercent&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;2,940&lt;/td&gt;
&lt;td&gt;0.4%&lt;/td&gt;
&lt;td&gt;20.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://invoicepad.net/web-developer-invoice-template/" rel="noopener noreferrer"&gt;InvoicePad&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;1,200&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;57.7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://zoneplan.net/global-meeting-planner/" rel="noopener noreferrer"&gt;ZonePlan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5,860&lt;/td&gt;
&lt;td&gt;0.1%&lt;/td&gt;
&lt;td&gt;44.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://pupvax.com/puppy-vaccine-schedule-by-age/" rel="noopener noreferrer"&gt;PupVax&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;831&lt;/td&gt;
&lt;td&gt;0.1%&lt;/td&gt;
&lt;td&gt;68.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Two real defects survived the first pass
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. A new iWorkViewer growth page had no internal link
&lt;/h3&gt;

&lt;p&gt;The Android Pages guide was in the sitemap but no crawled page linked to it. I added a contextual link from the homepage, rebuilt the site, deployed it and verified the live HTML.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. ZonePlan listed noncanonical pages in its sitemap
&lt;/h3&gt;

&lt;p&gt;Two older meeting-planner pages correctly pointed their canonical tags to the global meeting planner, but the sitemap still listed the old URLs. I removed both legacy URLs from the sitemap, rebuilt, deployed and verified that only the canonical target remains.&lt;/p&gt;

&lt;h2&gt;
  
  
  False alarms that were not defects
&lt;/h2&gt;

&lt;p&gt;The first crawl reported scattered non-200 pages on PlantingCalendar, BabyPercent, ZonePlan and PupVax. Every one returned HTTP 200 on retry. These were transient TLS/network failures, not broken pages.&lt;/p&gt;

&lt;p&gt;The crawler also flagged several pages under 200 words. They were Contact, Terms, Blog index and comparison index pages. Adding filler text would make them worse, not better, so I left them alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final state
&lt;/h2&gt;

&lt;p&gt;After deployment, I reran the full audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;743 sitemap URLs checked&lt;/li&gt;
&lt;li&gt;zero persistent non-200 pages after retry&lt;/li&gt;
&lt;li&gt;zero redirected sitemap URLs&lt;/li&gt;
&lt;li&gt;zero missing or mismatched canonical tags&lt;/li&gt;
&lt;li&gt;zero noindex accidents&lt;/li&gt;
&lt;li&gt;zero missing title, description or H1&lt;/li&gt;
&lt;li&gt;zero duplicate titles, descriptions or page bodies&lt;/li&gt;
&lt;li&gt;zero orphan sitemap pages&lt;/li&gt;
&lt;li&gt;all eight repositories clean and synced&lt;/li&gt;
&lt;li&gt;all eight production homepages have canonical, schema, GA, AdSense and no noindex&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important lesson: fix defects that survive a second check. Do not manufacture content or stack SEO changes just to make an audit look greener.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>5,860 Impressions and 4 Clicks: Why I Am Not Changing the Page Yet</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Sat, 08 Aug 2026 04:36:18 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/5860-impressions-and-4-clicks-why-i-am-not-changing-the-page-yet-588a</link>
      <guid>https://dev.to/gavinbuildsai/5860-impressions-and-4-clicks-why-i-am-not-changing-the-page-yet-588a</guid>
      <description>&lt;h1&gt;
  
  
  ZonePlan SEO Observation — August 8, 2026
&lt;/h1&gt;

&lt;p&gt;I am building and documenting eight free browser tools. Today I reviewed fresh 28-day Google Search Console data instead of changing another page variable too early.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zoneplan.net/" rel="noopener noreferrer"&gt;ZonePlan&lt;/a&gt; now has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 clicks&lt;/li&gt;
&lt;li&gt;5,860 impressions&lt;/li&gt;
&lt;li&gt;0.1% CTR&lt;/li&gt;
&lt;li&gt;average position 44.0&lt;/li&gt;
&lt;li&gt;77 indexed pages and 102 not indexed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The strongest non-brand queries are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;meeting planner worldwide&lt;/code&gt;: 294 impressions, 0 clicks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;global meeting planner&lt;/code&gt;: 148 impressions, 0 clicks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;international meeting planner&lt;/code&gt;: 128 impressions, 0 clicks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;meeting planner&lt;/code&gt;: 102 impressions, 0 clicks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The site has gained impressions for several consecutive checks, but the click-through rate remains weak. I recently merged overlapping pages and aligned the main meeting-planner page with the search intent. That experiment is still inside its seven-day observation window, so I am not stacking another on-page change today.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision
&lt;/h2&gt;

&lt;p&gt;Do less, measure better:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the current ZonePlan page structure unchanged until August 11.&lt;/li&gt;
&lt;li&gt;Continue building relevant external discovery paths.&lt;/li&gt;
&lt;li&gt;Recheck CTR, average position and non-brand clicks after the observation window.&lt;/li&gt;
&lt;li&gt;Only then decide whether the next variable should be title, snippet copy or content structure.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Try the free tool: &lt;a href="https://zoneplan.net/global-meeting-planner/" rel="noopener noreferrer"&gt;ZonePlan global meeting planner&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The full eight-site portfolio is documented in the &lt;a href="https://github.com/Gavin1901/free-browser-tools-index" rel="noopener noreferrer"&gt;Free Browser Tools Index&lt;/a&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>839 Impressions, 1 Click: What I Learned From My Puppy Vaccine Tracker SEO</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Fri, 07 Aug 2026 01:51:30 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/839-impressions-1-click-what-i-learned-from-my-puppy-vaccine-tracker-seo-4818</link>
      <guid>https://dev.to/gavinbuildsai/839-impressions-1-click-what-i-learned-from-my-puppy-vaccine-tracker-seo-4818</guid>
      <description>&lt;p&gt;Today I audited 839 Google impressions for my free puppy vaccine tracker and found something painful: &lt;strong&gt;every single query has zero clicks.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Data
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://pupvax.com/" rel="noopener noreferrer"&gt;PupVax.com&lt;/a&gt; — a free dog vaccine and deworming schedule tool I built — has been live for weeks. GSC shows 839 impressions across 28 days, but only 1 organic click (CTR 0.1%, avg position 67.5).&lt;/p&gt;

&lt;p&gt;Top queries (all 0 clicks):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"puppy vaccinations" — 111 impressions&lt;/li&gt;
&lt;li&gt;"puppy vaccination schedule" — 39 impressions&lt;/li&gt;
&lt;li&gt;"puppy vaccination schedule chart" — 21 impressions&lt;/li&gt;
&lt;li&gt;"dog deworming schedule" — 17 impressions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Found
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Position 67.5 is page 7&lt;/strong&gt;. Nobody clicks page 7 results. The site needs more topical authority before Google will rank it higher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyword mismatch&lt;/strong&gt;: The homepage says "vaccine schedule tracker" but users search for "vaccination schedule." Subtle but important.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Only 10 of 53 pages indexed&lt;/strong&gt;. Crawl budget is limited and thin pages get ignored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No external backlinks from vet/animal sites&lt;/strong&gt;. The AAHA guidelines citation (added Aug 4) helps E-E-A-T but hasn't kicked in yet.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I Changed Today
&lt;/h2&gt;

&lt;p&gt;One variable: I verified the content matches AAHA 2026 guidelines, added the deworming schedule (90% of puppies are born with roundworms — most owners don't know this), and published 4 external references on GitHub with deep analysis.&lt;/p&gt;

&lt;p&gt;I also published a &lt;a href="https://gist.github.com/Gavin1901/28bcdb9d2dc02d2473359d5334d4a6e0" rel="noopener noreferrer"&gt;detailed Gist&lt;/a&gt; covering the immunity gap (weeks 8-16) that most puppy owners don't understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lesson
&lt;/h2&gt;

&lt;p&gt;For low-competition long-tail queries like "puppy vaccination schedule chart," the problem isn't competition — it's that Google hasn't decided your site is an authority on the topic yet. One well-cited, evidence-backed page can change that. But it takes time.&lt;/p&gt;

&lt;p&gt;The 7 other free tools I maintain are at &lt;a href="https://github.com/Gavin1901" rel="noopener noreferrer"&gt;GitHub/Gavin1901&lt;/a&gt;. All open source.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What InvoicePad Taught Me About Search Intent</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Thu, 06 Aug 2026 03:06:20 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/what-invoicepad-taught-me-about-search-intent-17a6</link>
      <guid>https://dev.to/gavinbuildsai/what-invoicepad-taught-me-about-search-intent-17a6</guid>
      <description>&lt;p&gt;After running Google Search Console for &lt;a href="https://invoicepad.net" rel="noopener noreferrer"&gt;InvoicePad&lt;/a&gt;, I found 1,180 impressions but zero clicks.&lt;/p&gt;

&lt;p&gt;The free invoice generator works. You pick a template, fill in details, download a clean PDF. No sign-up, no watermark.&lt;/p&gt;

&lt;p&gt;But here is the problem. People search for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"web development invoice" - 88 impressions&lt;/li&gt;
&lt;li&gt;"handyman invoice template" - 33 impressions&lt;/li&gt;
&lt;li&gt;"makeup artist invoice template" - 27 impressions&lt;/li&gt;
&lt;li&gt;"SEO service invoice template" - 26 impressions&lt;/li&gt;
&lt;li&gt;"freelance writer invoice template" - 24 impressions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When someone searches "handyman invoice template," they want to see a handyman-specific invoice with labor hours and materials pre-filled. The tool works. The landing page doesn't match search intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;We are building dedicated landing pages for each profession. Same free tool, better entry points.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://invoicepad.net" rel="noopener noreferrer"&gt;InvoicePad&lt;/a&gt; - free, instant PDF download.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Merged 6 Near-Identical Planner Pages Into 1 — Here Is What Happened to Our SEO</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Wed, 05 Aug 2026 02:36:14 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/i-merged-6-near-identical-planner-pages-into-1-here-is-what-happened-to-our-seo-55d1</link>
      <guid>https://dev.to/gavinbuildsai/i-merged-6-near-identical-planner-pages-into-1-here-is-what-happened-to-our-seo-55d1</guid>
      <description>&lt;p&gt;When you build a free tool, the natural instinct is to create a page for every use case. So we built six planner pages for ZonePlan. Global meeting planner, international meeting planner, meeting planner, remote team time zone planner, UTC converter, world clock planner.&lt;/p&gt;

&lt;p&gt;Six pages. Same core function: help people find a meeting time across time zones. And Google punished us for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The numbers before consolidation
&lt;/h2&gt;

&lt;p&gt;ZonePlan had &lt;strong&gt;4,670 monthly impressions&lt;/strong&gt; across all queries. Only &lt;strong&gt;5 clicks&lt;/strong&gt;. Total. A 0.1% CTR.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"meeting planner worldwide" — 265 impressions, 0 clicks&lt;/li&gt;
&lt;li&gt;"global meeting planner" — 132 impressions, 0 clicks&lt;/li&gt;
&lt;li&gt;"international meeting planner" — 120 impressions, 0 clicks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google was showing our pages. People were not clicking. Why?&lt;/p&gt;

&lt;p&gt;Because when Google sees six near-identical pages competing for the same search intent, it splits ranking signals across all of them. None ranks well enough to earn trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we changed on August 4
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Chose a single canonical page: global-meeting-planner&lt;/li&gt;
&lt;li&gt;Expanded it from 45 lines to 230 lines with real substance&lt;/li&gt;
&lt;li&gt;Set canonical tags from all other planners to point to the main page&lt;/li&gt;
&lt;li&gt;Added 3 permanent 301 redirects via Cloudflare&lt;/li&gt;
&lt;li&gt;Redesigned the homepage with a single CTA button&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The theory
&lt;/h2&gt;

&lt;p&gt;This is not a content volume problem. It is a signal concentration problem.&lt;/p&gt;

&lt;p&gt;Six thin pages with weak internal links — Google has to guess which one matters. One rich page with clear internal signals — Google has exactly one target to evaluate.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we are measuring
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;CTR on global-meeting-planner&lt;/li&gt;
&lt;li&gt;Average position for "meeting planner worldwide"&lt;/li&gt;
&lt;li&gt;Index coverage (currently 30 indexed / 84 not indexed)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The tool
&lt;/h2&gt;

&lt;p&gt;ZonePlan is a free worldwide meeting planner: &lt;strong&gt;&lt;a href="https://zoneplan.net" rel="noopener noreferrer"&gt;zoneplan.net&lt;/a&gt;&lt;/strong&gt;. No sign-up. Enter cities, see working-hour overlap instantly.&lt;/p&gt;




&lt;p&gt;The bigger lesson: When your SEO is stuck, the answer is rarely "write more pages." Often it is "make the pages you already have count for more."&lt;/p&gt;

&lt;p&gt;I am running isolated SEO experiments across 8 free browser tools. Each station gets one variable change per observation window. No stacking. Just data.&lt;/p&gt;

&lt;p&gt;If you are building free tools, share what SEO variables you are testing.&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>How to Open Apple Pages Files on Android - No Mac, No App (Free 2026 Guide)</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Tue, 04 Aug 2026 02:09:51 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/how-to-open-apple-pages-files-on-android-no-mac-no-app-free-2026-guide-me4</link>
      <guid>https://dev.to/gavinbuildsai/how-to-open-apple-pages-files-on-android-no-mac-no-app-free-2026-guide-me4</guid>
      <description>&lt;p&gt;If you use an Android phone and someone sends you an Apple Pages (.pages) file, you have likely seen this: a blank file icon and every app says it cannot be opened.&lt;/p&gt;

&lt;p&gt;Android has no Pages app. There never has been one. So when a Mac or iPhone user sends you a .pages file through Gmail, WhatsApp or Google Drive, you are stuck.&lt;/p&gt;

&lt;p&gt;Here is why it happens and how to fix it for free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why .pages Files Fail on Android
&lt;/h2&gt;

&lt;p&gt;A .pages file is Apple's word-processing format - the iWork cousin of Microsoft Word. Android reads PDF, DOCX, TXT and images natively, but not .pages. The file is not corrupted. The sender just saved it on a device that can read it and had no idea Android cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Trick That Makes It Openable
&lt;/h2&gt;

&lt;p&gt;A .pages file is actually a ZIP archive with a PDF preview inside. On a desktop you could rename it from MyDoc.pages to MyDoc.zip and dig out the preview by hand. But on Android that is fiddly.&lt;/p&gt;

&lt;p&gt;The free tool at &lt;a href="https://iworkviewer.com/open-pages-file-android" rel="noopener noreferrer"&gt;iWorkViewer&lt;/a&gt; does exactly that for you, in your browser:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;a href="https://iworkviewer.com/open-pages-file-android" rel="noopener noreferrer"&gt;https://iworkviewer.com/open-pages-file-android&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tap the upload box and select the .pages file&lt;/li&gt;
&lt;li&gt;The page unzips it locally and shows the full document&lt;/li&gt;
&lt;li&gt;Download as PDF to save a copy that opens everywhere&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Nothing is uploaded to any server.&lt;/strong&gt; The file stays on your phone. No app to install, no Apple ID to create.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Needs Mac?&lt;/th&gt;
&lt;th&gt;Uploads File?&lt;/th&gt;
&lt;th&gt;Free?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;iWorkViewer&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No (in-browser)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;iCloud.com&lt;/td&gt;
&lt;td&gt;No (needs Apple ID)&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Online converters&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ask sender&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Also useful: &lt;a href="https://iworkviewer.com/open-pages-file-windows" rel="noopener noreferrer"&gt;Open Pages on Windows&lt;/a&gt; | &lt;a href="https://iworkviewer.com/pages-to-pdf" rel="noopener noreferrer"&gt;Pages to PDF&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What method have you used to open Apple files on Android?&lt;/p&gt;

</description>
      <category>tutorial</category>
    </item>
    <item>
      <title>Worldwide Meeting Planner: How to Find One Fair Time Across 24 Time Zones</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Mon, 03 Aug 2026 00:00:12 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/worldwide-meeting-planner-how-to-find-one-fair-time-across-24-time-zones-44jj</link>
      <guid>https://dev.to/gavinbuildsai/worldwide-meeting-planner-how-to-find-one-fair-time-across-24-time-zones-44jj</guid>
      <description>&lt;p&gt;Scheduling meetings across continents is harder than it looks. You are not just comparing two clocks — you are managing daylight saving offsets, work-hour windows, and the silent assumption that "let's do 9 AM my time" works for everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem Is Not Time Math
&lt;/h2&gt;

&lt;p&gt;Most people think the problem is converting UTC offsets. It is not.&lt;/p&gt;

&lt;p&gt;The real problem is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;24 possible start times&lt;/strong&gt; but only 2-3 that work for all attendees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Daylight saving transitions&lt;/strong&gt; that happen on different dates in different countries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work-hour norms&lt;/strong&gt; — 9 AM in New York is 2 PM in London, but 9 AM in San Francisco is already 5 PM in London&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How ZonePlan Solves This
&lt;/h2&gt;

&lt;p&gt;Instead of asking you to calculate, &lt;a href="https://zoneplan.net" rel="noopener noreferrer"&gt;ZonePlan&lt;/a&gt; shows you a visual grid of all 24 hours across every time zone in your meeting. Overlapping work hours are highlighted. You pick the slot that minimizes inconvenience for the most people.&lt;/p&gt;

&lt;p&gt;Try it free — no sign-up, no email, no installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "Worldwide" Matters More Than "International"
&lt;/h2&gt;

&lt;p&gt;An international meeting might be two countries. A worldwide meeting spans Asia, Europe, and the Americas simultaneously. That is when DST conflicts become unavoidable.&lt;/p&gt;

&lt;p&gt;ZonePlan was built specifically for the three-continent meeting: 7 AM Pacific = 10 AM Eastern = 3 PM London = 7:30 PM Delhi. One click shows the overlap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Related Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zoneplan.net/global-meeting-planner/" rel="noopener noreferrer"&gt;Global Meeting Planner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zoneplan.net/blog/schedule-meeting-across-time-zones/" rel="noopener noreferrer"&gt;Schedule Meeting Across Time Zones&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zoneplan.net/" rel="noopener noreferrer"&gt;Free Time Zone Converter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Bodybuilding TDEE: Set Cutting and Lean-Bulk Calories Without Guessing</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Sun, 02 Aug 2026 01:56:04 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/bodybuilding-tdee-set-cutting-and-lean-bulk-calories-without-guessing-jbn</link>
      <guid>https://dev.to/gavinbuildsai/bodybuilding-tdee-set-cutting-and-lean-bulk-calories-without-guessing-jbn</guid>
      <description>&lt;h1&gt;
  
  
  A Bodybuilding TDEE Estimate Is a Starting Point, Not a Target Carved in Stone
&lt;/h1&gt;

&lt;p&gt;Bodybuilders often choose an activity factor that is too high simply because they train several times per week. Total daily expenditure also depends on steps, physical work, body size, and recovery outside the gym.&lt;/p&gt;

&lt;p&gt;Start with maintenance calories, then use a moderate deficit for cutting or a small surplus for lean bulking. Hold the plan long enough to judge the weekly trend instead of reacting to one weigh-in.&lt;/p&gt;

&lt;p&gt;Free bodybuilding TDEE calculator: &lt;a href="https://freetdee.com/tdee-calculator-bodybuilding/" rel="noopener noreferrer"&gt;https://freetdee.com/tdee-calculator-bodybuilding/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Review body weight, waist measurement, training performance, recovery, and adherence every two weeks. Change one variable at a time so the result teaches you something useful.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Web Development Invoice: What to Include in 2026</title>
      <dc:creator>Gavin Builds</dc:creator>
      <pubDate>Sun, 02 Aug 2026 01:12:22 +0000</pubDate>
      <link>https://dev.to/gavinbuildsai/web-development-invoice-what-to-include-in-2026-4ppe</link>
      <guid>https://dev.to/gavinbuildsai/web-development-invoice-what-to-include-in-2026-4ppe</guid>
      <description>&lt;h1&gt;
  
  
  Web Development Invoice: What to Include in 2026
&lt;/h1&gt;

&lt;p&gt;A useful web development invoice should separate discovery, design, frontend, backend, integrations, testing, deployment, and maintenance. Clear line items make approvals faster and reduce payment disputes.&lt;/p&gt;

&lt;p&gt;Use the free &lt;a href="https://invoicepad.net/web-developer-invoice-template/" rel="noopener noreferrer"&gt;web development invoice template&lt;/a&gt; to create a clean PDF without sign-up. It works for fixed-price projects, hourly work, retainers, and milestone billing.&lt;/p&gt;

&lt;p&gt;Before sending, confirm the client name, project scope, invoice number, due date, currency, payment terms, and any tax details required in your country.&lt;/p&gt;

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