<?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: Aeron</title>
    <description>The latest articles on DEV Community by Aeron (@aeronn_11).</description>
    <link>https://dev.to/aeronn_11</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%2F4010651%2F284f919b-60c7-4210-9b3d-64c72d3f1e0e.jpg</url>
      <title>DEV Community: Aeron</title>
      <link>https://dev.to/aeronn_11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aeronn_11"/>
    <language>en</language>
    <item>
      <title>Blog #4: My First Ever Agent and Things That I Wish I Knew Before Building This</title>
      <dc:creator>Aeron</dc:creator>
      <pubDate>Thu, 17 Sep 2026 04:39:02 +0000</pubDate>
      <link>https://dev.to/aeronn_11/blog-4-my-first-ever-agent-and-things-that-i-wish-i-knew-before-building-this-18jl</link>
      <guid>https://dev.to/aeronn_11/blog-4-my-first-ever-agent-and-things-that-i-wish-i-knew-before-building-this-18jl</guid>
      <description>&lt;p&gt;Having an agent these days is not that hard with Claude, Hermes, ChatGPT, etc.&lt;/p&gt;

&lt;p&gt;Most people these days, I believe, only see &lt;em&gt;the tip of the iceberg&lt;/em&gt;. In most cases, they build and communicate with these agents through natural language.&lt;/p&gt;

&lt;p&gt;I don’t say there’s anything wrong with it. Instead, it’s a very convenient and useful way to make the most of the technology we have available today.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;But the tradeoff is that they never really know how exactly the machine runs behind the scenes.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Do they even need to know?&lt;/p&gt;

&lt;p&gt;For general tasks, def no. But when it comes to a very specific use case for a specific person, I bet the answer is yes. Or at least, it's necessary to have someone who understands it deeply enough to handle that for them. Individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the machine is running behind these agents
&lt;/h2&gt;

&lt;p&gt;I never understood this until I built my first ever agent.&lt;/p&gt;

&lt;p&gt;I called this one a Crypto Research Assistant. It does a super simple task: &lt;em&gt;receive a question about crypto, then answer it&lt;/em&gt;. If the question is not covered in its provided sources, it’ll say that it doesn’t know.&lt;/p&gt;

&lt;p&gt;Its scale is 0.0001% of every current agent you can randomly name out there, but even with this small agent, the work behind the scenes is way more complicated than I thought before.&lt;/p&gt;

&lt;p&gt;Let me unpack them for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1/ First, the core agent loop&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do you know the fact that it’s never the case that an agent receives a question and gives you the answer in the very &lt;em&gt;first&lt;/em&gt; response?&lt;/p&gt;

&lt;p&gt;In practice, they call multiple tools, receive the results from those tools, and input those results back into the model. They’ll do this multiple times until they have enough information to answer your question.&lt;/p&gt;

&lt;p&gt;That’s the agent loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2/ Second, the RAG pipeline&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the core structure to handle source ingestion and find the answer to your question. There are 4 main steps:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Chunking -&amp;gt; Embedding -&amp;gt; Retrieval -&amp;gt; Generation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The RAG pipeline will then be wired as one of the tools in the core agent loop, so the agent can actually use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3/ Third, evals (also one of the most important things)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At this point, the agent can answer your question. The thing is you don’t even know whether its answer is right or not.&lt;/p&gt;

&lt;p&gt;Maybe you do because you know all the information in the sources you give it, but users won’t.&lt;/p&gt;

&lt;p&gt;So you need to build a system to check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Leak:&lt;/strong&gt; Is the agent’s answer actually from the sources, or is it guessing based on its memory?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-refusal:&lt;/strong&gt; Does the agent refuse to answer even when it knows the answer?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4/ Fourth, the deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ok, now you finally have a basic agent running. But if you want others to use it, you have to deploy it somewhere.&lt;/p&gt;

&lt;p&gt;Keep in mind, you don’t want to publish the source documents when you deploy the app to the cloud. So here’s the stack I chose:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;For code:&lt;/strong&gt; my Github repo of course. This contains the source code only, no secrets or any private source documents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For document storage:&lt;/strong&gt; an S3 bucket, read by a least-privilege IAM key&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For UI:&lt;/strong&gt; deploy to Streamlit Community Cloud from my public repo, password-gated&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yep, that’s the whole process.&lt;/p&gt;

&lt;p&gt;That doesn’t even count the bugs that I encountered along the way. So if I could go back in time and build it again, here are the hardest lessons that I wish I knew earlier.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lessons
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1/ Your evals won’t sustainably be 100% all the time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I used to spend a lot of time fixing the system prompt and tool description so that all my evals could sustainably pass. The benchmark I made was 3 times 100% in a row.&lt;/p&gt;

&lt;p&gt;The reason why it’s so hard is that the LLM’s response is different every time, even when you don’t change the prompt.&lt;/p&gt;

&lt;p&gt;So choose your target eval, improve only one thing at a time. When you achieve it, move on. Don’t ever fall into the rabbit hole like me.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2/ Watch out for your token usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If it’s only a few LLM calls, that’s basically fine. But if you’re A/B testing your evals, watch out for it.&lt;/p&gt;

&lt;p&gt;Shout out to the many devs in the comments who gave me advice on this.&lt;/p&gt;

&lt;p&gt;Some of the solutions that you want to note about this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set a cap for token usage&lt;/li&gt;
&lt;li&gt;Give the agent the latest response for context, so it won’t rerun the whole thing every time&lt;/li&gt;
&lt;li&gt;Only test the eval you want to fix, not the whole set every time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3/ Don’t make a chunker that overfits to any specific article&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Chunking is one of the hardest parts I got in this entire agent-building process tbh.&lt;/p&gt;

&lt;p&gt;The hard part of chunking an article is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has to be not too long because the model has a token limit per call&lt;/li&gt;
&lt;li&gt;Or too short because the chunks list would be too fragmented. The model then can’t find the exact chunk it needs to answer your question&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used to build a chunker that divided a specific article based on its content. The mean rank improved significantly, but when it came to multi-doc ingestion, that chunker just didn’t work anymore.&lt;/p&gt;

&lt;p&gt;So I had to spend another morning just rebuilding the entire chunker and retesting the evals to make sure everything still worked.&lt;/p&gt;

&lt;p&gt;A lot of work and time wasted, but lesson learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;That’s everything I’ve learned so far from building an agent.&lt;/p&gt;

&lt;p&gt;It sounds so complicated, but my thesis is that to get further in building these agents for specific use cases, you have to understand deeply how they work.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Or else, you’ll never get the output you want.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you find this article interesting, pls drop a follow. Also, if you have any thoughts or suggestions, I’d love to hear them and chat more with ya.&lt;/p&gt;

&lt;p&gt;Hope you enjoyed the read!&lt;/p&gt;

&lt;p&gt;- Aeron&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>aws</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Blog #3: The Beginning of AI Learning</title>
      <dc:creator>Aeron</dc:creator>
      <pubDate>Fri, 11 Sep 2026 08:52:35 +0000</pubDate>
      <link>https://dev.to/aeronn_11/blog-3-the-beginning-of-ai-learning-1o0k</link>
      <guid>https://dev.to/aeronn_11/blog-3-the-beginning-of-ai-learning-1o0k</guid>
      <description>&lt;p&gt;Finally, the day has come. This week is the first week I started truly learning about AI basics.&lt;/p&gt;

&lt;p&gt;For those who are hearing about me for the first time, the reason why I haven't started this sooner is because I basically started from zero. The last 3 months, I spent it entirely on learning how to code and the foundations of being an SWE.&lt;/p&gt;

&lt;p&gt;The two biggest milestones this week: &lt;strong&gt;RAG pipeline and Evals.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1/ RAG Pipeline
&lt;/h2&gt;

&lt;p&gt;A complete RAG pipeline basically has 4 parts: &lt;strong&gt;chunking, embedding, retrieval, and generation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The hardest part for me is the chunking part.&lt;/p&gt;

&lt;p&gt;Why tho?&lt;/p&gt;

&lt;p&gt;There are a couple of reasons for this based on my honest experience:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* This is ultimately the input for the whole pipeline.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Think of this process like a cooking process. You simply can't have a good meal if you don't have the best ingredients.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;* Not every file has the best format.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In reality, files are messy and usually you won't handle one file at once. In practice, it could be several dozen to hundreds, even more. &lt;/p&gt;

&lt;p&gt;The goal is to split these into proper chunks that the model can easily read and search for the right information. It shouldn't be too short or too long. It has to be an appropriate size.&lt;/p&gt;

&lt;p&gt;Two methods I tried this week with chunking: &lt;strong&gt;chunking by the file structure and by the word count.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From my experience, the file structure works much better than the word count since each chunk now contains specific content. The fact is the mean rank of this method is 15% lower than the word count one (1.7 compared to 2.0).&lt;/p&gt;

&lt;p&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%2Fv1z19hctvwfaskw2bl5o.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%2Fv1z19hctvwfaskw2bl5o.png" alt="Side-by-side terminal output comparing two chunking methods on the same retrieval eval: the left run passes 8 of 10 (80%) with a mean rank of 2.0, the right run passes 9 of 10 (90%) with a mean rank of 1.7" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2/ Evals
&lt;/h2&gt;

&lt;p&gt;This is one of the most interesting parts for me, as verifying an LLM's output is always one of my biggest concerns these days.&lt;/p&gt;

&lt;p&gt;There are a couple of ways to build evals. This week, I tried to use the layer method, which separately measures the output of two layers: &lt;strong&gt;retrieval and generation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That way, I could know two key things about these outputs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the output is wrong, I can identify which layer makes the wrong move and iterate on it.&lt;/li&gt;
&lt;li&gt;If the output is right, I can know whether it's because the LLM is just guessing the answer from its memory or not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One key lesson I learned with evals is that this is always a continuous improvement loop. There's no end, just how to get better each time.&lt;/p&gt;

&lt;p&gt;Testing, improving, and repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Small Milestone
&lt;/h2&gt;

&lt;p&gt;Other than these, I just want to spend a small part of the blog to mark this little achievement I achieved this week.&lt;/p&gt;

&lt;p&gt;I gained like 10 followers on X in the last 7 days, and there are many supportive comments from the dev community.&lt;/p&gt;

&lt;p&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%2Fbmi7hwq1o0237v9hrb5k.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%2Fbmi7hwq1o0237v9hrb5k.png" alt="Bar chart of new X followers per day over the last 7 days, September 5 to 11, totaling about 10 new follows for the week" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I know it's a super small amount of followers, a super small milestone, but I'm so happy about it. It's proof that there are still people out there supporting me and eventually, that's the sign for me to keep moving forward.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;As usual, if you find this valuable to you, or you simply just think this is interesting and you want to read more articles like this, pls follow me on &lt;a href="https://x.com/Aeronn_11" rel="noopener noreferrer"&gt;X&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For the code and tech stack I'm using, here's my &lt;a href="https://github.com/shipbyaeron" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope you enjoy the reading!&lt;/p&gt;

&lt;p&gt;See you in the next blog very soon!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>beginners</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Blog #2: What I Learned After Building My First Real App</title>
      <dc:creator>Aeron</dc:creator>
      <pubDate>Fri, 04 Sep 2026 01:07:57 +0000</pubDate>
      <link>https://dev.to/aeronn_11/blog-2-what-i-learned-after-building-my-first-real-app-24k6</link>
      <guid>https://dev.to/aeronn_11/blog-2-what-i-learned-after-building-my-first-real-app-24k6</guid>
      <description>&lt;p&gt;Hey guys, it’s Aeron here.&lt;/p&gt;

&lt;p&gt;This week officially marks 100 days in this journey, so I decided to write a blog about it.&lt;/p&gt;

&lt;p&gt;This is not going to be an incredible learning lesson or a blog that will help you become a coder right away. Instead, this one is more about all the lessons I’ve learned throughout the journey so far.&lt;/p&gt;

&lt;p&gt;If you’re also starting this journey from scratch like me, I hope this can save you some time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Context
&lt;/h2&gt;

&lt;p&gt;Since my last blog, which I wrote after finishing the CS50 course, it’s been about two months now.&lt;/p&gt;

&lt;p&gt;But tbh, my journey has been very up and down.&lt;/p&gt;

&lt;p&gt;During the first month after CS50, around Day 30 to Day 60 or 70-ish, I was overwhelmed with my old job. That was my last month there, so there was a lot to do and a lot to transfer as well.&lt;/p&gt;

&lt;p&gt;For anything I do in my life, I always try to do it with the highest level of responsibility and professionalism possible. So I was really packed back then, and that’s why there was a month-long gap in the journey where I barely coded anything.&lt;/p&gt;

&lt;p&gt;This month, from around Day 70 until now, I’ve been &lt;strong&gt;fully focused on the journey&lt;/strong&gt;. This is finally when I’ve been able to learn a lot.&lt;/p&gt;

&lt;p&gt;If the first 30 days were mainly about learning how to code, this month has been more about learning how to actually build, test, and run a real app in production.&lt;/p&gt;

&lt;p&gt;To do that, I first learned how to create and run an endpoint with FastAPI. Then I used Render to push it to public production. I also created a frontend with Streamlit.&lt;/p&gt;

&lt;p&gt;The other half of the month was more about polishing the app and making it feel more professional, and more like a real app out there.&lt;/p&gt;

&lt;p&gt;The three most important things were packaging the code with Docker, changing raw SQL to an ORM, and using Alembic to manage the database.&lt;/p&gt;

&lt;p&gt;And of course, along with that learning curve came many lessons that I want to share in more detail below.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lessons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. A small change could lead to an app crashing and several code refactors
&lt;/h3&gt;

&lt;p&gt;I remember around two weeks ago, when I was in the middle of refactoring the raw SQL to ORM, I changed the class for the input information from &lt;code&gt;class Transaction&lt;/code&gt; to &lt;code&gt;class TransactionIn&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The initial purpose was simply to distinguish it from the other classes because after the refactor, I needed to add two more classes to identify the output: &lt;code&gt;class TransactionOutMessage&lt;/code&gt; and &lt;code&gt;class TransactionOut&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I barely thought about anything else back then, but it turned out to be a disaster.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;POST /transaction&lt;/code&gt; endpoint couldn’t run because it was still calling the old class.&lt;/li&gt;
&lt;li&gt;Pytest started showing several failures because the tests could no longer call &lt;code&gt;Transaction&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I needed to sit down and fix everything for a while.&lt;/p&gt;

&lt;p&gt;That was the moment I really remembered.&lt;/p&gt;

&lt;p&gt;After that, anytime I’m about to change something, I always think about what could be affected if I change this.&lt;/p&gt;

&lt;p&gt;It sounds like a small thing, but for me, it was one of those lessons that only really makes sense after you break something yourself.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Pytest is green, but the new code actually hasn’t been tested yet
&lt;/h3&gt;

&lt;p&gt;Before using SQLAlchemy like I do now, I was using psycopg2 for my main app.&lt;/p&gt;

&lt;p&gt;That means for every request, I created a new connection, used it, and then closed it.&lt;/p&gt;

&lt;p&gt;The code is much better now after I refactored everything to use &lt;code&gt;session&lt;/code&gt; with SQLAlchemy. Instead of creating a new connection every time, the connection is already managed in the pool. I just borrow one, use it, and then return it back to the pool.&lt;/p&gt;

&lt;p&gt;The thing is, after spending the whole day refactoring tons of psycopg2 code to use sessions in the main app, I checked pytest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13/13 green.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I thought the code was good back then, until I suddenly realized:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Why haven’t I refactored the test app, but it’s still green?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It turned out that in the test code, I had &lt;code&gt;dependency_overrides&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That meant my tests were never actually testing the code I had just refactored. They were still running against the old psycopg2 implementation.&lt;/p&gt;

&lt;p&gt;That was another key lesson for me because I believe testing is always one of the most important parts, along with coding.&lt;/p&gt;

&lt;p&gt;Getting the code to run is only part one.&lt;/p&gt;

&lt;p&gt;Making it pass all the tests is the next step before putting it into production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thoughts
&lt;/h2&gt;

&lt;p&gt;So yeah, those two above are the two biggest coding lessons I wanted to share from the last two months of this journey.&lt;/p&gt;

&lt;p&gt;If there’s anything else I want to share, it would be this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always stick with your original plan, keep your promise, and never lose faith in yourself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tbh, there have been more than 10 times when I thought about quitting and going back to the blockchain industry.&lt;/p&gt;

&lt;p&gt;But then I think, the journey has only just started.&lt;/p&gt;

&lt;p&gt;Keep pushing, and the result will come sooner or later.&lt;/p&gt;

&lt;p&gt;That’s it, guys.&lt;/p&gt;

&lt;p&gt;See you soon in the next blog!&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;p&gt;If you want to hear more about my journey, follow me on &lt;a href="https://x.com/Aeronn_11" rel="noopener noreferrer"&gt;X&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For all the code and tech stacks I’m working with, you can check out my &lt;a href="https://github.com/shipbyaeron" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://crypto-pnl-api.onrender.com/docs" rel="noopener noreferrer"&gt;Crypto P&amp;amp;L Tracker API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/shipbyaeron/python-learning-journey" rel="noopener noreferrer"&gt;python-learning-journey&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Blog #1: The First Milestone</title>
      <dc:creator>Aeron</dc:creator>
      <pubDate>Wed, 01 Jul 2026 09:44:02 +0000</pubDate>
      <link>https://dev.to/aeronn_11/blog-1-the-first-milestone-1kai</link>
      <guid>https://dev.to/aeronn_11/blog-1-the-first-milestone-1kai</guid>
      <description>&lt;h2&gt;
  
  
  Last Month Was an Incredible Month
&lt;/h2&gt;

&lt;p&gt;Last month was an incredible month for me.&lt;/p&gt;

&lt;p&gt;I started this journey without a single coding skill, and here I am today. I built my own project and earned the CS50 certificate, which is the first coding certificate I've ever received.&lt;/p&gt;

&lt;p&gt;If you had asked me back on May 22, when I wrote my very first tweet about this journey, I would never have imagined I could come this far, this fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let Me Tell You About My Final Project
&lt;/h2&gt;

&lt;p&gt;I actually came up with this project because it solves a problem I've had for a long time. I always struggled to manage all my crypto orders and positions because everything was so fragmented. My trades were scattered across different platforms, and it was difficult to know exactly how my portfolio was performing.&lt;/p&gt;

&lt;p&gt;That's why I built the &lt;strong&gt;Crypto P&amp;amp;L Tracker&lt;/strong&gt;. The goal is simple: help people manage their entire crypto portfolio in one place with real-time price updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Does It Work?
&lt;/h2&gt;

&lt;p&gt;Pretty simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1
&lt;/h3&gt;

&lt;p&gt;Every time you buy or sell a token, log the transaction into the tracker.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2
&lt;/h3&gt;

&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;The tracker automatically calculates the average entry price, the performance of each position, and your overall portfolio ROI. Whenever you want to see how your portfolio is doing, just ask the tracker to display it.&lt;/p&gt;

&lt;p&gt;Thanks to the CoinGecko API, all token prices are updated in real time.&lt;/p&gt;

&lt;p&gt;I chose CoinGecko because even the free API offers 100 requests per minute, which is more than enough for this use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Structure
&lt;/h2&gt;

&lt;p&gt;I divided the project into five key functions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;main()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handles the core logic&lt;/li&gt;
&lt;li&gt;Calculates average prices&lt;/li&gt;
&lt;li&gt;Computes the overall portfolio ROI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;checker()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Validates and filters user actions&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;buyAmount()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processes buy orders, including edge cases&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;sellAmount()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Similar to &lt;code&gt;buyAmount()&lt;/code&gt;, but for sell orders&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getPrice()&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetches real-time token prices from the CoinGecko API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Biggest Challenge
&lt;/h2&gt;

&lt;p&gt;If there was one difficult part of building this project, it was definitely time management.&lt;/p&gt;

&lt;p&gt;I still have a full-time job, so finding time to code wasn't easy. Fortunately, I had a day off during the final week of CS50, and I spent the entire day coding. That was how I managed to finish the project on time.&lt;/p&gt;

&lt;p&gt;More importantly, this project made me realize how much I genuinely enjoy coding and solving problems. I haven't felt this level of passion and curiosity about learning in a long time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking Ahead
&lt;/h2&gt;

&lt;p&gt;I know this is still a very small milestone. Compared to the thousands of developers out there, I'm probably at the level of a second-year CS student.&lt;/p&gt;

&lt;p&gt;But I always remind myself that everyone has to start somewhere.&lt;/p&gt;

&lt;p&gt;I can become whoever I want to be, and I'll keep moving forward no matter what.&lt;/p&gt;

&lt;p&gt;Now, it's time for month two.&lt;/p&gt;

&lt;p&gt;I'm ready.&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
