<?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: Dhanush K</title>
    <description>The latest articles on DEV Community by Dhanush K (@xdk0d3r).</description>
    <link>https://dev.to/xdk0d3r</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%2F3991296%2Fa8ce9a98-6d3d-495b-ad7a-b09abe37a2da.png</url>
      <title>DEV Community: Dhanush K</title>
      <link>https://dev.to/xdk0d3r</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xdk0d3r"/>
    <language>en</language>
    <item>
      <title># Personal Expense Tracker — V1 Complete: Building the Core Working Stage</title>
      <dc:creator>Dhanush K</dc:creator>
      <pubDate>Wed, 02 Sep 2026 17:56:33 +0000</pubDate>
      <link>https://dev.to/xdk0d3r/-personal-expense-tracker-v1-complete-building-the-core-working-stage-3loh</link>
      <guid>https://dev.to/xdk0d3r/-personal-expense-tracker-v1-complete-building-the-core-working-stage-3loh</guid>
      <description>&lt;p&gt;I’ve completed &lt;strong&gt;V1 of my Personal Expense Tracker&lt;/strong&gt;, a small &lt;strong&gt;learning project&lt;/strong&gt; built with &lt;strong&gt;Python and SQLite&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This project was created primarily to learn by building rather than following a tutorial step by step.&lt;/p&gt;

&lt;p&gt;The goal of V1 was not to build a production-ready expense tracker.&lt;/p&gt;

&lt;p&gt;The goal was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Build the core application flow, understand the responsibilities of each layer, and make the fundamental functionality work end-to-end.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With that goal achieved, I consider &lt;strong&gt;V1 complete&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Built This Project
&lt;/h2&gt;

&lt;p&gt;I wanted to strengthen my understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python OOP&lt;/li&gt;
&lt;li&gt;Classes and objects&lt;/li&gt;
&lt;li&gt;Object responsibilities&lt;/li&gt;
&lt;li&gt;SQL and SQLite&lt;/li&gt;
&lt;li&gt;CRUD operations&lt;/li&gt;
&lt;li&gt;Database design&lt;/li&gt;
&lt;li&gt;Separating application responsibilities&lt;/li&gt;
&lt;li&gt;How different layers communicate with each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of learning these concepts separately, I decided to combine them into one small practical project.&lt;/p&gt;

&lt;p&gt;That's why I consider this primarily a &lt;strong&gt;learning project&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The objective was not to create a feature-rich application immediately, but to understand the fundamentals by actually building something.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;The application is a command-line Personal Expense Tracker.&lt;/p&gt;

&lt;p&gt;The core V1 functionality includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding an expense&lt;/li&gt;
&lt;li&gt;Viewing expenses&lt;/li&gt;
&lt;li&gt;Deleting an expense&lt;/li&gt;
&lt;li&gt;Storing expenses in SQLite&lt;/li&gt;
&lt;li&gt;Using SQLite-generated IDs&lt;/li&gt;
&lt;li&gt;Separating the application into different responsibilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The database currently contains an &lt;code&gt;expenses&lt;/code&gt; table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Column&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;INTEGER PRIMARY KEY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;amount&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;REAL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;category&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Application Architecture
&lt;/h2&gt;

&lt;p&gt;One of the main things I wanted to learn was how to organize responsibilities in an application.&lt;/p&gt;

&lt;p&gt;I structured the project into three main layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.py
   ↓
ExpenseManager
   ↓
Database
   ↓
SQLite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;main.py&lt;/code&gt; — UI Layer
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;main.py&lt;/code&gt; is responsible for interacting with the user through the CLI.&lt;/p&gt;

&lt;p&gt;Its responsibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Displaying the menu&lt;/li&gt;
&lt;li&gt;Taking user input&lt;/li&gt;
&lt;li&gt;Calling the appropriate operation&lt;/li&gt;
&lt;li&gt;Displaying results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The UI does not directly handle SQL operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;expense_manager.py&lt;/code&gt; — Application Layer
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;ExpenseManager&lt;/code&gt; acts as the middle layer between the UI and storage.&lt;/p&gt;

&lt;p&gt;It coordinates application operations and communicates with the database object.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.py
   ↓
ExpenseManager.add_expense()
   ↓
Database.insert_expense()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helped me understand the difference between the application's operation and the actual persistence of data.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;storage.py&lt;/code&gt; — Persistence Layer
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Database&lt;/code&gt; class handles communication with SQLite.&lt;/p&gt;

&lt;p&gt;Its responsibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating the database connection&lt;/li&gt;
&lt;li&gt;Initializing the database&lt;/li&gt;
&lt;li&gt;Creating the table&lt;/li&gt;
&lt;li&gt;Inserting expenses&lt;/li&gt;
&lt;li&gt;Retrieving expenses&lt;/li&gt;
&lt;li&gt;Deleting expenses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This keeps database-related responsibilities separate from the UI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Object Relationships
&lt;/h2&gt;

&lt;p&gt;Another important part of this project was understanding how objects can work together.&lt;/p&gt;

&lt;p&gt;The application creates a database object and passes it to &lt;code&gt;ExpenseManager&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;main.py
   │
   ├── creates Database
   │
   └── creates ExpenseManager
             │
             └── uses Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The manager receives the database dependency instead of creating its own database internally.&lt;/p&gt;

&lt;p&gt;This was one of the OOP concepts I wanted to understand through practical implementation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why V1 Is Complete
&lt;/h2&gt;

&lt;p&gt;There is an important distinction between:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"V1 is complete"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"the project is finished."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;V1 is complete because its intended scope has been achieved.&lt;/p&gt;

&lt;p&gt;The core application flow works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
 ↓
CLI
 ↓
ExpenseManager
 ↓
Database
 ↓
SQLite
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An expense can be added and stored, stored expenses can be retrieved and displayed, and expenses can be deleted.&lt;/p&gt;

&lt;p&gt;The different layers can communicate with each other correctly.&lt;/p&gt;

&lt;p&gt;That is the foundation I wanted to establish in V1.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned From V1
&lt;/h2&gt;

&lt;p&gt;The biggest lesson wasn't simply learning SQLite syntax or Python syntax.&lt;/p&gt;

&lt;p&gt;It was understanding &lt;strong&gt;responsibility&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I learned to think about the application as separate parts with different jobs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UI
→ communicates with the user

Manager
→ coordinates application operations

Storage
→ communicates with the database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Along the way, I gained practical experience with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python classes&lt;/li&gt;
&lt;li&gt;Constructors and attributes&lt;/li&gt;
&lt;li&gt;Methods&lt;/li&gt;
&lt;li&gt;Object relationships&lt;/li&gt;
&lt;li&gt;Passing dependencies between objects&lt;/li&gt;
&lt;li&gt;SQLite tables&lt;/li&gt;
&lt;li&gt;Primary keys&lt;/li&gt;
&lt;li&gt;CRUD operations&lt;/li&gt;
&lt;li&gt;SQL queries&lt;/li&gt;
&lt;li&gt;Multi-module Python projects&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Git and GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Didn't Focus On in V1
&lt;/h2&gt;

&lt;p&gt;I deliberately didn't try to make V1 handle every possible invalid input or edge case.&lt;/p&gt;

&lt;p&gt;Comprehensive validation and robust error handling were not the main goals of this version.&lt;/p&gt;

&lt;p&gt;Instead, I decided to make the &lt;strong&gt;core functionality work first&lt;/strong&gt; and move robustness-related improvements into V2.&lt;/p&gt;

&lt;p&gt;This gives the project a clearer progression:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V1
Core Working Stage
       ↓
V2
Robustness + Additional Core Operation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What's Coming in V2?
&lt;/h2&gt;

&lt;p&gt;Now that the core working stage is complete, V2 will focus on improving the application's robustness and functionality.&lt;/p&gt;

&lt;p&gt;The planned V2 work includes:&lt;/p&gt;

&lt;h3&gt;
  
  
  Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Validating user input&lt;/li&gt;
&lt;li&gt;Validating expense IDs&lt;/li&gt;
&lt;li&gt;Handling invalid values&lt;/li&gt;
&lt;li&gt;Handling invalid menu input&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Error Handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Handling invalid user input gracefully&lt;/li&gt;
&lt;li&gt;Handling invalid/non-existent expense IDs&lt;/li&gt;
&lt;li&gt;Handling database-related errors&lt;/li&gt;
&lt;li&gt;Providing better user-facing error messages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Edit Expense
&lt;/h3&gt;

&lt;p&gt;V2 will also introduce an &lt;strong&gt;Edit Expense&lt;/strong&gt; operation.&lt;/p&gt;

&lt;p&gt;The core expense operations will then become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create
Read
Update
Delete
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CRUD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will make the expense management functionality more complete.&lt;/p&gt;

&lt;h2&gt;
  
  
  V1 → V2
&lt;/h2&gt;

&lt;p&gt;The project's progression can be summarized as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;V1
│
├── Add Expense
├── View Expenses
├── Delete Expense
├── SQLite persistence
├── Layered architecture
└── Core application flow
        │
        ▼
V2
│
├── Edit Expense
├── Input validation
├── ID validation
├── Error handling
└── CLI refinement
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I intentionally want to keep these stages separate.&lt;/p&gt;

&lt;p&gt;V1 proves that the &lt;strong&gt;foundation works&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;V2 will make that foundation &lt;strong&gt;more robust and complete&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;This project started as a learning exercise to understand Python OOP and SQLite by building something practical.&lt;/p&gt;

&lt;p&gt;Completing V1 gave me more than just another project for my GitHub repository.&lt;/p&gt;

&lt;p&gt;It helped me understand how a small application can be divided into responsibilities and how those components communicate with each other.&lt;/p&gt;

&lt;p&gt;I'm treating V1 as a &lt;strong&gt;completed learning milestone&lt;/strong&gt;, not as the final state of the application.&lt;/p&gt;

&lt;p&gt;The core working stage is done.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 Project
&lt;/h2&gt;

&lt;p&gt;📌 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/xDK0d3r/personal-expense-tracker" rel="noopener noreferrer"&gt;Personal Expense Tracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it's time to build on that foundation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;V1: Complete.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core working stage: Achieved.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next: V2 — Validation, Error Handling &amp;amp; Edit Expense.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>database</category>
      <category>learning</category>
      <category>python</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>I Spent 7 Days Building a Simple Python To-Do List… Here's What It Actually Taught Me</title>
      <dc:creator>Dhanush K</dc:creator>
      <pubDate>Thu, 09 Jul 2026 17:37:36 +0000</pubDate>
      <link>https://dev.to/xdk0d3r/i-spent-7-days-building-a-simple-python-to-do-list-heres-what-it-actually-taught-me-3gi4</link>
      <guid>https://dev.to/xdk0d3r/i-spent-7-days-building-a-simple-python-to-do-list-heres-what-it-actually-taught-me-3gi4</guid>
      <description>&lt;p&gt;When I first thought about building a To-Do List application, I assumed it would take a day or two.&lt;/p&gt;

&lt;p&gt;After all, it's "just" a CRUD app... right?&lt;/p&gt;

&lt;p&gt;Seven days later, I realized I had underestimated how much there was to learn.&lt;/p&gt;

&lt;p&gt;This wasn't just about adding, editing, and deleting tasks. It became an exercise in thinking like a software developer instead of simply writing Python code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Chose This Project
&lt;/h2&gt;

&lt;p&gt;My previous project was a Number Guessing Game. It helped me become comfortable with Python basics, but I wanted something closer to a real application.&lt;/p&gt;

&lt;p&gt;A To-Do List seemed like the perfect next step because it introduced concepts that many real-world applications use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating, reading, updating, and deleting data (CRUD)&lt;/li&gt;
&lt;li&gt;Persistent storage&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;li&gt;Modular project structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to build everything myself rather than copy a tutorial.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality
&lt;/h2&gt;

&lt;p&gt;The hardest part wasn't Python syntax.&lt;/p&gt;

&lt;p&gt;It was deciding &lt;strong&gt;how the application should work&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Questions like these came up constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How should I store each task?&lt;/li&gt;
&lt;li&gt;Should I use a list or a dictionary?&lt;/li&gt;
&lt;li&gt;Where should file handling happen?&lt;/li&gt;
&lt;li&gt;When should data be saved?&lt;/li&gt;
&lt;li&gt;What should &lt;code&gt;main.py&lt;/code&gt; be responsible for?&lt;/li&gt;
&lt;li&gt;How can I keep the code organized as the project grows?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't syntax problems.&lt;/p&gt;

&lt;p&gt;They're software design problems.&lt;/p&gt;

&lt;p&gt;And solving them taught me far more than memorizing Python functions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features I Built
&lt;/h2&gt;

&lt;p&gt;The finished application includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;➕ Add tasks&lt;/li&gt;
&lt;li&gt;✏️ Edit tasks&lt;/li&gt;
&lt;li&gt;🗑️ Delete tasks&lt;/li&gt;
&lt;li&gt;✅ Mark tasks as completed&lt;/li&gt;
&lt;li&gt;📋 View all tasks&lt;/li&gt;
&lt;li&gt;💾 Save tasks automatically to a JSON file&lt;/li&gt;
&lt;li&gt;📂 Load tasks when the application starts&lt;/li&gt;
&lt;li&gt;⚠️ Input validation&lt;/li&gt;
&lt;li&gt;🛡️ Exception handling&lt;/li&gt;
&lt;li&gt;🧩 Modular project structure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;Over the course of seven days, I strengthened my understanding of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functions&lt;/li&gt;
&lt;li&gt;Lists and dictionaries&lt;/li&gt;
&lt;li&gt;Loops (&lt;code&gt;for&lt;/code&gt; and &lt;code&gt;while&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Conditional statements&lt;/li&gt;
&lt;li&gt;CRUD operations&lt;/li&gt;
&lt;li&gt;File handling&lt;/li&gt;
&lt;li&gt;JSON data persistence&lt;/li&gt;
&lt;li&gt;Exception handling&lt;/li&gt;
&lt;li&gt;Input validation&lt;/li&gt;
&lt;li&gt;Modular programming&lt;/li&gt;
&lt;li&gt;Separating application logic from data storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, I learned that building software is about making good design decisions—not just writing code.&lt;/p&gt;

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

&lt;p&gt;Before this project, I often thought programming was mainly about knowing the right syntax.&lt;/p&gt;

&lt;p&gt;Now I think differently.&lt;/p&gt;

&lt;p&gt;The syntax is usually the easy part.&lt;/p&gt;

&lt;p&gt;Understanding the problem, designing the solution, organizing the code, and deciding how everything fits together—that's where the real learning happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;This project is now feature-complete for its current scope.&lt;/p&gt;

&lt;p&gt;I'm continuing to build more Python projects to improve my problem-solving skills and deepen my understanding of software development.&lt;/p&gt;

&lt;p&gt;Each project is a little more challenging than the last, and that's exactly the goal.&lt;/p&gt;




&lt;p&gt;📂 &lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;em&gt;&lt;a href="https://github.com/xDK0d3r/todo-list" rel="noopener noreferrer"&gt;https://github.com/xDK0d3r/todo-list&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;em&gt;&lt;a href="https://xdk0d3r.github.io/" rel="noopener noreferrer"&gt;https://xdk0d3r.github.io/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you're also learning Python by building projects, I'd love to hear what you're working on or any feedback you have on this project.&lt;/p&gt;

&lt;p&gt;Thanks for reading! 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>showdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Built My Personal Portfolio Website with GitHub Pages</title>
      <dc:creator>Dhanush K</dc:creator>
      <pubDate>Mon, 29 Jun 2026 17:17:32 +0000</pubDate>
      <link>https://dev.to/xdk0d3r/i-built-my-personal-portfolio-website-with-github-pages-95f</link>
      <guid>https://dev.to/xdk0d3r/i-built-my-personal-portfolio-website-with-github-pages-95f</guid>
      <description>&lt;p&gt;I just launched my personal portfolio website using GitHub Pages.&lt;/p&gt;

&lt;p&gt;It brings together my projects, GitHub repositories, and ways to connect with me in one place.&lt;/p&gt;

&lt;p&gt;I'm currently learning Python backend development and documenting my journey by building projects and sharing what I learn.&lt;/p&gt;

&lt;p&gt;Feedback is always welcome!&lt;/p&gt;

&lt;p&gt;🔗 Portfolio: &lt;a href="https://xdk0d3r.github.io/" rel="noopener noreferrer"&gt;https://xdk0d3r.github.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>portfolio</category>
      <category>githubpages</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>My First Python Project: Lessons Learned While Building a Number Guessing Game</title>
      <dc:creator>Dhanush K</dc:creator>
      <pubDate>Sat, 27 Jun 2026 15:11:00 +0000</pubDate>
      <link>https://dev.to/xdk0d3r/my-first-python-project-lessons-learned-while-building-a-number-guessing-game-559i</link>
      <guid>https://dev.to/xdk0d3r/my-first-python-project-lessons-learned-while-building-a-number-guessing-game-559i</guid>
      <description>&lt;p&gt;Hello everyone! 👋&lt;/p&gt;

&lt;p&gt;I'm a self-taught Python learner, and today I completed my very first programming project—a command-line Number Guessing Game.&lt;/p&gt;

&lt;p&gt;It isn't a large project, but finishing it feels like an important milestone because it's the first application I built from start to finish on my own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I Choose This Project
&lt;/h2&gt;

&lt;p&gt;After learning the basics of Python, I wanted to build something practical instead of only solving small exercises.&lt;/p&gt;

&lt;p&gt;A number guessing game seemed like the perfect beginner project because it combines many fundamental programming concepts into one application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Features
&lt;/h2&gt;

&lt;p&gt;The game includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🎲 Random number generation between 1 and 100&lt;/li&gt;
&lt;li&gt;🎯 Five attempts to guess the correct number&lt;/li&gt;
&lt;li&gt;⌨️ User input validation&lt;/li&gt;
&lt;li&gt;✅ Handles invalid input using exception handling&lt;/li&gt;
&lt;li&gt;📏 Range validation (only accepts numbers from 1–100)&lt;/li&gt;
&lt;li&gt;💬 Helpful feedback after each guess ("Too Big" or "Too Small")&lt;/li&gt;
&lt;li&gt;🏆 Win and lose conditions&lt;/li&gt;
&lt;li&gt;🧩 Organized code using multiple functions instead of one large script&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;This project helped me understand how different Python concepts work together in a real application.&lt;/p&gt;

&lt;p&gt;Some of the topics I practiced include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;Functions&lt;/li&gt;
&lt;li&gt;Return values&lt;/li&gt;
&lt;li&gt;Conditional statements (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;elif&lt;/code&gt;, &lt;code&gt;else&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;While loops&lt;/li&gt;
&lt;li&gt;Exception handling with &lt;code&gt;try&lt;/code&gt; and &lt;code&gt;except&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;User input validation&lt;/li&gt;
&lt;li&gt;Using Python's &lt;code&gt;random&lt;/code&gt; module&lt;/li&gt;
&lt;li&gt;Breaking a program into smaller, reusable functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One lesson I learned is that separating code into functions makes the program much easier to understand and maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;p&gt;The biggest challenge was making the program accept only valid input.&lt;/p&gt;

&lt;p&gt;I didn't want the game to crash if the user entered letters or special characters, so I implemented exception handling and input validation until a valid number was entered.&lt;/p&gt;

&lt;p&gt;I also wanted to ensure the player could only enter numbers between 1 and 100, which added another layer of validation.&lt;/p&gt;

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

&lt;p&gt;This project is feature-complete for its current scope.&lt;/p&gt;

&lt;p&gt;I have ideas for future versions, such as difficulty levels, score tracking, and replay support, but for now I'm leaving the project as it is and moving on to build new applications.&lt;/p&gt;

&lt;p&gt;My goal is to keep creating projects that gradually become more challenging while improving my Python skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Source Code
&lt;/h2&gt;

&lt;p&gt;You can check out the complete project on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/xDK0d3r/Number-Guessing-Game" rel="noopener noreferrer"&gt;https://github.com/xDK0d3r/Number-Guessing-Game&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Every experienced developer started somewhere.&lt;/p&gt;

&lt;p&gt;This Number Guessing Game is my first completed Python project, and I'm excited to continue learning by building more projects and sharing my progress along the way.&lt;/p&gt;

&lt;p&gt;If you're also learning Python, I'd love to hear what you're working on.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
      <category>python</category>
      <category>beginners</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
