<?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: 17 Fit</title>
    <description>The latest articles on DEV Community by 17 Fit (@17fit).</description>
    <link>https://dev.to/17fit</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%2F4217298%2F5ac09b5e-8a94-4dfe-afe3-e226cc1d1c93.png</url>
      <title>DEV Community: 17 Fit</title>
      <link>https://dev.to/17fit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/17fit"/>
    <language>en</language>
    <item>
      <title>How we normalized USDA and EU food databases for 2,500+ items in our iOS nutrition app</title>
      <dc:creator>17 Fit</dc:creator>
      <pubDate>Fri, 30 Oct 2026 12:58:50 +0000</pubDate>
      <link>https://dev.to/17fit/how-we-normalized-usda-and-eu-food-databases-for-2500-items-in-our-ios-nutrition-app-3mla</link>
      <guid>https://dev.to/17fit/how-we-normalized-usda-and-eu-food-databases-for-2500-items-in-our-ios-nutrition-app-3mla</guid>
      <description>&lt;p&gt;When building &lt;a href="https://17-fit.app" rel="noopener noreferrer"&gt;17 Fit&lt;/a&gt;, a privacy-first AI calorie and macro tracker for iPhone, iPad, and Apple Watch, one of our biggest engineering challenges wasn't the AI photo recognition—it was cleaning and normalizing nutrition data across 20 languages.&lt;/p&gt;

&lt;p&gt;Most calorie trackers rely on unverified, crowd-sourced entries where users input whatever they see on a label, often mixing up raw and cooked weights or leaving micronutrients as &lt;code&gt;0&lt;/code&gt;. We wanted our web and in-app catalog of &lt;a href="https://17-fit.app/en/calories" rel="noopener noreferrer"&gt;2,500+ food calories and nutrition facts&lt;/a&gt; to rely strictly on verified national food composition databases: &lt;strong&gt;USDA FoodData Central&lt;/strong&gt; (SR Legacy &amp;amp; FNDDS), &lt;strong&gt;ANSES-CIQUAL&lt;/strong&gt; (France), &lt;strong&gt;CoFID&lt;/strong&gt; (UK), &lt;strong&gt;BLS&lt;/strong&gt; (Germany), and &lt;strong&gt;Fineli&lt;/strong&gt; (Finland).&lt;/p&gt;

&lt;p&gt;Here are the four main data normalization problems we had to solve:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Total Carbs (US) vs. Available Carbs (EU)&lt;br&gt;
In the US (USDA), carbohydrate values include dietary fiber. In the European Union (under EU Regulation 1169/2011), food labels list &lt;strong&gt;available&lt;/strong&gt; carbohydrates (excluding fiber). To make our data consistent for European users, we recalculated USDA entries to separate fiber from available carbs, ensuring accurate macro math across all regions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Removing US Mandatory Food Enrichment for European Markets&lt;br&gt;
In the United States, grain products (flour, rice, pasta) are enriched by law with iron and B vitamins, and milk is fortified with vitamins A and D. When displaying these basic foods for users in Europe, raw USDA numbers would give false micronutrient totals. We built a pipeline that strips mandatory US enrichment values so the baseline matches unfortified European equivalents.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;"Unknown Isn't Zero"&lt;br&gt;
If a national database hasn't tested a food item for a specific micronutrient (like biotin, iodine, or pantothenic acid), standard trackers display &lt;code&gt;0 mg (0%)&lt;/code&gt;. That misleads users tracking micronutrient deficiencies. In our architecture, missing values are explicitly flagged as &lt;em&gt;"no data"&lt;/em&gt; rather than zero. Where a primary record lacks specific vitamins, we cross-reference secondary national registries—for example, combining USDA SR Legacy with Germany's BLS database on pages like our &lt;a href="https://17-fit.app/uk/kaloriinist/lymon" rel="noopener noreferrer"&gt;lemon nutrition profile&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-Ingredient Dishes &amp;amp; Regional Recipes&lt;br&gt;
National databases rarely include local culinary dishes. For regional soups and complex meals—such as our &lt;a href="https://17-fit.app/uk/kaloriinist/rozsolnyk" rel="noopener noreferrer"&gt;pickle soup (rozsolnyk) breakdown&lt;/a&gt;—we calculate macros, vitamins, and energy density algorithmically from standardized ingredient recipes using FNDDS and SR Legacy records, accounting for moisture loss and cooking yield.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All of these calculations—alongside our BMR, TDEE, and calorie deficit tools—are available directly on the web in 20 languages (including our &lt;a href="https://17-fit.app/uk" rel="noopener noreferrer"&gt;Ukrainian localization&lt;/a&gt;) with zero ads, zero pop-ups, and no third-party trackers.&lt;/p&gt;

&lt;p&gt;All project links &amp;amp; tools: &lt;a href="https://linktr.ee/17fit" rel="noopener noreferrer"&gt;https://linktr.ee/17fit&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ios</category>
      <category>data</category>
      <category>health</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
