<?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: Alfredoruru</title>
    <description>The latest articles on DEV Community by Alfredoruru (@chimkennuggyszdev).</description>
    <link>https://dev.to/chimkennuggyszdev</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%2F359485%2F554aead3-a54b-48d8-9207-b458e6a8fc16.png</url>
      <title>DEV Community: Alfredoruru</title>
      <link>https://dev.to/chimkennuggyszdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chimkennuggyszdev"/>
    <language>en</language>
    <item>
      <title>Building OopsCalorie: When Your AI Thinks Dinuguan Is Champorado 😂</title>
      <dc:creator>Alfredoruru</dc:creator>
      <pubDate>Tue, 18 Aug 2026 03:29:45 +0000</pubDate>
      <link>https://dev.to/chimkennuggyszdev/building-oopscalorie-when-your-ai-thinks-dinuguan-is-champorado-4961</link>
      <guid>https://dev.to/chimkennuggyszdev/building-oopscalorie-when-your-ai-thinks-dinuguan-is-champorado-4961</guid>
      <description>&lt;p&gt;I’ve been building a side project called &lt;strong&gt;OopsCalorie&lt;/strong&gt;, an AI-powered calorie and meal tracking app.&lt;/p&gt;

&lt;p&gt;The idea sounded simple enough:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User logs or takes a photo of their food.&lt;/li&gt;
&lt;li&gt;AI identifies the meal.&lt;/li&gt;
&lt;li&gt;Estimate calories and macros.&lt;/li&gt;
&lt;li&gt;Save the entry.&lt;/li&gt;
&lt;li&gt;Done.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Simple, right?&lt;/p&gt;

&lt;p&gt;Well...&lt;/p&gt;

&lt;p&gt;Then we started testing it with Filipino food. 😂&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Meets Filipino Food 🇵🇭
&lt;/h2&gt;

&lt;p&gt;One of the funniest parts of building OopsCalorie has been testing the food recognition.&lt;/p&gt;

&lt;p&gt;At one point, our AI confidently looked at &lt;strong&gt;dinuguan&lt;/strong&gt; and decided:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's champorado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Okay. I can &lt;em&gt;kind of&lt;/em&gt; see where you were coming from. Both are dark, both can be served in a bowl...&lt;/p&gt;

&lt;p&gt;But still. 😂&lt;/p&gt;

&lt;p&gt;Then came &lt;strong&gt;bagnet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;AI:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Lumpiang Shanghai.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bro.&lt;/p&gt;

&lt;p&gt;Not even close. 😂&lt;/p&gt;

&lt;p&gt;These bugs are funny, but they also exposed one of the more interesting engineering problems behind OopsCalorie:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image recognition is only the first step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Correctly identifying a meal — especially regional dishes — requires much more context than I initially expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem Isn't Just Calories
&lt;/h2&gt;

&lt;p&gt;When I started the project, I thought the difficult part would be estimating calories.&lt;/p&gt;

&lt;p&gt;Turns out, before you can estimate:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You need to know what the food actually is.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And food can be surprisingly ambiguous from an image.&lt;/p&gt;

&lt;p&gt;A photo might contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple dishes&lt;/li&gt;
&lt;li&gt;sauces hiding ingredients&lt;/li&gt;
&lt;li&gt;visually similar foods&lt;/li&gt;
&lt;li&gt;regional dishes that aren't well represented in training data&lt;/li&gt;
&lt;li&gt;different cooking methods&lt;/li&gt;
&lt;li&gt;unknown portion sizes&lt;/li&gt;
&lt;li&gt;ingredients completely hidden underneath other ingredients&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even humans sometimes need context.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Is that pork adobo or humba?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Is that fried pork belly or bagnet?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Now imagine asking an AI to determine that from pixels alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Around AI Instead of Blindly Trusting It
&lt;/h2&gt;

&lt;p&gt;This changed how I'm approaching the system.&lt;/p&gt;

&lt;p&gt;Instead of treating the AI response as absolute truth, OopsCalorie is evolving toward a workflow where AI provides an intelligent estimate while the user still has the ability to provide context and correct it.&lt;/p&gt;

&lt;p&gt;We're experimenting with things like:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Image + user context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A short description from the user can dramatically reduce ambiguity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Confidence scoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the system isn't confident about what it's looking at, it shouldn't pretend that it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Food candidates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is definitely X.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The system can consider multiple possible foods before making the final estimate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filipino food awareness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is particularly important for us.&lt;/p&gt;

&lt;p&gt;A lot of calorie trackers are built around foods that are easy to find in international nutrition databases.&lt;/p&gt;

&lt;p&gt;But Filipino meals aren't always that straightforward.&lt;/p&gt;

&lt;p&gt;Try estimating the calories of someone's homemade adobo where every household has a slightly different recipe. 😅&lt;/p&gt;

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

&lt;p&gt;OopsCalorie is currently being built with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React Native + Expo&lt;/strong&gt; for the mobile app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NestJS&lt;/strong&gt; for the backend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MongoDB&lt;/strong&gt; for data storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LLMs / multimodal AI&lt;/strong&gt; for meal understanding and nutritional estimation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal isn't to build another massive nutrition database with an AI label slapped on top.&lt;/p&gt;

&lt;p&gt;I'm more interested in exploring how AI can make food logging feel less like data entry.&lt;/p&gt;

&lt;p&gt;Take a photo. Give it some context if necessary. Get an estimate. Correct it when needed. Move on with your day.&lt;/p&gt;

&lt;h2&gt;
  
  
  We're Still Testing 🧪
&lt;/h2&gt;

&lt;p&gt;OopsCalorie is currently in the &lt;strong&gt;testing phase&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;And that's exactly why I'm sharing it now.&lt;/p&gt;

&lt;p&gt;I want developers and early users to break it.&lt;/p&gt;

&lt;p&gt;Upload weird meals.&lt;/p&gt;

&lt;p&gt;Upload Filipino food.&lt;/p&gt;

&lt;p&gt;Confuse the AI.&lt;/p&gt;

&lt;p&gt;Find edge cases I haven't thought about.&lt;/p&gt;

&lt;p&gt;And yes, if you manage to make it identify &lt;strong&gt;lechon as a croissant&lt;/strong&gt;, please send me the screenshot. 😂&lt;/p&gt;

&lt;p&gt;The Android and iOS versions are coming soon.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try / Follow OopsCalorie
&lt;/h3&gt;

&lt;p&gt;🌐 &lt;strong&gt;Website&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://oopscalorie.com/" rel="noopener noreferrer"&gt;https://oopscalorie.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🧪 &lt;strong&gt;Become a beta tester&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://oopscalorie.com/beta-testers" rel="noopener noreferrer"&gt;https://oopscalorie.com/beta-testers&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📖 &lt;strong&gt;Development stories &amp;amp; experiments&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://oopscalorie.com/blog" rel="noopener noreferrer"&gt;https://oopscalorie.com/blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm also open to collaborations with developers, designers, nutrition/fitness people, or anyone interested in experimenting with AI-powered consumer apps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building With AI Has Been... Interesting
&lt;/h2&gt;

&lt;p&gt;One thing this project keeps reminding me:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI can be incredibly impressive and incredibly stupid within the same five minutes.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And honestly, that's part of what makes building with it fun.&lt;/p&gt;

&lt;p&gt;Every ridiculous result becomes another edge case.&lt;/p&gt;

&lt;p&gt;Every edge case becomes another improvement.&lt;/p&gt;

&lt;p&gt;And every improvement gets us a little closer to making OopsCalorie actually useful.&lt;/p&gt;

&lt;p&gt;I'll be sharing more about the technical decisions, AI experiments, failures, costs, architecture, and the occasional food-recognition disaster as development continues.&lt;/p&gt;

&lt;p&gt;Until then...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dinuguan is not champorado.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We're working on it. 😂&lt;/p&gt;

&lt;h1&gt;
  
  
  ai #webdev #reactnative #nestjs #typescript
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>mobile</category>
      <category>startup</category>
      <category>software</category>
    </item>
    <item>
      <title>Component best practice question.</title>
      <dc:creator>Alfredoruru</dc:creator>
      <pubDate>Wed, 07 Feb 2024 13:22:25 +0000</pubDate>
      <link>https://dev.to/chimkennuggyszdev/component-best-practice-question-3hdm</link>
      <guid>https://dev.to/chimkennuggyszdev/component-best-practice-question-3hdm</guid>
      <description>&lt;p&gt;Hi everyone on my current job right now as a front end developer, my lead developer ask me to create a skeleton fallback components integrating the Skeleton component from MUI. &lt;/p&gt;

&lt;p&gt;On every fallback component I created I always imported Skeleton component from MUI. But my lead told me to create a dumb component which encapsulates the Skeleton component and pass the same props as the Skeleton component from MUI and instead of using the Skeleton component from MUI I should use the dumb component I created.&lt;/p&gt;

&lt;p&gt;So basically I just created a copy of the Skeleton component from MUI. &lt;/p&gt;

&lt;p&gt;Are there any benefit of doing it?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import { Skeleton } from "mui/material"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;export const OurSkeletonComponent = (props) =&amp;gt; &amp;lt;Skeleton {{...props}} /&amp;gt;&lt;/code&gt; &lt;/p&gt;

</description>
      <category>react</category>
      <category>mui</category>
      <category>bestpractice</category>
    </item>
  </channel>
</rss>
