<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>GVX Digital Research</title>
    <link>https://gvxdigital.com/research</link>
    <description>Original research and engineering notes on systems, ownership, AI, and the architecture of modern business.</description>
    <language>en-us</language>
    <atom:link href="https://gvxdigital.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>An Internal Link Checker for a Static Build in 34 Lines of Node.js</title>
      <link>https://gvxdigital.com/research/an-internal-link-checker-for-a-static-build</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/an-internal-link-checker-for-a-static-build</guid>
      <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
      <description>A 34-line Node.js script that checks every internal link in a static site build. We ran it on 202 pages and 8,766 links, then broke the site to prove it works.</description>
      <category>Node.js</category>
      <category>Testing</category>
      <category>Astro</category>
    </item>
    <item>
      <title>Backups Only Count Once You Have Restored One: A Restore Drill You Can Run in an Afternoon</title>
      <link>https://gvxdigital.com/research/backups-only-count-once-restored</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/backups-only-count-once-restored</guid>
      <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
      <description>A backup you have never restored is a guess. Here is a four-hour restore drill, a checklist and a scorecard a small business can run without a technician.</description>
      <category>Backups</category>
      <category>Maintenance</category>
      <category>Small Business</category>
    </item>
    <item>
      <title>Synthesizing a Soundtrack in Python, Timed to a Video&apos;s Cut List</title>
      <link>https://gvxdigital.com/research/synthesizing-a-soundtrack-timed-to-cuts</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/synthesizing-a-soundtrack-timed-to-cuts</guid>
      <pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate>
      <description>Generate a soundtrack with numpy and scipy that lands on a video&apos;s cuts. We tested timing error, clipping, clicks and rounding drift, then muxed it with ffmpeg.</description>
      <category>Python</category>
      <category>Audio</category>
      <category>Video</category>
    </item>
    <item>
      <title>Comparing Version Strings Without a Library: A 30-Line Semver Compare, Fuzzed Against the Reference</title>
      <link>https://gvxdigital.com/research/comparing-version-strings-without-a-library</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/comparing-version-strings-without-a-library</guid>
      <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
      <description>A semver compare in 30 lines of Node.js, checked against the semver package on 200,000 random pairs, plus the cases where plain string sorting goes wrong.</description>
      <category>Node.js</category>
      <category>Testing</category>
      <category>Versions</category>
    </item>
    <item>
      <title>End-of-Life Software in Plain English: How to Find Out When Your Software Stops Getting Fixes</title>
      <link>https://gvxdigital.com/research/end-of-life-software-in-plain-english</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/end-of-life-software-in-plain-english</guid>
      <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
      <description>What end of life means, where to find the dates for PHP, Node.js, WordPress and iOS, and a one-hour check of what your business runs and when support ends.</description>
      <category>Maintenance</category>
      <category>Security</category>
      <category>Planning</category>
    </item>
    <item>
      <title>Muxing a Soundtrack onto a Silent Video with ffmpeg: When You Need -map</title>
      <link>https://gvxdigital.com/research/muxing-a-soundtrack-with-ffmpeg-map</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/muxing-a-soundtrack-with-ffmpeg-map</guid>
      <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
      <description>Adding audio to a video with ffmpeg works without -map until the video already has a silent audio track. We tested both cases on ffmpeg 6.1.1.</description>
      <category>ffmpeg</category>
      <category>Video</category>
      <category>Debugging</category>
    </item>
    <item>
      <title>No, Your Website Isn&apos;t Finished</title>
      <link>https://gvxdigital.com/research/no-your-website-isnt-finished</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/no-your-website-isnt-finished</guid>
      <pubDate>Wed, 04 Nov 2026 00:00:00 GMT</pubDate>
      <description>A new website is where the work starts. The four jobs after launch, why most sites never bring in work, and how to make yours earn its keep.</description>
      <category>Strategy</category>
      <category>Local Business</category>
      <category>Search</category>
      <category>AI</category>
    </item>
    <item>
      <title>A DST-Safe Weekday Cron in GitHub Actions: Two Schedules and a Guard</title>
      <link>https://gvxdigital.com/research/dst-safe-weekday-cron-in-github-actions</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/dst-safe-weekday-cron-in-github-actions</guid>
      <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
      <description>GitHub Actions cron runs in UTC only. Two schedules plus a New York time guard fire once per weekday all year. We simulated 522 weekdays.</description>
      <category>GitHub Actions</category>
      <category>Cron</category>
      <category>Scheduling</category>
    </item>
    <item>
      <title>A 9:30 AM Publish Time That Survives Daylight Saving Changes</title>
      <link>https://gvxdigital.com/research/publish-time-that-survives-daylight-saving</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/publish-time-that-survives-daylight-saving</guid>
      <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
      <description>A static site that publishes at 9:30 AM New York time needs more than a fixed UTC hour. We tested an Intl-based function on every day of 2026 and 2027.</description>
      <category>Astro</category>
      <category>JavaScript</category>
      <category>Scheduling</category>
    </item>
    <item>
      <title>What a Quarterly Maintenance Visit Actually Covers, and What It Catches</title>
      <link>https://gvxdigital.com/research/what-a-quarterly-maintenance-visit-covers</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/what-a-quarterly-maintenance-visit-covers</guid>
      <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
      <description>A quarterly maintenance visit checks runtimes, CMS and plugins, backups, certificates, DNS and accounts. Here is the checklist and what each check catches.</description>
      <category>Maintenance</category>
      <category>Security</category>
      <category>Small Business</category>
    </item>
    <item>
      <title>A Runbook for a One-Person Operation: What to Write Down First</title>
      <link>https://gvxdigital.com/research/a-runbook-for-a-one-person-operation</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/a-runbook-for-a-one-person-operation</guid>
      <pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
      <description>What belongs in a runbook for a one-person operation: the few procedures worth writing down first, and why we wrote ours for someone who has forgotten everything.</description>
      <category>Operations</category>
      <category>Documentation</category>
      <category>Cloudflare</category>
    </item>
    <item>
      <title>Website Templates Are a Starting Point, Not a Strategy</title>
      <link>https://gvxdigital.com/research/templates-are-a-starting-point-not-a-strategy</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/templates-are-a-starting-point-not-a-strategy</guid>
      <pubDate>Mon, 02 Nov 2026 00:00:00 GMT</pubDate>
      <description>Website templates save time and show options, but cannot supply your message. How to use one well: write content first, cut extras, and adapt the structure.</description>
      <category>Strategy</category>
      <category>Design</category>
      <category>Templates</category>
    </item>
    <item>
      <title>Managing 64 Template Thumbnails and Assets from Figma</title>
      <link>https://gvxdigital.com/research/managing-template-assets-from-figma</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/managing-template-assets-from-figma</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we keep a 64-entry template gallery consistent: one JSON file, one stable slug, WebP thumbnails exported from Figma, and checks that catch missing files.</description>
      <category>Figma</category>
      <category>Astro</category>
      <category>Assets</category>
    </item>
    <item>
      <title>Testing a form flow that depends on bot checks and AI</title>
      <link>https://gvxdigital.com/research/testing-flows-with-third-party-widgets</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/testing-flows-with-third-party-widgets</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <description>What to mock, what never to mock, and the two bugs that taught us to test the browser&apos;s behavior, not just our own state.</description>
      <category>Testing</category>
      <category>Playwright</category>
      <category>Reliability</category>
    </item>
    <item>
      <title>What AI Automation Actually Changes for a Ten-Person Business</title>
      <link>https://gvxdigital.com/research/what-ai-automation-changes-for-a-small-business</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/what-ai-automation-changes-for-a-small-business</guid>
      <pubDate>Fri, 30 Oct 2026 00:00:00 GMT</pubDate>
      <description>AI automation for a small business pays off in repetitive, text-heavy work with clear rules. Where it helps, where it falls short, and how to start.</description>
      <category>AI</category>
      <category>Automation</category>
      <category>Strategy</category>
    </item>
    <item>
      <title>Design Systems for Small Teams: Constraints Beat Component Libraries</title>
      <link>https://gvxdigital.com/research/design-systems-for-small-teams</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/design-systems-for-small-teams</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <description>A design system for a small team can be a dozen tokens and five rules. How constraints produce consistency faster than a component library, and when to grow.</description>
      <category>Design</category>
      <category>Strategy</category>
      <category>Web</category>
    </item>
    <item>
      <title>Isolating Failures in a Form Pipeline: Save First, Notify Independently</title>
      <link>https://gvxdigital.com/research/isolating-failures-in-a-form-pipeline</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/isolating-failures-in-a-form-pipeline</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we build a form pipeline so one failing step never loses a lead: save to the database and send the email as independent steps, and fail only if both fail.</description>
      <category>Forms</category>
      <category>Reliability</category>
      <category>Cloudflare</category>
    </item>
    <item>
      <title>Rebuilding a Figma frame as a scaled canvas</title>
      <link>https://gvxdigital.com/research/rebuilding-a-figma-frame-as-a-scaled-canvas</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/rebuilding-a-figma-frame-as-a-scaled-canvas</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <description>A fixed-size stage, one CSS variable, and a ResizeObserver reproduce a designer&apos;s frame faithfully at any width. The technique, the font problem, and when to stop.</description>
      <category>Front-end</category>
      <category>Design to code</category>
      <category>CSS</category>
    </item>
    <item>
      <title>The Shortlist Is Back: Being Named When AI Answers for Your Customers</title>
      <link>https://gvxdigital.com/research/the-shortlist-is-back</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/the-shortlist-is-back</guid>
      <pubDate>Thu, 29 Oct 2026 00:00:00 GMT</pubDate>
      <description>Gatekeepers didn&apos;t disappear online. They moved from editors to feeds, and now to AI answers that name two or three businesses. What a small business can do about it.</description>
      <category>Strategy</category>
      <category>Local Business</category>
      <category>Search</category>
      <category>AI</category>
    </item>
    <item>
      <title>Building an Accessible Mobile Menu Without a Framework</title>
      <link>https://gvxdigital.com/research/building-an-accessible-mobile-menu-without-a-framework</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/building-an-accessible-mobile-menu-without-a-framework</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>An accessible mobile menu in plain HTML, CSS, and a few lines of JavaScript: aria-expanded, Escape to close, focus return, and a no-JS fallback.</description>
      <category>Accessibility</category>
      <category>HTML</category>
      <category>JavaScript</category>
    </item>
    <item>
      <title>Documentation as Leverage: Runbooks and Decision Logs for Small Companies</title>
      <link>https://gvxdigital.com/research/documentation-as-leverage</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/documentation-as-leverage</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>Runbooks and decision logs keep a small company running when its founder is unavailable. What to write first, with a minimal template described in plain prose.</description>
      <category>Operations</category>
      <category>Strategy</category>
      <category>Documentation</category>
    </item>
    <item>
      <title>Fuzzing an LLM JSON Extractor: What Breaks When You Parse Between the First and Last Brace</title>
      <link>https://gvxdigital.com/research/fuzzing-an-llm-json-extractor</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/fuzzing-an-llm-json-extractor</guid>
      <pubDate>Wed, 28 Oct 2026 00:00:00 GMT</pubDate>
      <description>We fuzzed the common first-brace-to-last-brace JSON extractor with 99 malformed model replies and compared it to a balanced scanner. Real counts, final helper.</description>
      <category>AI integration</category>
      <category>Testing</category>
      <category>Validation</category>
    </item>
    <item>
      <title>A Cloudflare Turnstile Integration Checklist for Contact Forms</title>
      <link>https://gvxdigital.com/research/cloudflare-turnstile-integration-checklist</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/cloudflare-turnstile-integration-checklist</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <description>A practical Cloudflare Turnstile checklist for contact forms: server-side verification, single-use tokens, widget lifecycle, test keys, and a honeypot.</description>
      <category>Turnstile</category>
      <category>Forms</category>
      <category>Cloudflare</category>
    </item>
    <item>
      <title>One Config for Client and Server: A Single Source of Truth for Intake Forms</title>
      <link>https://gvxdigital.com/research/one-config-for-client-and-server-intake-fields</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/one-config-for-client-and-server-intake-fields</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we define a project intake form once in TypeScript so the page, the conversational interview, and the server validation can never drift apart.</description>
      <category>TypeScript</category>
      <category>Forms</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>Scoping Web Projects Around Outcomes, Not Hours</title>
      <link>https://gvxdigital.com/research/scoping-web-projects-around-outcomes</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/scoping-web-projects-around-outcomes</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <description>Scoping web projects around outcomes keeps buyers and builders aligned: define what changes for the customer, write it down together, and handle change openly.</description>
      <category>Strategy</category>
      <category>Process</category>
      <category>Web projects</category>
    </item>
    <item>
      <title>Local Search Visibility: Be the Clear Answer, Not Just Another Listing</title>
      <link>https://gvxdigital.com/research/local-search-and-being-the-clear-answer</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/local-search-and-being-the-clear-answer</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <description>Local search visibility starts with being easy to understand: clear facts, consistent details and a page that answers the question directly.</description>
      <category>Strategy</category>
      <category>Local Business</category>
      <category>Search</category>
    </item>
    <item>
      <title>How Much Does Self-Hosting Fonts Weigh? Measuring Latin woff2 Payloads</title>
      <link>https://gvxdigital.com/research/measuring-self-hosted-font-payload</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/measuring-self-hosted-font-payload</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <description>We fetched seven Google Fonts families, kept latin, deduplicated by URL, and weighed each woff2: 16 files, 340,256 bytes. Script, table, and budget method.</description>
      <category>Performance</category>
      <category>Web fonts</category>
      <category>Self-hosting</category>
    </item>
    <item>
      <title>Prompting for Structured JSON and Validating the Result</title>
      <link>https://gvxdigital.com/research/prompting-for-structured-json-and-validating-it</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/prompting-for-structured-json-and-validating-it</guid>
      <pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we prompt a model for structured JSON, extract it from messy output, validate every field, and fall back to non-AI behavior when the result is unusable.</description>
      <category>AI integration</category>
      <category>TypeScript</category>
      <category>Validation</category>
    </item>
    <item>
      <title>Automating Accessibility Checks with axe-core and Playwright</title>
      <link>https://gvxdigital.com/research/automating-accessibility-checks-with-axe-and-playwright</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/automating-accessibility-checks-with-axe-and-playwright</guid>
      <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we run axe-core inside Playwright against built pages, what it caught on our own site, and why one color token fix beat 34 element fixes.</description>
      <category>Accessibility</category>
      <category>Testing</category>
      <category>Playwright</category>
    </item>
    <item>
      <title>Website Speed Is a Product Feature, Not a Technical Detail</title>
      <link>https://gvxdigital.com/research/speed-is-a-product-feature</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/speed-is-a-product-feature</guid>
      <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
      <description>Website speed shapes trust and abandonment before a visitor reads a word. Why pages get slow, how static delivery helps, and a performance budget for owners.</description>
      <category>Strategy</category>
      <category>Performance</category>
      <category>Web</category>
    </item>
    <item>
      <title>Typed Content Collections in Astro for a Research Section</title>
      <link>https://gvxdigital.com/research/typed-content-collections-for-a-research-section</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/typed-content-collections-for-a-research-section</guid>
      <pubDate>Fri, 23 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we run a research section from plain markdown files with Astro content collections, a zod schema, and a build that fails when frontmatter is wrong.</description>
      <category>Astro</category>
      <category>Content</category>
      <category>TypeScript</category>
    </item>
    <item>
      <title>D1 Migrations for a Small Product: Additive Changes and a Local-First Workflow</title>
      <link>https://gvxdigital.com/research/additive-d1-migrations</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/additive-d1-migrations</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <description>Our D1 migrations are numbered SQL files that only add things, applied locally first and then remotely. Why the additive rule keeps deploys forgiving.</description>
      <category>D1</category>
      <category>Cloudflare</category>
      <category>Database</category>
    </item>
    <item>
      <title>How Small Companies Earn Trust Online Without Gimmicks</title>
      <link>https://gvxdigital.com/research/how-small-companies-earn-trust-online</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/how-small-companies-earn-trust-online</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <description>How small companies earn trust online: clear identity, real contact details, plain language, visible process and honest limits, with no fake urgency or reviews.</description>
      <category>Strategy</category>
      <category>Trust</category>
      <category>Web</category>
    </item>
    <item>
      <title>SQLite UPSERT with RETURNING: Building an Atomic Counter You Can Trust</title>
      <link>https://gvxdigital.com/research/sqlite-upsert-returning-counter-semantics</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/sqlite-upsert-returning-counter-semantics</guid>
      <pubDate>Thu, 22 Oct 2026 00:00:00 GMT</pubDate>
      <description>We ran SQLite&apos;s UPSERT with RETURNING under eight threads: read-then-write lost up to 3,500 of 4,000 increments, the single atomic statement lost none.</description>
      <category>SQLite</category>
      <category>Cloudflare D1</category>
      <category>Rate limiting</category>
    </item>
    <item>
      <title>Checking Every PHP Install Against php.net in 45 Lines of Code</title>
      <link>https://gvxdigital.com/research/checking-php-versions-against-php-net</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/checking-php-versions-against-php-net</guid>
      <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
      <description>A small Node script that checks a list of PHP installs against php.net&apos;s release data and flags anything behind on patches or past end of life.</description>
      <category>PHP</category>
      <category>Security</category>
      <category>Maintenance</category>
    </item>
    <item>
      <title>Reading a Security Advisory in the First Hours: Notes From the PHP Emergency</title>
      <link>https://gvxdigital.com/research/reading-a-security-advisory-in-the-first-hours</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/reading-a-security-advisory-in-the-first-hours</guid>
      <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
      <description>During the October 2026 PHP emergency, rumor, official notices and trackers disagreed for a day. How to tell them apart and act on what is confirmed.</description>
      <category>Security</category>
      <category>PHP</category>
      <category>Operations</category>
    </item>
    <item>
      <title>The October 2026 PHP Emergency: Why Staying Current Always Costs Less</title>
      <link>https://gvxdigital.com/research/the-php-emergency-and-the-cost-of-falling-behind</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/the-php-emergency-and-the-cost-of-falling-behind</guid>
      <pubDate>Wed, 21 Oct 2026 00:00:00 GMT</pubDate>
      <description>Two critical PHP flaws sent governments offline in October 2026. Sites on supported versions patched in minutes. Why steady upgrades cost less than catching up.</description>
      <category>Security</category>
      <category>PHP</category>
      <category>Maintenance</category>
    </item>
    <item>
      <title>The Real Cost of Rented Platforms: Page Builders, Marketplaces and Lock-In</title>
      <link>https://gvxdigital.com/research/the-real-cost-of-rented-platforms</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/the-real-cost-of-rented-platforms</guid>
      <pubDate>Tue, 20 Oct 2026 00:00:00 GMT</pubDate>
      <description>Rented platforms look cheap at the start. This paper covers the real cost of lock-in: exit costs, fee creep, policy changes, and how to use platforms safely.</description>
      <category>Strategy</category>
      <category>Platforms</category>
      <category>Ownership</category>
    </item>
    <item>
      <title>WCAG Contrast Ratio in 20 Lines of Code: Auditing a Dark UI&apos;s Color Tokens</title>
      <link>https://gvxdigital.com/research/wcag-contrast-ratio-in-20-lines</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/wcag-contrast-ratio-in-20-lines</guid>
      <pubDate>Thu, 15 Oct 2026 00:00:00 GMT</pubDate>
      <description>Implement the WCAG 2.x contrast ratio in nine lines of JavaScript, audit a real dark UI&apos;s text tokens, and binary-search the lightness that passes 4.5:1.</description>
      <category>Accessibility</category>
      <category>JavaScript</category>
      <category>Design tokens</category>
    </item>
    <item>
      <title>Structuring an Astro Static Site with Cloudflare Pages Functions</title>
      <link>https://gvxdigital.com/research/structuring-an-astro-site-with-pages-functions</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/structuring-an-astro-site-with-pages-functions</guid>
      <pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate>
      <description>How we lay out an Astro static site with Cloudflare Pages Functions: file-based routes, shared helpers, bindings in wrangler.jsonc, and secrets kept out of the repo.</description>
      <category>Astro</category>
      <category>Cloudflare</category>
      <category>Architecture</category>
    </item>
    <item>
      <title>Your Website Is a Business Asset: Why Small Businesses Should Own Their Digital Presence</title>
      <link>https://gvxdigital.com/research/your-website-is-an-asset-you-own</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/your-website-is-an-asset-you-own</guid>
      <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
      <description>A small business website is an asset, like equipment or inventory. Why owning your domain, content and data matters, and how to audit it.</description>
      <category>Strategy</category>
      <category>Ownership</category>
      <category>Web</category>
    </item>
    <item>
      <title>180 Seconds, 18% Quota Burn: How to Exploit Claude Code Cloud Sessions and Evacuate to Local VS Code</title>
      <link>https://gvxdigital.com/research/claude-code-quota-burn-telemetry</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/claude-code-quota-burn-telemetry</guid>
      <pubDate>Wed, 07 Oct 2026 00:00:00 GMT</pubDate>
      <description>A telemetry analysis of Claude Code Cloud Sessions: a 3-minute QA sprint used 18% of a Pro quota, and how to evacuate to local VS Code.</description>
      <category>AI Agents</category>
      <category>Claude Code</category>
      <category>Token Economics</category>
      <category>DevOps</category>
      <category>OpenSEO</category>
    </item>
    <item>
      <title>Optional Intelligence: Designing AI Features That Can Be Switched Off</title>
      <link>https://gvxdigital.com/research/optional-intelligence</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/optional-intelligence</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>The most trustworthy AI feature is one the product doesn&apos;t need. Four properties that keep intelligence useful without making it a point of failure.</description>
      <category>AI</category>
      <category>Product design</category>
      <category>Risk</category>
    </item>
    <item>
      <title>Own the First Conversation</title>
      <link>https://gvxdigital.com/research/own-the-first-conversation</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/own-the-first-conversation</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>The intake form is the most undervalued asset on a business website. Why the first exchange with a prospect should be designed and owned.</description>
      <category>Strategy</category>
      <category>Customer intake</category>
      <category>AI</category>
    </item>
    <item>
      <title>Rate-limiting an AI endpoint with a single D1 table</title>
      <link>https://gvxdigital.com/research/rate-limiting-an-ai-endpoint-with-d1</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/rate-limiting-an-ai-endpoint-with-d1</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>Per-visitor and global daily budgets, enforced before the model is called, with no extra infrastructure. The design, the SQL, and why it fails closed.</description>
      <category>AI integration</category>
      <category>Cloudflare</category>
      <category>Cost control</category>
    </item>
    <item>
      <title>Self-hosting Google Fonts without a build plugin</title>
      <link>https://gvxdigital.com/research/self-hosting-google-fonts</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/self-hosting-google-fonts</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>A short script, a modern user agent, and one dedupe rule replace a runtime dependency on a third-party font host. How we moved a 24-family site.</description>
      <category>Performance</category>
      <category>Web</category>
      <category>Privacy</category>
    </item>
    <item>
      <title>The Case for Boring Web Architecture</title>
      <link>https://gvxdigital.com/research/the-case-for-boring-web-architecture</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/the-case-for-boring-web-architecture</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>Static pages, a handful of edge functions, one database, and a git push. Why the least fashionable stack is the one that keeps ownership with the builder.</description>
      <category>Strategy</category>
      <category>Architecture</category>
      <category>Web</category>
    </item>
    <item>
      <title>Treating visitor text as untrusted when it reaches a model</title>
      <link>https://gvxdigital.com/research/untrusted-text-in-model-prompts</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/untrusted-text-in-model-prompts</guid>
      <pubDate>Mon, 05 Oct 2026 00:00:00 GMT</pubDate>
      <description>A web form that feeds a language model has the same trust problem as any input field, with one extra twist. Six habits that keep it contained.</description>
      <category>AI integration</category>
      <category>Security</category>
      <category>Engineering</category>
    </item>
    <item>
      <title>The Future Belongs to System Builders</title>
      <link>https://gvxdigital.com/research/system-builders</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/system-builders</guid>
      <pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate>
      <description>When execution gets cheap, the advantage moves to whoever designs the system doing the executing — not whoever does the work by hand.</description>
      <category>Strategy</category>
      <category>Systems thinking</category>
    </item>
    <item>
      <title>Agents that fail loudly: designing AI workflows for the bad day</title>
      <link>https://gvxdigital.com/research/agents-that-fail-loudly</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/agents-that-fail-loudly</guid>
      <pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate>
      <description>Autonomous systems earn trust by how they behave when something goes wrong. Notes on escalation design and confidence thresholds.</description>
      <category>AI agents</category>
      <category>Automation</category>
      <category>Engineering</category>
    </item>
    <item>
      <title>MCP in production: wiring business systems to language models</title>
      <link>https://gvxdigital.com/research/mcp-in-production</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/mcp-in-production</guid>
      <pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate>
      <description>Model Context Protocol moved integration work from custom glue code to a standard interface. Field notes from connecting real business tools to AI systems.</description>
      <category>AI integration</category>
      <category>MCP</category>
      <category>Software engineering</category>
    </item>
    <item>
      <title>The solo stack: shipping production software as a team of one</title>
      <link>https://gvxdigital.com/research/the-solo-stack</link>
      <guid isPermaLink="true">https://gvxdigital.com/research/the-solo-stack</guid>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <description>AI-accelerated development collapsed the team size a real product requires. What that changes about architecture choices, and what it doesn&apos;t.</description>
      <category>Software engineering</category>
      <category>Product</category>
      <category>Strategy</category>
    </item>
  </channel>
</rss>
