<?xml version="1.0"?><rss version="2.0"><channel><title>Patrick Gibbs: Writing</title><link>https://patrickgibbs.dev/writing/</link><description>How I build things, and what client projects taught: decisions from my own systems, and lessons from building and improving software for clients.</description><item><title>What does it mean to connect an AI app to a website?</title><link>https://patrickgibbs.dev/writing/agent-ready-personal-site/</link><guid>https://patrickgibbs.dev/writing/agent-ready-personal-site/</guid><description>You can connect a compatible AI app to this site and ask about my work. Here&apos;s what that connection does and how to try it.

If you&apos;re looking through my work, you can read the pages yourself or ask a compatible AI app to help. The connection lets your app request information directly from this site, including my profile, projects, résumé, and available meeting times.

You may see this called an &quot;agent-ready website&quot;. Here, it means I&apos;ve provided a structured version of my published information that software can request and read.

## What you can ask

Once connected, try &quot;What has Patrick built?&quot;, &quot;Find a project similar to mine&quot;, or &quot;Show me his résumé.&quot; Your app can retrieve the relevant information and link you to the original pages.

Unlike a passage copied into a chat, a new request can retrieve the site&apos;s current published information. That gives the app a direct source, although it can still misunderstand or summarize something incorrectly.

## What stays under your control

The connection cannot edit my pages, access private client files, read calendar-event details, or reserve an appointment. You finish a booking on the booking page yourself.

An app can also submit a short note for my review. It doesn&apos;t appear publicly until I approve it.

## How to try it

Open the [AI connection guide](/mcp/), choose your app, and follow its setup instructions. Some apps require a step in their settings. The connection is working when your app successfully requests information from the site.

Cloud AI apps connect to the published website. They cannot reach a preview running only on my computer.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Adding tests to software a business uses every day</title><link>https://patrickgibbs.dev/writing/mano-swartz-953-to-1627-tests/</link><guid>https://patrickgibbs.dev/writing/mano-swartz-953-to-1627-tests/</guid><description>For a fur-buying business, improving software also meant checking that customer enquiries, offers, and follow-up kept working.

Mano Swartz Furs uses software I built to manage its fur-buying program, including customer photos, appraisal drafts, messages, and phone enquiries. The business continued using it while I made improvements.

Automated tests help check that a change hasn&apos;t broken behavior the business depends on. The recorded suite grew from 953 to 1,627 tests across 63 files by the September 2026 check.

## What the number tells you

The count describes the checks in that suite. It doesn&apos;t prove the software has no defects, or tell you by itself how valuable each test is. The important question is whether the checks cover behavior people need to rely on.

In this project, that behavior sits around real work: reviewing customer photos, preparing offers, and keeping track of enquiries. The project record includes 20,054 photos returned to the client&apos;s Google Drive and 689 enquiry records across 491 callers.

## What I&apos;d carry into another project

I&apos;d start by identifying the actions people cannot afford to lose when the software changes. Then I&apos;d make those actions part of the checks used to review a change.

If you&apos;re nervous about changing software your business relies on, tests are one part of the investigation. Clear requirements, reliable data, and a way to recover from a failed update matter too.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Where I started with an inherited music platform</title><link>https://patrickgibbs.dev/writing/music-exclusive-48-hours/</link><guid>https://patrickgibbs.dev/writing/music-exclusive-48-hours/</guid><description>Music Exclusive needed security and payment problems fixed before launch. The first decision was which problems to tackle first.

Music Exclusive is a music subscription platform. I joined to investigate and repair software built by a previous developer as the founder prepared for launch.

The problems included account-access defects, unreliable scheduled tasks, and failures in the steps artists and fans needed to complete. My first job was to understand which failures could cause the most harm.

## Put account and data problems first

An account takeover issue needed attention before cosmetic cleanup. I prioritized access, identity, and payments, then worked through the rest of the findings.

Across two audits, I resolved 15 security findings. The recorded four-day launch-readiness work also included checking 27 steps across the artist and fan experience.

## Make the next change easier to check

Repairing the immediate problems was part of the job. I also removed obsolete code and added automated checks so later changes could be reviewed against a clearer baseline.

For someone taking over unfamiliar software, my starting point would be the same: understand the existing behavior, identify the most consequential failures, and verify each repair before expanding the work.

The case study explains the scope of my contribution and includes the founder&apos;s account of working with me.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Finding articles that an automated publishing system skipped</title><link>https://patrickgibbs.dev/writing/sgnews-89-second-backlog-run/</link><guid>https://patrickgibbs.dev/writing/sgnews-89-second-backlog-run/</guid><description>At SGNews, repairing the publishing process included making skipped articles visible so they could be processed again.

SGNews is a news site with an automated publishing process. I worked on how it collected source stories, prepared articles, and handled failures.

The project record counted 47,277 articles published between 7 May and 12 September 2026, including 2,445 in the final measured week. Those are historical figures from the site&apos;s public data.

## The articles left behind

Thirteen articles had been skipped by earlier processing runs. After the repair, a recorded run processed those articles in 89 seconds with no errors.

That timing describes one run. The more useful lesson was that the waiting articles could be identified and recovered, instead of disappearing into an apparently successful process.

## Show what failed

A source can stop working for several reasons: its page structure changes, it returns no article text, or access is blocked. Those failures need different fixes.

I worked on identifying those conditions and keeping the processing queue moving through the waiting articles. For a business relying on automatic publishing, knowing what was skipped is part of knowing whether the system is working.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Why missing supplier information shouldn&apos;t become a risk finding</title><link>https://patrickgibbs.dev/writing/vettique-missing-listing-not-proof/</link><guid>https://patrickgibbs.dev/writing/vettique-missing-listing-not-proof/</guid><description>Vettique helps assess suppliers. I changed how it used external information so missing records were distinguished from evidence of risk.

Vettique is a supplier-assessment tool. When I worked on it, missing information could push a supplier&apos;s risk score up even when there wasn&apos;t evidence that the supplier was unsafe.

A business-directory search is one example. Failing to find a listing tells you that the search returned no listing; it doesn&apos;t establish why the business is absent.

## Make the available evidence visible

I connected seven sources of supplier information, including customs records, business listings, pricing information, and website checks. The reports were changed to show missing information separately from signs of risk.

In one recorded example, a verified supplier&apos;s score changed from 85, labeled AVOID, to 25, labeled PROCEED. That example illustrates a corrected assessment; it doesn&apos;t establish the overall accuracy of the scoring system.

## Check whose records you&apos;re using

The work also identified 396,339 shipment records assigned to the wrong suppliers. Those records were removed before launch.

Adding sources is only useful if the information belongs to the business being assessed and the report makes its limitations clear. That&apos;s the lesson I&apos;d carry into another research or assessment tool.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>What your AI app can access on this site</title><link>https://patrickgibbs.dev/writing/what-an-agent-ready-site-exposes/</link><guid>https://patrickgibbs.dev/writing/what-an-agent-ready-site-exposes/</guid><description>The connection provides my published work and meeting availability. It keeps private information and appointment booking separate.

I wanted someone exploring my work to be able to use their own AI app. That meant deciding what the app should be able to request and which actions should remain with the person using it.

## Information the app can request

A connected app can read my professional profile, résumé, projects, client stories, services, writing, and meeting options. It can also search for relevant work and check available meeting times.

Those requests return information I&apos;ve chosen to publish. They don&apos;t give the app access to the private systems behind my client projects.

## Actions it cannot take

The app cannot edit the website, open private files, inspect calendar-event details, or create an appointment. To book a call, you choose and confirm a time on the booking page.

Keeping that final step with you makes it clear which appointment you&apos;re reserving. A suggested time and a confirmed reservation are different things.

## A small exception: notes for review

The connection includes a tool for submitting a short note. I review each one before it appears publicly. An app can submit a note for that review, but it cannot publish it directly.

## Checking the answer

A direct connection gives an AI app a source to work from; it doesn&apos;t guarantee a correct answer. The setup instructions ask the app to confirm successful requests and include links so you can check what it tells you.

If you&apos;d like to try it, the [connection guide](/mcp/) includes instructions for compatible apps.</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate></item><item><title>How I built a portrait you can pull apart</title><link>https://patrickgibbs.dev/writing/building-the-pixel-portrait/</link><guid>https://patrickgibbs.dev/writing/building-the-pixel-portrait/</guid><description>From a blue still image to a moving portrait that scatters under the cursor. The choices that made the interaction feel right.

I wanted this website to feel like something I&apos;d built, with a detail people could play with and remember. Ruben Marcus&apos;s portfolio was the starting point. His digital portrait made me wonder what my own version could feel like.

The first challenge was getting the image right. I wanted my arms and hands visible, as if I were working at the laptop. A close-up of my face wouldn&apos;t tell the same story.

## The video was only the beginning

I tried generating a blue, pixelated video. Some attempts looked close until I watched them carefully. The laptop logo looked pasted on. In one clip, my eyes closed and stayed closed too long. Those small things were enough to make the whole image feel wrong.

Once the video worked, simply putting it on the page wasn&apos;t enough. I wanted visitors to affect it.

The browser now uses the moving video as the source for a field of particles. Those particles can move away from their original positions while the underlying footage continues to play. That gives the scene somewhere precise to return to.

## A small cursor, a strong response

My first correction was about the size of the disturbance. A large circle around the cursor made the portrait look smudged. Shrinking the circle helped, but reducing the force at the same time lost the effect I wanted.

The useful distinction was between the area affected and how far the pixels moved. I wanted a narrow cut with enough movement to break up the image inside it.

Fast movement brought another problem. The browser doesn&apos;t report every position the cursor passes through. Connecting those reported positions keeps a quick swipe from jumping over the image without touching it.

## The whole scene belongs together

At first, a click only affected the portrait. Then we added tiny pixels around it and across the hero. They needed to feel connected. The portrait, code, and floating pixels need to respond as one scene. A normal click should disturb the nearby area; Explode everything is the separate control for scattering the whole hero.

I also removed the effect that made the whole portrait float with the cursor. It made me dizzy. Keeping the image fixed gave the smaller interactions room to work.

The result still has motion, but it has a stable place to come back to. That&apos;s the part I kept coming back to during the build: how the interaction feels when it settles.

I wanted the portrait, live code, and floating pixels to feel connected when you move through them. Matching their response matters more than adding another effect. The scene should also return to a stable position when the disturbance settles.

[Try the portrait in the Lab](/lab/), or [read about the tools and inspiration](/about-this-site/).</description><pubDate>Thu, 10 Sep 2026 00:00:00 GMT</pubDate></item></channel></rss>