Sign in

Keegan Donley

@keegan.codes
553 followers 529 following 325 posts

Product-focused software engineer • Principal front-end engineer at kizen.com 🚲 Cycling 🏕️ The outdoors 🏎️ Formula 1 🍷 Wine 👨🏻‍💻 Code keegan.codes 📍 Austin, Texas

PostsRepliesMedia
Reposted by Keegan Donley
Victory Lap @victorylap.fit · 16h
It was the last night of the season out at the Circuit of the Americas for bike night! Largest turnout we’ve ever seen, and a lot of fun!
A photo of many cyclists climbing turn 1 at the circuit of the Americas formula 1 track
021
Keegan Donley @keegan.codes · 29/09/2026
This was a fun one for my planned demo this morning 🙄
000
Keegan Donley @keegan.codes · 26/09/2026
Yesterday I wrote a blog post for the @victorylap.fit blog about how Jev fits really well into an automated content moderation workflow for social media. You can read it on my blog directly: keegan.codes/blog/social-... and also check it out on victorylap.fit!
keegan.codes
Social Media Moderation with Jev
How Victory Lap uses TypeSafe AI's Jev as an auto-moderator (shared from the Victory Lap blog)
020
Keegan Donley @keegan.codes · 23/09/2026
Amazing vibes at Circuit of the Americas last night for bike night! @victorylap.fit
Sunbeams in the distance above a formula 1 race track with a map overlay and the text 22.0 mph and Victory Lap
041
Keegan Donley @keegan.codes · 19/09/2026
Here's a little sneak preview of something I've been working on during nights and weekends! Follow @victorylap.fit to stay updated about the project!
010
Keegan Donley @keegan.codes · 14/09/2026
GPT-6 Astra computer usage with the iPhone simulator is fantastic for mobile development. The ability to run in a feedback loop driving the simulator and working on changes has been an incredibly valuable tool. Made a lot of progress this weekend on some exciting new work!
010
Keegan Donley @keegan.codes · 10/09/2026
What are we doing here Google? Lowercase titles? Spelling out years? A little too sloppy for me
A push notification that reads Apple unveiled the new nineteen ninety nine dollar foldable iPhone Duo
000
Keegan Donley @keegan.codes · 09/09/2026
iPhone Duo looks expensive 💰💰💰
000
Keegan Donley @keegan.codes · 09/09/2026
Looking forward to today’s Apple event more than many recent ones. Hoping I’m not disappointed!
020
Keegan Donley @keegan.codes · 09/09/2026
Opus keeps doing this to me tonight - running no-op tool calls in a loop while waiting for sub-agents. Makes no sense and I've never seen it before now.
• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

• I’ll wait for the critic’s report.
  Ran 1 shell command

You have run cd /Users/keegan/Developer/hindsight && echo idle 53 times in two minutes. That is busy-waiting and it is burning opus tool rounds while your critic subagents work. Do this now: make no further tool calls, write a two-line status (what is built, what you are waiting on), and END YOUR TURN. Background subagents notify you when they finish and you are re-invoked automatically with their results; nothing is lost by returning. Resume the critic-fix loop and the final report only when a task notification arrives.

• Understood — that was wasteful, and I'm stopping.

  Status: All six units are integrated at /Users/keegan/Developer/hindsight. The app builds clean (zero warnings) and 105 tests pass on the dedicated Hindsight-Sim — 58 in HindsightKitTests, 47 in HindsightTests. Findings are recorded in spec #96‘s notes.

  Waiting on: the smart-critic review of the integrated tree. I’ll resume the fix loop and send the final report when its notification arrives.

% Waiting for 1 background agent to finish

}
121
Keegan Donley @keegan.codes · 08/09/2026
I have a little arcade game that I ask different models to build as a fun exercise. Astra on extra-high reasoning made one of the most visually appealing versions. I've found most models love to build in auto-firing rather than build a user-targeting mechanism. battle.keegan.codes/gpt-6-astra-...
battle.keegan.codes
Agent Battle — Coding agents build the same game
A head-to-head playground where coding agents get the same prompt and each build a standalone arcade game. Same brief, different models — play and compare.
020
Keegan Donley @keegan.codes · 08/09/2026
Stayed away from my computer for most of the long weekend. I guess I have some catching up to do this week!
000
Keegan Donley @keegan.codes · 03/09/2026
I built a tiny little service called Service Lookout - it's an aggregator of all the platform statuses I care about, and it makes them available over MCP so my agent can quickly discover active incidents. Works pretty well! servicelookout.com
A Claude Code terminal window shows a status update about an issue affecting OpenAI's Codex services, including Codex API, CLI, and others. It states "Elevated errors across ChatGPT and Codex" are confirmed as an active incident, reporting degraded performance on several platforms.
230
Keegan Donley @keegan.codes · 03/09/2026
I launched an app for iOS (with Android coming soon): Scalene for Vercel! A native app for monitoring all your Vercel projects through live activities and home screen widgets. On sale for launch week! keegan.codes/blog/scalene...
keegan.codes
Scalene for Vercel Launches Today!
My new app for iOS and Mac launched today! It gives you live activities and widgets for your Vercel projects, including analytics, performance insights, and deployment status!
140
Keegan Donley @keegan.codes · 01/09/2026
Fable 5.1 seems to be actually generating readable text so far. I feel my brain melting a little less when reading its output, and its code comments seem much more reasonable too.
000
Keegan Donley @keegan.codes · 01/09/2026
hypothesis.sh now has a placeholder images tool available! You can use procedurally-generated images as placeholders in svg, png, or webp formats. Free to use as always with the rest of the toolset! hypothesis.sh/photo?w=600&...
A blue and green gradient placeholderA blue and black noise placeholderA blue green and red shape placeholderA blue and green placeholder with borders and the dimensions 600x400 printed inside
000
Keegan Donley @keegan.codes · 30/08/2026
Spent my Sunday getting scalene.app ready for the iOS app store. Hoping for a smooth approval! I've been using the app myself for a couple months now and it's been a really nice tool!
scalene.app
Scalene — Vercel, in your pocket.
A native Vercel client for iPhone, iPad, Mac, Apple Watch, and Android. Check deployments, read build logs, track usage, and get a push when a deploy finishes or fails.
020
Keegan Donley @keegan.codes · 27/08/2026
My Android development workflow with Claude is so good, I've started to prefer Android development over iOS. Wireless debugging that Claude has access to is such a nice experience.
000
Keegan Donley @keegan.codes · 26/08/2026
I got a Pixel 11 as a second phone since I'm working on porting some of my apps over to Android. One of the really nice things about my app Ringpulse is that I can see my Oura data on my new phone while the ring is still paired to my main iPhone! ringpulse.app
A health dashboard for Oura showing a readiness score, sleep score, and activity score, along with other vitals
000
Keegan Donley @keegan.codes · 20/08/2026
My website keegan.codes is a dynamically rendered Next.js app. I recently did a bunch of work to switch to partial pre-rendering (and other performance stuff) and it's amazing how much snappier navigation is. Of course during the refactor I broke page speed monitoring so I can't quantify it yet 😢
keegan.codes
Keegan Donley
Developer, maker, and lifelong learner
000
Keegan Donley @keegan.codes · 19/08/2026
This isn’t how I post right?
just spent 4 hours refactoring a typescript web app just to realize the bug was a missing comma in a css file. gonna go stare at my bicycle and rethink my life choices.
Want me to tweak the vibe with a dash of Formula 1 hot takes, a Go vs. TypeScript debate, or an Austin cycling route reference?
020
Keegan Donley @keegan.codes · 18/08/2026
Looks like Claude is pushing back on the watermarking by refusing to work today
020
Keegan Donley @keegan.codes · 18/08/2026
Are we finally done saying AI is going to kill software development? In this post I talked a bit about my time at @renderatl.com this year, and how I've seen a shift in conversation around AI and coding agents. keegan.codes/blog/are-we-...
keegan.codes
Are We Finally Done Saying AI Will Kill Software Development?
It felt like everyone was saying AI would kill software development. At Render Atlanta, the discourse seems to be changing.
041
Keegan Donley @keegan.codes · 17/08/2026
Now AppStore Connect appears to be broken! What a terrible day for getting anything done
010
Keegan Donley @keegan.codes · 17/08/2026
Rough day
A status dashboard showing service health: Cloudflare, GitHub, and Vercel are marked as Degraded, while Kizen is Operational.
031
Keegan Donley @keegan.codes · 17/08/2026
At this point I'm just embarrassed for Github, but not surprised anymore. Another low productivity morning for me.
020
Keegan Donley @keegan.codes · 17/08/2026
Finished the last two big climbs on Zwift’s Tour Fever challenge over the weekend. Glad I finished when I did, because I woke up sick this morning. Probably from talking to too many people at Render last week.
Progress Report for Level 65 user. Career Progress: Completed 'This Ride' for +1,356 XP, contributing towards a total of 7,877 XP out of 11,000 XP goal. Zwift Concept Z1, Stage 2/5 with 'This Ride' adding 28 miles to their total of 228 out of 994 miles. Achievements: Earned 30 out of 36 possible awards. Route Badges: Achieved 180 out of 241 badges. Fitness Trends: Indicating 'Weekly Time Goal' progress with 'This Ride' adding 2 minutes and 31 seconds to progress, current total stands at 4:18 out of 5:50. 
1-Year Power Bests: 5-second effort at 841W, 1-minute at 434W, 5-minute at 294W, and 20-minute at 254W. Fitness Score: 46.8, with a 4.3 point increase from this ride.
Progress Report in a workout app showing Career Progress with XP earned and a progress bar indicating a level. Achievements highlight 30 out of 36 trophies and Route Badges showing 180 out of 241 completed. Weekly Fitness Goals are partially achieved, with segments of a "Time Goal" progress bar colored in blue, grey, green, orange, and red. Personal Record (PR) stats for 5-second, 1-minute, 5-minute, and 20-minute intervals are displayed. Training Score increased by 3.6 points in the latest ride. Below, a button marked "Continue" in orange invites user interaction. Visual design includes a forest backdrop.
020
Keegan Donley @keegan.codes · 14/08/2026
Render is done, heading back to Austin! What a fun couple of days, one of my favorites so far! @renderatl.com
A whiskey sour in front of a large tree in the Atlanta centurion lounge
020
Keegan Donley @keegan.codes · 13/08/2026
Render day 2!
A view of Atlanta from the hotel
010
Keegan Donley @keegan.codes · 12/08/2026
Today’s presentation by @sarahedo.bsky.social at @renderatl.com in addition to being excellent and educational, also reminded me I need to step up my slideshow game for an upcoming talk!
110
Keegan Donley @keegan.codes · 12/08/2026
Been looking forward to hearing from @nodeland.dev and @renderatl.com today!
000
Keegan Donley @keegan.codes · 11/08/2026
Starting Render off right with a fantastic IPA - I always check out a new brewery when I’m in town
020
Keegan Donley @keegan.codes · 11/08/2026
Heading to Atlanta! Render time!
010
Keegan Donley @keegan.codes · 10/08/2026
Year 5 at @renderatl.com for me starts tomorrow! Who will I be seeing there?
010
Keegan Donley @keegan.codes · 10/08/2026
Love a good hackathon! Definitely check this out if you're at @renderatl.com this week!
021
Keegan Donley @keegan.codes · 10/08/2026
Wanted to build a little side project and I had the perfect domain already registered just sitting unused. Proof I don’t have a problem, right?
010
Keegan Donley @keegan.codes · 05/08/2026
We're now just a week away from my fifth year at @renderatl.com! Every year gets better and better, and I've been looking forward to this one for a while! Hoping to see some familiar faces and some new ones!
The words "Render ATL" spelled out by hovering drones over the Ponce City Market rooftop
041
Keegan Donley @keegan.codes · 21/07/2026
I've been using a custom tool for collecting telemetry from my agents and it's been a game-changer for visibility into ongoing work when I'm AFK. The best part is that sessions get summarized as I go, and get taken into account by my auto-standup tool, summarizing yesterday's work and blockers.
The screenshot displays the “Active Sessions” panel of an internal LLM / agent orchestration UI.
Key points for developers:

Five concurrent sessions are listed, each represented by a card that shows: • Session name and status tags (e.g., “Executing tool”, “Processing”, “Waiting on LLM”, “Streaming response”).
• Model name (all “Claude Code” except one “Codex”).
• Real-time activity metrics:
– Last-active timestamp (e.g., “14 s ago”).
– # of LLM calls and tools invoked.
– Token I/O counts (“in / out”).
• Working file path for the session.
• Elapsed duration.
• Controls: “View spans”, “View transcript”, “SummarizeThe screenshot shows a chronological activity/telemetry log that records:

Bash commands that print and cat multiple script.js files (configDialog, resetConfirm, styleDialog, wizardPage, create.js, etc.).
Tool-level searches inside the codebase (kizen-plugin-reference/search_plugins and mcp_kizen-plugin-reference__find_method) for “frameless”, showViewInModal, data-script="cancel", etc.
File reads of several CSS and JS view files under
/Users/keegan/Developer/plugins/plugin-dev-keegan/src/views/...
A write operation to src/views/configDialog/script.js.
Inline code comments indicating the purpose:
“Wizard POC — “Edit Brewery Config” dialog. … Opened frameless via showViewInModal(“configDialog”, …”
Durations for each step (e.g., 59 ms, 22 ms).
010
Keegan Donley @keegan.codes · 18/07/2026
Weekends are for building and writing! Here's a new thing I wrote about a new thing I built: Ring Pulse, a free webapp replacement for Oura's web-based analysis tool that's disappearing some time this year. keegan.codes/blog/i-built...
keegan.codes
I Built a Free Replacement for Oura's Web Application
Oura on the web is shutting down later this year. I built a free replacement app with data summaries, a correlation explorer, and CSV exporting!
010
Keegan Donley @keegan.codes · 15/07/2026
Been having fun clearing the backlog of things I've wanted to build. Here's one: a service that sends me a rollup email of traffic across all my Vercel projects on an interval (every 6 hours is how I have it configured). You can easily fork it and use it for yourself! analytics-digest.keegan.codes
analytics-digest.keegan.codes
Vercel Analytics Digest
Pageviews, visitors, and top routes from every project—delivered by email every six hours.
010
Keegan Donley @keegan.codes · 15/07/2026
I'm sure I'm not the only one who wondered what Apple on-device Foundation Models are like to chat with. They model is tiny and not very useful, but I built a free chat app anyways to play around with it: ondas.keegan.codes
ondas.keegan.codes
Ondas — On-device AI chat for Mac & iOS
Chat and image generation run on your Mac with Apple Intelligence. Chats sync with iCloud; telemetry is optional.
110
Keegan Donley @keegan.codes · 13/07/2026
If AI can build every side project I dream up, how do I decide what to build myself? Is there any fun in having AI build my projects for me? I think a lot about this question. Sometimes all I need is the end result quickly, other times I want to build it myself. keegan.codes/blog/i-can-b...
keegan.codes
I Can Build Every Side Project I Want With AI. Should I?
Agentic Coding with Claude and Codex allows me to build every project I've ever conceived. Is this a good idea, and how do I choose what to build myself?
9151
Keegan Donley @keegan.codes · 10/07/2026
So @vercel.com decided to pause my entire pro account today while I was at lunch, taking down everything from my blog, my agent orchestration platform, documentation and notes for work, everything. No billing or budget issues that I can see. Now I'm resuming projects one by one. Not a good look.
110
Keegan Donley @keegan.codes · 09/07/2026
Excited to be heading back to @renderatl.com this year for my fifth time! Wasn't sure I was going to be able to make it, but things worked out and I got my ticket yesterday!
010
Keegan Donley @keegan.codes · 27/06/2026
For some reason it’s been hard for me to get back out on my bike. Life has been taking priority I guess. Finally out for a long ride today (with a beer stop) and loving it!
A beer in a glass with the red horn logo on it, sitting on a picnic table with a bike in the background
010
Keegan Donley @keegan.codes · 25/06/2026
After reading about the Trump Administration's reversal on dismantling the Ocean Observatories Initiative, I wanted to learn more about the program. In doing so, I built a little site for exploring the data in real-time! I learned a ton about how these systems work! oceanobservatories.app
oceanobservatories.app
Ocean Observatories Explorer
Explore data from the Ocean Observatories Initiative (OOI) network.
000
Keegan Donley @keegan.codes · 11/06/2026
My LinkedIn feed is more and more Al slop these days. Naturally, I thought... what if it was all Al slop? To be honest, not much would change. deadinternet.tech/feed
deadinternet.tech
Dead Internet Feed
Read the latest AI-generated posts and comment threads from Dead Internet personas.
000
Keegan Donley @keegan.codes · 09/06/2026
So Fable 5 is pretty neat - been playing around a bit at work seeing if it can build plugins for me. Expensive! 29 cents to say hi.
Summary
The screenshot shows a cost analysis for sending a simple message like "hi" in an AI agent environment. It outlines the token usage and associated costs when sending a message through an AI interface. The breakdown includes both input and output tokens and highlights the difference in cost between a bare session and a raw API call. This information is useful for developers looking to understand cost implications in AI interactions, particularly with Claude-Class pricing.

Extracted Text
How much does it cost to say hi?

Saying "hi" is never just "hi" in an agent environment. Rough breakdown:

- Your message: ~1 token
- What actually gets sent: the system prompt, tool definitions, environment info, etc. – typically 10–20k input tokens before you've said anything
With Claude-Class pricing (~$3/M input, ~$15/M output), a bare "hi" in a session like this costs roughly $0.03–0.06 for the first turn, mostly from the fixed context overhead. The reply itself ("Hi! How can I help?") adds a fraction of a cent.

If you mean a raw API call with no system prompt: ~5 input + ~10 output tokens ≈ $0.0002 — effectively free.

If you want, I can pull your actual AI usage stats to see what your average session costs.

📘 Build · Claude Fable 5 · 10.4s

Build  · Claude Fable 5 Vercel AI Gateway

22.0K (2%) · $0.29   ctrl+p commands
750
Keegan Donley @keegan.codes · 03/06/2026
About to hop on a plane to JFK for New York Tech Week! I’m looking forward to Kizen’s event tomorrow, meeting new folks, and talking AI and the future of our agentic workflow platform! Come by and say hi if you’re in town for the event!
010
Keegan Donley @keegan.codes · 12/05/2026
With the deprecation of DALL·E 3, I finally got around to updating thirsty.bot to use gpt-image-1 for recipe images. I like the consistency and elegance of the outputs, but it does miss some of the character of DALL·E.
DALL·E 3 image: a tall glass with stem containing a margarita, with a roesemary sprig and cucumber. In the background is a rosemary plant, bottle of tequila, cucumber, and various kitchen utensils. gpt-1 image: A margarita in a lowball glass with ice and a rosemary sprig. The background is a cream colored room with minimal shadows, and no other objects.
020