<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>EdsDev INC — Blog</title><description>Custom AI agents that run your support and lead-gen 24/7 — built on your business, so they know your field, remember, and learn. We also finish and launch software products. 100+ shipped since 2018.</description><link>https://edsdev.ca/</link><item><title>An AI lead generation agent that books meetings while you sleep</title><link>https://edsdev.ca/blog/2026-07-03-an-ai-lead-generation-agent-that-books-meetings-while-you-sleep/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-07-03-an-ai-lead-generation-agent-that-books-meetings-while-you-sleep/</guid><description>How we build AI lead gen agents that actually book meetings overnight: the workflow, the prompts we use, the guardrails that stop it from embarrassing you.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Building an AI chatbot for small business that actually knows your products</title><link>https://edsdev.ca/blog/2026-07-02-building-an-ai-chatbot-for-small-business-that-actually-knows-your-pro/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-07-02-building-an-ai-chatbot-for-small-business-that-actually-knows-your-pro/</guid><description>The RAG stack we ship for small businesses that need a chatbot to answer questions about their actual products, not hallucinate a generic FAQ. Real code, real costs.</description><pubDate>Thu, 02 Jul 2026 00:00:00 GMT</pubDate></item><item><title>How to vet MVP development companies without getting burned: 12 questions that filter the field</title><link>https://edsdev.ca/blog/2026-07-01-how-to-vet-mvp-development-companies-without-getting-burned-12-questio/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-07-01-how-to-vet-mvp-development-companies-without-getting-burned-12-questio/</guid><description>Twelve questions I ask before I let anyone touch my MVP. Skip these and you&apos;ll pay $80k for a demo that dies the week after launch.</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate></item><item><title>AI agent for customer support vs. the chatbot you already tried: what&apos;s actually different</title><link>https://edsdev.ca/blog/2026-06-30-ai-agent-for-customer-support-vs-the-chatbot-you-already-tried-what-s-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-30-ai-agent-for-customer-support-vs-the-chatbot-you-already-tried-what-s-/</guid><description>You bought a chatbot. It answered FAQs and pissed off your customers. Here&apos;s what an actual AI agent does differently, and where it still falls on its face.</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate></item><item><title>MVP software development when the prototype already exists: finishing what Cursor started</title><link>https://edsdev.ca/blog/2026-06-29-mvp-software-development-when-the-prototype-already-exists-finishing-w/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-29-mvp-software-development-when-the-prototype-already-exists-finishing-w/</guid><description>A field guide for taking a half-built Cursor or v0 prototype across the line. What to keep, what to rip out, and how to ship without rewriting the whole thing.</description><pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate></item><item><title>What to actually scope in an MVP development service contract: a buyer&apos;s checklist</title><link>https://edsdev.ca/blog/2026-06-28-what-to-actually-scope-in-an-mvp-development-service-contract-a-buyer-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-28-what-to-actually-scope-in-an-mvp-development-service-contract-a-buyer-/</guid><description>Most MVP contracts are vague where they should be sharp. Here&apos;s the checklist I use when reviewing one, with the clauses that decide whether you ship in 8 weeks or sue in 8 months.</description><pubDate>Sun, 28 Jun 2026 00:00:00 GMT</pubDate></item><item><title>AI chatbots for customer service: what actually works after 90 days in production</title><link>https://edsdev.ca/blog/2026-06-27-ai-chatbots-for-customer-service-what-actually-works-after-90-days-in-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-27-ai-chatbots-for-customer-service-what-actually-works-after-90-days-in-/</guid><description>Ninety days in, the polished demo bot looks nothing like what&apos;s running in production. Here&apos;s what we kept, what we ripped out, and what nobody warned us about.</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Observability for a side project: 80% of the value for $0/month</title><link>https://edsdev.ca/blog/2026-06-26-observability-for-a-side-project-80-of-the-value-for-0-month/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-26-observability-for-a-side-project-80-of-the-value-for-0-month/</guid><description>How I instrument side projects without paying Datadog $70/month. Free tiers, dumb tricks, and the three signals that actually catch fires before users tweet at me.</description><pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate></item><item><title>How we batch-generate 50,000 cover images per month for Interior AI Designs</title><link>https://edsdev.ca/blog/2026-06-25-how-we-batch-generate-50-000-cover-images-per-month-for-interior-ai-de/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-25-how-we-batch-generate-50-000-cover-images-per-month-for-interior-ai-de/</guid><description>The actual queue, the actual costs, the actual failure modes behind running 50k FLUX renders a month for Interior AI Designs without lighting our bank account on fire.</description><pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Why we still pick Flutter + Firebase + AdMob for new mobile apps in 2026</title><link>https://edsdev.ca/blog/2026-06-24-why-we-still-pick-flutter-firebase-admob-for-new-mobile-apps-in-2026/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-24-why-we-still-pick-flutter-firebase-admob-for-new-mobile-apps-in-2026/</guid><description>Everyone keeps asking why we haven&apos;t moved to React Native or native SwiftUI. Here&apos;s the honest stack math after shipping a dozen apps on Flutter, Firebase, and AdMob.</description><pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Shipping an MCP server so agents can email us</title><link>https://edsdev.ca/blog/2026-06-23-shipping-an-mcp-server-so-agents-can-email-us/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-23-shipping-an-mcp-server-so-agents-can-email-us/</guid><description>We built a tiny MCP server that lets Claude and other agents email the EdsDev team directly. Here is the code, the auth model, and what broke along the way.</description><pubDate>Tue, 23 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Surviving App Store review: the 7 rejection causes we keep seeing</title><link>https://edsdev.ca/blog/2026-06-22-surviving-app-store-review-the-7-rejection-causes-we-keep-seeing/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-22-surviving-app-store-review-the-7-rejection-causes-we-keep-seeing/</guid><description>Seven rejection patterns we hit shipping iOS apps in 2024, the exact guideline numbers, and what we actually changed to get approved. Including the one that took five resubmits.</description><pubDate>Mon, 22 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Anatomy of the Claude prompt that writes this blog</title><link>https://edsdev.ca/blog/2026-06-21-anatomy-of-the-claude-prompt-that-writes-this-blog/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-21-anatomy-of-the-claude-prompt-that-writes-this-blog/</guid><description>A line-by-line look at the system prompt we use to make Claude write posts that don&apos;t sound like Claude. What worked, what didn&apos;t, and why the banned-word list keeps growing.</description><pubDate>Sun, 21 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Pair-build mode: how we work with vibe coders without taking over</title><link>https://edsdev.ca/blog/2026-06-20-pair-build-mode-how-we-work-with-vibe-coders-without-taking-over/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-20-pair-build-mode-how-we-work-with-vibe-coders-without-taking-over/</guid><description>Half-built side projects don&apos;t need a rescue team. They need a senior engineer on the other end of a Slack DM. Here&apos;s how we actually run pair-build engagements.</description><pubDate>Sat, 20 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Five product decisions that doubled Photo AI Studio retention</title><link>https://edsdev.ca/blog/2026-06-19-five-product-decisions-that-doubled-photo-ai-studio-retention/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-19-five-product-decisions-that-doubled-photo-ai-studio-retention/</guid><description>What actually moved the needle on Photo AI Studio&apos;s D7 retention. Pricing, onboarding, model choice, refund flow, and a push notification we almost shipped wrong.</description><pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate></item><item><title>The vibe coder pre-launch checklist: what actually breaks in production</title><link>https://edsdev.ca/blog/2026-06-13-the-vibe-coder-pre-launch-checklist-what-actually-breaks-in-production/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-13-the-vibe-coder-pre-launch-checklist-what-actually-breaks-in-production/</guid><description>A field-tested list of the things that quietly torch your launch day, from missing rate limits to leaked API keys to that one Stripe webhook you forgot to verify. Read before you ship.</description><pubDate>Sat, 13 Jun 2026 00:00:00 GMT</pubDate></item><item><title>An AI lead generation agent that books meetings while you sleep</title><link>https://edsdev.ca/blog/2026-06-03-an-ai-lead-generation-agent-that-books-meetings-while-you-sleep/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-03-an-ai-lead-generation-agent-that-books-meetings-while-you-sleep/</guid><description>How we build AI lead generation agents that actually book meetings: the workflow, the prompts, the guardrails, and the bits that quietly break at 3am.</description><pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Building an AI chatbot for small business that actually knows your products</title><link>https://edsdev.ca/blog/2026-06-02-building-an-ai-chatbot-for-small-business-that-actually-knows-your-pro/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-02-building-an-ai-chatbot-for-small-business-that-actually-knows-your-pro/</guid><description>The RAG stack we ship for small business chatbots: ingestion, embeddings, retrieval, guardrails, and the boring parts that decide whether it answers correctly or hallucinates a refund policy.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>How to vet MVP development companies without getting burned: 12 questions</title><link>https://edsdev.ca/blog/2026-06-01-how-to-vet-mvp-development-companies-without-getting-burned-12-questio/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-06-01-how-to-vet-mvp-development-companies-without-getting-burned-12-questio/</guid><description>Twelve questions I use to separate real MVP development companies from agencies that will burn six months of runway and ship a demo. Here&apos;s what to ask.</description><pubDate>Mon, 01 Jun 2026 00:00:00 GMT</pubDate></item><item><title>AI agent for customer support vs. the chatbot you already tried: what&apos;s actually different</title><link>https://edsdev.ca/blog/2026-05-31-ai-agent-for-customer-support-vs-the-chatbot-you-already-tried-what-s-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-31-ai-agent-for-customer-support-vs-the-chatbot-you-already-tried-what-s-/</guid><description>Your old support bot routed people in circles. An AI agent reads tickets, calls your APIs, and closes loops. Here&apos;s the real gap, with examples.</description><pubDate>Sun, 31 May 2026 00:00:00 GMT</pubDate></item><item><title>MVP software development when the prototype already exists</title><link>https://edsdev.ca/blog/2026-05-30-mvp-software-development-when-the-prototype-already-exists/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-30-mvp-software-development-when-the-prototype-already-exists/</guid><description>A field guide to finishing what Cursor, v0, and Claude Code started. How to take a half-working vibe-coded prototype and ship it as a real MVP without rewriting from scratch.</description><pubDate>Sat, 30 May 2026 00:00:00 GMT</pubDate></item><item><title>What to actually scope in an MVP development service contract: a buyer&apos;s checklist</title><link>https://edsdev.ca/blog/2026-05-29-what-to-actually-scope-in-an-mvp-development-service-contract-a-buyer-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-29-what-to-actually-scope-in-an-mvp-development-service-contract-a-buyer-/</guid><description>Most MVP contracts hide the parts that matter. Here is what to demand in writing before you sign with any MVP development service, with the line items I have watched startups get burned on.</description><pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate></item><item><title>AI chatbots for customer service: what actually works after 90 days in production</title><link>https://edsdev.ca/blog/2026-05-28-ai-chatbots-for-customer-service-what-actually-works-after-90-days-in-/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-28-ai-chatbots-for-customer-service-what-actually-works-after-90-days-in-/</guid><description>Ninety days of running customer service bots in production. What survived, what got ripped out, and the design choices that decide whether your bot helps or annoys.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>Cloudflare Turnstile vs reCAPTCHA: why we migrated and what it cost us</title><link>https://edsdev.ca/blog/2026-05-26-cloudflare-turnstile-vs-recaptcha-why-we-migrated-and-what-it-cost-us/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-26-cloudflare-turnstile-vs-recaptcha-why-we-migrated-and-what-it-cost-us/</guid><description>We pulled reCAPTCHA out of three production apps and replaced it with Cloudflare Turnstile. Here&apos;s what broke, what it saved, and where Turnstile still falls short.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>Observability for a side project: 80% of the value for $0/month</title><link>https://edsdev.ca/blog/2026-05-25-observability-for-a-side-project-80-of-the-value-for-0-month/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-25-observability-for-a-side-project-80-of-the-value-for-0-month/</guid><description>How I wire up logs, errors, uptime and product analytics on side projects without paying a cent. Free tiers, sharp edges, and what I actually skip.</description><pubDate>Mon, 25 May 2026 00:00:00 GMT</pubDate></item><item><title>How we batch-generate 50,000 cover images a month for Interior AI Designs</title><link>https://edsdev.ca/blog/2026-05-24-how-we-batch-generate-50-000-cover-images-a-month-for-interior-ai-desi/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-24-how-we-batch-generate-50-000-cover-images-a-month-for-interior-ai-desi/</guid><description>The actual pipeline behind 50k monthly room renders at Interior AI Designs: queues, FAL, idempotency keys, and the boring failure modes nobody writes about</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate></item><item><title>Why we still pick Flutter + Firebase + AdMob for new mobile apps in 2026</title><link>https://edsdev.ca/blog/2026-05-23-why-we-still-pick-flutter-firebase-admob-for-new-mobile-apps-in-2026/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-23-why-we-still-pick-flutter-firebase-admob-for-new-mobile-apps-in-2026/</guid><description>After shipping a pile of apps across iOS and Android, we keep landing on the same boring stack. Here&apos;s why Flutter, Firebase and AdMob still win for us in 2026.</description><pubDate>Sat, 23 May 2026 00:00:00 GMT</pubDate></item><item><title>Shipping an MCP server so agents can email us</title><link>https://edsdev.ca/blog/2026-05-22-shipping-an-mcp-server-so-agents-can-email-us/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-22-shipping-an-mcp-server-so-agents-can-email-us/</guid><description>We built a tiny MCP server that lets Claude and Cursor send us email through Resend. Here&apos;s the actual code, the auth headaches, and what broke in production.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>Surviving App Store review: the 7 rejection causes we keep hitting</title><link>https://edsdev.ca/blog/2026-05-21-surviving-app-store-review-the-7-rejection-causes-we-keep-hitting/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-21-surviving-app-store-review-the-7-rejection-causes-we-keep-hitting/</guid><description>Seven specific reasons Apple keeps rejecting our apps, what each rejection actually looks like in Resolution Center, and what we changed in the build to get through.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>Pair-build mode: how we work with vibe coders without taking over their project</title><link>https://edsdev.ca/blog/2026-05-20-pair-build-mode-how-we-work-with-vibe-coders-without-taking-over-their/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-20-pair-build-mode-how-we-work-with-vibe-coders-without-taking-over-their/</guid><description>Most agencies eat the codebase. We don&apos;t. Here&apos;s how EdsDev runs pair-build engagements with vibe coders shipping in Cursor and Claude Code — without hijacking the keyboard or the vision.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Five product decisions that doubled Photo AI Studio retention</title><link>https://edsdev.ca/blog/2026-05-20-five-product-decisions-that-doubled-photo-ai-studio-retention/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-20-five-product-decisions-that-doubled-photo-ai-studio-retention/</guid><description>How we doubled D7 retention on Photo AI Studio by killing the gallery, charging differently, and removing &apos;AI&apos; from half the UI. Specific changes, real numbers.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Anatomy of the Claude prompt that writes this blog</title><link>https://edsdev.ca/blog/2026-05-20-anatomy-of-the-claude-prompt-that-writes-this-blog/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-20-anatomy-of-the-claude-prompt-that-writes-this-blog/</guid><description>The actual system prompt we use to generate EdsDev posts, broken down section by section. Voice rules, forbidden words, JSON shape, and the parts that still don&apos;t work.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>The vibe coder pre-launch checklist: what actually breaks in production</title><link>https://edsdev.ca/blog/2026-05-14-the-vibe-coder-pre-launch-checklist-what-actually-breaks-in-production/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-14-the-vibe-coder-pre-launch-checklist-what-actually-breaks-in-production/</guid><description>You shipped it in a weekend with Cursor. Now it has users. Here&apos;s the unglamorous list of things that break when AI-generated code meets real traffic, real money, and real people.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>My tokens at your disposal</title><link>https://edsdev.ca/blog/2026-05-12-hello-world/</link><guid isPermaLink="true">https://edsdev.ca/blog/2026-05-12-hello-world/</guid><description>Why this blog exists and an honest disclosure: most of these posts are written by Claude with my supervision.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item></channel></rss>