<?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: Patrick Lin</title>
    <description>The latest articles on DEV Community by Patrick Lin (@patrick_lin_c8a33afc6cb73).</description>
    <link>https://dev.to/patrick_lin_c8a33afc6cb73</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4046440%2F1b17b181-ece1-4bb0-a30a-74774a7e4dfc.jpg</url>
      <title>DEV Community: Patrick Lin</title>
      <link>https://dev.to/patrick_lin_c8a33afc6cb73</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/patrick_lin_c8a33afc6cb73"/>
    <language>en</language>
    <item>
      <title>I built a free calculator that estimates your hosting bill before you deploy (because of stories like the $104K Netlify bill)</title>
      <dc:creator>Patrick Lin</dc:creator>
      <pubDate>Sat, 25 Jul 2026 13:16:29 +0000</pubDate>
      <link>https://dev.to/patrick_lin_c8a33afc6cb73/i-built-a-free-calculator-that-estimates-your-hosting-bill-before-you-deploy-because-of-stories-pbg</link>
      <guid>https://dev.to/patrick_lin_c8a33afc6cb73/i-built-a-free-calculator-that-estimates-your-hosting-bill-before-you-deploy-because-of-stories-pbg</guid>
      <description>&lt;p&gt;A few weeks ago I went down a rabbit hole reading about people who got wrecked by their hosting bill for a project that was supposed to be "free tier, no worries."&lt;/p&gt;

&lt;p&gt;Two stories stuck with me:&lt;/p&gt;

&lt;p&gt;A developer got hit with a $104,000 bill from Netlify for a simple static site after a traffic spike. He only got it waived after the story went viral on Hacker News.&lt;br&gt;
A Vercel user's staging environment got scraped by bots over a weekend, and a $20/month plan turned into a $23,000 bill.&lt;/p&gt;

&lt;p&gt;What got me wasn't that these platforms are evil — it's that "Spend Management" and "usage limit" features exist on most of them, but they're opt-in, buried in settings, and there are real reports of the alerts just... not firing when they should.&lt;/p&gt;

&lt;p&gt;So before my next side project, I wanted a boring, honest answer to one question: *&lt;em&gt;if this thing actually got traffic, what would it cost me on Netlify vs. Vercel vs. Railway vs. Render vs. Cloudflare Pages?&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
Reading five pricing pages and doing napkin math every time I evaluate a platform got old fast. So I built DeployRadar — a free calculator that takes a few inputs (expected monthly visitors, average page weight, build minutes, whether you're using serverless/edge functions and how often) and estimates a rough monthly cost across all five platforms side by side, sorted cheapest to most expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few decisions I made on purpose
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;No account access, no signup, no OAuth.&lt;/strong&gt; It doesn't need to read your actual usage to be useful — it's a before you deploy tool, not a monitoring tool. You type in your estimate, it does the math against each platform's publicly published pricing rules, and that's it. Nothing to authorize, nothing to connect, nothing to leak.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's not trying to be precise, it's trying to be directionally honest.&lt;/strong&gt; The site is upfront that these are rough estimates based on public pricing pages, not a quote — real bills depend on plan specifics, regional pricing, and provider-specific overage rules that change over time. The goal is "oh, Railway would clearly be 3x cheaper for this shape of traffic" not "your bill will be exactly $47.32."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I shipped the smallest possible version first.&lt;/strong&gt; No dashboard, no database, no user accounts — just a static page with client-side JS doing the pricing math. The whole thing is one HTML file. If people want more (the obvious next step being: connect your actual account read-only and warn you before you go over budget, instead of just estimating ahead of time), there's a spot on the page to say so. I'd rather build that because people asked for it than guess.&lt;/p&gt;

&lt;p&gt;Try it &lt;a href="//deployradar.netlify.app"&gt;deployradar.netlify.app&lt;/a&gt; — takes about 15 seconds to get a comparison.&lt;/p&gt;

&lt;p&gt;If you've been burned by a surprise hosting bill (or dodged one), I'd genuinely like to hear the story — and if there's a platform I should add, or a pricing rule I got wrong, tell me. I'm actively updating the pricing rules as providers change their tiers.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Schema for AI: The structured data fields ChatGPT actually needs to recommend your product</title>
      <dc:creator>Patrick Lin</dc:creator>
      <pubDate>Sat, 25 Jul 2026 07:05:32 +0000</pubDate>
      <link>https://dev.to/patrick_lin_c8a33afc6cb73/schema-for-ai-the-structured-data-fields-chatgpt-actually-needs-to-recommend-your-product-3f4j</link>
      <guid>https://dev.to/patrick_lin_c8a33afc6cb73/schema-for-ai-the-structured-data-fields-chatgpt-actually-needs-to-recommend-your-product-3f4j</guid>
      <description>&lt;p&gt;Search Engine Land just published a piece called "Schema for AI search" about using structured&lt;br&gt;
  data to show up in AI-driven results. I read it and immediately ran&lt;br&gt;
  &lt;a href="https://ai-vision-check-pink.vercel.app/" rel="noopener noreferrer"&gt;AIViz&lt;/a&gt; scans on a batch of Shopify stores. One thing&lt;br&gt;
  surprised me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Most Shopify stores get their structured data only half right.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Shopify auto-generates Product Schema — name, description, image, and price are covered. But AI search engines need more than that. When ChatGPT decides whether to recommend your product, it also looks at &lt;code&gt;aggregateRating&lt;/code&gt;, &lt;code&gt;brand&lt;/code&gt;, &lt;code&gt;gtin&lt;/code&gt;, and &lt;code&gt;availability&lt;/code&gt;. Without these, the AI doesn't have enough confidence to surface your product over a competitor's.&lt;/p&gt;
&lt;h2&gt;
  
  
  AI search engines don't read your page like Google does
&lt;/h2&gt;

&lt;p&gt;Google's ranking algorithm weighs hundreds of signals — backlinks, domain authority, page speed, user behavior. You've probably spent years optimizing for them.&lt;/p&gt;

&lt;p&gt;ChatGPT and Perplexity ignore all of that.&lt;/p&gt;

&lt;p&gt;According to Recomaze's research, ChatGPT pulls product information from two sources: &lt;strong&gt;Bing Merchant Center product feeds&lt;/strong&gt; and &lt;strong&gt;Schema.org structured data on your page&lt;/strong&gt;. It uses GTINs&lt;br&gt;
  (barcodes) to cross-reference products against known databases. Perplexity crawls your page in real-time and reads JSON-LD Product markup directly.&lt;/p&gt;

&lt;p&gt;Your SEO ranking doesn't matter here. If your JSON-LD is missing key fields, AI search engines won't recognize your product.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Shopify's auto-generated Schema misses
&lt;/h2&gt;

&lt;p&gt;I scanned 30+ Shopify stores with &lt;a href="https://ai-vision-check-pink.vercel.app/" rel="noopener noreferrer"&gt;AIViz&lt;/a&gt;. A clear pattern emerged. Shopify's Dawn theme (and most themes) auto-generate Product Schema that includes &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;image&lt;/code&gt;, and &lt;code&gt;offers&lt;/code&gt; with &lt;code&gt;price&lt;/code&gt; and &lt;code&gt;priceCurrency&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Almost universally missing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;aggregateRating&lt;/code&gt;&lt;/strong&gt; — Rating score and review count. HubSpot's Consumer Trends Report found that 72% of consumers plan to use AI for shopping more frequently. When someone asks ChatGPT "recommend a good bluetooth speaker," products with rating data get prioritized.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;brand&lt;/code&gt;&lt;/strong&gt; — The brand name. Sounds basic, but most themes display the brand on the page without including it in the JSON-LD. AI crawlers read the structured data, not your visual layout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;gtin&lt;/code&gt; / &lt;code&gt;mpn&lt;/code&gt;&lt;/strong&gt; — Product barcodes or manufacturer numbers. ChatGPT uses these to cross-reference against Bing's product database. Products with GTINs are matched more accurately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;availability&lt;/code&gt;&lt;/strong&gt; — Stock status. You don't want AI recommending an out-of-stock product to a potential customer.&lt;/p&gt;

&lt;p&gt;I assumed at least &lt;code&gt;brand&lt;/code&gt; would be common. After scanning, only 4 out of 30 stores had it correctly marked in their JSON-LD.&lt;/p&gt;
&lt;h2&gt;
  
  
  How to fix it
&lt;/h2&gt;

&lt;p&gt;The good news: you don't need to edit your Shopify theme's Liquid templates (though that's the cleanest approach). The fastest path is injecting additional JSON-LD via a Shopify App.&lt;/p&gt;

&lt;p&gt;But first, figure out what's missing. Go to &lt;a href="https://ai-vision-check-pink.vercel.app/" rel="noopener noreferrer"&gt;AIViz&lt;/a&gt;, paste your product page URL, and the report will show you exactly which Schema fields need attention — with copy-paste fix code.&lt;/p&gt;

&lt;p&gt;For example, if you're missing &lt;code&gt;aggregateRating&lt;/code&gt; and &lt;code&gt;brand&lt;/code&gt;, AIViz generates this snippet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@context"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Your Brand Name"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"aggregateRating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AggregateRating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ratingValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"reviewCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"128"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add this to your product page, and AI search engines can read the complete picture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Product Schema — two things people forget
&lt;/h2&gt;

&lt;p&gt;After fixing your structured data, there are two often-overlooked items:&lt;/p&gt;

&lt;p&gt;robots.txt: Make sure you're not blocking AI crawlers. Add this to your robots.txt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;  &lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
  &lt;span class="n"&gt;Allow&lt;/span&gt;: /

  &lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;PerplexityBot&lt;/span&gt;
  &lt;span class="n"&gt;Allow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Shopify's default robots.txt usually doesn't block AI crawlers, but if you've customized yours, check.&lt;/p&gt;

&lt;p&gt;llms.txt: A Markdown file at your site root that helps AI crawlers understand your site structure. AskNeedle's research found that 83% of AI citations come from pages updated within the past 12 months. An llms.txt file signals that your site is active and maintained.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happens to your score after fixing this?
&lt;/h2&gt;

&lt;p&gt;From what we've seen, filling in missing Schema fields typically moves an AIViz score from 30-40 to 80-100. The biggest score jumps come from Product Schema (20 pts) and aggregateRating (10 pts)&lt;br&gt;
  — that's a 30-point swing from two fields.&lt;/p&gt;

&lt;p&gt;But the score is just a proxy. The real difference: AI search engines now have enough information to recommend your product instead of skipping over it for a competitor who did the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one thing to do right now
&lt;/h2&gt;

&lt;p&gt;Scan your best-selling product page. Check which Schema fields are red in the report. Fix those.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free scan: &lt;a href="https://ai-vision-check-pink.vercel.app/" rel="noopener noreferrer"&gt;AIViz&lt;/a&gt; — AI Visibility Checker&lt;/li&gt;
&lt;li&gt;Shopify users: &lt;a href="https://apps.shopify.com/seo-checkup" rel="noopener noreferrer"&gt;SEO Checkup&lt;/a&gt; scans your entire store at once&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Sources: &lt;a href="https://searchengineland.com/" rel="noopener noreferrer"&gt;Search Engine Land&lt;/a&gt;, &lt;a href="https://blog.hubspot.com/marketing/answer-engine-optimization-trends" rel="noopener noreferrer"&gt;HubSpot — AEO Trends 2026&lt;/a&gt;, &lt;a href="https://recomaze.ai/" rel="noopener noreferrer"&gt;Recomaze&lt;/a&gt;, &lt;a href="https://www.askneedle.com/blog/the-guide-of-answer-engine-optimization-for-ecommerce-brands" rel="noopener noreferrer"&gt;AskNeedle&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;AIViz is open source — &lt;a href="https://github.com/Pin-Han/aiviz" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;. Star it if this was useful!&lt;/p&gt;

</description>
      <category>seo</category>
      <category>aeo</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
