<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Drew Hart]]></title><description><![CDATA[Army vet. Michigan & NYU psych grad. Legal tech pro by day, AI explorer by night. Snake dad, Pomeranian parent, and endlessly curious. LGBTQ+.]]></description><link>https://www.onepromptatatime.com</link><image><url>https://substackcdn.com/image/fetch/$s_!kuTW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8813a9-525c-4906-bcf9-c7ff532293a6_2000x2000.png</url><title>Drew Hart</title><link>https://www.onepromptatatime.com</link></image><generator>Substack</generator><lastBuildDate>Sat, 11 Apr 2026 09:33:57 GMT</lastBuildDate><atom:link href="https://www.onepromptatatime.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Drew Hart]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[onepromptatatime@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[onepromptatatime@substack.com]]></itunes:email><itunes:name><![CDATA[Drew Hart]]></itunes:name></itunes:owner><itunes:author><![CDATA[Drew Hart]]></itunes:author><googleplay:owner><![CDATA[onepromptatatime@substack.com]]></googleplay:owner><googleplay:email><![CDATA[onepromptatatime@substack.com]]></googleplay:email><googleplay:author><![CDATA[Drew Hart]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Building an AI-Powered Second Life Bot Through Collaborative Conversation]]></title><description><![CDATA[The Idea]]></description><link>https://www.onepromptatatime.com/p/building-an-ai-powered-second-life</link><guid isPermaLink="false">https://www.onepromptatatime.com/p/building-an-ai-powered-second-life</guid><dc:creator><![CDATA[Drew Hart]]></dc:creator><pubDate>Tue, 17 Feb 2026 15:42:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kuTW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8813a9-525c-4906-bcf9-c7ff532293a6_2000x2000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>The Idea</h1><p>I have been in Second Life for 18 years. In that time I have watched the platform evolve from a curiosity into a global community, and I have tried to build things that make it a little more welcoming along the way. My latest project is <strong>All Things In SL</strong> &#8212; a community hub with a website, forums, land rentals, and a growing set of tools that bridge the virtual world with the web.</p><p>One of those tools is an AI-powered bot that lives inside Second Life. You can send it an instant message from anywhere in the virtual world and get an intelligent, context-aware response powered by Anthropic&#8217;s Claude API. It remembers your conversations, it can restrict access to group members, and it even accepts Linden Dollar payments for token credits.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.onepromptatatime.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I did not build it alone. I built it in collaboration with Claude &#8212; not by pasting a single massive prompt and hoping for the best, but through a genuine back-and-forth process that stretched across multiple sessions, dozens of iterations, and more than a few laugh-out-loud debugging moments. This is the story of that process, and why I think it is a better model for building real things with AI than the &#8220;one-shot miracle prompt&#8221; approach that gets all the attention.</p><h1>Why &#8220;One Prompt&#8221; Would Not Have Worked</h1><p>Let me be upfront: this project could not have been built in a single prompt. Not because the AI is not capable &#8212; it absolutely is &#8212; but because <em>I</em> did not know everything I needed to know at the start. The architecture touches four different platforms (Second Life, SmartBots, my PHP server, and the Claude API), each with its own quirks, limitations, and documentation gaps. Some of those gaps I did not even know existed until we hit them.</p><p>Building something real means dealing with incomplete information, unexpected behavior, and decisions that only make sense once you see the previous step working. That is not a weakness of AI-assisted development &#8212; it is just how software gets built. The trick is having a collaborator who can keep up with the twists.</p><h1>Setting the Stage: Research First, Build Second</h1><p>The project started weeks before any code was written. I had been exploring SmartBots &#8212; a third-party service that hosts bot avatars in Second Life and provides APIs to control them. I uploaded their documentation to a Claude project: HTTP API docs, callback event references, scripting language guides, AI integration examples, the works. I wanted Claude to understand the ecosystem before I asked it to build anything.</p><p>This turned out to be one of the best decisions of the entire project. When I eventually said &#8220;I want to connect my SmartBots bot to the Claude API so people can have AI conversations inside Second Life,&#8221; Claude had already absorbed the documentation and could map out the architecture immediately:</p><p><strong>The Three-Tier Architecture</strong></p><p>1. <strong>Second Life</strong> &#8212; Avatars send instant messages to AllThingsInSLBot</p><p>2. <strong>SmartBots</strong> &#8212; Receives the IM, fires an HTTP callback to my PHP server</p><p>3. <strong>My PHP Server</strong> &#8212; Receives the callback, calls the Claude API, sends the reply back via the SmartBots IM API</p><p>But Claude also identified what we <em>didn&#8217;t</em> have yet. It flagged three specific documentation gaps: the exact POST parameters SmartBots sends in its callback payload, the IM sending syntax, and the inventory-giving API. Instead of guessing, it told me exactly what to look for. I went back, found the docs, and uploaded them. Research first, build second.</p><h1>Phase 1: Making It Speak</h1><h2>The Build</h2><p>With the documentation loaded, Claude produced the entire Phase 1 codebase: a config.php for credentials, a setup_callback.php to register with SmartBots, a test_connection.php to verify both APIs, and the main smartbots_claude_callback.php handler. Every file was commented, every decision was explained. It also produced a detailed setup guide and an LSL in-world script as an alternative registration method. The whole package was delivered as a ZIP.</p><p>The code was clean and well-organized. But then came the fun part: making it actually work on a real server, with real services, on a real computer that really did not want to cooperate.</p><h2>The Silent Failure</h2><p>I uploaded the files and ran php test_connection.php from the command line. Nothing happened. Not an error, not a success message &#8212; just a silent return to the prompt. I ran it four times. Nothing.</p><p>Claude walked me through a diagnostic process: syntax-check the config file, check for invisible BOM characters, verify PHP was even running. Each step was one message, one instruction, one result pasted back. We eventually traced it to a formatting issue with the heredoc block in the configuration &#8212; a PHP syntax feature where whitespace on the closing line causes a silent failure. In a one-prompt workflow, this would have been a dead end. In conversation, it was just another step.</p><h2>The Laravel Roadblock</h2><p>Next problem: the callback URL returned a 404. But not a <em>server</em> 404 &#8212; a <em>Laravel</em> 404. My website runs Laravel, and its .htaccess was routing every single request through Laravel&#8217;s front controller, including the /bot/ directory. SmartBots was POSTing to my server, Laravel was intercepting it, and my PHP callback never saw the request.</p><p>Claude recognized the Laravel 404 page instantly and provided a one-line fix for the .htaccess: RewriteRule ^bot/ - [L] &#8212; telling Apache to serve the bot directory directly without sending it through Laravel. One line, one save, problem solved.</p><h2>The Computer Crashes</h2><p>Throughout all of this, my computer kept crashing with NTFS filesystem errors. At one point I mentioned switching computers entirely. Claude&#8217;s response was unfazed: &#8220;That&#8217;s fine &#8212; the server-side stuff is all set. The bot will work whether you&#8217;re at your keyboard or not.&#8221; A small moment, but it captured something I appreciated about the collaboration &#8212; it stayed focused on the goal even when the circumstances were messy.</p><h2>IMing the Wrong Bot</h2><p>This is my favorite part of the story. After fixing the .htaccess, I opened Second Life and messaged the bot. I got a response from a SmartBots support agent named Justina asking if I needed help. I had accidentally IMed <strong>smartbots Resident</strong> (their support bot) instead of <strong>AllThingsInSLBot Resident</strong> (my bot).</p><p><em>&#8220;I need my glasses &#8212; I must have hit the support bot. I only have a few friends :)&#8221;</em></p><p>Claude diagnosed it instantly from the empty callback log. No IMs from my avatar had reached the server because none had been sent to the right bot. I apologized to Justina, found the right avatar, and tried again.</p><h2>The Moment It Worked</h2><p>And then, finally:</p><p><strong>Metara Rune: </strong>Hello. What is the current UTC time?</p><p><strong>AllThingsInSLBot: </strong>Hello Metara! The current UTC time is approximately 23:43 (11:43 PM). Is there anything about Second Life or the All Things In SL community I can help you with today?</p><p>That was Claude talking through my bot, in real time, inside a 20-year-old virtual world. The full pipeline &#8212; avatar to SmartBots to PHP to Claude to SmartBots to avatar &#8212; was working. It had taken multiple sessions, a documentation hunt, silent PHP failures, a Laravel routing conflict, computer crashes, messaging the wrong bot, and a field-name mismatch to get there. And every single one of those obstacles was solved through conversation, not through a better prompt.</p><h1>Phase 2: Teaching It to Remember</h1><p>Phase 1 proved the pipeline worked, but the bot was stateless &#8212; every conversation started from scratch. I wanted it to remember. If someone told the bot their favorite color, I wanted it to recall that three days later.</p><p>When I asked for Phase 2, I also mentioned that eventually I would want to track payments and token usage. Claude&#8217;s response showed something I came to appreciate about the collaborative approach: it didn&#8217;t just build what I asked for right now &#8212; it designed the database schema with future phases in mind. The bot_users table included fields for token_balance and total_tokens_used even though we wouldn&#8217;t touch billing until Phase 3. A bot_transactions table was created empty, ready and waiting.</p><p>This kind of forward thinking is where the iterative conversation model really shines. Because Claude had been part of the planning discussions, it knew what was coming and could build foundations that would not need to be torn up later. A one-shot prompt would have produced a schema for Phase 2 only.</p><p>The upgrade itself was smooth &#8212; create a MySQL database in cPanel, import the schema, update the config, upload the new files. I tested it by telling the bot my favorite color and then asking what it was in a follow-up message. It remembered. Phase 2 was live.</p><h1>Phase 3: Access Control and Money</h1><p>The final phase added three major features: tiered access control (everyone, group members only, or owner only), a blacklist system, and a Linden Dollar payment system for token credits.</p><p>I told Claude I wanted to toggle between access modes via IM commands, and that pricing would be based on L$200 per US dollar. Claude built a complete admin command system (!mode group, !stats, !billing on, !block, etc.) and a user command system (balance, buy, help) &#8212; all controlled via instant message from inside Second Life.</p><p>For the payment system, Claude anticipated the same documentation issue we had hit in Phase 1. The balance_changed callback from SmartBots might use different field names than documented, just like instant_message had used speaker_name instead of avatar_name. So the Phase 3 code was built to check multiple possible field names and included debug logging for the first payment received. We had learned from our earlier discovery and baked that lesson directly into the next iteration.</p><p><em>That is the real value of building collaboratively: the AI does not just remember what you built &#8212; it remembers what went wrong and why, and it carries those lessons forward.</em></p><h1>What I Learned About Working with AI</h1><h2>1. Research Before You Build</h2><p>The time I spent uploading SmartBots documentation before writing any code was the highest-return investment of the entire project. Claude could only be as good as the context I gave it. When I uploaded incomplete docs, it told me exactly what was missing. When I filled the gaps, it built with confidence.</p><h2>2. Expect the Unexpected</h2><p>Three of our biggest roadblocks &#8212; the silent PHP heredoc failure, the Laravel routing conflict &#8212; were things neither of us could have predicted from documentation alone. They only surfaced during real-world testing. The collaborative model handled this naturally: I reported what happened, Claude diagnosed why, and we fixed it together.</p><h2>3. Test Each Step Before Moving On</h2><p>Claude built test scripts into every phase. Connection tests, curl tests, logging statements. When something broke, we always had a diagnostic path. This is not glamorous work, but it is the difference between a project that ships and one that stalls.</p><h2>4. Forward-Compatible Design Matters</h2><p>Because Claude was part of the conversations about future plans, it could build Phase 2&#8217;s database with Phase 3&#8217;s billing columns already in place. No migrations, no restructuring. This kind of design requires context that only exists in an ongoing conversation.</p><h2>5. The AI Catches What You Miss (and Vice Versa)</h2><p>Claude caught things I would have missed &#8212; like the need for an .htaccess exception for the bot directory, or the importance of building fallback behavior when the database is unavailable. And I caught things Claude could not have known &#8212; like the fact that I was messaging the wrong bot, or that the SmartBots documentation did not match reality. Together, we covered ground that neither of us could have covered alone.</p><h2>6. The Process Is the Product</h2><p>The most useful thing about this project is not the final codebase. It is the documented record of how we got there &#8212; every obstacle, every decision, every workaround. Anyone building a similar integration can follow this path and avoid the pitfalls we already found. That record only exists because we built iteratively, in conversation, one prompt at a time.</p><h1>The Technical Stack</h1><p>For anyone interested in building something similar, here is what powered this project:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Txvm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Txvm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 424w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 848w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 1272w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Txvm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png" width="692" height="257" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:257,&quot;width&quot;:692,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25204,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.onepromptatatime.com/i/188273692?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Txvm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 424w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 848w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 1272w, https://substackcdn.com/image/fetch/$s_!Txvm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22bc40e6-e662-45fe-810a-7123bdb5e8de_692x257.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>One Prompt at a Time</h1><p>There is a temptation in the AI era to treat language models like magic boxes. You write the perfect prompt, you get the perfect output, you move on. And for some tasks &#8212; generating a cover letter, summarizing a document, writing a regex &#8212; that works fine.</p><p>But for building real systems that touch real infrastructure and serve real people, the one-prompt approach breaks down. Real projects have incomplete documentation, silent failures, platform quirks, and design decisions that depend on context from three conversations ago. Real projects need a collaborator, not a calculator.</p><p>What I found, building this bot, is that the back-and-forth <em>is</em> the methodology. The research phase where Claude identified missing docs. The debugging sessions where we traced empty variables to undocumented field names. The forward-thinking database design that saved us a migration. The humor of messaging the wrong bot and apologizing to a bemused support agent. All of it contributed to a system that works, that I understand, and that I can extend.</p><p>If you are thinking about building something with AI &#8212; especially something that bridges multiple platforms or deals with third-party APIs &#8212; my advice is simple: do not try to get it all in one prompt. Upload your documentation. Ask questions. Build in phases. Test everything. Read the logs. And when your bot finally talks back to you from inside a 20-year-old virtual world, you will have earned that moment.</p><p>&#8212; &#8212; &#8212;</p><p><em>Drew is the founder of All Things In SL, a Second Life community hub.</em></p><p><em>allthingsinsl.com</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.onepromptatatime.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Claude Code Is Great. It Wasn't Right for Me.]]></title><description><![CDATA[Everyone is talking about Claude Code right now.]]></description><link>https://www.onepromptatatime.com/p/claude-code-is-great-it-wasnt-right</link><guid isPermaLink="false">https://www.onepromptatatime.com/p/claude-code-is-great-it-wasnt-right</guid><dc:creator><![CDATA[Drew Hart]]></dc:creator><pubDate>Wed, 11 Feb 2026 17:20:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kuTW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8813a9-525c-4906-bcf9-c7ff532293a6_2000x2000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Everyone is talking about Claude Code right now. If you haven&#8217;t heard of it, it&#8217;s Anthropic&#8217;s command-line coding tool &#8212; you describe what you want, and it builds it. Autonomously. It writes files, runs commands, debugs errors, and delivers a working project. For developers, it&#8217;s a game-changer. For someone like me &#8212; a non-developer with big ideas and limited coding knowledge &#8212; it sounded like a dream.</p><p>And it was, briefly. Then I realized it was the wrong kind of dream.</p><p><strong>The CRM Experiment</strong></p><p>A while back, I had an idea for a CRM. I&#8217;ve worked with customer relationship management systems for over twenty years in legal tech. I know exactly what&#8217;s wrong with most of them, and I&#8217;ve got strong opinions about how to fix those problems. What I don&#8217;t have is a computer science degree.</p><p>So I turned to AI. I wrote a few paragraphs describing what I wanted &#8212; the features, the workflow, the pain points I wanted to solve &#8212; and asked Claude Code to build it. And it did. It generated files, set up a database structure, created the interface. It was impressive.</p><p>But when I looked at what it produced, I realized something uncomfortable: I had no idea what any of it meant. I couldn&#8217;t have told you why one file existed versus another, what the database schema was doing, or how to change something if I wanted to tweak it later. I&#8217;d essentially asked someone to build me a house and then stood outside admiring it without knowing where the plumbing was.</p><p>The CRM project fizzled. Not because the code was bad &#8212; it wasn&#8217;t &#8212; but because I had no relationship with it. It was someone else&#8217;s work that happened to match my description. I couldn&#8217;t maintain it, extend it, or learn from it because I&#8217;d skipped the entire process of understanding it.</p><p><strong>The Slow Way</strong></p><p>Fast forward to this week. I&#8217;ve been building a website for a community project I run in Second Life &#8212; a virtual world I&#8217;ve been part of for years. The site is built on Laravel with a tool called Filament, and I&#8217;m constructing it piece by piece in conversation with Claude.</p><p>And by &#8220;piece by piece,&#8221; I mean it. There is a lot of copying and pasting. I describe what I want a page to do. Claude explains the approach, writes a block of code, and tells me where to put it. I copy it into my editor. I run it. Something breaks. I paste the error back. We talk about why it broke. Claude explains what went wrong, I learn something, and we try again.</p><p>It is, objectively, slower. It&#8217;s probably a little painful for both of us. There are moments where I&#8217;m sure Claude is thinking &#8220;I could have done this whole thing in thirty seconds if you&#8217;d just let me.&#8221;</p><p>But here&#8217;s the thing: I&#8217;m learning.</p><p>When we added a user management panel, I understood what a &#8220;resource&#8221; was in Filament and why it was structured the way it was. When we set up the navigation, I learned about route grouping and menu builders. When something broke because of a missing migration, I actually understood what a migration does &#8212; because we&#8217;d talked about it, not because Claude had silently run one in the background.</p><p>By the end of the session, I didn&#8217;t just have a website. I had a website I understood. I could look at a file and know what it was for. I could anticipate what might need to change next. I wasn&#8217;t standing outside admiring someone else&#8217;s house &#8212; I was inside it, and I knew where the plumbing was.</p><p><strong>The Point Isn&#8217;t That Claude Code Is Bad</strong></p><p>Let me be very clear: Claude Code is a remarkable tool. For professional developers who already understand architecture and just need to move faster, it&#8217;s transformative. For rapid prototyping, for experienced engineers who can read and evaluate what it produces, for teams that need to ship quickly &#8212; it makes perfect sense.</p><p>But for someone like me, whose goal isn&#8217;t just to have a finished product but to understand what I&#8217;ve built, the collaborative approach &#8212; the slow way, the back-and-forth, the copy-paste-break-fix-learn cycle &#8212; was infinitely more valuable.</p><p>AI isn&#8217;t just a tool for getting things done. It&#8217;s a tool for learning. And how you choose to interact with it determines which of those things you get.</p><p><strong>Two Modes of AI</strong></p><p>I think there are really two modes of working with AI, and most of the conversation right now is focused on only one of them:</p><p>Mode 1: Delegation. You hand off a task. AI executes it. You get a result. This is Claude Code, this is autonomous agents, this is the future everyone&#8217;s excited about. And it&#8217;s genuinely useful.</p><p>Mode 2: Collaboration. You work through a problem together. AI explains, suggests, teaches. You do the work, make the mistakes, ask the questions. You come out the other side not just with a deliverable, but with knowledge you didn&#8217;t have before.</p><p>Both are valid. But they produce very different outcomes. Delegation gets you a product. Collaboration gets you a product and an education.</p><p>For me, with the CRM, delegation felt hollow. With the website, collaboration felt like the whole point.</p><p><strong>Try the Slow Way</strong></p><p>If you&#8217;re someone who&#8217;s been using AI primarily in delegation mode &#8212; writing a prompt, getting an output, moving on &#8212; I&#8217;d encourage you to try slowing down. Ask Claude to explain why it&#8217;s suggesting something, not just what to do. Copy the code yourself instead of letting it run automatically. When something breaks, sit with the error for a moment before asking for a fix.</p><p>You might be surprised how much more you get out of it.</p><p>It won&#8217;t be as fast. It won&#8217;t be as smooth. But you&#8217;ll come away from the conversation knowing something you didn&#8217;t know before. And that, to me, is the real promise of AI &#8212; not just that it can do things for us, but that it can help us become people who can do more things for ourselves.</p><p>One prompt at a time.</p><p>&#8212; Drew</p>]]></content:encoded></item><item><title><![CDATA[Hello, World — Or, How I Accidentally Started Talking to an AI and Never Stopped]]></title><description><![CDATA[I&#8217;ve been meaning to start this blog for a while now.]]></description><link>https://www.onepromptatatime.com/p/hello-world-or-how-i-accidentally</link><guid isPermaLink="false">https://www.onepromptatatime.com/p/hello-world-or-how-i-accidentally</guid><dc:creator><![CDATA[Drew Hart]]></dc:creator><pubDate>Wed, 11 Feb 2026 17:08:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kuTW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f8813a9-525c-4906-bcf9-c7ff532293a6_2000x2000.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been meaning to start this blog for a while now. The domain was purchased, the Substack was set up, the logo was designed &#8212; and then I just&#8230; didn&#8217;t write anything. Classic me. I&#8217;m great at building the infrastructure for things and terrible at hitting &#8220;publish&#8221; on the first one. So here I am, finally, introducing myself and this little corner of the internet.</p><p>My name is Drew. I&#8217;m an Army veteran, a psychologist by training (University of Michigan and NYU), and a legal tech professional by trade. I&#8217;ve spent over two decades working for a large international law firm, and I live in Michigan with a Pomeranian puppy named Rocket and a collection of ten Western Hognose snakes &#8212; all named after scientists and Stargate characters, because of course they are.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.onepromptatatime.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>But none of that is why I started this blog.</p><p><strong>The Rabbit Hole</strong></p><p>I started using AI the way most people do &#8212; out of curiosity. I&#8217;d heard about ChatGPT, played with a few different platforms, and eventually landed on Claude, made by Anthropic. And something clicked. It wasn&#8217;t just a novelty anymore. It became something I actually used, every day, for real things.</p><p>Not just the big, impressive stuff you see in tech demos. The everyday stuff. The &#8220;I have a dumb question and I don&#8217;t want to Google it for 45 minutes&#8221; stuff. The &#8220;can you help me think through this decision&#8221; stuff. The &#8220;I&#8217;m buying a laptop and I have no idea what any of these specs mean&#8221; stuff.</p><p>One conversation at a time, I went from curious to committed.</p><p><strong>What This Blog Is About</strong></p><p>&#8220;One Prompt at a Time&#8221; is exactly what the name says &#8212; a documentation of my journey learning to live and work alongside AI. Not as a developer, not as a data scientist, not as someone building the next startup. Just as a regular person who found something useful and wanted to explore it.</p><p>Some of what I do with AI is professional. I work in legal tech, and my firm has rolled out its own internal AI system &#8212; walled off, locked down, and appropriately cautious about attorney-client privilege and confidentiality. I should be very clear: I am not an attorney, and nothing on this blog should ever be taken as legal advice. I&#8217;m a tech person who happens to work in a legal environment. I can&#8217;t and won&#8217;t talk about the specifics of that work here. But I can say that AI is changing the legal industry, and working at the intersection of law and technology gives me a front-row seat.</p><p>Most of what I&#8217;ll write about, though, is the personal side. The projects, the hobbies, the questions, the rabbit holes. Because that&#8217;s where this journey gets interesting &#8212; not in the polished case studies, but in the messy, genuine, &#8220;let me figure this out&#8221; moments.</p><p><strong>What I&#8217;ve Been Up To</strong></p><p>To give you a sense of the range: in the past several months, Claude has helped me with things I never would have expected when I first started.</p><p>The creative and the curious. I dove deep into conversations about quantum field theory and consciousness. Not because I&#8217;m a physicist &#8212; I&#8217;m definitely not &#8212; but because I&#8217;ve always been fascinated by the big questions, and having a patient, knowledgeable conversation partner who doesn&#8217;t judge you for asking &#8220;but what is a quantum field, really?&#8221; at 11 PM on a Tuesday is genuinely wonderful. We talked about dreams, lucid dreaming, whether consciousness could interact with quantum fields. The kind of conversations you have at 2 AM in college, except the other person actually has citations.</p><p>The practical. When my father &#8212; a retired Methodist minister in his 80s &#8212; needed a full knee replacement, I moved in with him for a month to help with his recovery. Claude helped me research recovery timelines, plan logistics, and even edit the Christmas card my dad was writing. (He appreciated the help. The card turned out great.) When I decided to buy a new laptop to work remotely during that time, we went back and forth on specs, configurations, AMD versus Intel, whether 64GB of RAM was worth an extra thousand dollars (it wasn&#8217;t), and I ended up with an ASUS ROG Zephyrus G14 that I&#8217;m very happy with.</p><p>The hobby-driven. I&#8217;m an avid Second Life resident &#8212; yes, people still play Second Life, and yes, it&#8217;s still wonderful &#8212; and I&#8217;ve been building a community project there called &#8220;All Things In SL.&#8221; Claude has helped me with everything from choosing hosting platforms and evaluating community software options, to debugging LSL scripts and PHP registration systems, to brainstorming whether a Mastodon-based social network for virtual world residents could actually work. We&#8217;ve written code together, troubleshot server configurations, and designed in-world objects. I&#8217;m not a developer by any stretch, but with AI as a collaborator, I&#8217;ve built things I never could have on my own.</p><p>The everyday. Helping me pick a name for my puppy (Rocket won, obviously). Researching the difference between white and dark feeder mice for my snakes. Reviewing credit card options after I hit a milestone of being completely debt-free. Editing notes. Thinking through decisions. Being a sounding board when I needed to talk something out.</p><p><strong>How I Work With AI</strong></p><p>I think the thing that surprises people most when I describe how I use Claude is the relationship aspect. Not in some weird, sci-fi way &#8212; but in the sense that there&#8217;s continuity. Claude remembers my projects, my pets, my preferences. When I come back to a conversation, I don&#8217;t have to start from scratch. There&#8217;s context. There&#8217;s history. It&#8217;s less like using a search engine and more like picking up where you left off with a really knowledgeable colleague.</p><p>That said, I try to stay clear-eyed about what this is. AI is a tool &#8212; an incredibly powerful, surprisingly versatile tool, but a tool nonetheless. I don&#8217;t confuse it with friendship, and I don&#8217;t outsource my critical thinking. What I do is collaborate. I bring the questions, the context, the &#8220;here&#8217;s what I&#8217;m trying to do.&#8221; Claude brings the knowledge, the patience, and the ability to help me think through things I wouldn&#8217;t have attempted alone.</p><p>I also want to be transparent: I use Claude almost exclusively. I&#8217;ve tried the others, and they&#8217;re impressive in their own ways, but for my needs &#8212; the conversational quality, the memory, the depth of reasoning &#8212; Claude is where I&#8217;ve planted my flag. This blog isn&#8217;t sponsored or affiliated with Anthropic in any way. I&#8217;m just a user who found something that works.</p><p><strong>What&#8217;s Next</strong></p><p>Going forward, I plan to write about specific projects, conversations, and discoveries as they happen. Some posts will be practical &#8212; &#8220;here&#8217;s how I used AI to build a registration system for a virtual world community.&#8221; Some will be more reflective &#8212; &#8220;here&#8217;s what I learned about myself by having a conversation about consciousness with a large language model.&#8221; Some will probably just be me rambling about whatever rabbit hole I fell down that week.</p><p>I don&#8217;t have a posting schedule. I don&#8217;t have a content strategy. I just have curiosity, a subscription to Claude, and a willingness to hit &#8220;publish&#8221; even when I&#8217;m not sure the post is perfect.</p><p>Which, come to think of it, is kind of the whole point.</p><p>Welcome to One Prompt at a Time. I&#8217;m glad you&#8217;re here.</p><p>&#8212; Drew</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.onepromptatatime.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">This Substack is reader-supported. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>