<?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>Forem: Carlos José Castro Galante</title>
    <description>The latest articles on Forem by Carlos José Castro Galante (@carlosjcastrog).</description>
    <link>https://forem.com/carlosjcastrog</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%2F3850137%2F7c4306aa-d4a6-4d9d-9327-a2b882c9d13d.jpeg</url>
      <title>Forem: Carlos José Castro Galante</title>
      <link>https://forem.com/carlosjcastrog</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/carlosjcastrog"/>
    <language>en</language>
    <item>
      <title>Building a Real Burger E-commerce Taught Me More Than Any Tutorial Ever Did</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Fri, 03 Apr 2026 18:52:00 +0000</pubDate>
      <link>https://forem.com/carlosjcastrog/building-a-real-burger-e-commerce-taught-me-more-than-any-tutorial-ever-did-3ggo</link>
      <guid>https://forem.com/carlosjcastrog/building-a-real-burger-e-commerce-taught-me-more-than-any-tutorial-ever-did-3ggo</guid>
      <description>&lt;p&gt;When I started this project, I thought I knew exactly what I was doing.&lt;/p&gt;

&lt;p&gt;A small burger place needed a digital menu, a way to take orders, and eventually accept payments. Nothing too ambitious. I had built interfaces before, worked with APIs, handled state.&lt;/p&gt;

&lt;p&gt;It felt like something I could finish quickly.&lt;/p&gt;

&lt;p&gt;That assumption didn’t last long.&lt;/p&gt;

&lt;p&gt;What looked like a simple menu turned into a constant series of small decisions that actually mattered. Not the kind you solve with a library or a tutorial, but the kind that come from dealing with real users and real constraints.&lt;/p&gt;




&lt;p&gt;The first thing that changed my perspective was the data.&lt;/p&gt;

&lt;p&gt;At the beginning, I treated products like static items. Name, price, image. Render a card and move on.&lt;/p&gt;

&lt;p&gt;But that model breaks almost immediately in a real scenario.&lt;/p&gt;

&lt;p&gt;Some burgers had multiple sizes. Others didn’t. Some had temporary discounts. Drinks were fixed. Combos mixed different rules. And then there was stock, which isn’t something you can fake if someone is actually trying to buy.&lt;/p&gt;

&lt;p&gt;The UI started getting messy, not because of styling, but because the data didn’t reflect reality.&lt;/p&gt;

&lt;p&gt;I had to step back and stop thinking in terms of components. The real problem wasn’t how things looked, but how things were defined.&lt;/p&gt;

&lt;p&gt;Once I restructured the data to describe behavior instead of just content, everything became easier to reason about. The UI stopped fighting back.&lt;/p&gt;




&lt;p&gt;Then came the cart.&lt;/p&gt;

&lt;p&gt;This is where things quietly fall apart if you’re not careful.&lt;/p&gt;

&lt;p&gt;Adding a product is easy. But a product with variations, custom notes, and dynamic pricing is not just “an item” anymore.&lt;/p&gt;

&lt;p&gt;At one point, too much of that logic lived inside components. It worked, but it was fragile. Every small change had side effects somewhere else.&lt;/p&gt;

&lt;p&gt;I moved that logic into a centralized context, not because it was trendy, but because I needed control.&lt;/p&gt;

&lt;p&gt;After that, the components became predictable again. They stopped being responsible for decisions and went back to doing what they should do: represent state.&lt;/p&gt;

&lt;p&gt;That shift made the whole app feel stable.&lt;/p&gt;




&lt;p&gt;The WhatsApp integration was another moment where expectations didn’t match reality.&lt;/p&gt;

&lt;p&gt;Technically, sending a message is trivial. It’s just a link.&lt;/p&gt;

&lt;p&gt;But what arrives on the other end matters more than how you send it.&lt;/p&gt;

&lt;p&gt;If the message is messy, incomplete, or hard to read, the business suffers. Orders get misunderstood. Time is lost. Mistakes happen.&lt;/p&gt;

&lt;p&gt;So instead of thinking about the integration itself, I focused on the output.&lt;/p&gt;

&lt;p&gt;I built a formatter that turns the cart into something structured and readable. Clear product names, quantities, totals, user info, delivery details.&lt;/p&gt;

&lt;p&gt;Now the message actually works for the person receiving it.&lt;/p&gt;

&lt;p&gt;That changed more than I expected.&lt;/p&gt;




&lt;p&gt;At some point I started looking into payments, specifically Mercado Pago.&lt;/p&gt;

&lt;p&gt;That’s when I realized something I had been ignoring.&lt;/p&gt;

&lt;p&gt;Payments don’t fix a bad flow.&lt;/p&gt;

&lt;p&gt;If the process is confusing, adding a payment button just makes things worse. People don’t complete what they don’t understand.&lt;/p&gt;

&lt;p&gt;So I paused that part and focused on making the ordering experience feel natural first. Clear steps, no surprises, no friction that didn’t need to exist.&lt;/p&gt;

&lt;p&gt;Only after that does it make sense to introduce payments.&lt;/p&gt;




&lt;p&gt;What this project really did was change how I approach building things.&lt;/p&gt;

&lt;p&gt;I stopped thinking in terms of “features” and started thinking in terms of behavior.&lt;/p&gt;

&lt;p&gt;I stopped assuming that a clean UI means a simple system.&lt;/p&gt;

&lt;p&gt;And more importantly, I stopped relying on ideal scenarios.&lt;/p&gt;

&lt;p&gt;Real users don’t follow perfect paths. They make unexpected choices, skip steps, change their minds. If your system can’t handle that, it doesn’t matter how good your code looks.&lt;/p&gt;




&lt;p&gt;I didn’t build something revolutionary.&lt;/p&gt;

&lt;p&gt;But I built something that works in a real environment, with real constraints, and that forced me to make better decisions than any tutorial ever did.&lt;/p&gt;

&lt;p&gt;And that, at least for me, was the part that actually mattered.&lt;/p&gt;




&lt;h2&gt;
  
  
  About me
&lt;/h2&gt;

&lt;p&gt;I’m Carlos José Castro Galante, a software developer focused on building real-world applications that combine frontend, automation, and practical AI.&lt;/p&gt;

</description>
      <category>react</category>
      <category>typescript</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Python Data Analysis Project: Building a Learning Radar for Educational Insights</title>
      <dc:creator>Carlos José Castro Galante</dc:creator>
      <pubDate>Tue, 31 Mar 2026 20:50:17 +0000</pubDate>
      <link>https://forem.com/carlosjcastrog/python-data-analysis-project-building-a-learning-radar-for-educational-insights-3c8j</link>
      <guid>https://forem.com/carlosjcastrog/python-data-analysis-project-building-a-learning-radar-for-educational-insights-3c8j</guid>
      <description>&lt;p&gt;If you are learning Python and data science, one of the best ways to grow is by building real world projects. In this article I will show how I built a complete data analysis project using Python to extract insights from online education data.&lt;/p&gt;

&lt;p&gt;This is not a typical beginner project. The goal was to create something useful, scalable, and portfolio ready.&lt;/p&gt;

&lt;p&gt;The result is Learning Radar, a data driven system designed to analyze course reviews and help understand what really makes an online course valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why build a data analysis project like this&lt;/strong&gt;&lt;br&gt;
Most Python data science tutorials focus on small datasets and simple examples. In real scenarios, data is messy, large, and comes from different sources.&lt;/p&gt;

&lt;p&gt;This project focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Working with large datasets&lt;/li&gt;
&lt;li&gt;Cleaning and transforming real data&lt;/li&gt;
&lt;li&gt;Performing exploratory data analysis&lt;/li&gt;
&lt;li&gt;Creating meaningful data visualizations&lt;/li&gt;
&lt;li&gt;Generating insights that solve real problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is designed to reflect real data science workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project goal&lt;/strong&gt;&lt;br&gt;
The main objective was to analyze thousands of course reviews and answer key questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What factors influence course ratings&lt;/li&gt;
&lt;li&gt;How difficulty impacts student satisfaction&lt;/li&gt;
&lt;li&gt;Which categories perform better&lt;/li&gt;
&lt;li&gt;What patterns exist in user feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of just analyzing data, I focused on building an educational intelligence tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dataset and data sources&lt;/strong&gt;&lt;br&gt;
To meet the requirement of working with more than 50000 rows, I combined multiple public datasets related to online courses.&lt;/p&gt;

&lt;p&gt;The final dataset includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Course title&lt;/li&gt;
&lt;li&gt;Category&lt;/li&gt;
&lt;li&gt;Rating&lt;/li&gt;
&lt;li&gt;Review text&lt;/li&gt;
&lt;li&gt;Difficulty level&lt;/li&gt;
&lt;li&gt;Engagement indicators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Combining datasets allowed me to create a richer and more useful analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data cleaning and preprocessing in Python&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data cleaning is one of the most important steps in any data science project.&lt;/p&gt;

&lt;p&gt;I used Python and Pandas to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove missing values&lt;/li&gt;
&lt;li&gt;Normalize column names&lt;/li&gt;
&lt;li&gt;Convert data types&lt;/li&gt;
&lt;li&gt;Clean text data from reviews&lt;/li&gt;
&lt;li&gt;Remove duplicates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also created new features to improve analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review length&lt;/li&gt;
&lt;li&gt;Rating groups&lt;/li&gt;
&lt;li&gt;Difficulty mapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step ensures accuracy and consistency in the results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exploratory Data Analysis with Pandas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Exploratory Data Analysis is where the real insights begin.&lt;/p&gt;

&lt;p&gt;Using Pandas, I explored:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distribution of ratings&lt;/li&gt;
&lt;li&gt;Average rating by category&lt;/li&gt;
&lt;li&gt;Relationship between difficulty and rating&lt;/li&gt;
&lt;li&gt;Patterns in review behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This step helps understand the structure of the data and identify trends.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key insights from the analysis&lt;/strong&gt;&lt;br&gt;
Some interesting findings from this project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Courses with medium difficulty often receive better ratings&lt;/li&gt;
&lt;li&gt;Very long reviews usually reflect strong opinions&lt;/li&gt;
&lt;li&gt;Some categories consistently perform better&lt;/li&gt;
&lt;li&gt;High engagement does not always correlate with high ratings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These insights can help students choose better courses and help educators improve content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project structure and best practices&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make the project scalable and professional, I organized it as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;notebooks for analysis&lt;/li&gt;
&lt;li&gt;data folder for datasets&lt;/li&gt;
&lt;li&gt;src for reusable code&lt;/li&gt;
&lt;li&gt;assets for visualizations&lt;/li&gt;
&lt;li&gt;README for documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure follows good software engineering practices and improves maintainability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technologies used&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Pandas&lt;/li&gt;
&lt;li&gt;NumPy&lt;/li&gt;
&lt;li&gt;Matplotlib&lt;/li&gt;
&lt;li&gt;Seaborn&lt;/li&gt;
&lt;li&gt;Jupyter Notebook&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tools are widely used in data science and provide a strong foundation for analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenges faced&lt;/strong&gt;&lt;br&gt;
Working with large datasets introduced several challenges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory optimization&lt;/li&gt;
&lt;li&gt;Data consistency across sources&lt;/li&gt;
&lt;li&gt;Cleaning unstructured text data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These were solved by optimizing data types, validating merges, and applying systematic preprocessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future improvements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project can be extended in many ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sentiment analysis using Natural Language Processing&lt;/li&gt;
&lt;li&gt;Machine learning models to predict course success&lt;/li&gt;
&lt;li&gt;Interactive dashboards using Streamlit&lt;/li&gt;
&lt;li&gt;Automated data pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long term goal is to transform this into a full educational analytics platform.&lt;/p&gt;

</description>
      <category>python</category>
      <category>datascience</category>
      <category>machinelearning</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
