<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>84EM.BLOG</title><link>https://84em.blog/</link><description>Recent content on 84EM.BLOG</description><generator>Hugo</generator><language>en-us</language><copyright>Andrew Miller</copyright><lastBuildDate>Fri, 27 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://84em.blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Privacy Policy</title><link>https://84em.blog/legal/privacy-policy/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/legal/privacy-policy/</guid><description>&lt;p>&lt;strong>Last Updated:&lt;/strong> February 27, 2026&lt;/p>
&lt;p>This privacy policy explains how 84EM.BLOG collects, uses, and protects information when you visit this website.&lt;/p>
&lt;h2 id="information-we-collect">Information We Collect&lt;/h2>
&lt;p>84EM.BLOG is a personal blog and does not require account creation, login, or form submission to access content.&lt;/p>
&lt;p>&lt;strong>Automatically Collected Information&lt;/strong>&lt;/p>
&lt;p>When you visit this site, our infrastructure providers may collect:&lt;/p>
&lt;ul>
&lt;li>Page views and referrer information (anonymized, no IP addresses stored)&lt;/li>
&lt;li>General geographic region (country-level only)&lt;/li>
&lt;li>Browser type and device category&lt;/li>
&lt;/ul>
&lt;p>This data is collected in aggregate and cannot identify individual visitors.&lt;/p></description></item><item><title>Your AI Meeting Notes Are Losing Context</title><link>https://84em.blog/your-ai-meeting-notes-are-losing-context/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/your-ai-meeting-notes-are-losing-context/</guid><description>&lt;p>I recorded a client meeting, handed the AI-generated summary to an agent, and asked it to build a project plan. What came back was organized and mostly right, but it was missing context that would have made it better.&lt;/p>
&lt;h2 id="what-happened">What Happened&lt;/h2>
&lt;p>The recording tool did a solid job generating a summary with action items and key decisions. On paper, the notes looked complete.&lt;/p>
&lt;p>But when I passed those notes to an agent, the output had gaps. Priorities the client emphasized were condensed. Concerns they raised in passing weren&amp;rsquo;t captured. Context around why certain decisions were made wasn&amp;rsquo;t part of the summary. The agent only knew what the summary told it.&lt;/p></description></item><item><title>Why 84EM Has Multiple Domains Now</title><link>https://84em.blog/why-84em-has-multiple-domains/</link><pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/why-84em-has-multiple-domains/</guid><description>&lt;p>I&amp;rsquo;ve been building for the web for 31 years. For the last 14, 84EM has been the vehicle: custom development, agency partnerships, and WordPress work across industries. That positioning served me well, but over the past year the work changed and the brand needed to catch up.&lt;/p>
&lt;h2 id="the-problem-with-one-domain">The Problem With One Domain&lt;/h2>
&lt;p>More clients started coming to me with the same story: a previous vendor couldn&amp;rsquo;t deliver, the project stalled, and now they need someone to pick it up and ship it. Sometimes it&amp;rsquo;s WordPress. Sometimes it&amp;rsquo;s React, Next.js, Python, or an AI integration that got halfway built and abandoned.&lt;/p></description></item><item><title>Using FFmpeg to Let Claude Code See a Client's Bug</title><link>https://84em.blog/using-ffmpeg-to-let-claude-code-see-a-clients-bug/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/using-ffmpeg-to-let-claude-code-see-a-clients-bug/</guid><description>&lt;p>A client sent me a screen recording of a bug. I needed Claude Code to help diagnose it, but Claude Code can&amp;rsquo;t watch videos. It can read files and look at images, but a &lt;code>.mp4&lt;/code> is a black box.&lt;/p>
&lt;p>So I converted the video into a series of still frames and let Claude Code step through them visually.&lt;/p>
&lt;h2 id="the-command">The Command&lt;/h2>
&lt;p>&lt;a href="https://www.ffmpeg.org/" target="_blank" rel="noopener nofollow">FFmpeg ↗&lt;/a> handles the conversion. It&amp;rsquo;s free, open-source, and available on every platform.&lt;/p></description></item><item><title>How I Wrote a Python Script to Parse Google Timeline Data Instead of Just Installing a Mileage App</title><link>https://84em.blog/google-timeline-mileage-python-script/</link><pubDate>Mon, 16 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/google-timeline-mileage-python-script/</guid><description>&lt;p>My wife runs an antique business. She&amp;rsquo;s a vendor at a couple of local shops, which means regular trips to drop off inventory, rearrange displays, and do all the things that keep a booth looking fresh. At tax time, those trips add up to a meaningful mileage deduction — if you&amp;rsquo;ve been tracking them.&lt;/p>
&lt;p>We had not been tracking them.&lt;/p>
&lt;p>So I did what any reasonable developer with 30 years of programming experience would do: I spent an evening reverse-engineering Google Maps Timeline data and writing a Python script to extract the mileage retroactively.&lt;/p></description></item><item><title>AI Web Research Has a Fact-Checking Problem</title><link>https://84em.blog/ai-web-research-has-a-fact-checking-problem/</link><pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/ai-web-research-has-a-fact-checking-problem/</guid><description>&lt;p>I was putting together a hosting comparison for a client project. The AI tool I used to fetch and summarize pricing pages reported add-on costs at roughly $3/month. When I verified against the actual page, the real prices were $20-26/month. Not even close.&lt;/p>
&lt;p>The client never saw those numbers. I verify every claim AI produces before it goes anywhere near a deliverable. That&amp;rsquo;s the whole point of this post: AI speeds up my research process significantly, but it does not get the final word. I do.&lt;/p></description></item><item><title>Trello Planner Doesn't Mark You as Busy in Google Calendar. Here's How to Fix It.</title><link>https://84em.blog/trello-planner-google-calendar-busy-fix/</link><pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/trello-planner-google-calendar-busy-fix/</guid><description>&lt;p>Trello&amp;rsquo;s Planner feature lets you drag cards onto a calendar to block time for tasks. It syncs with Google Calendar, which sounds useful. The problem is how it syncs.&lt;/p>
&lt;p>Every card you drag onto the Planner creates a Focus Time event in Google Calendar. Focus Time events don&amp;rsquo;t automatically decline conflicting meetings unless you manually enable that on each event. Trello doesn&amp;rsquo;t give you a way to change this.&lt;/p>
&lt;p>If you&amp;rsquo;re using Planner to block time for client work, your calendar still looks open to anyone trying to book a meeting with you. That defeats the purpose.&lt;/p></description></item><item><title>The Subscriptions Behind Every Client Project</title><link>https://84em.blog/the-subscriptions-behind-every-client-project/</link><pubDate>Mon, 09 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/the-subscriptions-behind-every-client-project/</guid><description>&lt;p>I pay for services when the free version costs me more in time, risk, or client trust than the subscription price.&lt;/p>
&lt;h2 id="kinsta">Kinsta&lt;/h2>
&lt;p>Managed WordPress hosting isn&amp;rsquo;t cheap. Shared hosting and VPS options cost less.&lt;/p>
&lt;p>I use &lt;a href="https://kinsta.com" target="_blank" rel="noopener nofollow">Kinsta ↗&lt;/a> because support actually helps instead of pointing you to documentation. Automated backups run daily. Staging environments take one click. PHP version updates are painless. CDN is built in.&lt;/p>
&lt;p>When a client site goes down at 2 AM, I need it back up in minutes, not hours of troubleshooting server configuration.&lt;/p></description></item><item><title>Claude Opus 4.6: What Actually Matters for Developers</title><link>https://84em.blog/claude-opus-4-6-what-it-means-for-developers/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/claude-opus-4-6-what-it-means-for-developers/</guid><description>&lt;p>Anthropic released Claude Opus 4.6 yesterday, and it&amp;rsquo;s a significant upgrade over its predecessor. I&amp;rsquo;ve been using it since launch, and here&amp;rsquo;s what stands out from a practical standpoint.&lt;/p>
&lt;h2 id="the-coding-improvements-are-real">The coding improvements are real&lt;/h2>
&lt;p>Opus 4.6 plans more carefully, stays on task longer during agentic sessions, and handles larger codebases more reliably. It also catches its own mistakes better during code review and debugging. If you&amp;rsquo;ve ever watched Claude lose the thread halfway through a complex refactor, that&amp;rsquo;s the specific problem this addresses.&lt;/p></description></item><item><title>Meilisearch for WordPress: A Developer's Honest Take</title><link>https://84em.blog/meilisearch-for-wordpress/</link><pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/meilisearch-for-wordpress/</guid><description>&lt;p>WordPress default search isn&amp;rsquo;t great. It runs a &lt;code>LIKE&lt;/code> query against &lt;code>wp_posts&lt;/code>, ignores relevance, and gets slower as your content grows. Every WordPress developer knows this. The question is what to replace it with.&lt;/p>
&lt;p>I recently built a directory site with a few thousand listings that needed fast, typo-tolerant search. I went with Meilisearch. Here&amp;rsquo;s what I learned and how it compares to the alternatives.&lt;/p>
&lt;h2 id="what-meilisearch-is">What Meilisearch Is&lt;/h2>
&lt;p>Meilisearch is an open-source search engine written in Rust. You run it as a standalone service, feed it documents via a REST API, and query it the same way. It handles full-text search, typo tolerance, filtering, faceting, and geo-based sorting out of the box.&lt;/p></description></item><item><title>WordPress.com Now Has a Claude Connector</title><link>https://84em.blog/wordpress-com-claude-connector/</link><pubDate>Thu, 05 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/wordpress-com-claude-connector/</guid><description>&lt;p>WordPress.com launched an official Claude connector today. It&amp;rsquo;s the first hosted WordPress platform to ship one, and it&amp;rsquo;s built on the MCP and OAuth 2.1 groundwork they&amp;rsquo;ve been laying since late 2025.&lt;/p>
&lt;p>If you work with WordPress professionally, a few things are worth paying attention to &amp;ndash; and one distinction matters more than the rest.&lt;/p>
&lt;h2 id="what-it-actually-does">What it actually does&lt;/h2>
&lt;p>The connector gives Claude read-only access to a WordPress.com site&amp;rsquo;s data. Users can ask Claude questions grounded in their real site content: traffic stats, comment summaries, content audits, that sort of thing. It&amp;rsquo;s accessible through Claude&amp;rsquo;s connectors directory, authorized via OAuth 2.1, and revocable at any time.&lt;/p></description></item><item><title>Building a High-Performance Directory with Headless WordPress and Hugo</title><link>https://84em.blog/headless-wordpress-hugo-directory/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/headless-wordpress-hugo-directory/</guid><description>&lt;p>Directory websites have conflicting requirements. Administrators need a familiar content management interface. Visitors need fast page loads. Store owners need an easy way to submit and update their listings.&lt;/p>
&lt;p>Traditional WordPress handles the first requirement well but struggles with the other two. Dynamic page generation slows down as listing counts grow. User registration creates friction that kills submission rates. Caching helps performance but adds complexity and edge cases.&lt;/p>
&lt;p>We needed a different approach for a vintage store directory: WordPress for content management, but something else for the public-facing site.&lt;/p></description></item><item><title>AI Won't Replace Developers. But It Might Break the Pipeline That Creates Them.</title><link>https://84em.blog/ai-wont-replace-developers/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/ai-wont-replace-developers/</guid><description>&lt;p>I&amp;rsquo;ve been playing music since I could walk and writing my own songs since I was a teenager. I&amp;rsquo;ve been writing code since I was a teenager. Professionally, since 1995. Now I&amp;rsquo;m in my 50s, and I&amp;rsquo;ve watched both industries go through multiple rounds of &amp;ldquo;this technology will replace humans.&amp;rdquo;&lt;/p>
&lt;p>In the 80s, MIDI and synthesizers were supposed to eliminate musicians. Samplers could reproduce any instrument. Drum machines kept perfect time. Why would anyone need a band?&lt;/p></description></item><item><title>There's a WordPress Plugin for That (But Should You Use It?)</title><link>https://84em.blog/there-is-a-wordpress-plugin-for-that-but-should-you-use-it/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/there-is-a-wordpress-plugin-for-that-but-should-you-use-it/</guid><description>&lt;p>A client asked me to build a credit application form in WordPress. They wanted to collect social security numbers, employment history, income verification—everything a lender needs to process a loan.&lt;/p>
&lt;p>Plugins exist that could do this. I recommended a third-party service instead.&lt;/p>
&lt;p>Not because WordPress can&amp;rsquo;t handle sensitive data. It can. But the liability of storing social security numbers and financial data on their WordPress site wasn&amp;rsquo;t worth avoiding the integration work with a service built for that level of security.&lt;/p></description></item><item><title>The WordPress Plugins I Actually Use</title><link>https://84em.blog/wordpress-plugins-i-actually-use/</link><pubDate>Tue, 20 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/wordpress-plugins-i-actually-use/</guid><description>&lt;p>Since I started specializing in WordPress development in 2012, I&amp;rsquo;ve installed, tried and tested hundreds of plugins. Most get uninstalled within a week. These nine stay.&lt;/p>
&lt;h2 id="fluentsmtp">FluentSMTP&lt;/h2>
&lt;p>WordPress&amp;rsquo;s &lt;code>wp_mail()&lt;/code> function is unreliable. Shared hosting providers throttle outbound email. Messages land in spam folders or don&amp;rsquo;t send at all.&lt;/p>
&lt;p>&lt;a href="https://fluentsmtp.com/" target="_blank" rel="noopener nofollow">FluentSMTP ↗&lt;/a> routes email through actual mail services: SendGrid, Mailgun, Amazon SES, or any SMTP server you control. Configure it once, forget about it. Email logging shows exactly what was sent and when, which matters when a client asks &amp;ldquo;did that password reset email go out?&amp;rdquo;&lt;/p></description></item><item><title>When Claude Code Crashes: Using Claude.ai as a Fallback for Codebase Analysis</title><link>https://84em.blog/when-claude-code-crashes-using-claude-ai-as-fallback-for-codebase-analysis/</link><pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/when-claude-code-crashes-using-claude-ai-as-fallback-for-codebase-analysis/</guid><description>&lt;p>Claude Code is my go-to for working inside codebases. It reads files, runs commands, and executes changes in context. But it has limits.&lt;/p>
&lt;p>This morning I was working on a WordPress plugin refactor. Version 3.0 moved from local database validation to HubSpot API calls, and I needed to find all the dead code left over from v2: unused database methods, orphaned admin screens, legacy partials, and a composer dependency that was no longer needed.&lt;/p></description></item><item><title>Building a Personal Workflow in 10 Minutes with Claude</title><link>https://84em.blog/building-a-personal-workflow-in-10-minutes-with-claude/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/building-a-personal-workflow-in-10-minutes-with-claude/</guid><description>&lt;p>This morning I dropped the dogs off at daycare around 7am. On the drive, I used Android Auto to dump ideas and tasks into Google Calendar. By the time I got home, I had about 27 calendar events with voice-transcribed titles like &amp;ldquo;follow up on staging site migration API keys&amp;rdquo; and &amp;ldquo;send invoice for plugin work last month also check on hosting renewal.&amp;rdquo;&lt;/p>
&lt;p>I opened Claude, asked it to fetch my calendar events for the day, and turn them into a markdown checklist organized by Morning, Afternoon, and Evening. Thirty seconds later I had a clean task list.&lt;/p></description></item><item><title>Finding Broken Links in WordPress: A WP-CLI Approach</title><link>https://84em.blog/finding-broken-links-wordpress-wp-cli/</link><pubDate>Mon, 12 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/finding-broken-links-wordpress-wp-cli/</guid><description>&lt;p>Broken links are inevitable. Content gets removed, domains expire, URLs change. The question is whether you find them before your visitors do.&lt;/p>
&lt;p>Most WordPress link checking solutions fall into two categories: plugins that run on every page load (slow) or external services that crawl your site. Neither approach is ideal.&lt;/p>
&lt;p>Crawlers have to render every page. That means bootstrapping WordPress, loading your theme, executing page builder logic, and generating HTML for each URL. On a site with thousands of pages, that&amp;rsquo;s significant server load. Worse, security plugins like Wordfence or Sucuri often rate-limit or outright block crawlers, even when they&amp;rsquo;re yours.&lt;/p></description></item><item><title>AI-Assisted Content Migration: From Discovery to Deployment</title><link>https://84em.blog/ai-assisted-wordpress-content-migration/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/ai-assisted-wordpress-content-migration/</guid><description>&lt;p>&lt;a href="https://84em.com" target="_blank" rel="noopener nofollow">84EM.COM ↗&lt;/a> had &amp;ldquo;13 years of experience&amp;rdquo; and &amp;ldquo;30 years of programming&amp;rdquo; hardcoded across 60+ pages. Every January, I&amp;rsquo;d need to find and update these references. The task seemed straightforward until you start counting the variations: hero blocks, template files, generated local SEO pages, FAQ sections.&lt;/p>
&lt;p>Rather than manually hunting through the WordPress admin, I handed the problem to Claude Code.&lt;/p>
&lt;h2 id="discovery-let-ai-do-the-counting">Discovery: Let AI Do the Counting&lt;/h2>
&lt;p>The first step was understanding the scope. Claude generated and ran a database query to find all instances:&lt;/p></description></item><item><title>Never Update "Years of Experience" Again: Dynamic Shortcodes in WordPress</title><link>https://84em.blog/dynamic-years-shortcode-wordpress/</link><pubDate>Thu, 08 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/dynamic-years-shortcode-wordpress/</guid><description>&lt;p>Every year, I have the same task on 84em.com &amp;mdash; find years of experiences references and update them. e.g., &amp;ldquo;13 years of WordPress experience&amp;rdquo;, &amp;ldquo;30 years of experience in the industry&amp;rdquo;, etc. Across 60+ pages it&amp;rsquo;s easy to miss a few.&lt;/p>
&lt;h2 id="the-scope-of-the-problem">The Scope of the Problem&lt;/h2>
&lt;p>A quick database scan showed just how many places needed updating:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Content Type&lt;/th>
 &lt;th>Count&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Pages&lt;/td>
 &lt;td>59&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Reusable Blocks&lt;/td>
 &lt;td>2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Templates&lt;/td>
 &lt;td>2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Total&lt;/strong>&lt;/td>
 &lt;td>63&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>I had years hardcoded in multiple variations: &amp;ldquo;30 years of experience,&amp;rdquo; &amp;ldquo;nearly 30 years of programming,&amp;rdquo; &amp;ldquo;over 13 years of WordPress development.&amp;rdquo; Some were in hero blocks used across dozens of pages. Others were buried in individual page content.&lt;/p></description></item><item><title>Backfilling Git Release History: Adding Tags and a Changelog to an Existing Repo</title><link>https://84em.blog/backfilling-git-release-history/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/backfilling-git-release-history/</guid><description>&lt;p>You inherited a project. Or maybe you built it yourself back when &amp;ldquo;just push to main&amp;rdquo; felt like enough process. Either way, you&amp;rsquo;re staring at a repo with dozens, hundreds, or even thousands of commits, no version tags, and no changelog. The git log is your only record of what changed and when.&lt;/p>
&lt;p>Manually sifting through commit history to reconstruct versions sounds tedious. It is. But this is exactly the kind of task AI handles well.&lt;/p></description></item><item><title>Optimizing Since 1995</title><link>https://84em.blog/optimizing-since-1995/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://84em.blog/optimizing-since-1995/</guid><description>&lt;p>My first real optimization project didn&amp;rsquo;t involve caching plugins, CDNs, or Core Web Vitals. It involved deleting an entire CMS.&lt;/p>
&lt;p>A client had a content management system that generated pages full of bloated, invalid markup. This was 1995—dial-up modems, where every unnecessary tag meant more time watching a page load line by line. The site had maybe 20 pages of content that changed once a quarter.&lt;/p>
&lt;p>The fix? I rebuilt it as a static HTML site. Hand-coded pages, clean valid markup, nothing wasted. On a 28.8k modem, the difference was obvious. The client could still update content—they just emailed me the changes.&lt;/p></description></item><item><title>Automating Client Documentation with AI: A Practical Workflow</title><link>https://84em.blog/automating-client-documentation-ai/</link><pubDate>Mon, 29 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/automating-client-documentation-ai/</guid><description>&lt;p>Nobody loves writing documentation. It&amp;rsquo;s one of those tasks that always gets pushed to the end of a project, squeezed in right before handoff, and takes longer than it should.&lt;/p>
&lt;p>But clients need documentation. They need to know how to update their homepage banner, add a new team member, or change their business hours. Without it, you become their documentation, fielding emails and calls for tasks they could easily handle themselves.&lt;/p></description></item><item><title>4 Magic Words for AI: Play the Devil's Advocate</title><link>https://84em.blog/play-the-devils-advocate/</link><pubDate>Mon, 22 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/play-the-devils-advocate/</guid><description>&lt;p>Most people use AI to confirm what they already think. That&amp;rsquo;s backwards.&lt;/p>
&lt;p>When I&amp;rsquo;m reviewing code, drafting a proposal, or planning a project approach, I ask Claude to argue against my solution. Poke holes. Find the edge cases I missed.&lt;/p>
&lt;p>It&amp;rsquo;s not about being negative. It&amp;rsquo;s about catching problems before they become expensive.&lt;/p>
&lt;p>I take it a step further: I pit different LLMs against each other.&lt;/p>
&lt;p>Get one opinion from Claude. Get another from ChatGPT. Run it by Gemini. When they agree, you&amp;rsquo;re probably on solid ground. When they disagree, that&amp;rsquo;s where the interesting questions live. That friction is valuable - it highlights assumptions you didn&amp;rsquo;t know you were making.&lt;/p></description></item><item><title>From MVP to Production: Iterating with Claude Code</title><link>https://84em.blog/uptimerobot-tool-evolution/</link><pubDate>Sat, 20 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/uptimerobot-tool-evolution/</guid><description>&lt;p>In my &lt;a href="https://84em.blog/posts/claude-code-plan-mode/">previous post&lt;/a>, I built an MVP for managing UptimeRobot monitors in 7 minutes using Claude Code&amp;rsquo;s Plan Mode. It could pause and delete monitors. Useful, but minimal.&lt;/p>
&lt;p>Two days later, it&amp;rsquo;s a proper tool.&lt;/p>
&lt;h2 id="the-iteration-loop">The iteration loop&lt;/h2>
&lt;p>The beauty of AI-assisted development is how fast you can iterate. Each feature follows the same pattern: describe what you want, review the plan, let Claude implement it, test, repeat.&lt;/p>
&lt;p>Here&amp;rsquo;s what got added:&lt;/p></description></item><item><title>Debugging Production Errors Without Leaving the Terminal</title><link>https://84em.blog/sentry-mcp-error-investigation/</link><pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/sentry-mcp-error-investigation/</guid><description>&lt;p>I use &lt;a href="https://sentry.io" target="_blank" rel="noopener nofollow">Sentry ↗&lt;/a> to monitor site errors on 84em.com. When something breaks, I get a Slack notification and can dig into the stack trace, affected URLs, and error frequency.&lt;/p>
&lt;p>&lt;img
 src="https://84em.blog/sentry-mcp-error-investigation/sentry-error-dashboard_hu7449729376618854689.webp"
 srcset="https://84em.blog/sentry-mcp-error-investigation/sentry-error-dashboard_hu7565590086117772042.webp 400w, https://84em.blog/sentry-mcp-error-investigation/sentry-error-dashboard_hu5628046167935891899.webp 800w, https://84em.blog/sentry-mcp-error-investigation/sentry-error-dashboard_hu7449729376618854689.webp 1200w"
 sizes="(max-width: 2560px) 100vw, 2560px"
 width="1200"
 height="1243"
 alt="Sentry error dashboard"
 loading="lazy"
 decoding="async"
 style="max-width: 2560px;">&lt;/p>
&lt;p>This works fine, but it means context switching: leave what I&amp;rsquo;m doing, open the dashboard, click through the issue, read the stack trace, figure out what&amp;rsquo;s happening.&lt;/p>
&lt;h2 id="a-better-workflow">A better workflow&lt;/h2>
&lt;p>I installed the &lt;a href="https://github.com/anthropics/claude-code/tree/main/packages/mcp-sentry" target="_blank" rel="noopener nofollow">Sentry MCP ↗&lt;/a> in Claude Code. Now when I get an error notification, I can ask Claude to investigate it directly.&lt;/p></description></item><item><title>Claude Code Plan Mode: From Idea to MVP in 7 Minutes</title><link>https://84em.blog/claude-code-plan-mode/</link><pubDate>Thu, 18 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/claude-code-plan-mode/</guid><description>&lt;p>Plan Mode. It&amp;rsquo;s a powerful feature in Claude Code.&lt;/p>
&lt;p>You can ask it to plan a new feature. It will think through the solution and provide a detailed write-up for you to review. You can then chat back and forth to refine it before implementation.&lt;/p>
&lt;h2 id="the-problem">The problem&lt;/h2>
&lt;p>I have a utility script to add new monitors to UptimeRobot via their API. I built it years ago. Pre-AI.&lt;/p>
&lt;p>I wanted to expand the functionality so I could edit and delete monitors too, so I asked Claude for a plan.&lt;/p></description></item><item><title>About</title><link>https://84em.blog/about/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/about/</guid><description>&lt;p>&lt;img src="https://84em.blog/images/headshot-150_hu833411670012667466.webp" width="150" height="150" alt="Andrew Miller" loading="lazy" decoding="async">&lt;/p>
&lt;p>This is where I document what I&amp;rsquo;m learning and building.&lt;/p>
&lt;p>Two threads: &lt;a href="https://84em.blog/categories/ai/">AI tools and workflows&lt;/a> that hold up in real projects, and &lt;a href="https://84em.blog/categories/dev/">web development&lt;/a> patterns that actually work in production. No breathless predictions. No tutorials that only work in ideal conditions.&lt;/p>
&lt;h2 id="ai">AI&lt;/h2>
&lt;p>Most AI coverage is either hype or doom. I write about what actually works day-to-day: coding agents, automation pipelines, and the tools worth paying for.&lt;/p>
&lt;h2 id="development">Development&lt;/h2>
&lt;p>After years of building web applications, APIs, and frontend interfaces, I started writing down the patterns and solutions that actually hold up in production.&lt;/p></description></item><item><title>Hello World</title><link>https://84em.blog/hello-world/</link><pubDate>Wed, 17 Dec 2025 00:00:00 +0000</pubDate><guid>https://84em.blog/hello-world/</guid><description>&lt;p>This is the first post on 84EM.AI.&lt;/p>
&lt;p>I&amp;rsquo;ve been using AI tools in my development work for a while now. Some of it works well. Some of it doesn&amp;rsquo;t. I&amp;rsquo;m going to start documenting what I learn here.&lt;/p>
&lt;h2 id="what-to-expect">What to expect&lt;/h2>
&lt;p>Posts will cover:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Workflows&lt;/strong> - How I actually use AI tools in day-to-day work&lt;/li>
&lt;li>&lt;strong>Tool reviews&lt;/strong> - Honest takes on what&amp;rsquo;s worth your time&lt;/li>
&lt;li>&lt;strong>Discoveries&lt;/strong> - Interesting things I stumble across&lt;/li>
&lt;li>&lt;strong>Practical applications&lt;/strong> - Real examples, not hypotheticals&lt;/li>
&lt;/ul>
&lt;h2 id="what-not-to-expect">What not to expect&lt;/h2>
&lt;ul>
&lt;li>Affiliate links&lt;/li>
&lt;li>Sponsored content&lt;/li>
&lt;li>&amp;ldquo;10 AI tools that will change your life&amp;rdquo; listicles&lt;/li>
&lt;/ul>
&lt;p>Just notes from the field.&lt;/p></description></item><item><title>Search</title><link>https://84em.blog/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://84em.blog/search/</guid><description/></item></channel></rss>