Fixing bugs from my iPhone at the airport

I ran into an issue with my Scribble web app after adding the capability to include an image in a blog post: image size limit validation was required. Oopsy. I asked Claude Code on my iPhone ( I was on my way to the airport!) to confirm the potential issue. I had to find a way to resize images from Photos. No problem. I need a new Shortcut for that (I thought I already had one!). Using Siri AI, I created such shortcut. It resizes the image at 50%. Now that image is small enough. But, the web app should do the resize itself, right? Yeah. On my iPhone using Claude Code, I tweaked the upload feature and sure enough, five minutes later, a new version was deployed on Vercel.

We live in the future.

Week 43 Summary (Oct 18 - Oct 24, 2026)

Two slow-running threads defined the week: the long-form iPhone upgrade piece and a hardening doubt about Ghost. I poured more effort into my iPhone 18 Pro review in three sessions: Sunday’s cost analysis, Monday’s conclusion, and one more pass Saturday morning, making it the week’s most sustained writing effort. Platform questions ran alongside it: Sunday brought a post on the Ghost renewal plus reading up on Micro.blog’s newer Premium features, Ghost sync among them, and by Thursday evening the doubt had sharpened into a direct question about whether Ghost is still the right WordPress replacement at all. The iPhone Duo owned the middle of the week, an evening of video reviews Wednesday, notes gathered that same night, finished and shared by the next morning. Underneath it all, three housekeeping passes got the n8n instance ready for 3.0, and Saturday closed with OpenClaw cleared off the Mac mini and Search and Stats plugins added to meta.numericcitizen.me.

Week 42 Summary (Oct 11 - Oct 17, 2026)

A week built around one shipped thing: the Blips newsletter digest. Monday was groundwork, a Blips post aggregator sketched with Claude AI, a recovered Buttondown account, Scribbles configured, and by Tuesday morning the first September issue was out the door, announced to subscribers, and documented on meta.numericcitizen.me. Apple supplied the week’s commentary thread, running from HomeView on Tuesday through the Siri AI language-versus-device-language problem and Apple’s apparent retreat from keynotes later in the week. The long-running iPhone 15 Pro Max to iPhone 18 Pro Max upgrade review bookended things, picked up Monday afternoon and worked on again Saturday.

Week 41 Summary (Oct 4 - Oct 10, 2026)

A week that started strong and quickly wrapped up. Sunday carried more than the next three days combined: three unrelated bugs closed in one evening, two AI-related videos watched and digested, and then the week settled into shorter, sharper sessions. Sundays are always busy. Two build threads ran through it — the saved-bookmarks web app graduated from working to trustworthy on Tuesday evening (broken-link rechecks, full backup and restore, a last-export-date readout), and on Thursday a custom visual theme for the Scribbles.page blog went from first poke to finished inside a single day with Claude Desktop. The writing-in-public iPhone 15 Pro Max to 18 Pro Max piece was the connective tissue early on, touched Sunday, promoted from sub-page to a full Craft document on Monday, resumed Wednesday, then quiet. The back half turned reflective and Apple-shaped: a note about the coming MacBook Pro, a post on being more deliberate about which Claude model fits which task, and a quick look at Cork for Homebrew. Tooling got the attention this week; the journal itself stayed lean, with Socializing and Reading unlogged all seven days, surprisingly.

Week 40 Summary (Sep 27 - Oct 3, 2026)

A week owned by n8n — first as a problem, then as a playground. Monday night’s out-of-memory crash forced a droplet bump to 2 GB, Tuesday brought another version upgrade (2.40 → 2.41.3), and by Wednesday afternoon the Agents tab was enabled and a minimal agent was already reading Craft Daily Notes. Alongside that, the “Writing in public” iPhone 15 Pro Max → 18 Pro Max piece advanced in small increments on four separate days without shipping, making it the week’s longest-running open thread.

Reading leaned heavily Apple — John Ternus reshaping the company, Gruber on the iPhone Air, the Duo UI critique — while watching turned toward AI tooling craft: the Jev decision-model video, then two videos on Claude prompting and skill-building. The week closed on a genuine debugging win: tracing runaway Neon compute to Birchfeed’s 11-minute polling, fixed and written up the same morning. A week of infrastructure maintenance, agent curiosity, and one article that kept almost getting finished.

Solving a High Compute Usage Problem in One of My Web Apps

The setup

I run a handful of small personal web apps on Vercel. Two of them, a task manager and a bookmarks manager, store their data in the same Neon Postgres project on the free plan.

That plan includes 100 CU-hours of compute per project per month. Neon suspends the compute after 5 minutes without activity and wakes it on the next query. In theory, a database used by one person should barely touch that allowance.

The problem

Since the second half of September, my Neon compute usage had been running high, and I couldn’t find out why.

On October 3, the Neon console showed 8 CU-hours already used for the month. That was after about two and a half days.

At that pace I would run out before the end of October. My own use of the two apps didn’t seem like enough to explain it, so something else was keeping the database awake.

Does Neon have an analytics API?

My first question was whether Neon offers more detailed usage data than the console. It does, but on the free plan the useful part is not where I expected it.

  • Consumption history API. It returns per-project usage by hour, day or month, but Neon’s usage documentation says it requires a paid plan.
  • Project details endpoint. On the free plan, Neon points you to cumulative counters such as compute time and active time for the billing period. For my project they all came back as zero, so I relied on the console’s figure instead.
  • Operations endpoint. It lists every compute start and suspend with a timestamp, and it works on the free plan. This is the one that solved the problem.

How I investigated it

I did the investigation with Claude, which has access to my Neon, Vercel and Craft accounts through MCP connectors. My web app documentation lives in Craft, so Claude could see which apps use the database before looking at any logs.

  1. Check the compute configuration. The compute is fixed at 0.25 CU, the same value for minimum and maximum. Autoscaling couldn’t cause spikes, so the usage was entirely about how long the compute stayed awake.
  2. Read the operations log. The compute started, stayed active for about 5 minutes 15 seconds, suspended, then started again about 11 minutes after the previous start. The cycle ran around the clock, including between midnight and 4 AM Montreal time. That ruled me out.
  3. Count requests per route in the Vercel logs. Over 24 hours, the task manager received about 80 requests, almost all from bots probing for configuration files. The bookmarks app’s RSS feed received 163 requests, and none were served from cache.
  4. Line up the timestamps. Each feed request matched a compute start within a second. A sample from October 3:
RSS feed request (UTC) Compute start (UTC)
11:20:19 11:20:19
11:31:01 11:31:02
11:41:59 11:42:00
11:52:59 11:52:59
  1. Rule out the uptime ping. An uptime check hits the bookmarks app every hour, in a burst of 5 or 6 requests. Three of those bursts arrived while the compute was suspended and didn’t wake it. The requests stop at the app’s authentication check, before any database query.
  2. Identify the pollers. The logs don’t record user agents, but the two polling patterns matched two feed reader subscriptions I had added for testing: Birchfeed every 11 minutes and Inoreader every hour.
A Postgres monitoring graph displays Endpoint Inactive, Allocated CU, and RAM Usage metrics over a time period from 1:16 PM to 9:16 AM.

The two readers also explain how the problem built up. Inoreader’s hourly polling had been there for a while. At about 24 wakes a day, it cost roughly 16 CU-hours a month, a latent problem that stayed within the allowance. It got much worse when I started using Birchfeed, which polls far more aggressively and doesn’t let me set a polling interval per feed.

The math

On a database that scales to zero, cost follows the number of wakes, not the size of the queries. Each wake kept the compute on for about 5.25 minutes at 0.25 CU:

0.25 CU × (5.25 ÷ 60) h ≈ 0.022 CU-hours per wake

About 131 wakes a day added up to roughly 2.9 CU-hours a day. Over two and a half days, that is 7 to 8 CU-hours, which matched the console.

Over 31 days, it projected to about 90 CU-hours before any real use of the apps. A tiny query every 11 minutes was costing about as much as keeping the database on half of every day.

The fix

Both subscriptions were left over from testing and I didn’t need them, so I removed them. That took the polling away entirely.

I also considered making the feed cacheable at Vercel’s CDN, so polls would be answered without touching the database. With the readers gone, I didn’t need it. It remains the option if I subscribe to the feed again.

Now only real activity should wake the compute: my own use of the apps, writes from my automations, and two weekly archive syncs. I expect to finish October well under 100 CU-hours.

Week 39 Summary (Sep 20 - Sep 26, 2026)

One article carried the week. The “Writing in public — Upgrading from iPhone 15 Pro Max to iPhone 18 Pro Max — Was it Worth it?” piece got four separate sessions (Sunday, Monday, Tuesday, then a late Friday night pass), moving from transferred QuickNotes toward a shaped draft, with a camera-artifact demo clip recorded alongside it.

Photography was the week’s second thread — iPhone 18 Pro Max shots went out on Glass twice, a Montreal Moment landed on Perfect Imperfections, and a batch went up on Unsplash for the first time in a long while.

Underneath the creative work ran an infrastructure storyline that ate three mornings: n8n was upgraded Wednesday (2.37.10 → 2.40.5), went down Thursday, was upgraded and restarted again, and was pinned as the likely cause of a Neon DB 80% CPU warning — which led to setting up external monitoring for it.

The week closed with polish and experimentation, using Claude AI to rework the whois.numericcitizen.me landing page and fix its sitemap, plus test runs of the Craft beta and Moments.im collections.

Week 38 Summary (Sep 13 - Sep 19, 2026)

One project dominated the week: Writing in public — My experience upgrading from iPhone 15 Pro Max to iPhone 18 Pro Max was touched every single day, Sunday through Saturday — moving from research and drafting to an intro rewrite, a task list, references to external 18 Pro reviews, an embedded video review, and finally first-hand observations once the device actually arrived on Friday night.

The second thread was infrastructure. whois.numericcitizen.me got a weekend to-do list, a typo pass, and a partly successful footer change that hit MCP limitations, while Elements 3.0 and its MCP setup in Claude Desktop went through a first set of tests.

Smaller maintenance ran underneath: confirming the Ghost and Micro.blog weekly sync is picking up new posts, and a Saturday attempt at an n8n workflow execution issue. Reading and watching were sparse, and both fed the same interests — Apple news on Sunday, UniFi Express 7 meshing videos on Wednesday.

The shape of the week: sustained single-project momentum, bookended by anticipation on Sunday and the phone in hand by Friday.

Week 37 Summary (Sep 6 - Sep 12, 2026)

A week of two distinct halves. It opened in full builder mode: a long-sought MCP for searching your own publications finally came together on Sunday, followed by n8n workflows that sync both the Ghost and Micro.blog archives into a Neon database so Claude Desktop can query them directly. Monday kept the momentum — an n8n upgrade, an MCP link to the official n8n docs, a delete feature shipped to Trails, and a new photo series, Montreal by night. From Wednesday onward, Apple took over: launch-day reading, leak-driven revisions to the upgrade plans, and the launch of a first writing-in-public project on the iPhone 15 Pro Max to 18 Pro Max transition, announced across Slack, Hacker News and the blog. The back half carried some weight too — a Pixelfed reflection on the 25th anniversary of 9/11 — and the week closed with **the Apple Watch Series 8 **finally landing on the upgrade list.

Week 36 Summary (Aug 30 - Sep 5, 2026)

A week built around one big unresolved question — whether Birchfeed could replace Inoreader and become the feed backbone for the RSS Flow web app. That thread ran Sunday through Tuesday, moving from curiosity to a Claude Code exploration to a firm decision on Tuesday night to keep the existing feed management. Publishing stayed steady around it: four blog posts went out (Apple’s inflection point under John Ternus, CleanShot 5, the August digest, and anticipation for the September 9th iPhone event). Tool testing was the other constant — two Craft betas, the CleanShot 5 upgrade and its video recording, Claude Design, and Claude AI scheduled tasks all got a turn. The back half of the week tapered into lighter housekeeping and photo sharing on Moments, the photo-journaling app discovered on day one and used three times before the week was out.