<?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: Dameon Guiste</title>
    <description>The latest articles on DEV Community by Dameon Guiste (@squigglymold).</description>
    <link>https://dev.to/squigglymold</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%2F3538212%2Fc62a4e46-010f-4e8e-a9db-f662b9822b7d.png</url>
      <title>DEV Community: Dameon Guiste</title>
      <link>https://dev.to/squigglymold</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/squigglymold"/>
    <language>en</language>
    <item>
      <title>I built a nutrition API, got 54 signups and made $0. Two bugs were hiding in plain sight</title>
      <dc:creator>Dameon Guiste</dc:creator>
      <pubDate>Tue, 27 Oct 2026 00:58:51 +0000</pubDate>
      <link>https://dev.to/squigglymold/i-built-a-nutrition-api-got-54-signups-and-made-0-two-bugs-were-hiding-in-plain-sight-5c13</link>
      <guid>https://dev.to/squigglymold/i-built-a-nutrition-api-got-54-signups-and-made-0-two-bugs-were-hiding-in-plain-sight-5c13</guid>
      <description>&lt;p&gt;A while back I put a food and nutrition API on RapidAPI. You search any food and get calories and macros, plus barcode lookup, allergen detection, a health score, diet filters and a meal calculator. It's Express and TypeScript on Vercel, using data from USDA FoodData Central and Open Food Facts.&lt;/p&gt;

&lt;p&gt;54 people signed up for the free plan. Nobody upgraded. This week I finally dug into why and found two embarrassing problems:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Every lookup by food ID returned 0 calories. USDA's search returns nutrients as {nutrientId, value}, but its single-food lookup nests them as {nutrient: {id}, amount}. My code only read the first format. Search looked fine, but anyone who clicked into a food saw a banana with 0 calories. The fix was one small function that converts the format.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The API was free to anyone who looked. My docs showed the raw Vercel URL, and the server never checked that requests came through RapidAPI, so the paid plans were optional. Now every request has to carry RapidAPI's secret header or it gets a 403.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I also rewrote the listing. It was documenting an endpoint that didn't exist.&lt;/p&gt;

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

&lt;p&gt;Test the endpoint your users hit second, not just the one you demo.&lt;br&gt;
If you sell through a marketplace, make sure it's the only way in.&lt;br&gt;
Automated tests would have caught both bugs on day one. I've added 10 now.&lt;br&gt;
If you're building a fitness, meal-planning or grocery app, the free plan includes 100 requests a month: &lt;a href="https://rapidapi.com/squigglymold/api/food-calories-and-macros-api" rel="noopener noreferrer"&gt;https://rapidapi.com/squigglymold/api/food-calories-and-macros-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd really like feedback on pricing (PRO is $3.99 for 1,000 requests a month) and on what's missing. What would make you pick this over Edamam or Nutritionix?&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7c5hmjrq0a9nw8k1r4uc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7c5hmjrq0a9nw8k1r4uc.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5sc81y5redoivafxfwiu.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5sc81y5redoivafxfwiu.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5vdtgc1gz3m0aopp95i.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb5vdtgc1gz3m0aopp95i.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhnq6iq50oiir6nozt72s.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhnq6iq50oiir6nozt72s.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>buildinpublic</category>
      <category>startup</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
