<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>From Zero to Ship</title><description>How a non-developer ships real, working software with AI. Practical, step-by-step builds — internal tools, automations, and small apps — written for people who were told they could not code.</description><link>https://fromzerotoship.com/</link><item><title>405 Method Not Allowed on a POST That Should Work</title><link>https://fromzerotoship.com/blog/405-method-not-allowed-post-php/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/405-method-not-allowed-post-php/</guid><description>Your form posts to a PHP file that exists and handles POST, and the server answers 405 before your code runs. On appliance web servers behind a WAF, 405 is often a disguise for something else entirely — including your own error responses.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Number That Agreed With Me</title><link>https://fromzerotoship.com/blog/agreement-was-the-tell/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/agreement-was-the-tell/</guid><description>I measured instead of guessing, and my classifier said 95% fake on the first run. It matched my theory exactly — which should have been the tell. A control group of fourteen accounts showed one indicator was measuring nothing and the rest were circular. The blind spot did not come back in my code. It came back in a room I never thought to guard.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Exact Prompts I Use So AI Writes Excel Formulas for Our Staff</title><link>https://fromzerotoship.com/blog/ai-excel-formula-prompts/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/ai-excel-formula-prompts/</guid><description>Most of the &quot;build me a tool&quot; requests I get are really a broken spreadsheet. Here is the copy-paste prompt template I hand to hospital staff, three real examples, and the four ways AI-written formulas quietly fail.</description><pubDate>Sun, 05 Jul 2026 15:00:00 GMT</pubDate></item><item><title>What Your Green Light Is Actually Testifying To</title><link>https://fromzerotoship.com/blog/deploy-succeeded-still-404/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/deploy-succeeded-still-404/</guid><description>The deploy tool said success. Four of nine pages were 404 twenty seconds later - not broken, just not propagated. A witness testifies only within its jurisdiction, and most of the green lights I trust answer a narrower question than the one I am asking.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>When AI Coding Tools Were Dumb (and Nights Were Fun)</title><link>https://fromzerotoship.com/blog/dumb-tools-and-fun-nights/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/dumb-tools-and-fun-nights/</guid><description>Early vibe-coding broke as much as it fixed. I backed up everything by hand and crawled forward one copy at a time. It took days. It was also the most fun I&apos;d had in years.</description><pubDate>Mon, 02 Mar 2026 15:00:00 GMT</pubDate></item><item><title>How I shipped my first real tool without knowing how to code</title><link>https://fromzerotoship.com/blog/how-i-shipped-my-first-tool-without-coding/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/how-i-shipped-my-first-tool-without-coding/</guid><description>The exact mindset, tools, and first steps a non-developer can use to build and launch a working internal tool with AI — starting from absolute zero.</description><pubDate>Wed, 14 Jan 2026 15:00:00 GMT</pubDate></item><item><title>In the End, It Was Always About People</title><link>https://fromzerotoship.com/blog/in-the-end-its-about-people/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/in-the-end-its-about-people/</guid><description>I built a free video editor for a coworker who thought she couldn&apos;t, and a cognitive-rehab tool that replaced a $30,000 system. None of it was really about the software.</description><pubDate>Mon, 27 Apr 2026 15:00:00 GMT</pubDate></item><item><title>toISOString() Gives You Yesterday: JavaScript Dates in a Non-UTC Timezone</title><link>https://fromzerotoship.com/blog/javascript-toisostring-wrong-date/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/javascript-toisostring-wrong-date/</guid><description>A date picker set to the 1st saves as the 31st of the previous month. toISOString converts to UTC first, so anywhere east of Greenwich, early-morning timestamps roll back a day. Here is the fix and the three places it hides.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Real Job Isn&apos;t Building It — It&apos;s Keeping It Running</title><link>https://fromzerotoship.com/blog/keeping-it-from-going-down/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/keeping-it-from-going-down/</guid><description>Building 20+ tools was hard. Keeping them running for 660 people turned out to be harder. A late-night drive back to the office and a transformer explosion taught me what &quot;infrastructure&quot; really means.</description><pubDate>Mon, 13 Apr 2026 15:00:00 GMT</pubDate></item><item><title>Measured It, Shipped Nothing</title><link>https://fromzerotoship.com/blog/measured-it-shipped-nothing/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/measured-it-shipped-nothing/</guid><description>A stranger pointed out that my overlapping rules double-charge the same defect, and that the error can only land on projects that already have it. I built the measurement instead of the fix. The uplift peaked in the middle of the distribution, not the bottom - and the bottom was three data points.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>My Actual Tool Stack: No Coding Background Required</title><link>https://fromzerotoship.com/blog/my-actual-tool-stack/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/my-actual-tool-stack/</guid><description>Every tool that showed up across this whole series, gathered in one place. Nothing fancy, nothing expensive — most of it free, and none of it requires knowing how to code.</description><pubDate>Mon, 18 May 2026 15:00:00 GMT</pubDate></item><item><title>The day my software collapsed in front of everyone</title><link>https://fromzerotoship.com/blog/my-hardest-day/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/my-hardest-day/</guid><description>I shipped an internal tool the whole hospital relied on. Hours later it buckled under real load and my phone wouldn&apos;t stop ringing. Here&apos;s how I found the real cause — and what I got wrong first.</description><pubDate>Mon, 06 Apr 2026 15:00:00 GMT</pubDate></item><item><title>Building My Own Navigation: Why Each Tool Got Easier to Ship</title><link>https://fromzerotoship.com/blog/my-own-navigation/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/my-own-navigation/</guid><description>My first tool took days. My twentieth took a day. Here is the loop that built up underneath me, and why no map you can buy beats the one you draw by getting lost.</description><pubDate>Mon, 20 Apr 2026 15:00:00 GMT</pubDate></item><item><title>MySQL GROUP BY Merges Different Emoji Into One Row</title><link>https://fromzerotoship.com/blog/mysql-emoji-group-by-merged/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/mysql-emoji-group-by-merged/</guid><description>Your reaction counts are wrong: 👍 and 👎 land in the same group. In utf8mb4_unicode_ci, many emoji outside the Basic Multilingual Plane compare as equal, so GROUP BY collapses them. The fix is one COLLATE clause.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Reviewer Who Was Never Outside the Room</title><link>https://fromzerotoship.com/blog/never-outside-the-room/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/never-outside-the-room/</guid><description>I build with AI, so I have AI review what I build. For months my reviewer found almost nothing, and I read that as good news. Then strangers found eight things in three days. Role separation is not independence — it is one prior wearing three hats.</description><pubDate>Wed, 29 Jul 2026 15:00:00 GMT</pubDate></item><item><title>None of It Was for Me: A Year of Building With AI</title><link>https://fromzerotoship.com/blog/none-of-it-was-for-me/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/none-of-it-was-for-me/</guid><description>I built 20+ working tools in a year with no coding background. Looking back, not one was for me — and that told me something about what AI actually changes.</description><pubDate>Mon, 04 May 2026 15:00:00 GMT</pubDate></item><item><title>The Numbers I Picked Until the Red Went Away</title><link>https://fromzerotoship.com/blog/numbers-i-picked-until-the-red-went-away/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/numbers-i-picked-until-the-red-went-away/</guid><description>My deploy check tolerates sixty seconds of failure; my outage alarm tolerates five. I chose both by widening until the false alarms stopped, and I had never seen the two numbers in the same place. An audit found forty-plus timeout literals in my code and not one derived from a measurement.</description><pubDate>Sun, 02 Aug 2026 15:00:00 GMT</pubDate></item><item><title>PHP 7.4: Call to undefined function str_starts_with()</title><link>https://fromzerotoship.com/blog/php-74-str-starts-with-fatal-error/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/php-74-str-starts-with-fatal-error/</guid><description>Your code works locally and returns a blank white page or a 500 on the server. The cause is almost always a PHP 8 function or syntax you used without noticing, running on a PHP 7.4 host — and str_starts_with is the one that catches people first.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>PHP curl errno 28: Connection Timed Out — but Only From the Server</title><link>https://fromzerotoship.com/blog/php-curl-errno-28-ipv6-timeout/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/php-curl-errno-28-ipv6-timeout/</guid><description>Your API call works from the terminal and times out from PHP with errno 28. If the host resolves to both IPv6 and IPv4 and your network drops IPv6, curl waits on the AAAA record until it gives up. One option fixes it.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>Building an Intranet to Replace Our Scattered Group Chats</title><link>https://fromzerotoship.com/blog/pulling-the-scattered-into-one/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/pulling-the-scattered-into-one/</guid><description>Our whole hospital ran on three different chat apps and a quarterly count of 48,000 handwritten posts. So I built one internal hub to pull it all together. This is the story of how I planned my biggest tool yet.</description><pubDate>Mon, 30 Mar 2026 15:00:00 GMT</pubDate></item><item><title>Your PWA Still Shows the Old Version After Deploy</title><link>https://fromzerotoship.com/blog/pwa-still-showing-old-version/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/pwa-still-showing-old-version/</guid><description>You deployed, you hard-refreshed, colleagues still see yesterday. The service worker is serving its cache and your new files never got requested. The fix is one line, and the reason it keeps happening is that nothing tells you when you forget it.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>A Recollection Reported as a Record</title><link>https://fromzerotoship.com/blog/recollection-reported-as-a-record/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/recollection-reported-as-a-record/</guid><description>I told a stranger my script now saves its refusals instead of exiting, and quoted the run: 133 resolved, 0 genuinely absent, 340 unreachable. The log file has one entry and it is not that run. I built the artifact afterward, so the numbers I handed over were a memory wearing the clothes of a record.</description><pubDate>Mon, 03 Aug 2026 15:00:00 GMT</pubDate></item><item><title>The Stranger Who Rewrote My Test Four Times</title><link>https://fromzerotoship.com/blog/rewrote-my-test-four-times/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/rewrote-my-test-four-times/</guid><description>Last post I said you can&apos;t hold the pen alone. This is what that actually looks like: one stranger, three replies, and four versions of the same check — each one breaking the thing I&apos;d just been proud of, until the fourth found a bug that had been live for weeks.</description><pubDate>Tue, 28 Jul 2026 15:00:00 GMT</pubDate></item><item><title>Six Rules I Learned From a Year of Working With AI</title><link>https://fromzerotoship.com/blog/six-rules-for-working-with-ai/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/six-rules-for-working-with-ai/</guid><description>Not a story this time — the actual playbook. Six blunt rules for working with AI when you do not know how to code, plus the real prompts I used and the real ways AI got it wrong.</description><pubDate>Mon, 11 May 2026 15:00:00 GMT</pubDate></item><item><title>Six Teams, Six Different Forms: My First Real Project</title><link>https://fromzerotoship.com/blog/six-teams-six-different-forms/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/six-teams-six-different-forms/</guid><description>Before I wrote a single line of code, I spent days copying numbers between six mismatched spreadsheets. Here is how a boring documents problem pushed me toward Excel, Google Sheets, and finally my first question to an AI.</description><pubDate>Mon, 26 Jan 2026 15:00:00 GMT</pubDate></item><item><title>So, What&apos;s Your First One?</title><link>https://fromzerotoship.com/blog/so-whats-your-first-one/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/so-whats-your-first-one/</guid><description>One year and twenty-two tools later, I am standing in front of the biggest wall yet and it terrifies me exactly as much as the first one did. Here is what changed, and here is the question I am handing you.</description><pubDate>Mon, 01 Jun 2026 15:00:00 GMT</pubDate></item><item><title>Synology DSM Scheduled Task Runs, But Your PHP Script Does Nothing</title><link>https://fromzerotoship.com/blog/synology-cron-php-not-running/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/synology-cron-php-not-running/</guid><description>The task shows as completed in DSM, and nothing in your script happened. The CLI PHP on a Synology NAS is not the PHP your website runs — different binary, different modules, different config. The reliable fix is to stop using the CLI at all.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>Your .htaccess Does Nothing on a Synology NAS</title><link>https://fromzerotoship.com/blog/synology-htaccess-does-nothing/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/synology-htaccess-does-nothing/</guid><description>You add an .htaccess file to block a folder or rewrite a URL on Synology Web Station, and absolutely nothing happens. No error, no effect. The reason is that DSM serves your site through nginx, which has never read .htaccess in its life.</description><pubDate>Thu, 30 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Day Everything Changed: Meeting a Self-Taught Builder</title><link>https://fromzerotoship.com/blog/the-day-everything-changed/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-day-everything-changed/</guid><description>For a year I built software alone, with no one to ask. Then I met a non-developer who had gone much further than me, and one sentence he said reset how I worked.</description><pubDate>Mon, 23 Mar 2026 15:00:00 GMT</pubDate></item><item><title>The Deploy That Only Half Arrived</title><link>https://fromzerotoship.com/blog/the-deploy-that-only-half-arrived/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-deploy-that-only-half-arrived/</guid><description>On Monday I published the fact that my deploy tolerance — three retries, twenty seconds apart — came from about three deploys and no measurement. On Wednesday the third recorded sample took seventy seconds, my check called a perfectly healthy site broken, and it turned out I had never considered that a deploy might arrive in pieces.</description><pubDate>Wed, 05 Aug 2026 15:00:00 GMT</pubDate></item><item><title>The First Time I Opened a Door to the Outside Internet</title><link>https://fromzerotoship.com/blog/the-first-time-i-went-outside/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-first-time-i-went-outside/</guid><description>For months, my tools were safe because they never left the building. Then a demo forced me to connect one to the open internet — and I had to start caring about security for the first time.</description><pubDate>Mon, 16 Mar 2026 15:00:00 GMT</pubDate></item><item><title>The Gate That Certified What I Threw Out</title><link>https://fromzerotoship.com/blog/the-gate-that-certified-what-i-threw-out/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-gate-that-certified-what-i-threw-out/</guid><description>I retired an indicator that fired on 100% of one class and 97% of the other, wrote about it, and three days later shipped another one with the same defect. So I built a permanent gate every indicator has to clear. It rejected the dead one instantly — and then certified, at p=.001, the indicator I had thrown out weeks earlier for circular reasoning.</description><pubDate>Tue, 04 Aug 2026 15:00:00 GMT</pubDate></item><item><title>The Language Barrier That Made Me Use AI Better</title><link>https://fromzerotoship.com/blog/the-language-barrier/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-language-barrier/</guid><description>I came to dev.to to translate. Because I needed AI just to read English posts, it was already in the loop the moment a good idea appeared — and it turned from a translator into the thing that read, extracted, and built. How a handicap became the on-ramp.</description><pubDate>Sun, 19 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Loot Report: Five Strangers Audited My Systems in One Day</title><link>https://fromzerotoship.com/blog/the-loot-report/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-loot-report/</guid><description>In about a day, five strangers audited my systems — one comment each, every one pointing straight at a hole in something I had already shipped and already trusted. Five sentences, five holes, five receipts — and they turned out to be one idea wearing five coats.</description><pubDate>Thu, 23 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Loot Report, Vol. 2: Four Lines That Fixed the Boring Parts</title><link>https://fromzerotoship.com/blog/the-loot-report-vol-2/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-loot-report-vol-2/</guid><description>The first Loot Report was one day&apos;s haul. This one is slower — four lines lifted over a few weeks, each aimed at the least glamorous corner of my systems: the checks that were supposed to be watching and quietly weren&apos;t. Steal the check, not the confidence.</description><pubDate>Sat, 25 Jul 2026 15:00:00 GMT</pubDate></item><item><title>The Phone Call That Changed How I Build Software</title><link>https://fromzerotoship.com/blog/the-phone-call-that-changed-everything/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-phone-call-that-changed-everything/</guid><description>I&apos;d been fighting clumsy AI tools for months. Then a stranger told me to try Claude on a phone call, and the whole job got easier overnight. Here&apos;s what actually changed.</description><pubDate>Mon, 09 Mar 2026 15:00:00 GMT</pubDate></item><item><title>The Treasure Room That Was Too Slow: Outgrowing My Server</title><link>https://fromzerotoship.com/blog/the-treasure-room-that-was-too-slow/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-treasure-room-that-was-too-slow/</guid><description>My first real tool ground to a halt under hundreds of thousands of records. I didn&apos;t know what a server was. One offhand AI answer led me to a question that changed everything: isn&apos;t the office storage box basically a server?</description><pubDate>Mon, 16 Feb 2026 15:00:00 GMT</pubDate></item><item><title>The Week I Held My Breath: Moving to a Real Server</title><link>https://fromzerotoship.com/blog/the-week-i-held-my-breath/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/the-week-i-held-my-breath/</guid><description>A non-developer talks his way into the admin account for the office server, then spends a terrifying week migrating his first tool. The payoff changed everything I built after.</description><pubDate>Mon, 23 Feb 2026 15:00:00 GMT</pubDate></item><item><title>Tool #23 Is the Blog You&apos;re Reading Right Now</title><link>https://fromzerotoship.com/blog/tool-23-is-this-blog/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/tool-23-is-this-blog/</guid><description>The story ended at twenty-two tools. Here&apos;s what happened next: a non-developer built this entire blog — domain, newsletter, and the comment box below — with AI. The comment box is the demo.</description><pubDate>Sun, 05 Jul 2026 15:00:00 GMT</pubDate></item><item><title>What you actually need to build software (it isn&apos;t code)</title><link>https://fromzerotoship.com/blog/what-you-actually-need-to-build-software/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/what-you-actually-need-to-build-software/</guid><description>I was a physical therapist who didn&apos;t know what a variable was. The thing that let me ship 20+ working tools wasn&apos;t talent, a degree, or coding skill — it was something much more ordinary.</description><pubDate>Mon, 19 Jan 2026 15:00:00 GMT</pubDate></item><item><title>When a Spreadsheet Became an App (and I Wasn&apos;t a Programmer)</title><link>https://fromzerotoship.com/blog/when-a-spreadsheet-became-an-app/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/when-a-spreadsheet-became-an-app/</guid><description>I started by asking an AI to fix one spreadsheet formula. A year later that same thread of questions had turned into a real app my hospital uses. Here is how the spreadsheet stopped being a spreadsheet.</description><pubDate>Mon, 02 Feb 2026 15:00:00 GMT</pubDate></item><item><title>When AI Code Doesn&apos;t Work: My Debugging Routine as a Non-Developer</title><link>https://fromzerotoship.com/blog/when-ai-code-doesnt-work/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/when-ai-code-doesnt-work/</guid><description>Nobody tells you that most of building with AI is the part where it doesn&apos;t work. Here is the six-step routine I settled on after a year and 20+ tools — no computer science required, just discipline.</description><pubDate>Mon, 13 Jul 2026 15:00:00 GMT</pubDate></item><item><title>When I Started Building Software for People, Not Problems</title><link>https://fromzerotoship.com/blog/when-i-started-seeing-the-people/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/when-i-started-seeing-the-people/</guid><description>I am a physical therapist with no coding background. My first real tools came from watching coworkers get worn down by busywork — and not being able to leave it alone.</description><pubDate>Mon, 09 Feb 2026 15:00:00 GMT</pubDate></item><item><title>Who Holds the Pen: The One Check You Can&apos;t Run on Yourself</title><link>https://fromzerotoship.com/blog/who-holds-the-pen/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/who-holds-the-pen/</guid><description>The last three posts were things I stole from the feed. This one, the feed stole back — a week of strangers auditing the very checks I&apos;d bragged about, and the question the whole series was circling: who checks the checker? Turns out you can&apos;t hold the pen alone.</description><pubDate>Mon, 27 Jul 2026 15:00:00 GMT</pubDate></item><item><title>Your First 30 Days With AI: A Simple Plan</title><link>https://fromzerotoship.com/blog/your-first-30-days/</link><guid isPermaLink="true">https://fromzerotoship.com/blog/your-first-30-days/</guid><description>No studying required. A light, four-week plan for going from never having touched AI to holding your first working tool — thirty minutes a day is enough.</description><pubDate>Mon, 25 May 2026 15:00:00 GMT</pubDate></item></channel></rss>