<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Saar Tochner</title>
    <description>The latest articles on DEV Community by Saar Tochner (@saar_tochner).</description>
    <link>https://dev.to/saar_tochner</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2760017%2F301954ba-8223-449b-9149-2ab37e54e6c9.jpg</url>
      <title>DEV Community: Saar Tochner</title>
      <link>https://dev.to/saar_tochner</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saar_tochner"/>
    <language>en</language>
    <item>
      <title>7 Days, $0.02 in AWS Costs, and 3 Lessons I Didn't Expect — A Post-Launch Retrospective</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Sun, 29 Mar 2026 07:17:00 +0000</pubDate>
      <link>https://dev.to/aws-builders/7-days-002-in-aws-costs-and-3-lessons-i-didnt-expect-a-post-launch-retrospective-35bn</link>
      <guid>https://dev.to/aws-builders/7-days-002-in-aws-costs-and-3-lessons-i-didnt-expect-a-post-launch-retrospective-35bn</guid>
      <description>&lt;p&gt;A week ago I launched &lt;a href="https://dontdothat.click" rel="noopener noreferrer"&gt;dontdothat.click&lt;/a&gt; — a privacy-first AI habit tracker that runs entirely in the browser. I wrote about the build process &lt;a href="https://dev.toLINK_TO_PREVIOUS_POST"&gt;in my last post&lt;/a&gt;. The stack is dead simple: S3 + CloudFront + Route 53. Total infrastructure budget: $3.&lt;/p&gt;

&lt;p&gt;Now I have a week of real data. Some of it confirmed what I expected. Some of it didn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Numbers
&lt;/h2&gt;

&lt;p&gt;Let's start with what everyone wants to know:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route 53 hosted zone:    $0.50  (flat monthly)
S3 storage:              $0.00  (35KB of files, lol)
S3 requests:             $0.01
CloudFront transfer:     $0.01
CloudFront requests:     $0.00
ACM certificate:         $0.00
────────────────────────────────
Total week 1:            $0.52
Annualized:              ~$27/year (mostly the hosted zone)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hosted zone ($0.50/month = $6/year) costs more than the domain itself ($3/year). That's... not something the tutorials mention. If I were doing this again with an even tighter budget, I'd consider whether I really need Route 53 for DNS or if the registrar's free DNS would work. Spoiler: for a static site, it absolutely would. But CloudFront + Route 53 alias records are so seamless that the $6/year is worth it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 1: CloudFront Cache Invalidation Is Your Deploy Pipeline
&lt;/h2&gt;

&lt;p&gt;I didn't set up CI/CD. It's three static files — I don't need a pipeline. What I do need is to remember to invalidate the CloudFront cache after every S3 upload.&lt;/p&gt;

&lt;p&gt;The first time I pushed a bug fix, I spent 10 minutes wondering why the site wasn't updating. Then I remembered:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Upload&lt;/span&gt;
aws s3 &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; s3://dontdothat.click/ &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--exclude&lt;/span&gt; &lt;span class="s2"&gt;".git/*"&lt;/span&gt; &lt;span class="nt"&gt;--exclude&lt;/span&gt; &lt;span class="s2"&gt;"*.md"&lt;/span&gt;

&lt;span class="c"&gt;# THIS IS THE STEP YOU'LL FORGET&lt;/span&gt;
aws cloudfront create-invalidation &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--distribution-id&lt;/span&gt; E1N9Y6SV8RFQ9Q &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--paths&lt;/span&gt; &lt;span class="s2"&gt;"/*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the second time I forgot, I wrote a one-liner:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# deploy.sh — the world's simplest CI/CD&lt;/span&gt;
aws s3 &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; s3://dontdothat.click/ &lt;span class="nt"&gt;--exclude&lt;/span&gt; &lt;span class="s2"&gt;".git/*"&lt;/span&gt; &lt;span class="nt"&gt;--exclude&lt;/span&gt; &lt;span class="s2"&gt;"*.md"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; aws cloudfront create-invalidation &lt;span class="nt"&gt;--distribution-id&lt;/span&gt; E1N9Y6SV8RFQ9Q &lt;span class="nt"&gt;--paths&lt;/span&gt; &lt;span class="s2"&gt;"/*"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two things I learned about invalidation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The first 1,000 invalidation paths per month are free.&lt;/strong&gt; Using &lt;code&gt;/*&lt;/code&gt; counts as one path. So even if you deploy 50 times a day, it costs nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invalidation takes 1-3 minutes.&lt;/strong&gt; This means there's a window where some users see the old version and others see the new one. For a side project this doesn't matter, but it's good to
know.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this grows, I'd switch to versioned filenames (&lt;code&gt;app.v2.js&lt;/code&gt;) instead of invalidation. But for now, the one-liner is perfect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 2: The ACM Certificate Dance
&lt;/h2&gt;

&lt;p&gt;This one caught me off guard. When I launched, I requested an ACM certificate with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws acm request-certificate &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--domain-name&lt;/span&gt; dontdothat.click &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--validation-method&lt;/span&gt; DNS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DNS validation was straightforward — add a CNAME, wait. But "wait" turned out to be &lt;strong&gt;20+ minutes&lt;/strong&gt; for a brand-new domain. The docs say "up to 30 minutes" but most blog posts describe it as "a few minutes." For an established domain, sure. For a domain registered 10 minutes ago? Expect the full 30.&lt;/p&gt;

&lt;p&gt;Also: &lt;strong&gt;a wildcard certificate (&lt;code&gt;*.example.com&lt;/code&gt;) does NOT cover the bare domain (&lt;code&gt;example.com&lt;/code&gt;).&lt;/strong&gt; This feels obvious in hindsight, but I hit the CloudFront &lt;code&gt;InvalidViewerCertificate&lt;/code&gt; err&lt;br&gt;
or before I realized my cert only covered the wildcard. The fix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws acm request-certificate &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--domain-name&lt;/span&gt; dontdothat.click &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--subject-alternative-names&lt;/span&gt; &lt;span class="s2"&gt;"dontdothat.click"&lt;/span&gt; &lt;span class="s2"&gt;"*.dontdothat.click"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--validation-method&lt;/span&gt; DNS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note: &lt;code&gt;--subject-alternative-names&lt;/code&gt;, not a second &lt;code&gt;--domain-name&lt;/code&gt; flag. The CLI silently overwrites if you pass &lt;code&gt;--domain-name&lt;/code&gt; twice. No error, just a cert that doesn't cover what you think it covers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lesson 3: S3 Website Hosting Has a Public Access Trap
&lt;/h2&gt;

&lt;p&gt;Creating the bucket is one command. Making it actually serve public web content is three:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Step 1: Create bucket&lt;/span&gt;
aws s3api create-bucket &lt;span class="nt"&gt;--bucket&lt;/span&gt; dontdothat.click

&lt;span class="c"&gt;# Step 2: Disable the Block Public Access defaults&lt;/span&gt;
&lt;span class="c"&gt;# (THIS MUST COME BEFORE the bucket policy)&lt;/span&gt;
aws s3api put-public-access-block &lt;span class="nt"&gt;--bucket&lt;/span&gt; dontdothat.click &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--public-access-block-configuration&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="s2"&gt;"BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"&lt;/span&gt;

&lt;span class="c"&gt;# Step 3: NOW you can set the public read policy&lt;/span&gt;
aws s3api put-bucket-policy &lt;span class="nt"&gt;--bucket&lt;/span&gt; dontdothat.click &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--policy&lt;/span&gt; &lt;span class="s1"&gt;'{ ... "Action": "s3:GetObject" ... }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do step 3 before step 2, you get &lt;code&gt;AccessDenied&lt;/code&gt; — not because your IAM permissions are wrong, but because S3's Block Public Access feature (enabled by default since 2023) rejects p&lt;br&gt;
ublic policies at the bucket level. The error message mentions "BlockPublicPolicy" but doesn't tell you what to do about it.&lt;/p&gt;

&lt;p&gt;This is actually a good security default. But it turns every "host a static site on S3" tutorial into a minefield if it was written before 2023.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Unexpected Thing
&lt;/h2&gt;

&lt;p&gt;The biggest surprise wasn't technical — it was the traffic pattern. The site got a small spike from Reddit on day 1, then dropped to near-zero. Expected. But starting around day 3, I noticed a slow trickle of organic traffic. People were sharing the direct URL in group chats and Discord servers.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;dontdothat.click&lt;/code&gt; as a domain name turned out to be the best marketing decision I made. People share it because the URL itself is funny. I've seen it dropped in conversations with zero c&lt;br&gt;
ontext — just the bare URL — and people click it because they're curious what "dontdothat.click" could possibly be.&lt;/p&gt;

&lt;p&gt;The $3 domain is generating more word-of-mouth than any Reddit post could.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Honestly? Nothing. That's the point. It's a static site on S3 with a CDN in front of it. There's nothing to maintain, nothing to patch, no servers to restart at 3am. The AI model is hosted by Hugging Face and cached in users' browsers. The only moving part is AdSense, and Google manages that.&lt;/p&gt;

&lt;p&gt;This is what "passive" should actually mean in "passive income." Not "I check on it every day" — but "I genuinely forget it exists for a week and nothing breaks."&lt;/p&gt;

&lt;p&gt;The total cost to run this for a year will be about $30. One good day of ad revenue covers that. Everything else is profit — or more accurately, beer money. But it's beer money I did zero&lt;br&gt;
 work for after launch night.&lt;/p&gt;

&lt;p&gt;And that's the real lesson: &lt;strong&gt;the best architecture for a side project is the one you can walk away from.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Previous post: &lt;a href="https://dev.to/saar_tochner/how-i-used-ai-to-build-name-and-ship-a-privacy-first-product-in-one-night-for-3-1b9j"&gt;How I Used AI to Build, Name, and Ship a Privacy-First Product in One Night — for $3&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The site: &lt;a href="https://dontdothat.click" rel="noopener noreferrer"&gt;dontdothat.click&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>RelEng: Vibe Coders Ship It, Reliability Engineers Make It Actually Work</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Fri, 27 Mar 2026 09:44:57 +0000</pubDate>
      <link>https://dev.to/aws-builders/releng-vibe-coders-ship-it-reliability-engineers-make-it-actually-work-403c</link>
      <guid>https://dev.to/aws-builders/releng-vibe-coders-ship-it-reliability-engineers-make-it-actually-work-403c</guid>
      <description>&lt;p&gt;Last week someone on r/vibecoding asked a question that's been rattling around my head since:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The number of vibecoders will surpass actual coders and then what? Do we stop labelling them as vibecoders, as this community becomes the new norm for the word 'coder'? Then what do w&lt;br&gt;
e call the original coders?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I think this has already happened. 92% of US developers use AI coding tools daily. The vast majority of all new code is AI-generated. When the majority of people writing software are vibing their way through it, "vibe coder" isn't a subculture anymore — it's just "coder."&lt;/p&gt;

&lt;p&gt;So what do we call the rest of us?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Photography Parallel
&lt;/h2&gt;

&lt;p&gt;This exact transition happened before. When DSLRs got auto-mode and smartphones put a camera in every pocket, suddenly everyone was a "photographer." The professionals didn't disappear. They just stopped being called photographers.&lt;/p&gt;

&lt;p&gt;They became &lt;strong&gt;cinematographers&lt;/strong&gt;. Retouchers. Visual engineers. The craft got more specific, not extinct. The word "photographer" shifted to mean the casual majority, and the people who understood light, composition, and post-processing found new titles that reflected what they actually did.&lt;/p&gt;

&lt;p&gt;The same thing is happening to "coder" right now.&lt;br&gt;
                                                                                                                                                                                           ## The 80/20 Wall&lt;/p&gt;

&lt;p&gt;I've been vibe coding side projects for a while now. The pattern is always the same:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI gets you to 80% in 10 minutes.&lt;/strong&gt; It generates a full working app, sets up infrastructure, writes the CSS, handles the boilerplate. It's genuinely magical.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then you hit the wall.&lt;/strong&gt;&lt;br&gt;
The CSS silently overrides a third-party library's &lt;code&gt;display&lt;/code&gt; property. The &lt;code&gt;setInterval&lt;/code&gt; works perfectly in the foreground but gets throttled to once per minute in a background tab. An AWS CLI flag used twice doesn't error — it silently overwrites the first value. The AI generates code that &lt;em&gt;looks&lt;/em&gt; right but breaks in ways that require you to actually understand what the&lt;br&gt;
code does, not just what it says.&lt;/p&gt;

&lt;p&gt;That last 20% is where the craft lives now. And I'd argue it's the harder 20%.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 2am Test
&lt;/h2&gt;

&lt;p&gt;Here's the dividing line I keep coming back to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A vibe coder builds it. A RelEng keeps it running.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RelEng — short for &lt;strong&gt;Reliability Engineer&lt;/strong&gt;. Not because it's a new concept (Google's been using "SRE" for years), but because it captures exactly what the role becomes when AI handles generation: you're the person responsible for making sure it actually works. In production. At 2am. When the vibed code catches fire.&lt;/p&gt;

&lt;p&gt;This isn't about gatekeeping or ego. It's about acknowledging that the skill set is shifting. The valuable part is no longer "can you write a React component?" — the AI does that better a&lt;br&gt;
nd faster. The valuable part is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can you &lt;strong&gt;debug&lt;/strong&gt; it when it breaks in Safari but not Chrome?&lt;/li&gt;
&lt;li&gt;Can you spot that the AI generated &lt;strong&gt;plausible but incorrect&lt;/strong&gt; error handling?&lt;/li&gt;
&lt;li&gt;Can you figure out why the &lt;strong&gt;infrastructure&lt;/strong&gt; is returning 403s on a perfectly valid bucket policy?&lt;/li&gt;
&lt;li&gt;Can you make it &lt;strong&gt;survive&lt;/strong&gt; 10,000 concurrent users when it was vibed for 10?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's reliability engineering. That's the craft that doesn't get automated away when the generation becomes effortless.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New Stack
&lt;/h2&gt;

&lt;p&gt;If I'm right about this, the job market is heading toward a split:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;What they do&lt;/th&gt;
&lt;th&gt;How they work&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Coder&lt;/strong&gt; (the new default)&lt;/td&gt;
&lt;td&gt;Builds features, ships MVPs, creates products&lt;/td&gt;
&lt;td&gt;Prompts AI, iterates fast, ships often&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RelEng&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Debugs, hardens, scales, fixes the 20%&lt;/td&gt;
&lt;td&gt;Reads generated code, understands systems, owns reliability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Both are valuable. Both are necessary. But they're increasingly different skill sets. A great vibe coder has taste, product sense, and speed. A great RelEng has systems knowledge, debugging instinct, and patience.&lt;/p&gt;

&lt;p&gt;The overlap exists but it's shrinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;It matters because naming things shapes careers. Right now, if you're a traditional developer who actually understands systems, memory management, browser quirks, and distributed systems&lt;br&gt;
— you don't have a word that distinguishes what you do from someone who shipped a full-stack app in an afternoon by prompting Claude.&lt;/p&gt;

&lt;p&gt;You're both called "developers." But you're doing fundamentally different things.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RelEng&lt;/strong&gt; gives us that word. It says: I don't just generate code. I make sure it works. I'm the person you call at 2am when the vibed code catches fire.&lt;/p&gt;

&lt;p&gt;And honestly? That's where the money is anyway.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I Used AI to Build, Name, and Ship a Privacy-First Product in One Night — for $3</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Fri, 20 Mar 2026 20:15:13 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-i-used-ai-to-build-name-and-ship-a-privacy-first-product-in-one-night-for-3-1b9j</link>
      <guid>https://dev.to/aws-builders/how-i-used-ai-to-build-name-and-ship-a-privacy-first-product-in-one-night-for-3-1b9j</guid>
      <description>&lt;p&gt;Last night I had an idea: what if your webcam could catch you doing bad habits — biting your nails, slouching, picking your skin — and call you out in real-time? No servers, no cloud processing, no privacy concerns. Just AI running &lt;em&gt;inside your browser&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;By morning, &lt;a href="https://dontdothat.click" rel="noopener noreferrer"&gt;dontdothat.click&lt;/a&gt; was live. Total out-of-pocket cost: &lt;strong&gt;$3&lt;/strong&gt;. Here's how AI did most of the heavy lifting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Idea in 30 Seconds
&lt;/h2&gt;

&lt;p&gt;A static website with three panels: behaviors you want to track on the left, a live camera feed in the center, and a "caught!" log on the right. The AI model runs locally in the browser using &lt;a href="https://huggingface.co/docs/transformers.js" rel="noopener noreferrer"&gt;Transformers.js&lt;/a&gt; — specifically a CLIP vision model that compares your camera frames against text descriptions of your habits. Zero data ever leaves the user's machine.&lt;/p&gt;

&lt;p&gt;The monetization? A single Google AdSense banner. Passive income, zero maintenance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude Code as a Co-Founder
&lt;/h2&gt;

&lt;p&gt;The interesting part wasn't the code — it was everything &lt;em&gt;around&lt;/em&gt; the code. I used &lt;a href="https://claude.ai/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; (Anthropic's CLI tool) as my co-pilot for the entire journey, and the most valuable moments were the non-obvious ones.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding the Right Name (The Hard Part)
&lt;/h3&gt;

&lt;p&gt;Naming a product is notoriously difficult. I started with "WatchMe" but quickly realized most obvious domains were taken. Here's where Claude Code got creative — I asked it to suggest alternatives and then &lt;strong&gt;check availability directly against the Route 53 API&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws route53domains check-domain-availability &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--domain-name&lt;/span&gt; dontdothat.click &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1
&lt;span class="c"&gt;# → AVAILABLE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude checked 20+ domains across &lt;code&gt;.com&lt;/code&gt;, &lt;code&gt;.help&lt;/code&gt;, &lt;code&gt;.ai&lt;/code&gt;, &lt;code&gt;.bot&lt;/code&gt;, and &lt;code&gt;.click&lt;/code&gt; TLDs in seconds. Most were taken. But it also pulled &lt;strong&gt;pricing&lt;/strong&gt; from Route 53:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;TLD&lt;/th&gt;
&lt;th&gt;Register/yr&lt;/th&gt;
&lt;th&gt;Renew/yr&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;.ai&lt;/td&gt;
&lt;td&gt;$129&lt;/td&gt;
&lt;td&gt;$129&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.bot&lt;/td&gt;
&lt;td&gt;$71&lt;/td&gt;
&lt;td&gt;$71&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.help&lt;/td&gt;
&lt;td&gt;$16&lt;/td&gt;
&lt;td&gt;$16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.com&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;td&gt;$15&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;.click&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$3&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;$3&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When I set a &lt;strong&gt;$25 total budget&lt;/strong&gt; (including marketing), Claude immediately did the math: $3 for &lt;code&gt;.click&lt;/code&gt; leaves room to breathe, while &lt;code&gt;.ai&lt;/code&gt; would eat 5x the entire budget. For a side project validating an idea, that's an easy call.&lt;br&gt;
And honestly? &lt;strong&gt;dontdothat.click&lt;/strong&gt; is a better name than &lt;code&gt;dontdothat.ai&lt;/code&gt;. It's funny, memorable, and the TLD is part of the joke. Sometimes the cheapest option is the best option.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cost-Effective AWS Architecture
&lt;/h3&gt;

&lt;p&gt;The full stack costs practically nothing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Domain (Route 53):     $3/year
S3 Static Hosting:     ~$0.01/month (AWS credits)
CloudFront CDN:        ~$0.00 (free tier / credits)
ACM Certificate:       Free
────────────────────────────
Total year 1:          ~$3.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude set up the entire infrastructure in a single session — S3 bucket with static hosting, ACM certificate with DNS validation, CloudFront distribution with HTTPS (required for camera a&lt;br&gt;
ccess), and Route 53 DNS records. All automated, all in one conversation.&lt;/p&gt;

&lt;p&gt;The key commands were straightforward:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create bucket + enable website hosting&lt;/span&gt;
aws s3api create-bucket &lt;span class="nt"&gt;--bucket&lt;/span&gt; dontdothat.click
aws s3 website s3://dontdothat.click/ &lt;span class="nt"&gt;--index-document&lt;/span&gt; index.html

&lt;span class="c"&gt;# Request SSL certificate&lt;/span&gt;
aws acm request-certificate &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--domain-name&lt;/span&gt; dontdothat.click &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--validation-method&lt;/span&gt; DNS

&lt;span class="c"&gt;# Upload the site&lt;/span&gt;
aws s3 &lt;span class="nb"&gt;sync&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt; s3://dontdothat.click/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The $0 Marketing Plan
&lt;/h3&gt;

&lt;p&gt;With $22 left in the budget, Claude's honest advice was: &lt;strong&gt;spend zero on paid marketing&lt;/strong&gt;. At this scale, a $10 Reddit ad buys you ~200 impressions. Instead:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;r/InternetIsBeautiful&lt;/strong&gt;: A privacy-first AI tool is perfect for this sub. One viral post = 10-50K visits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hacker News "Show HN"&lt;/strong&gt;: "AI runs entirely in your browser" is exactly the kind of technical novelty HN loves.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product Hunt&lt;/strong&gt;: 15 minutes to set up, strong in the "Privacy" category.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;This blog post&lt;/strong&gt;: You're reading part of the marketing plan right now.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Free channels with high-quality traffic beat micro-budget paid ads every time for indie products.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI-in-Browser Trick
&lt;/h2&gt;

&lt;p&gt;The technical core is surprisingly simple. CLIP (Contrastive Language-Image Pre-training) can compare images against text descriptions — exactly what we need. Using Transformers.js, the e&lt;br&gt;
ntire model runs in WebAssembly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;pipeline&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@huggingface/transformers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;classifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;zero-shot-image-classification&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Xenova/clip-vit-base-patch16&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Every 3 seconds, classify the camera frame&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;classifier&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cameraFrame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a person biting nails&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a person slouching&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a person sitting normally&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;// baseline&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model downloads once (~90MB), gets cached by the browser, and then works fully offline. Users can literally enable airplane mode and the detection keeps running. That's the privacy st&lt;br&gt;
ory — and it's verifiable. Open DevTools, check the Network tab, see zero outgoing data.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI tools like Claude Code are most valuable for the decisions, not the code.&lt;/strong&gt; The HTML/CSS/JS took minutes. But the domain research — checking availability across registrars, comparing&lt;br&gt;
 TLD pricing, calculating ROI against a fixed budget — that's the kind of tedious-but-critical work where AI saves hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Constraints breed creativity.&lt;/strong&gt; A $25 budget forced a better name (&lt;code&gt;dontdothat.click&lt;/code&gt; &amp;gt; &lt;code&gt;dontdothat.ai&lt;/code&gt;), a simpler architecture (static S3 &amp;gt; any server), and smarter marketing (free ch&lt;br&gt;
annels &amp;gt; micro-budget ads).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy as a feature sells itself.&lt;/strong&gt; "Your camera never leaves your computer" isn't just a disclaimer — it's the entire product story. And it's trivially verifiable, which builds trust&lt;br&gt;
faster than any privacy policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dontdothat.click" rel="noopener noreferrer"&gt;dontdothat.click&lt;/a&gt; is live. Add your bad habits, enable your camera, and let the AI catch you in the act. Everything runs locally. And if you want to verify — open DevTools. I dare you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Building something with AWS and AI? I'd love to hear about it. Find me here or on &lt;a href="https://dev.to/saar_tochner"&gt;dev.to/saar_tochner&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Smart Market Testing: One Domain, Infinite Possibilities</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Fri, 14 Feb 2025 19:52:55 +0000</pubDate>
      <link>https://dev.to/aws-builders/smart-market-testing-one-domain-infinite-possibilities-4cna</link>
      <guid>https://dev.to/aws-builders/smart-market-testing-one-domain-infinite-possibilities-4cna</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvvfow22ncnlrwzjoh42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvvfow22ncnlrwzjoh42.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bootstrap Founder's Dilemma
&lt;/h2&gt;

&lt;p&gt;Every founder faces the same challenge: finding the right market fit. But here's what's changed - AI has transformed how we validate ideas and test markets. During my product-market-fit journey, I discover new leads, target companies, and pain points daily.&lt;/p&gt;

&lt;p&gt;Instead of the old approach of building separate websites and burning through cash, I now create personalized landing pages. And a lot of them.&lt;/p&gt;

&lt;p&gt;Each potential customer gets their own tailored page that speaks directly to their specific challenges. When I spot a company struggling with inventory management, I quickly spin up a landing page that resonates with their exact pain points. The messaging is focused yet flexible enough to appeal to similar companies in their industry, and the target remains the same: &lt;strong&gt;I want to learn something new&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's a game-changer - but what if I told you the real magic isn't just in creating pages quickly, but in how we do it in parallel, on high scale, and very low budget?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Power of Single-Domain Testing
&lt;/h2&gt;

&lt;p&gt;Here's what I discovered after burning through unnecessary AWS costs: you don't need separate domains for market testing. One domain can serve multiple landing pages, each targeting different niches. Here's why this matters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn fast from concurrent experiments&lt;/li&gt;
&lt;li&gt;Save on Route 53 costs ($0.50/hosted zone/month adds up)&lt;/li&gt;
&lt;li&gt;Single SSL certificate management&lt;/li&gt;
&lt;li&gt;Consolidated AWS WorkMail setup&lt;/li&gt;
&lt;li&gt;Unified analytics tracking&lt;/li&gt;
&lt;li&gt;Simpler DNS management&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhn67lz7zwlx1bnyshaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhn67lz7zwlx1bnyshaq.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Modern Market Testing Stack
&lt;/h2&gt;

&lt;p&gt;The game-changer? AI-powered website builders combined with smart routing. Here's my current setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single domain on Route 53&lt;/li&gt;
&lt;li&gt;CloudFront distribution&lt;/li&gt;
&lt;li&gt;AI website builder (I use Claude 3.5 Sonnet for its exceptional ability to understand context and generate targeted content)&lt;/li&gt;
&lt;li&gt;Unified analytics backend (Mixtiles - a powerful analytics platform that helps track user behavior across multiple landing pages)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real Numbers: The Cost Difference
&lt;/h2&gt;

&lt;p&gt;Let's break down testing 20 different market segments:&lt;/p&gt;

&lt;p&gt;Traditional Approach (Monthly):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;20 domains: $200&lt;/li&gt;
&lt;li&gt;20 SSL certificates: $120&lt;/li&gt;
&lt;li&gt;20 WorkMail setups: $80&lt;/li&gt;
&lt;li&gt;Total: $400+&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Smart Single-Domain Approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 domain: $10&lt;/li&gt;
&lt;li&gt;1 SSL certificate: $6&lt;/li&gt;
&lt;li&gt;1 WorkMail setup: $4&lt;/li&gt;
&lt;li&gt;Total: $20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's a 95% cost reduction before even starting your tests!&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Advantage
&lt;/h2&gt;

&lt;p&gt;Modern AI tools have transformed how we create landing pages: You can generate and deploy new landing pages in minutes, not days.&lt;/p&gt;

&lt;p&gt;During my product-market-fit process, I discover new contacts, leads, target companies, and target pains every day. Every single contact/lead/company gets its own landing page which discusses directly their specific pain.&lt;/p&gt;

&lt;p&gt;For example, when I identify a potential customer dealing with inventory management issues, I can quickly generate a landing page that speaks directly to their pain points, while maintaining enough generalization to appeal to similar companies in their industry.&lt;/p&gt;

&lt;p&gt;Of course, I try to not make it too obvious, and as part of the market-learning process I try to generalize the pain. But still, the messaging is aimed at this one target.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analytics That Make Sense
&lt;/h2&gt;

&lt;p&gt;With a single domain, you get clearer insights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cross-segment user behavior&lt;/li&gt;
&lt;li&gt;Unified conversion tracking&lt;/li&gt;
&lt;li&gt;Easier A/B testing&lt;/li&gt;
&lt;li&gt;Consolidated heat maps&lt;/li&gt;
&lt;li&gt;Single source of truth for metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Implementation Playbook
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Setup Phase (One time)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Register your primary domain&lt;/li&gt;
&lt;li&gt;Set up CloudFront distribution&lt;/li&gt;
&lt;li&gt;Configure basic routing&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Content Creation (Repeating)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define target segments&lt;/li&gt;
&lt;li&gt;Understand their pain and build a messaging strategy&lt;/li&gt;
&lt;li&gt;Use AI to generate landing pages&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Evaluation&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start targeted ad campaigns&lt;/li&gt;
&lt;li&gt;Monitor unified analytics&lt;/li&gt;
&lt;li&gt;Learn. Discover. Innovate.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Psychology Behind It
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tm45kx9z90883ictyr8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tm45kx9z90883ictyr8.png" alt="Image description" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's why this approach works better:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Faster testing cycles mean quicker learning - you can test multiple hypotheses simultaneously&lt;/li&gt;
&lt;li&gt;Lower costs encourage more experimentation - when each test costs less, you're more likely to try new approaches&lt;/li&gt;
&lt;li&gt;Unified analytics provide better insights - seeing all data in one place helps identify patterns&lt;/li&gt;
&lt;li&gt;Less technical overhead means more focus on customers - spend time understanding needs, not managing infrastructure&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Common Pitfalls to Avoid
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Don't overcompress testing cycles. Focus on what you are trying to learn.&lt;/li&gt;
&lt;li&gt;Maintain consistent branding across segments&lt;/li&gt;
&lt;li&gt;Keep analytics tags separate but organized&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm06we96ow5plvr1rz7kl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm06we96ow5plvr1rz7kl.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI tools help you to create content, which helps you to learn. They do not teach you directly.&lt;/li&gt;
&lt;li&gt;Unified analytics provide better insights&lt;/li&gt;
&lt;li&gt;Lower costs mean more testing opportunities&lt;/li&gt;
&lt;li&gt;Technical simplicity enables faster iteration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Looking Forward
&lt;/h2&gt;

&lt;p&gt;The future of market testing is here. It's faster, cheaper, and smarter than ever before. As AI tools continue to evolve, the ability to test and iterate will only get better.&lt;/p&gt;

&lt;p&gt;Remember: Success isn't about having the biggest budget - it's about testing smart and learning fast.&lt;/p&gt;

&lt;h1&gt;
  
  
  MarketTesting #StartupStrategy #IndieHacking #Growth
&lt;/h1&gt;

</description>
      <category>bootstrap</category>
      <category>product</category>
      <category>startupstrategy</category>
      <category>indiehacking</category>
    </item>
    <item>
      <title>Serverless AI for Indies: Building a Scalable Image Analysis Pipeline. Alone.</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Fri, 07 Feb 2025 08:00:00 +0000</pubDate>
      <link>https://dev.to/aws-builders/serverless-ai-for-indies-building-a-scalable-image-analysis-pipeline-alone-5fao</link>
      <guid>https://dev.to/aws-builders/serverless-ai-for-indies-building-a-scalable-image-analysis-pipeline-alone-5fao</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs52av6r6f88rpuunkxxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs52av6r6f88rpuunkxxt.png" alt="one person can build powerful systems" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Three weeks ago, I wrote about building my MVP in a single night using AWS. Today, I'm back with an exciting update - I landed my first customer! But here's the twist: they needed an AI-powered image analysis pipeline that &lt;em&gt;could&lt;/em&gt; handle thousands of images. A few years ago, this would've been a massive undertaking requiring significant infrastructure and upfront costs. Not anymore.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Challenge: Enterprise Needs, Indie Budget
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj52qzn1cfy3d1it4skn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvj52qzn1cfy3d1it4skn.png" alt="" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My customer's requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze thousands of images upon request&lt;/li&gt;
&lt;li&gt;Extract text, objects, and metadata&lt;/li&gt;
&lt;li&gt;Process images in parallel&lt;/li&gt;
&lt;li&gt;Scale automatically
My requirements:&lt;/li&gt;
&lt;li&gt;Stay within a budget&lt;/li&gt;
&lt;li&gt;Focus on logic. Go Fully managed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an indie developer, this was the perfect opportunity to showcase how modern cloud services let us punch above our weight class.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Serverless AI Stack
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49xta3iuxwcno95n8gdk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49xta3iuxwcno95n8gdk.png" alt="Lambda → Bedrock flow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The beauty of this solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 for storage (~$0.023/GB/month)&lt;/li&gt;
&lt;li&gt;Lambda for processing (First 1M requests/month FREE)&lt;/li&gt;
&lt;li&gt;Bedrock for AI (Pay per API call)&lt;/li&gt;
&lt;li&gt;Zero infrastructure management&lt;/li&gt;
&lt;li&gt;True pay-per-use pricing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Building the Pipeline
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: S3 Event Triggers (15 minutes)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Lambda function to handle S3 events
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Records&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Records&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="c1"&gt;# Process new images automatically
&lt;/span&gt;    &lt;span class="nf"&gt;process_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro-tip: S3 events are free! You only pay for storage and retrieval.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Bedrock Integration (30 minutes)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3jq3bphk4hr0o0el0id.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft3jq3bphk4hr0o0el0id.png" alt="the simplicity of AI integration" width="768" height="386"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;bedrock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bedrock-runtime&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;analyze_image&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_bytes&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;anthropic.claude-3-sonnet-20240229-v1:0&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;anthropic_version&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-2023-05-31&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_tokens&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                   &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                       &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bytes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;image_bytes&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
                       &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analyze this image and describe its key elements&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                   &lt;span class="p"&gt;]}&lt;/span&gt;
              &lt;span class="p"&gt;]}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;messages&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Parallel Processing (20 minutes)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyd76439jieu5wnuualmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyd76439jieu5wnuualmx.png" alt="Lambda concurrency is amazing" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The magic of serverless - automatic scaling:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;process_batch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_urls&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;lambda_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;lambda&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Invoke Lambda function for each image
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;image_urls&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;lambda_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke_async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;FunctionName&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image-processor&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;InvokeArgs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;image_url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Cost Breakdown
&lt;/h2&gt;

&lt;p&gt;Let's break down a realistic workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10,000 images/month&lt;/li&gt;
&lt;li&gt;Average 1MB per image&lt;/li&gt;
&lt;li&gt;5 AI operations per image&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monthly costs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3: ~$0.23 (10GB storage)&lt;/li&gt;
&lt;li&gt;Lambda: FREE (under 1M requests)&lt;/li&gt;
&lt;li&gt;Bedrock: ~$20 (50,000 AI operations)&lt;/li&gt;
&lt;li&gt;Total: ~$20.23/month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare this to traditional infrastructure costing hundreds or thousands monthly!&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaling Like a Pro
&lt;/h2&gt;

&lt;p&gt;The beauty of this architecture:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Zero fixed costs&lt;/li&gt;
&lt;li&gt;Linear scaling with usage&lt;/li&gt;
&lt;li&gt;No infrastructure management&lt;/li&gt;
&lt;li&gt;Enterprise-grade reliability&lt;/li&gt;
&lt;li&gt;Pay only for successful operations&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Indie Developer's Secret Weapon
&lt;/h2&gt;

&lt;p&gt;Here's why this approach is perfect for indies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No upfront investment&lt;/li&gt;
&lt;li&gt;Production-ready from day one&lt;/li&gt;
&lt;li&gt;Enterprise features at startup prices&lt;/li&gt;
&lt;li&gt;Focus on business logic, not infrastructure&lt;/li&gt;
&lt;li&gt;Scale from prototype to production seamlessly&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-World Performance
&lt;/h2&gt;

&lt;p&gt;Some actual metrics from my setup:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Average processing time: 2.3 seconds&lt;/li&gt;
&lt;li&gt;Cost per image: $0.002&lt;/li&gt;
&lt;li&gt;Parallel processing: Up to 1000 images/minute&lt;/li&gt;
&lt;li&gt;Success rate: 99.9%&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Joy of Modern Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzq93xs7jshi9sig40h4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flzq93xs7jshi9sig40h4.png" alt="analytics make developers happy" width="626" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is why I love being an indie developer in 2025. We can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use cutting-edge AI without PhDs&lt;/li&gt;
&lt;li&gt;Build enterprise-grade systems solo&lt;/li&gt;
&lt;li&gt;Scale infinitely without DevOps&lt;/li&gt;
&lt;li&gt;Compete with larger companies&lt;/li&gt;
&lt;li&gt;Sleep well knowing AWS handles infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Looking Forward
&lt;/h2&gt;

&lt;p&gt;The pipeline I built in a day would have taken months and a team of engineers just a few years ago. Now, one developer with AWS can build and operate it. This is the power of modern cloud services - they level the playing field for indies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Serverless + AI is a game-changer for indies&lt;/li&gt;
&lt;li&gt;Pay-per-use means no upfront costs&lt;/li&gt;
&lt;li&gt;AWS services work seamlessly together&lt;/li&gt;
&lt;li&gt;You can build enterprise-grade systems solo&lt;/li&gt;
&lt;li&gt;Focus on solving problems, not managing servers&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remember: Being an indie developer doesn't mean compromising on capabilities. With the right architecture, you can build powerful, scalable systems that grow with your success.&lt;/p&gt;

&lt;h1&gt;
  
  
  IndieHacking #AWS #AI #Serverless #Developer
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>From Idea to Live Product in One Night: An Indie Dev's AWS Journey</title>
      <dc:creator>Saar Tochner</dc:creator>
      <pubDate>Fri, 24 Jan 2025 21:06:32 +0000</pubDate>
      <link>https://dev.to/aws-builders/from-idea-to-live-product-in-one-night-an-indie-devs-aws-journey-fcf</link>
      <guid>https://dev.to/aws-builders/from-idea-to-live-product-in-one-night-an-indie-devs-aws-journey-fcf</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60xv5zoc4zddqlcrtd9q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F60xv5zoc4zddqlcrtd9q.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last week, I found myself in a familiar indie dev situation - a promising idea that needed validation, and time wasn't on my side. While AI tools like Claude helped me brainstorm and generate initial content, I needed something that looked professional enough for potential customers. The challenge? Get it all done before sunrise.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Joy of Indie Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse31hicc1mt51zjdoqx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fse31hicc1mt51zjdoqx9.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's something magical about being an indie developer. You're the designer, the developer, the DevOps engineer, and the marketer - all rolled into one. This freedom to build exactly what you envision, without corporate constraints, is exhilarating. But with freedom comes the need for smart, cost-effective solutions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One-Night Challenge
&lt;/h2&gt;

&lt;p&gt;What I needed:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Professional-looking website&lt;/li&gt;
&lt;li&gt;Business email domain&lt;/li&gt;
&lt;li&gt;User authentication&lt;/li&gt;
&lt;li&gt;Scalable backend&lt;/li&gt;
&lt;li&gt;Custom domain&lt;/li&gt;
&lt;li&gt;All of this before my morning coffee&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Indie-Perfect AWS Stack
&lt;/h2&gt;

&lt;p&gt;Here's the beauty of this setup - it's incredibly cost-effective:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route 53: ~$15/year for domain and DNS&lt;/li&gt;
&lt;li&gt;WorkMail: $4/user/month (only need 1 account to start + groups creativity)&lt;/li&gt;
&lt;li&gt;S3 + Amplify: Practically free for MVPs (pay-per-use)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total monthly cost? Less than $7! Perfect for bootstrapped projects.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed Round: Route 53 (15 minutes)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Register domain and create hosted zone&lt;/span&gt;
aws route53 create-hosted-zone &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--name&lt;/span&gt; yourdomain.com &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--caller-reference&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +%s&lt;span class="si"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pro-tip: Route 53's DNS propagation is lightning fast - usually under 60 seconds!&lt;/p&gt;

&lt;h3&gt;
  
  
  S3 Sprint (10 minutes)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F109at514is4eu98oe622.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F109at514is4eu98oe622.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Quick bucket setup&lt;/span&gt;
aws s3 mb s3://your-domain-name
aws s3 website s3://your-domain-name &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--index-document&lt;/span&gt; index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Amplify Magic (30 minutes)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmnhmtzrr5cb2cxpaa8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmnhmtzrr5cb2cxpaa8i.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The real time-saver:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;amplify init
amplify add auth
amplify add api
amplify push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  WorkMail Setup (15 minutes)
&lt;/h3&gt;

&lt;p&gt;Professional email in minutes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create organization&lt;/li&gt;
&lt;li&gt;Add domain&lt;/li&gt;
&lt;li&gt;Create users&lt;/li&gt;
&lt;li&gt;Done!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Power of Modern Indie Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqm5ylvkeesssccqxg4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqm5ylvkeesssccqxg4s.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being an indie developer in 2025 is incredible. We have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI for content generation&lt;/li&gt;
&lt;li&gt;AWS for infrastructure&lt;/li&gt;
&lt;li&gt;Pay-as-you-go pricing&lt;/li&gt;
&lt;li&gt;Enterprise-grade tools at indie prices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The best part? You can validate ideas faster than ever. My project went from concept to live demo in under 6 hours, costing less than a fancy coffee shop breakfast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Real Impact, Small Budget
&lt;/h2&gt;

&lt;p&gt;What makes this stack perfect for indies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero upfront costs&lt;/li&gt;
&lt;li&gt;Pay only for what you use&lt;/li&gt;
&lt;li&gt;Scales with your success&lt;/li&gt;
&lt;li&gt;Professional look from day one&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future-Proof Development
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi34mxxl6gi7g6rn1z4ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi34mxxl6gi7g6rn1z4ed.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Starting small doesn't mean thinking small:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amplify handles millions of users&lt;/li&gt;
&lt;li&gt;S3 scales infinitely&lt;/li&gt;
&lt;li&gt;Route 53 provides enterprise-grade DNS&lt;/li&gt;
&lt;li&gt;WorkMail grows with your team&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Joy of Building
&lt;/h2&gt;

&lt;p&gt;There's something incredibly satisfying about waking up to your first user signups. This stack gives you the freedom to focus on what matters - building something people love.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remember
&lt;/h2&gt;

&lt;p&gt;As indie developers, we're not just building products; we're crafting experiences. Having a reliable, professional infrastructure shouldn't cost a fortune or take weeks to set up. With this AWS stack, you can go from idea to demo in one night, spending less than a movie ticket on monthly infrastructure.&lt;/p&gt;

&lt;p&gt;The future belongs to indie developers who can move fast and build smart. Now go create something amazing!&lt;/p&gt;

&lt;h1&gt;
  
  
  IndieHacking #AWS #Developer #Startup
&lt;/h1&gt;

</description>
      <category>devops</category>
      <category>product</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
