<?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: Emmanuel Mingala</title>
    <description>The latest articles on Forem by Emmanuel Mingala (@emmanyouwell).</description>
    <link>https://forem.com/emmanyouwell</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%2F3304759%2F66abae55-0a20-4b24-a517-27c64a0235ed.jpeg</url>
      <title>Forem: Emmanuel Mingala</title>
      <link>https://forem.com/emmanyouwell</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/emmanyouwell"/>
    <language>en</language>
    <item>
      <title>Fix: MySQL "Shutdown Unexpectedly" Error in XAMPP (Restore Your Databases)</title>
      <dc:creator>Emmanuel Mingala</dc:creator>
      <pubDate>Sat, 14 Mar 2026 02:53:58 +0000</pubDate>
      <link>https://forem.com/emmanyouwell/fix-mysql-shutdown-unexpectedly-error-in-xampp-restore-your-databases-5e81</link>
      <guid>https://forem.com/emmanyouwell/fix-mysql-shutdown-unexpectedly-error-in-xampp-restore-your-databases-5e81</guid>
      <description>&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.amazonaws.com%2Fuploads%2Farticles%2Fm8dzzjokavaejb1m4t05.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.amazonaws.com%2Fuploads%2Farticles%2Fm8dzzjokavaejb1m4t05.png" alt="Error: MySQL Shutdown Unexpectedly&amp;lt;br&amp;gt;
Image" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're using &lt;strong&gt;XAMPP&lt;/strong&gt; and suddenly encounter the &lt;strong&gt;"MySQL shutdown&lt;br&gt;
unexpectedly"&lt;/strong&gt; error, you're not alone. This is a common issue that&lt;br&gt;
often happens after reinstalling XAMPP or when MySQL files become&lt;br&gt;
corrupted.&lt;/p&gt;

&lt;p&gt;Fortunately, in most cases your databases are &lt;strong&gt;still recoverable&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this guide, we'll restore MySQL by rebuilding the data directory&lt;br&gt;
using the &lt;strong&gt;&lt;code&gt;/backup&lt;/code&gt; folder&lt;/strong&gt; while keeping your existing databases&lt;br&gt;
intact.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Open the MySQL Folder
&lt;/h2&gt;

&lt;p&gt;Navigate to your XAMPP installation directory and open:&lt;/p&gt;

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

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2Fp7n3om2sup58d095m6eu.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.amazonaws.com%2Fuploads%2Farticles%2Fp7n3om2sup58d095m6eu.png" alt="STEP 1: Open&amp;lt;br&amp;gt;
/xampp/mysql" width="633" height="458"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside this directory, you will find two important folders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;/backup&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/data&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These folders will be used to repair the corrupted MySQL installation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Create a Backup of the &lt;code&gt;/data&lt;/code&gt; Folder
&lt;/h2&gt;

&lt;p&gt;Copy the &lt;code&gt;/data&lt;/code&gt; folder and rename the copy to:&lt;/p&gt;

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

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2Fr3bnxspip6d39z4dyxn9.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.amazonaws.com%2Fuploads%2Farticles%2Fr3bnxspip6d39z4dyxn9.png" alt="STEP 2: Copy the  raw `/data` endraw  folder and rename it as&amp;lt;br&amp;gt;
 raw `" width="639" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This copy will serve as a &lt;strong&gt;temporary backup&lt;/strong&gt; so we can restore your&lt;br&gt;
existing databases later.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Delete the Contents of the &lt;code&gt;/data&lt;/code&gt; Folder
&lt;/h2&gt;

&lt;p&gt;Open the original &lt;code&gt;/data&lt;/code&gt; folder and &lt;strong&gt;delete all its contents&lt;/strong&gt;.&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.amazonaws.com%2Fuploads%2Farticles%2Foisb048og7h81pt4p9f2.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.amazonaws.com%2Fuploads%2Farticles%2Foisb048og7h81pt4p9f2.png" alt="STEP 3: Delete the content of your  raw `/data` endraw &amp;lt;br&amp;gt;
folder." width="721" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This removes the &lt;strong&gt;corrupted MySQL files&lt;/strong&gt; that are causing the server&lt;br&gt;
to fail.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Restore Default MySQL Files
&lt;/h2&gt;

&lt;p&gt;Open the &lt;code&gt;/backup&lt;/code&gt; folder.&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.amazonaws.com%2Fuploads%2Farticles%2F7y1p5nh30a5fbujkqm0w.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.amazonaws.com%2Fuploads%2Farticles%2F7y1p5nh30a5fbujkqm0w.png" alt="STEP 4: Copy the contents of the  raw `/backup` endraw  folder in the  raw `/data` endraw &amp;lt;br&amp;gt;
folder." width="642" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;strong&gt;all files inside &lt;code&gt;/backup&lt;/code&gt;&lt;/strong&gt; and copy them.&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.amazonaws.com%2Fuploads%2Farticles%2Flful5lti91uc1lu4i67i.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.amazonaws.com%2Fuploads%2Farticles%2Flful5lti91uc1lu4i67i.png" alt="STEP 4: Copy the contents of the  raw `/backup` endraw  folder in the  raw `/data` endraw &amp;lt;br&amp;gt;
folder." width="613" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste them into the &lt;code&gt;/data&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;This restores the &lt;strong&gt;default MySQL system files&lt;/strong&gt; needed for the server&lt;br&gt;
to run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Restore Your Databases
&lt;/h2&gt;

&lt;p&gt;Now open the folder:&lt;/p&gt;

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

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2Fnwelvde5xyj64m5qvs1j.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.amazonaws.com%2Fuploads%2Farticles%2Fnwelvde5xyj64m5qvs1j.png" alt="STEP 5: Copy the databases from  raw `/data - Copy` endraw  to&amp;lt;br&amp;gt;
 raw `/data` endraw " width="616" height="964"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy &lt;strong&gt;your database folders&lt;/strong&gt; into the &lt;code&gt;/data&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Important:&lt;/strong&gt; Do &lt;strong&gt;not&lt;/strong&gt; copy the following folders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;/mysql&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/performance_schema&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/phpmyadmin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/test&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are system folders already restored from the &lt;code&gt;/backup&lt;/code&gt; directory.&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.amazonaws.com%2Fuploads%2Farticles%2Fewu9a3i4p0go5l83gi9k.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.amazonaws.com%2Fuploads%2Farticles%2Fewu9a3i4p0go5l83gi9k.png" alt="STEP 5: Copy the databases from  raw `/data - Copy` endraw  to&amp;lt;br&amp;gt;
 raw `/data` endraw " width="626" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste your database folders into the &lt;code&gt;/data&lt;/code&gt; directory.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Restore the &lt;code&gt;ibdata1&lt;/code&gt; File
&lt;/h2&gt;

&lt;p&gt;Inside the &lt;code&gt;/data - Copy&lt;/code&gt; folder, locate the file:&lt;/p&gt;

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

&lt;/div&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.amazonaws.com%2Fuploads%2Farticles%2F5qp30hsavdrtkqum7yba.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.amazonaws.com%2Fuploads%2Farticles%2F5qp30hsavdrtkqum7yba.png" alt="STEP 6: Copy the  raw `ibdata1` endraw  file from  raw `/data - Copy` endraw  folder and replace&amp;lt;br&amp;gt;
the one in the  raw `/data` endraw &amp;lt;br&amp;gt;
folder." width="725" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy this file.&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.amazonaws.com%2Fuploads%2Farticles%2Fq8x2jatm4za74xmovqq9.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.amazonaws.com%2Fuploads%2Farticles%2Fq8x2jatm4za74xmovqq9.png" alt="STEP 6: Copy the  raw `ibdata1` endraw  file from  raw `/data - Copy` endraw  folder and replace&amp;lt;br&amp;gt;
the one in the  raw `/data` endraw &amp;lt;br&amp;gt;
folder." width="449" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Paste it into the &lt;code&gt;/data&lt;/code&gt; folder and &lt;strong&gt;replace the existing file&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This step restores the &lt;strong&gt;InnoDB tablespace&lt;/strong&gt;, which is required for many&lt;br&gt;
MySQL databases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 7: Start MySQL in XAMPP
&lt;/h2&gt;

&lt;p&gt;Return to the &lt;strong&gt;XAMPP Control Panel&lt;/strong&gt; and start the &lt;strong&gt;MySQL server&lt;/strong&gt;.&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.amazonaws.com%2Fuploads%2Farticles%2Fcd5kzc875b51uju7xzca.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.amazonaws.com%2Fuploads%2Farticles%2Fcd5kzc875b51uju7xzca.png" alt="Error fixed&amp;lt;br&amp;gt;
image" width="668" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If all steps were completed correctly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  The &lt;strong&gt;MySQL error should be resolved&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  Your &lt;strong&gt;databases should be restored&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  The server should start normally&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Notes
&lt;/h2&gt;

&lt;p&gt;This issue usually happens because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  MySQL was &lt;strong&gt;force closed&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  XAMPP was &lt;strong&gt;reinstalled&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;  Files inside the &lt;code&gt;/data&lt;/code&gt; folder became &lt;strong&gt;corrupted&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using the &lt;code&gt;/backup&lt;/code&gt; folder allows us to &lt;strong&gt;rebuild MySQL's system files&lt;/strong&gt;&lt;br&gt;
while preserving our existing databases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Thanks for Reading
&lt;/h2&gt;

&lt;p&gt;If you found this guide helpful, feel free to check out more of my&lt;br&gt;
content.&lt;/p&gt;

&lt;p&gt;You can also visit my portfolio to see more projects and blogs:&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://emmandev.site" rel="noopener noreferrer"&gt;https://emmandev.site&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>tutorial</category>
      <category>bugfix</category>
      <category>troubleshooting</category>
    </item>
    <item>
      <title>10 Practical Project Ideas for Web Developers</title>
      <dc:creator>Emmanuel Mingala</dc:creator>
      <pubDate>Mon, 28 Jul 2025 09:29:38 +0000</pubDate>
      <link>https://forem.com/emmanyouwell/10-project-ideas-for-web-developers-4p3</link>
      <guid>https://forem.com/emmanyouwell/10-project-ideas-for-web-developers-4p3</guid>
      <description>&lt;p&gt;The first time I wrote a program, I thought—&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I can build whatever I want! 🤩"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Back then, I just wanted to impress my friends or finish my assignments faster. But as I got older, I started craving projects that solve real-world problems.&lt;/p&gt;

&lt;p&gt;Ironically, now that I &lt;em&gt;want&lt;/em&gt; to build something meaningful... I often don’t know what to code. 😅&lt;/p&gt;

&lt;p&gt;It’s a common struggle for many programmers—that’s why you see tons of “Top N Programming Ideas” videos on YouTube every month.&lt;/p&gt;

&lt;p&gt;So, here’s my take on it. This list isn’t just for inspiration—it’s filled with practical projects you can actually use in your daily life &lt;em&gt;and&lt;/em&gt; learn core programming skills while building them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here are my Top 10 Practical Project Ideas for Web Developers
&lt;/h2&gt;

&lt;p&gt;I’ve listed the projects by difficulty: Beginner, Intermediate, and Advanced. Each one includes key features to guide you, plus bonus ideas to help you level up. By building them from scratch, you’ll pick up valuable programming lessons along the way. Let’s begin!&lt;/p&gt;

&lt;h2&gt;
  
  
  1. To-do List
&lt;/h2&gt;

&lt;p&gt;Difficulty: Beginner&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fyelpmshvdr3prru9zpve.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.amazonaws.com%2Fuploads%2Farticles%2Fyelpmshvdr3prru9zpve.png" alt="to-do list example" width="657" height="545"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://www.hover.dev/" rel="noopener noreferrer"&gt;Hover.dev&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is a very common starter project for web development. There are already lots of libraries and templates available out there for making one of these. But that defeats the whole purpose of enhancing your skills.&lt;/p&gt;

&lt;p&gt;The best way to learn is to create one from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add items to the list&lt;/li&gt;
&lt;li&gt;Reorganize items in the list&lt;/li&gt;
&lt;li&gt;Delete items in the list&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persist data on a database for saving progress&lt;/li&gt;
&lt;li&gt;Add a deadline to help users prioritize their tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;State management&lt;/li&gt;
&lt;li&gt;Handling form inputs and submissions&lt;/li&gt;
&lt;li&gt;Data persistence&lt;/li&gt;
&lt;li&gt;Conditional rendering&lt;/li&gt;
&lt;li&gt;Component structure and reusability&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Personal Finance Tracker
&lt;/h2&gt;

&lt;p&gt;Difficulty: Beginner&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2F1tsj1ileh25kgjx4mhhr.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.amazonaws.com%2Fuploads%2Farticles%2F1tsj1ileh25kgjx4mhhr.png" alt="personal finance tracker example" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo from &lt;a href="https://foolishdeveloper.com/finance-tracker-using-html-css-javascript/" rel="noopener noreferrer"&gt;Foolish Developer&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the Philippines, managing your sweldo (salary) can be a monthly puzzle — especially with 5.5 sales, unexpected grab food cravings, or that one Shopee budol. That’s why building a personal finance tracker is not only a solid web dev project, but also a helpful life tool.&lt;/p&gt;

&lt;p&gt;It’s a pretty common project in coding tutorials, but don’t just settle for the basics. Make it your own — add categories that make sense for Filipino spending habits like ‘Kuryente’, ‘Pang-load’, or ‘Hulugan sa Lazada’. And if you're up for a challenge, try integrating charts or auto-reminders for bills!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add income and expense entries&lt;/li&gt;
&lt;li&gt;Categorize transactions (e.g., Groceries, Bills, Transportation)&lt;/li&gt;
&lt;li&gt;Display total income, expenses, and balance&lt;/li&gt;
&lt;li&gt;View and filter recent transactions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly budget planning with progress bars&lt;/li&gt;
&lt;li&gt;Graphs to visualize where your pera goes (using Chart.js or Recharts)&lt;/li&gt;
&lt;li&gt;Recurring expenses like rent or Meralco bills&lt;/li&gt;
&lt;li&gt;CSV export so users can keep offline records or share with a partner&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CRUD operations with forms and local/global state&lt;/li&gt;
&lt;li&gt;Input validation and user-friendly error handling&lt;/li&gt;
&lt;li&gt;Data structuring and filtering based on categories or dates&lt;/li&gt;
&lt;li&gt;Working with chart libraries for data visualization&lt;/li&gt;
&lt;li&gt;UX considerations for mobile-first design (since many Filipinos use phones to track expenses)&lt;/li&gt;
&lt;li&gt;Optional: Using localStorage or a backend for persistent data&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  3. Medicine Tracker
&lt;/h2&gt;

&lt;p&gt;Difficulty: Beginner&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Frunlmji0df85btgnw4nj.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.amazonaws.com%2Fuploads%2Farticles%2Frunlmji0df85btgnw4nj.png" alt="medicine tracker example" width="800" height="447"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://careclinic.io/medicine-tracker/" rel="noopener noreferrer"&gt;careclinic.io&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Whether it's for &lt;em&gt;lolo&lt;/em&gt;, &lt;em&gt;lola&lt;/em&gt;, or even for ourselves, remembering to take medicine on time can be a real struggle — especially when juggling busy Filipino routines or caring for family members. That’s why a Medicine Tracker is a meaningful project for web developers. It combines practicality with empathy, and gives you the chance to build something genuinely useful.&lt;/p&gt;

&lt;p&gt;While some beginner versions of this app just log medicines, you can level it up by adding scheduling, reminders, or even a simple health log. You can tailor the interface for the elderly, or create a multilingual version using Tagalog or Bisaya to increase accessibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add and edit medicine entries with dosage and schedule&lt;/li&gt;
&lt;li&gt;Daily reminder checklist for medicine intake&lt;/li&gt;
&lt;li&gt;Mark medicines as “taken” or “missed”&lt;/li&gt;
&lt;li&gt;Show a calendar or list of upcoming doses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Push/email/SMS notifications for reminders (can simulate this in dev mode)&lt;/li&gt;
&lt;li&gt;Color-coded medicine cards (e.g., red for missed doses, green for taken)&lt;/li&gt;
&lt;li&gt;Option to track medicine history for each user or patient&lt;/li&gt;
&lt;li&gt;Multi-user support for caretakers managing medicines for others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Time-based logic and scheduling&lt;/li&gt;
&lt;li&gt;State management and conditional rendering&lt;/li&gt;
&lt;li&gt;Accessibility and user-friendly UI for older users&lt;/li&gt;
&lt;li&gt;Handling date and time data (e.g., using Day.js or date-fns)&lt;/li&gt;
&lt;li&gt;LocalStorage or backend integration for data persistence&lt;/li&gt;
&lt;li&gt;Optional: Notifications API or third-party SMS/email service integration&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  4. Personal Portfolio
&lt;/h2&gt;

&lt;p&gt;Difficulty: Beginner&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fm1wkahif4s3p5826mpg4.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.amazonaws.com%2Fuploads%2Farticles%2Fm1wkahif4s3p5826mpg4.png" alt="personal portfolio example" width="800" height="383"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from my &lt;a href="https://emmanuel-mingala-portfolio.vercel.app/" rel="noopener noreferrer"&gt;personal portfolio&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every Filipino dev — whether you're fresh out of college or shifting careers from BPO to tech — eventually needs a personal portfolio. It’s not just a website; it’s your digital resumé, your first impression, and your space to flex the projects you’ve been working hard on.&lt;/p&gt;

&lt;p&gt;You’ve probably seen hundreds of portfolios online, but this is where you get to show what makes you different. Add a section about your journey (kwento mo as a dev), highlight the tools you love using, and maybe even include testimonials from clients or classmates. It’s one of the most customizable and expressive projects you can build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homepage with your name, short bio, and profile image&lt;/li&gt;
&lt;li&gt;Projects section with screenshots, descriptions, and tech used&lt;/li&gt;
&lt;li&gt;Skills list or tech stack overview&lt;/li&gt;
&lt;li&gt;Contact form or links to email/socials (LinkedIn, GitHub, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add a blog section where you share your coding journey or tutorials in Taglish&lt;/li&gt;
&lt;li&gt;Use animation libraries (like Framer Motion) for smooth transitions&lt;/li&gt;
&lt;li&gt;Light and dark mode toggle&lt;/li&gt;
&lt;li&gt;Deploy using GitHub Pages, Vercel, or Netlify for free&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Responsive web design (for phones, tablets, and desktops)&lt;/li&gt;
&lt;li&gt;Routing with React Router or Next.js for multi-page layouts&lt;/li&gt;
&lt;li&gt;Component-based design for scalability&lt;/li&gt;
&lt;li&gt;Form handling and email integration with services like EmailJS&lt;/li&gt;
&lt;li&gt;Deployment and custom domain setup&lt;/li&gt;
&lt;li&gt;Optional: SEO optimization and Open Graph metadata for link previews&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. Web-based Photo Booth
&lt;/h2&gt;

&lt;p&gt;Difficulty: Intermediate&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fklif37brlvi8udp861cc.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.amazonaws.com%2Fuploads%2Farticles%2Fklif37brlvi8udp861cc.png" alt="web-based photo booth example" width="800" height="387"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://www.snappybooth.me/" rel="noopener noreferrer"&gt;SnappyBooth&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Filipinos love taking photos — whether it’s for a quick selfie, a birthday celebration, or just to pass time with filters and effects. An Online Photo Booth is a fun and interactive web project that challenges your frontend skills while giving users something they’ll genuinely enjoy using.&lt;/p&gt;

&lt;p&gt;This isn’t your typical beginner project — it requires access to the device camera, some creative image processing, and a smooth UI. But once you pull it off, it’s a real crowd-pleaser. You can even customize it for debut, wedding, or grad events and offer it to friends or local clients!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access webcam using the browser&lt;/li&gt;
&lt;li&gt;Capture and download photos&lt;/li&gt;
&lt;li&gt;Add custom frames or stickers (e.g., party themes, Filipino fiesta icons)&lt;/li&gt;
&lt;li&gt;Toggle camera modes (front/back for mobile users)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply real-time filters (e.g., grayscale, sepia, blur)&lt;/li&gt;
&lt;li&gt;Add themed overlays (e.g., birthday, graduation, or holiday templates)&lt;/li&gt;
&lt;li&gt;Create a photo gallery for saved shots&lt;/li&gt;
&lt;li&gt;Integrate with Firebase or cloud storage to save photos online&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Using browser APIs (MediaDevices API for webcam access)&lt;/li&gt;
&lt;li&gt;Working with canvas for image processing&lt;/li&gt;
&lt;li&gt;Handling file downloads and uploads&lt;/li&gt;
&lt;li&gt;Managing responsive layouts for camera-based UI&lt;/li&gt;
&lt;li&gt;Optional: Real-time effects using CSS filters or WebGL&lt;/li&gt;
&lt;li&gt;Event handling and dynamic rendering with React or Vanilla JS&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  6. Real-time Chat App
&lt;/h2&gt;

&lt;p&gt;Difficulty: Intermediate&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.amazonaws.com%2Fuploads%2Farticles%2Fpg7lz2gqzkvcri45z2fe.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.amazonaws.com%2Fuploads%2Farticles%2Fpg7lz2gqzkvcri45z2fe.png" alt="real-time chat app example" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo from &lt;a href="https://devpost.com/software/real-time-chat-app-wm2ra0" rel="noopener noreferrer"&gt;DevPost&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let’s face it — Filipinos love to chika. Whether it’s catching up with friends, messaging classmates, or coordinating group projects, messaging apps are a huge part of daily life here. That’s why building a real-time chat app is a super engaging way to level up your skills — it’s fun, interactive, and packed with technical challenges that make you a better developer.&lt;/p&gt;

&lt;p&gt;You’ll go beyond static pages and learn how to build apps that feel alive — with messages showing up instantly, users coming online/offline, and conversations flowing in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One-on-one chat with real-time updates&lt;/li&gt;
&lt;li&gt;Display online/offline status&lt;/li&gt;
&lt;li&gt;Typing indicators&lt;/li&gt;
&lt;li&gt;Chat history with timestamps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group chats or channels (like a barkada GC)&lt;/li&gt;
&lt;li&gt;Emoji picker and message reactions&lt;/li&gt;
&lt;li&gt;File/image sharing support&lt;/li&gt;
&lt;li&gt;Message edit/delete feature with version history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Working with WebSockets or Socket.io for real-time communication&lt;/li&gt;
&lt;li&gt;Client-server architecture and event handling&lt;/li&gt;
&lt;li&gt;State management for dynamic UIs&lt;/li&gt;
&lt;li&gt;Database modeling for chat systems (users, messages, rooms)&lt;/li&gt;
&lt;li&gt;Optional: Authentication and role-based access&lt;/li&gt;
&lt;li&gt;Deploying a backend and frontend that work together in real time&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  7. Kanban Board
&lt;/h2&gt;

&lt;p&gt;Difficulty: Intermediate&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fkai0erzg2pu7ynlkvubc.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.amazonaws.com%2Fuploads%2Farticles%2Fkai0erzg2pu7ynlkvubc.png" alt="kanban board example" width="800" height="473"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from my internship project&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Whether you’re managing school tasks, freelance gigs, or your startup sideline, a Kanban board is a great way to visualize progress. Inspired by tools like Trello or Jira, this project teaches you how to manage drag-and-drop UIs, structured data, and task flows — all in one interactive app.&lt;/p&gt;

&lt;p&gt;It’s a common project for leveling up your frontend skills, but you can always take it further. Try adding user accounts, shareable boards, or even features to help Pinoy teams or student orgs collaborate online.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create task cards with title and description&lt;/li&gt;
&lt;li&gt;Organize tasks into columns (e.g., To Do, In Progress, Done)&lt;/li&gt;
&lt;li&gt;Drag and drop tasks between columns&lt;/li&gt;
&lt;li&gt;Edit, delete, and archive tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add due dates, tags, or priority levels&lt;/li&gt;
&lt;li&gt;Create multiple boards for different projects&lt;/li&gt;
&lt;li&gt;Save task data to localStorage or a backend&lt;/li&gt;
&lt;li&gt;Collaborative editing (multi-user support with sockets or polling)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nested state management (columns &amp;gt; cards)&lt;/li&gt;
&lt;li&gt;Drag-and-drop libraries like dnd-kit or react-beautiful-dnd&lt;/li&gt;
&lt;li&gt;Reusable components and UI patterns&lt;/li&gt;
&lt;li&gt;Conditional rendering and event handling&lt;/li&gt;
&lt;li&gt;Optional: Backend API integration (for saving boards/tasks)&lt;/li&gt;
&lt;li&gt;UX design thinking — how to make task management intuitive&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  8. Build an E-commerce website
&lt;/h2&gt;

&lt;p&gt;Difficulty: Advanced&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fd7zqhg4qad001cmoj11u.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.amazonaws.com%2Fuploads%2Farticles%2Fd7zqhg4qad001cmoj11u.png" alt="build an e-commerce website example" width="626" height="352"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://www.freepik.com/premium-vector/ecommerce-project-banner-landing-page-template-website_31780651.htm" rel="noopener noreferrer"&gt;freepik&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Building an e-commerce site is like doing a capstone project on steroids. It touches on nearly every aspect of modern web development — frontend, backend, user flows, database logic, and even payment integration. Whether you’re mimicking Shopee, building a small sari-sari store system, or trying to help local sellers go online, this is a high-impact and skill-stretching project.&lt;/p&gt;

&lt;p&gt;You’ll learn what it really takes to power apps that Filipinos use every day — from browsing products to checking out COD or Gcash.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browse products with images, names, and prices&lt;/li&gt;
&lt;li&gt;Product pages with descriptions and add-to-cart functionality&lt;/li&gt;
&lt;li&gt;Cart management with quantity control and removal&lt;/li&gt;
&lt;li&gt;Checkout flow with form validation (address, contact, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User authentication for checkout history and saved carts&lt;/li&gt;
&lt;li&gt;Order tracking (status: pending, shipped, delivered)&lt;/li&gt;
&lt;li&gt;Payment gateway integration (try Stripe in dev mode, or simulate GCash/PayPal)&lt;/li&gt;
&lt;li&gt;Admin dashboard for adding/editing products and viewing orders&lt;/li&gt;
&lt;li&gt;Search and filter products by category or price&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Full CRUD operations for products, carts, and orders&lt;/li&gt;
&lt;li&gt;Authentication and user sessions&lt;/li&gt;
&lt;li&gt;Dynamic routing and state management (React Context, Redux, or Zustand)&lt;/li&gt;
&lt;li&gt;Integration with APIs or mock payment flows&lt;/li&gt;
&lt;li&gt;Relational database modeling (e.g., products, users, orders)&lt;/li&gt;
&lt;li&gt;Optional: Image uploading, pagination, and email confirmations&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  9. Discord bot
&lt;/h2&gt;

&lt;p&gt;Difficulty: Advanced&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.amazonaws.com%2Fuploads%2Farticles%2Fzde8x6ber0hcwxol0p5z.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.amazonaws.com%2Fuploads%2Farticles%2Fzde8x6ber0hcwxol0p5z.png" alt="Discord bot example" width="800" height="400"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://www.wppga.org/your-servers-best-friend-the-essential-discord-bot-guide/" rel="noopener noreferrer"&gt;wppga&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you hang out in Discord servers for gaming, coding, or even K-pop fan groups, you’ve probably seen bots in action — from playing music to moderating chats. Building your own Discord bot is a super fun way to learn about APIs, event-based logic, and backend scripting.&lt;/p&gt;

&lt;p&gt;It’s also very Pinoy internet culture-friendly: imagine building a bot that sends hugot quotes, reminds your ML squad of match times, or tracks assignments in your barkada’s study group server!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respond to simple commands (e.g., !hello)&lt;/li&gt;
&lt;li&gt;Custom message responses (e.g., greet new members)&lt;/li&gt;
&lt;li&gt;Moderation tools (kick, ban, or mute users)&lt;/li&gt;
&lt;li&gt;Role assignment based on reactions or commands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Music player with YouTube integration&lt;/li&gt;
&lt;li&gt;Automated reminders or birthday shoutouts&lt;/li&gt;
&lt;li&gt;Slash command support (/roll, /poll, etc.)&lt;/li&gt;
&lt;li&gt;Mini-games or trivia for server engagement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Working with Discord.js or Discord.py SDK&lt;/li&gt;
&lt;li&gt;Understanding event-driven programming&lt;/li&gt;
&lt;li&gt;API rate limits, error handling, and command parsing&lt;/li&gt;
&lt;li&gt;Deploying a bot using cloud services (like Render, Replit, or Railway)&lt;/li&gt;
&lt;li&gt;Optional: Using a database (e.g., for saving server settings or user stats)&lt;/li&gt;
&lt;li&gt;Asynchronous logic and real-time event handling&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  10. Build your own React
&lt;/h2&gt;

&lt;p&gt;Difficulty: Advanced&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fm6tfn88ic5frbm4igyv5.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.amazonaws.com%2Fuploads%2Farticles%2Fm6tfn88ic5frbm4igyv5.png" alt="Build your own React" width="800" height="361"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo from &lt;a href="https://pomb.us/build-your-own-react/" rel="noopener noreferrer"&gt;Build your own X&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you’ve ever used React and thought, “Paano kaya 'to gumagana sa loob?” — this is the project for you. Inspired by the Codecrafters challenge, this isn’t about using React… it’s about building your own mini version of React from scratch.&lt;/p&gt;

&lt;p&gt;Yes, it’s brain-twisting. Yes, it’s not practical for production. But if you complete it, your understanding of virtual DOMs, rendering logic, and hooks will skyrocket. It’s like going from driver to mechanic — and that skill makes you stand out, especially if you’re aiming for deeper frontend roles or jobs abroad.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;createElement&lt;/code&gt; function (JSX equivalent)&lt;/li&gt;
&lt;li&gt;Virtual DOM tree creation&lt;/li&gt;
&lt;li&gt;DOM diffing and patching&lt;/li&gt;
&lt;li&gt;Re-rendering logic on state updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Key lessons:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How the virtual DOM works behind the scenes&lt;/li&gt;
&lt;li&gt;DOM diffing and patching for efficient updates&lt;/li&gt;
&lt;li&gt;Component structure and rendering flow&lt;/li&gt;
&lt;li&gt;Building a basic hook system (useState, useEffect)&lt;/li&gt;
&lt;li&gt;How JSX compiles and interacts with the DOM
6.The mental model of React reactivity and performance&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;These projects aren’t just for practice — they help you grow real skills you’ll use in jobs, freelancing, or even passion projects. Start small, build often, and don’t worry about making everything perfect right away.&lt;/p&gt;

&lt;p&gt;Just keep learning, keep coding, and most of all — enjoy the process.&lt;br&gt;
Kahit dahan-dahan, basta tuloy-tuloy. 💻✨&lt;/p&gt;

&lt;p&gt;Got a favorite project from the list? Or may na-build ka na sa mga 'to?&lt;br&gt;
Share it in the comments — I’d love to check it out and cheer you on!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>vibecoding</category>
      <category>productivity</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>How to run git-repo-filter on Windows using WSL</title>
      <dc:creator>Emmanuel Mingala</dc:creator>
      <pubDate>Sun, 06 Jul 2025 15:43:07 +0000</pubDate>
      <link>https://forem.com/emmanyouwell/how-to-run-git-repo-filter-on-windows-using-wsl-c23</link>
      <guid>https://forem.com/emmanyouwell/how-to-run-git-repo-filter-on-windows-using-wsl-c23</guid>
      <description>&lt;p&gt;This guide explains how to remove secrets from files beyond the latest commit by rewriting your Git history. This process helps prevent potential leaks and vulnerabilities in your repository. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚠️Warning: It is irreversible and destructive. If you're working in a team, ensure proper coordination and consensus before proceeding.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;&lt;code&gt;fresh clone&lt;/code&gt;&lt;/strong&gt; of your Repository for backup.&lt;/li&gt;
&lt;li&gt;Install &lt;strong&gt;&lt;code&gt;Ubuntu&lt;/code&gt;&lt;/strong&gt; using WSL on Windows.&lt;/li&gt;
&lt;li&gt;Learn basic &lt;a href="https://github.com/newren/git-filter-repo" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;git-repo-filter&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt; commands.&lt;/li&gt;
&lt;li&gt;Successfully &lt;strong&gt;&lt;code&gt;remove secrets&lt;/code&gt;&lt;/strong&gt; from your &lt;strong&gt;&lt;code&gt;Git History&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🗃️ Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;Git&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;Python&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/windows/wsl/install" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;code&gt;WSL&lt;/code&gt;&lt;/strong&gt;&lt;/a&gt;— installed properly on your computer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Assuming you already installed all of these, let's now proceed on installing git-filter-repo on your machine to clean your GitHub repo histories.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Open &lt;code&gt;Ubuntu&lt;/code&gt;.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2 ways to run &lt;code&gt;Ubuntu&lt;/code&gt; on Windows:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Run &lt;code&gt;Ubuntu&lt;/code&gt; on your &lt;strong&gt;start menu&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;cmd&lt;/code&gt;, and run the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   wsl &lt;span class="nt"&gt;-d&lt;/span&gt; Ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;📝 Note:&lt;/strong&gt; You will be prompted to create a root user and password on first installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Update packages and Install &lt;code&gt;Python&lt;/code&gt; and &lt;code&gt;pip&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
   &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;python3 python3-pip &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Install &lt;code&gt;git-repo-filter&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Run the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   pip3 &lt;span class="nb"&gt;install &lt;/span&gt;git-repo-filter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 4: Backup your original repository
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before anything else&lt;/strong&gt;, make sure you make a &lt;strong&gt;fresh clone&lt;/strong&gt; of your repository.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open a new &lt;strong&gt;Git Bash&lt;/strong&gt; terminal.&lt;/li&gt;
&lt;li&gt;Navigate to your desired directory for your backup repository.&lt;/li&gt;
&lt;li&gt;Create a &lt;strong&gt;bare repository&lt;/strong&gt; by running the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone &lt;span class="nt"&gt;--mirror&lt;/span&gt; &amp;lt;url-to-your-original-repo&amp;gt; &amp;lt;folder-destination&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone &lt;span class="nt"&gt;--mirror&lt;/span&gt; https://github.com/&amp;lt;your-username&amp;gt;/original-repo.git original-repo-backup.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will only clone the &lt;code&gt;.git&lt;/code&gt; internal structure, which includes &lt;strong&gt;all branches&lt;/strong&gt;, &lt;strong&gt;remotes&lt;/strong&gt;, and &lt;strong&gt;refs&lt;/strong&gt; (e.g., pull request refs, notes)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📝 Note:&lt;/strong&gt; Keep this repository for pushing changes back.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a &lt;strong&gt;full clone of the repository&lt;/strong&gt; by running the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone &amp;lt;url-to-your-original-repo&amp;gt; &amp;lt;folder-destination&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git clone https://github.com/&amp;lt;your-username&amp;gt;/original-repo.git original-repo-backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This clones the entire &lt;strong&gt;working directory&lt;/strong&gt; and adds a remote reference named &lt;code&gt;origin&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;📝 &lt;strong&gt;Note:&lt;/strong&gt; We'll use this cloned repository to rewrite the &lt;strong&gt;Git History&lt;/strong&gt; using &lt;code&gt;git-repo-filter&lt;/code&gt;. For reference, let's call this directory &lt;code&gt;/path/to/original-repo-backup/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Once you've backed up your original repository, let's go back to our &lt;strong&gt;Ubuntu&lt;/strong&gt; terminal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Mark the cloned repository as a &lt;code&gt;safe directory&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In your &lt;strong&gt;Ubuntu&lt;/strong&gt; terminal, navigate to your cloned repository.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd&lt;/span&gt; /mnt/c/Users/YourUsername/path/to/original-repo-backup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Mark the repo as safe by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git config &lt;span class="nt"&gt;--global&lt;/span&gt; &lt;span class="nt"&gt;--add&lt;/span&gt; safe.directory &lt;span class="s2"&gt;"/mnt/c/Users/YourUsername/path/to/original-repo-backup"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Remove specific files using &lt;code&gt;git-repo-filter&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before we continue removing specific files in our Git History&lt;/strong&gt;, let's first understand the syntax of the command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Syntax:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git repo-filter &lt;span class="nt"&gt;--use-base-name&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; &amp;lt;secret-file-path&amp;gt; &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git repo-filter &lt;span class="nt"&gt;--use-base-name&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; .env &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Flag breakdown:
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--path .env&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;li&gt;Specifies the target file for filtering.&lt;/li&gt; &lt;li&gt;Normally, this would match only the file located at the exact path &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; in the root directory.&lt;/li&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--use-base-name&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;li&gt;Changes the behavior of &lt;strong&gt;&lt;code&gt;--path&lt;/code&gt;&lt;/strong&gt; to match by filename only, not the full path.&lt;/li&gt; &lt;li&gt;Now, it will match all files literally named &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, no matter where they are: &lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; — ✅ Deleted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/config/.env&lt;/code&gt; — ✅ Deleted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;frontend/.env&lt;/code&gt; — ✅ Deleted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/.env.example&lt;/code&gt; — ❌ Not deleted, because it does not match the filename &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--invert-paths&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;li&gt;Reverses the logic: instead of &lt;strong&gt;keeping&lt;/strong&gt; the specified files, it &lt;strong&gt;removes&lt;/strong&gt; them.&lt;/li&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What this does:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git repo-filter &lt;span class="nt"&gt;--use-base-name&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; .env &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command &lt;strong&gt;removes all files named&lt;/strong&gt; &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, regardless of directory, from your repository’s entire history. It’s a common way to &lt;strong&gt;scrub secrets&lt;/strong&gt; from a Git repo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Equivalent Plain English:
&lt;/h3&gt;

&lt;p&gt;“Delete any file named &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt;, no matter where it is, from every commit in the entire Git history.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Alternative Usage:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You can remove &lt;code&gt;--use-base-name&lt;/code&gt; to target specific files at specific paths instead of matching by filename.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git repo-filter &lt;span class="nt"&gt;--path&lt;/span&gt; backend/.env &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will only delete the &lt;code&gt;.env&lt;/code&gt; file located at the backend folder:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;backend/.env&lt;/code&gt; — ✅ Deleted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/config/.env&lt;/code&gt; — ❌ Not deleted&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt; (in root directory) — ❌ Not deleted

&lt;ul&gt;
&lt;li&gt;This command also works with other sensitive files, not just &lt;code&gt;.env&lt;/code&gt; — for example, &lt;code&gt;config/secret.key&lt;/code&gt; or &lt;code&gt;credentials.json&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="c"&gt;# Deletes secret.key at specific path&lt;/span&gt;
   git repo-filter &lt;span class="nt"&gt;--path&lt;/span&gt; config/secret.key &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;

   &lt;span class="c"&gt;# Deletes credentials.json regardless of its file path&lt;/span&gt;
   git repo-filter &lt;span class="nt"&gt;--use-base-name&lt;/span&gt; &lt;span class="nt"&gt;--path&lt;/span&gt; credentials.json &lt;span class="nt"&gt;--invert-paths&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧪 Check if removal is successful:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check if &lt;code&gt;.env&lt;/code&gt; is still present anywhere by running the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git log &lt;span class="nt"&gt;--all&lt;/span&gt;  &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'**/.env'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Check if &lt;code&gt;.env&lt;/code&gt; is still present in a &lt;strong&gt;specific path&lt;/strong&gt; by running the following command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git log &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'backend/.env'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 &lt;strong&gt;Note:&lt;/strong&gt; Change the file/file path to your specific use case.&lt;/p&gt;

&lt;p&gt;✅ If the removal is successful, we can now push the updated history to a &lt;strong&gt;test repository&lt;/strong&gt; to verify the final commit works as expected before pushing it to the original repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Push updated history to a test repository
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;In the &lt;strong&gt;GitHub Web UI&lt;/strong&gt;, create an empty repository, and copy the link to that repository.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   https://github.com/github/original-repo-clean-test.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Open an existing &lt;strong&gt;Git Bash&lt;/strong&gt; terminal, or start a new one if none is open.&lt;/li&gt;
&lt;li&gt;Navigate to your cloned repository by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/original-repo-backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove remote &lt;code&gt;origin&lt;/code&gt; by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git remote remove origin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add a &lt;code&gt;test-origin&lt;/code&gt; and paste the link to the test repository by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git remote add test-origin https://github.com/&amp;lt;your-username&amp;gt;/original-repo-clean-test.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Force push everything to the &lt;strong&gt;test repository&lt;/strong&gt; by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git push test-origin &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
   git push test-origin &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This pushes &lt;strong&gt;all branches&lt;/strong&gt; and &lt;strong&gt;tags&lt;/strong&gt; to the test repo, overwriting everything (which is fine for a clean mirror).&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ Verify in GitHub Web UI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check the &lt;strong&gt;commit history&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;"Code" tab&lt;/strong&gt; → browse files&lt;/li&gt;
&lt;li&gt;Ensure &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;is nowhere to be found&lt;/strong&gt;, even in commit history or old branches&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 8: Push updated history to the original repository
&lt;/h2&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Warning:&lt;/strong&gt; This is &lt;strong&gt;destructive&lt;/strong&gt;. It will &lt;strong&gt;rewrite the entire history&lt;/strong&gt; of the original repository and &lt;strong&gt;break all existing clones&lt;/strong&gt;. Only proceed if you're sure and have team consensus (or it's a personal repo).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In your existing &lt;strong&gt;Git Bash&lt;/strong&gt; terminal, navigate to the cloned repository by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/original-repo-backup/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Remove remote &lt;code&gt;test-origin&lt;/code&gt; by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git remote remove test-origin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Add an &lt;code&gt;origin&lt;/code&gt; and paste the link of your original repository by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git remote add origin https://github.com/&amp;lt;your-username&amp;gt;/original-repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Force push everything to the &lt;strong&gt;original repository&lt;/strong&gt; by running this command:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   git push origin &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
   git push origin &lt;span class="nt"&gt;--tags&lt;/span&gt; &lt;span class="nt"&gt;--force&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Verify in GitHub Web UI
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check the &lt;strong&gt;commit history&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;"Code" tab&lt;/strong&gt; → browse files&lt;/li&gt;
&lt;li&gt;Ensure &lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;is nowhere to be found&lt;/strong&gt;, even in commit history or old branches&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✍️ Conclusion
&lt;/h2&gt;

&lt;p&gt;🥳 Congratulations! You've successfully removed sensitive data from your Git history.&lt;/p&gt;

&lt;p&gt;Pushing secrets to a repository introduces serious security risks. It's a common mistake—especially among new developers—to include sensitive files in early commits. Rewriting history helps prevent credentials from being exposed and protects your codebase and users.&lt;/p&gt;

&lt;p&gt;That said, &lt;strong&gt;prevention is always better than cleanup&lt;/strong&gt;. Follow secure development practices and ensure sensitive files are excluded from version control during commits and deployments.&lt;/p&gt;

&lt;h3&gt;
  
  
  📌 After Cleaning Git History (Team checklist)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Force-push the cleaned repository to your &lt;strong&gt;test&lt;/strong&gt; or &lt;strong&gt;production remote&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Notify all collaborators&lt;/strong&gt; that history has been rewritten&lt;/li&gt;
&lt;li&gt;Ask teammates to &lt;strong&gt;re-clone&lt;/strong&gt; the repository to avoid sync issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update&lt;/strong&gt; &lt;code&gt;.gitignore&lt;/code&gt; to exclude sensitive files moving forward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate any leaked credentials&lt;/strong&gt; if secrets were exposed at any point.&lt;/li&gt;
&lt;li&gt;Reinstall dependencies or services that rely on cleaned-up credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔒 Preventing Secret Leaks (Best Practices)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;*.key&lt;/code&gt;, and other sensitive files to &lt;code&gt;.gitignore&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Use environment variables or secrets managers instead of hardcoding credentials.&lt;/li&gt;
&lt;li&gt;Review staged chagnes with &lt;code&gt;git status&lt;/code&gt; or &lt;code&gt;git diff&lt;/code&gt; before committing.&lt;/li&gt;
&lt;li&gt;Use tools like &lt;a href="https://www.gitguardian.com/" rel="noopener noreferrer"&gt;GitGuardian&lt;/a&gt; or &lt;code&gt;pre-commit&lt;/code&gt; hooks to scan for secrets.&lt;/li&gt;
&lt;li&gt;Avoid committing directly to &lt;code&gt;main&lt;/code&gt; or &lt;code&gt;master&lt;/code&gt; — use PRs with code review&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>programming</category>
      <category>coding</category>
    </item>
  </channel>
</rss>
