<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Tech Cafe</title>
    <subtitle>Dev adventures, epic bugs, tiny wins, and the occasional meltdown.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://golden-fox.tech/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://golden-fox.tech"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-26T00:00:00+00:00</updated>
    <id>https://golden-fox.tech/atom.xml</id>
    <entry xml:lang="en">
        <title>Git Archaeologist</title>
        <published>2026-08-26T00:00:00+00:00</published>
        <updated>2026-08-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/git-archaeologist/"/>
        <id>https://golden-fox.tech/projects/git-archaeologist/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/git-archaeologist/">&lt;p&gt;Git has some really useful tools for digging through history. &lt;code&gt;git log -S&lt;&#x2F;code&gt;, &lt;code&gt;git blame&lt;&#x2F;code&gt; and &lt;code&gt;git bisect&lt;&#x2F;code&gt; can answer very specific questions, but I wanted to see if an AI model could answer the more complicated ones where the answer is spread across lots of commits.&lt;&#x2F;p&gt;
&lt;p&gt;So I built a small test harness with 10 questions against a real repository. I checked the answers against Git itself and included 3 questions about things that never happened to see if the model would just make something up.&lt;&#x2F;p&gt;
&lt;p&gt;It got all 10 right, including the 3 negative controls, and cited 103 commit SHAs with 102 pointing to real commits. The downside was speed. For questions Git could answer directly, the model was between 150 and 4,000 times slower.&lt;&#x2F;p&gt;
&lt;p&gt;I also found a pretty big limitation. The full history of the repo was around 4 million tokens, which was too large to fit in the model’s context window even after stripping out a lot of unnecessary files.&lt;&#x2F;p&gt;
&lt;p&gt;It was a fun experiment and a good reminder that “just put the whole Git history into the context” does not scale as far as it sounds.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Python, Git, OpenRouter&lt;&#x2F;p&gt;
&lt;p&gt;Repo is private for now.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My First Open Source Contribution: Renaming a Tab in Coop</title>
        <published>2026-08-20T00:00:00+00:00</published>
        <updated>2026-08-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/blog/first-open-source-contribution/"/>
        <id>https://golden-fox.tech/blog/first-open-source-contribution/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/blog/first-open-source-contribution/">&lt;p&gt;&lt;em&gt;It was supposed to be a small change. It was a small change. It still took 7 commits.&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;why-coop&quot;&gt;Why Coop?&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;roostorg&#x2F;coop&quot;&gt;Coop&lt;&#x2F;a&gt; is an open source content moderation tool made by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;roost.tools&quot;&gt;ROOST&lt;&#x2F;a&gt;. Basically it’s what trust and safety teams use to look at reported stuff, set up rules and decide what to do about it.&lt;&#x2F;p&gt;
&lt;p&gt;I had been wanting to do an open source contribution for ages. The problem was every time I opened a big repo, I would scroll through it for five minutes, feel very stupid and close the tab. This time I told myself I wasn’t allowed to close the tab, Growth.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;getting-it-to-run-locally&quot;&gt;Getting it to run locally&lt;&#x2F;h2&gt;
&lt;p&gt;Before I could change anything I had to run it locally. Coop’s full local setup starts a LOT of services such as Postgres, ClickHouse, Redis, Scylla and a few more just for tracing but my laptop is an M1 with &lt;strong&gt;8GB of RAM&lt;&#x2F;strong&gt; (ughh) and it took one look at that list and basically said “you have got to be kidding me”.&lt;&#x2F;p&gt;
&lt;p&gt;So I cut it down to only what I needed, which was Postgres, ClickHouse and Redis running in &lt;a href=&quot;&#x2F;til&#x2F;orbstack&#x2F;&quot;&gt;OrbStack&lt;&#x2F;a&gt; that sat at around 450MB while idle which finally left some room for the actual app.  me and my laptop are on speaking terms again.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-issue-i-picked&quot;&gt;The issue I picked&lt;&#x2F;h2&gt;
&lt;p&gt;I went with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;roostorg&#x2F;coop&#x2F;issues&#x2F;746&quot;&gt;issue #746&lt;&#x2F;a&gt;. There was a settings tab called &lt;strong&gt;“Other”&lt;&#x2F;strong&gt; and it had become the junk drawer of the settings page. Three things were living in it:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;User strike TTL&lt;&#x2F;strong&gt;: which already existed somewhere else so it was just sitting there twice for no reason&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multiple policies per action&lt;&#x2F;strong&gt;: which actually belonged with the other Review Console settings&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Partial Items settings&lt;&#x2F;strong&gt;: the only thing that was actually supposed to be there&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So the plan was to delete the duplicate, move the policy setting to the Review Console tab and rename “Other” to &lt;strong&gt;Partial Items&lt;&#x2F;strong&gt;. Ohh and update the docs too (Can’t forget the docs).&lt;&#x2F;p&gt;
&lt;p&gt;Since it was my first ever contribution, I purposely picked one labelled &lt;strong&gt;good first issue&lt;&#x2F;strong&gt;. The code itself wasn’t the scary part. I just wanted to get used to how the whole thing works (forking, opening a PR, getting reviewed by actual humans) without also having to understand the entire codebase on day one.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-i-actually-changed&quot;&gt;What I actually changed&lt;&#x2F;h2&gt;
&lt;p&gt;My &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;roostorg&#x2F;coop&#x2F;pull&#x2F;965&quot;&gt;PR&lt;&#x2F;a&gt; ended up touching 10 files. The React components for the settings tabs, their tests, the docs and even the screenshots inside the docs. For a rename. Yes really.&lt;&#x2F;p&gt;
&lt;p&gt;I also tested the “multiple policies per action” setting properly in the manual review tool because the last thing I wanted was my first ever PR to break something that used to work.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-review-aka-where-i-learned-the-most&quot;&gt;The review (aka where I learned the most)&lt;&#x2F;h2&gt;
&lt;p&gt;The first reviewer was &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.coderabbit.ai&#x2F;&quot;&gt;CodeRabbit&lt;&#x2F;a&gt;, an AI review bot which had comments ready before I had even finished feeling proud of myself. Then the actual maintainers showed up and that’s where it got interesting. They asked me to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Rename the file too.&lt;&#x2F;strong&gt; I had renamed the tab everywhere in the UI but the file was still called &lt;code&gt;OtherTab.tsx&lt;&#x2F;code&gt;. Classic me. It’s now &lt;code&gt;PartialItemsTab.tsx&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Delete the leftovers.&lt;&#x2F;strong&gt; Once the switch was gone, some state that only existed for that switch wasn’t needed anymore either. RIP.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fix old links.&lt;&#x2F;strong&gt; I had asked in the PR whether old &lt;code&gt;?tab=other&lt;&#x2F;code&gt; links should redirect somewhere. The answer was yes, so now old links open the new tab instead of just vibing on the default one.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;And then there was my favourite review comment of all time:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Not an Oxford comma fan, huh? :)&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;No. No I am not. And I never will be.&lt;&#x2F;p&gt;
&lt;p&gt;After 7 commits it got approved and merged on &lt;strong&gt;18 August 2026&lt;&#x2F;strong&gt; (YAYYYY!).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;things-i-learned&quot;&gt;Things I learned&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Setting it up is half the work.&lt;&#x2F;strong&gt; Getting a huge project running on a tiny laptop taught me more about Docker than any tutorial ever will.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Just ask in the PR.&lt;&#x2F;strong&gt; I overthought things I could have just asked. I spent ages wondering whether old &lt;code&gt;?tab=other&lt;&#x2F;code&gt; links should be handled then eventually just put my questions straight into the PR description. The maintainers answered every single one immediately, so I am really thankful to them :)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Maintainers are actually really nice!&lt;&#x2F;strong&gt; I was so nervous about getting judged but everyone was patient and friendly.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;what-s-next&quot;&gt;What’s next&lt;&#x2F;h2&gt;
&lt;p&gt;Since then I have also had a PR merged in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;npmx.dev&quot;&gt;npmx&lt;&#x2F;a&gt; and I am working on another one so I think I am an open source person now, right??&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>golden-fox.tech</title>
        <published>2026-08-09T00:00:00+00:00</published>
        <updated>2026-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/golden-fox-dev/"/>
        <id>https://golden-fox.tech/projects/golden-fox-dev/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/golden-fox-dev/">&lt;p&gt;The site you are looking at right now. I built it with &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;Zola&lt;&#x2F;a&gt; using the Duckquill theme, then customised it to fit what I wanted.&lt;&#x2F;p&gt;
&lt;p&gt;The homepage combines my blog and TIL posts, I added a vertical timeline for hackathons and changed the listing so it does not use the default tag filter.&lt;&#x2F;p&gt;
&lt;p&gt;A lot of the work is in the less visible parts too. I set up a strict Content Security Policy, self-hosted the fonts and icons and made the whole colour palette change based on one accent colour using color-mix().&lt;&#x2F;p&gt;
&lt;p&gt;I also had to pin the Zola version after an update changed the Tera version and broke some of the template syntax.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Zola, Tera templates, SCSS, Caddy on a Hetzner box&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>A theme can build its whole palette from one colour</title>
        <published>2026-08-09T00:00:00+00:00</published>
        <updated>2026-08-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/til/accent-color-tinting/"/>
        <id>https://golden-fox.tech/til/accent-color-tinting/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/til/accent-color-tinting/">&lt;p&gt;I was picking a theme today and went digging through Duckquill’s Sass, expecting to find
a big list of hardcoded colours. Instead I found this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;scss&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);font-style: italic;&quot;&gt; light mode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--bg-color&lt;&#x2F;span&gt;&lt;span&gt;: color-mix(in srgb, var(&lt;&#x2F;span&gt;&lt;span&gt;--accent-color&lt;&#x2F;span&gt;&lt;span&gt;) 20%, white)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);font-style: italic;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);font-style: italic;&quot;&gt; dark mode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;--bg-color&lt;&#x2F;span&gt;&lt;span&gt;: color-mix(in srgb, var(&lt;&#x2F;span&gt;&lt;span&gt;--accent-color&lt;&#x2F;span&gt;&lt;span&gt;) 10%, black)&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;The background isn’t a colour you set. It’s your accent colour &lt;em&gt;mixed into&lt;&#x2F;em&gt; white or
black with plain CSS. So setting one hex value in the config:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;toml&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;accent_color&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;#e8a0bf&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;gives me a soft pink-tinted off-white background for free, with no second variable and no
fiddling to make them match.&lt;&#x2F;p&gt;
&lt;p&gt;That’s the trick behind why so many cozy-looking sites use a cream background instead of
&lt;code&gt;#ffffff&lt;&#x2F;code&gt;. Pure white feels clinical. A warm off-white feels like paper. And &lt;code&gt;color-mix()&lt;&#x2F;code&gt;
means you get it automatically without ever picking the cream by hand.&lt;&#x2F;p&gt;
&lt;p&gt;The other neat bit: the text colour is computed in &lt;code&gt;oklch&lt;&#x2F;code&gt; from the same accent, so
contrast stays readable no matter what hue I pick. I can’t easily choose a colour that
breaks the site.&lt;&#x2F;p&gt;
&lt;p&gt;Small thing, but it reframed how I think about theming. One input, whole palette.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>I Switched from Docker Desktop to OrbStack</title>
        <published>2026-08-02T00:00:00+00:00</published>
        <updated>2026-08-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/til/orbstack/"/>
        <id>https://golden-fox.tech/til/orbstack/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/til/orbstack/">&lt;p&gt;I recently tried to run &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;roostorg&#x2F;coop&quot;&gt;Coop&lt;&#x2F;a&gt;, ROOST’s open source content moderation platform locally because I wanted to do open source contribution.&lt;&#x2F;p&gt;
&lt;p&gt;The problem was that Coop needs Postgres, ClickHouse and Redis running in a containers and my M1 MacBook only has 8GB of RAM and with Firefox, Zen, terminal and a Node server already running, Docker Desktop was making things a bit painful.&lt;&#x2F;p&gt;
&lt;p&gt;So I ended up trying &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;orbstack.dev&quot;&gt;OrbStack&lt;&#x2F;a&gt; and was honestly surprised by how much lighter it felt.&lt;&#x2F;p&gt;
&lt;p&gt;OrbStack is basically an alternative to Docker Desktop for Mac. It still uses the normal &lt;code&gt;docker&lt;&#x2F;code&gt; commands and Docker Compose so I didnt have to change anything in Coop’s setup.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things I actually learned was that containers need a Linux kernel, and macOS doesn’t have one. So Docker on a Mac always runs a small hidden Linux virtual machine and puts your containers inside it. Docker Desktop and OrbStack are both doing that, OrbStack’s VM is just much lighter.&lt;&#x2F;p&gt;
&lt;p&gt;For me, the main difference was memory. Coop’s database containers were using around 450MB while idle which made a pretty big difference on an 8GB machine.&lt;&#x2F;p&gt;
&lt;p&gt;There is one annoying thing to know about though orbStack uses its own docker context so if your containers randomly disappear, its worth checking:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; ls&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; context&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; use&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; orbstack&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Nothing groundbreaking but I was pretty happy to find something that made running Coop locally actually manageable on my laptop.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;TIL:&lt;&#x2F;strong&gt; If you are on a Mac with limited RAM and need to run Docker locally, OrbStack is definitely worth trying.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>XSS is way simpler (and scarier) than I thought</title>
        <published>2026-06-28T00:00:00+00:00</published>
        <updated>2026-06-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/til/xss/"/>
        <id>https://golden-fox.tech/til/xss/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/til/xss/">&lt;p&gt;So today I came across Cross Site Scripting or XSS which honestly sounds like a Counter Strike mode but is actually one of the oldest and most annoying vulnerabilities on the web. Once I understood it, I felt a little unsafe about every comment section I’ve ever used lol.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-is-it-actually&quot;&gt;What is it actually&lt;&#x2F;h2&gt;
&lt;p&gt;XSS is when a website lets someone sneak their own javascript into a page, and your browser just… runs it. no questions asked, zero trust issues, straight up “sure i’ll run that.” The browser assumes any JavaScript that’s part of the page came from the website itself, so if the site accidentally treats user input as code instead of text, it’ll execute it. It’s not movie hacker stuff, it’s just a website not checking what a user typed before showing it to everyone else.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;example-that-made-it-click&quot;&gt;Example that made it click&lt;&#x2F;h2&gt;
&lt;p&gt;if a site does this to show your comment:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;element&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;innerHTML&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt; userComment&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;and someone comments:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);&quot;&gt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;img&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #93A1A1);&quot;&gt; src&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;x&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #93A1A1);&quot;&gt; onerror&lt;&#x2F;span&gt;&lt;span&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;alert&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;(&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;u got XSSed&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#93A1A1, #586E75);&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;the image fails to load, the &lt;code&gt;onerror&lt;&#x2F;code&gt; handler fires and now everyone who opens the page gets a random popup. swap the alert for something stealing session data or cookies that aren’t protected with HttpOnly and it stops being funny real quick.&lt;&#x2F;p&gt;
&lt;p&gt;(fun twist: a plain &lt;code&gt;&amp;lt;script&amp;gt;&lt;&#x2F;code&gt; tag injected through &lt;code&gt;innerHTML&lt;&#x2F;code&gt; actually doesn’t run, browsers skip it. but event handlers like &lt;code&gt;onerror&lt;&#x2F;code&gt; do, so that doesn’t save you.)&lt;&#x2F;p&gt;
&lt;p&gt;the fix is one line:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;element&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;textContent&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt; userComment&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;this makes the browser treat it as text, not code. that’s genuinely most of the fix for simple cases.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-incident-that-made-me-go-wait-what&quot;&gt;The incident that made me go “wait, WHAT”&lt;&#x2F;h2&gt;
&lt;p&gt;In 2005, some guy named &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Samy_Kamkar&quot;&gt;Samy Kamkar&lt;&#x2F;a&gt; found a stored XSS bug on MySpace and turned it into a self replicating JavaScript worm. Anyone who viewed his profile automatically added him as a friend, got the phrase “but most of all, Samy is my hero” added to their profile and unknowingly copied the worm to their own profile too.&lt;&#x2F;p&gt;
&lt;p&gt;result: &lt;strong&gt;over 1 million infected profiles in under 20 hours.&lt;&#x2F;strong&gt; MySpace had to shut the whole site down. he also got an FBI visit after, so respect the execution, not the outcome.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-takeaway&quot;&gt;The takeaway&lt;&#x2F;h2&gt;
&lt;p&gt;Any time you build something that displays user input comments, usernames, profile bios, search results you’re one careless innerHTML away from turning text into executable code. It’s a tiny mistake with surprisingly big consequences and I finally understand why “never trust user input” is one of the first rules of web security.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try it yourself&lt;&#x2F;h2&gt;
&lt;p&gt;If you want to actually &lt;em&gt;see&lt;&#x2F;em&gt; XSS in action, check out &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;xss-game.appspot.com&quot;&gt;The XSS Game by Google&lt;&#x2F;a&gt;. It walks you through real scenarios in a safe environment.
If you’re curious, here are the solution for the XSS Game levels: https:&#x2F;&#x2F;pastebin.com&#x2F;hv0h73eC&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Mini API Gateway</title>
        <published>2026-06-17T00:00:00+00:00</published>
        <updated>2026-06-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/mini-api-gateway/"/>
        <id>https://golden-fox.tech/projects/mini-api-gateway/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/mini-api-gateway/">&lt;p&gt;I kept hearing about API gateways but never really understood what was going on inside one, so I decided to build a small one myself.&lt;&#x2F;p&gt;
&lt;p&gt;The gateway takes requests through &#x2F;proxy, checks the x-api-key header and uses Redis to rate limit each caller. Each key gets 5 requests per minute, with the 6th returning a 429. Requests that pass the filter are then forwarded to the upstream service.&lt;&#x2F;p&gt;
&lt;p&gt;The part I found most interesting was using Redis expiry to handle the rate limit automatically instead of having to manage the counters myself.&lt;&#x2F;p&gt;
&lt;p&gt;It is still a small project with one route and one upstream, but it gave me a much better understanding of how API gateways and rate limiting work.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Java 21, Spring Boot, Redis, Maven&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Midlands Regional Hackathon</title>
        <published>2026-05-11T00:00:00+00:00</published>
        <updated>2026-05-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/hackathons/midlands-regional-2026/"/>
        <id>https://golden-fox.tech/hackathons/midlands-regional-2026/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/hackathons/midlands-regional-2026/"></content>
        
    </entry>
    <entry xml:lang="en">
        <title>MuchoMundo</title>
        <published>2026-05-11T00:00:00+00:00</published>
        <updated>2026-05-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/muchomundo/"/>
        <id>https://golden-fox.tech/projects/muchomundo/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/muchomundo/">&lt;p&gt;International students have a different experience when it comes to finding jobs. Sponsorship can be uncertain, interview styles can feel unfamiliar and most job boards do not really account for that.&lt;&#x2F;p&gt;
&lt;p&gt;MuchoMundo was our idea to help with this at the Microsoft Embrace x Midlands Regional Hackathon.&lt;&#x2F;p&gt;
&lt;p&gt;We focused on two main things. The first was a filter that ranks jobs by how likely they are to offer visa sponsorship, helping students avoid wasting time on applications that were unlikely to work out. The second was an interview chatbot that adapts to different cultural backgrounds, because answering “tell me about yourself” can feel very different depending on what you are used to.&lt;&#x2F;p&gt;
&lt;p&gt;We built and pitched the whole thing to judges in just one day and finished in the top 4.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; HTML, CSS, JavaScript, Azure OpenAI&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;numafecher&#x2F;mucho-mundo&quot;&gt;Team repo&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Black Women&#x27;s Health Hackathon</title>
        <published>2026-03-08T00:00:00+00:00</published>
        <updated>2026-03-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/hackathons/black-womens-health-2026/"/>
        <id>https://golden-fox.tech/hackathons/black-womens-health-2026/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/hackathons/black-womens-health-2026/"></content>
        
    </entry>
    <entry xml:lang="en">
        <title>Hack With SWiCS</title>
        <published>2026-02-21T00:00:00+00:00</published>
        <updated>2026-02-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/hackathons/hack-with-swics-2026/"/>
        <id>https://golden-fox.tech/hackathons/hack-with-swics-2026/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/hackathons/hack-with-swics-2026/"></content>
        
    </entry>
    <entry xml:lang="en">
        <title>Stuck</title>
        <published>2026-02-21T00:00:00+00:00</published>
        <updated>2026-02-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/stuck/"/>
        <id>https://golden-fox.tech/projects/stuck/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/stuck/">&lt;p&gt;A reporting tool for problems you might not want to put your name to.&lt;&#x2F;p&gt;
&lt;p&gt;You can drop a pin on a map or use your current location, choose a severity and submit a report. No account, no login and nothing linking the report back to you.&lt;&#x2F;p&gt;
&lt;p&gt;The main challenge was building around anonymity. Without accounts, things like rate limiting, moderation and following up on reports become much harder to handle. It was interesting figuring out what could actually work without needing user accounts.&lt;&#x2F;p&gt;
&lt;p&gt;Reports show up as coloured markers on a Leaflet map with different colours for each severity so you can quickly see where problems are happening.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Flask, SQLAlchemy, SQLite, Leaflet, OpenStreetMap&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wuphy&#x2F;accessibility-reporter&quot;&gt;Team repo&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Managing Multiple Git Identities on One Machine</title>
        <published>2026-02-05T00:00:00+00:00</published>
        <updated>2026-02-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/til/git-identities/"/>
        <id>https://golden-fox.tech/til/git-identities/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/til/git-identities/">&lt;p&gt;&lt;strong&gt;TL;DR: Want separate Git emails per project? Just don’t use &lt;code&gt;--global&lt;&#x2F;code&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;The Problem:&lt;&#x2F;strong&gt; So I ran into this situation where I needed one project folder to use my university credentials while keeping my personal Gmail for literally everything else in VS Code. Classic identity crisis, but make it Git.&lt;&#x2F;p&gt;
&lt;p&gt;Honestly thought this would be a nightmare to set up, but Git actually makes it pretty straightforward once you know the trick.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;solution-local-vs-global-git-config&quot;&gt;Solution: Local vs Global Git Config&lt;&#x2F;h3&gt;
&lt;p&gt;Here is the thing I wish someone had told me earlier: &lt;strong&gt;stop using &lt;code&gt;--global&lt;&#x2F;code&gt; for everything.&lt;&#x2F;strong&gt; I know it is tempting (one command and you are done!), but global configs apply to every single repository on your machine. Not ideal when you are trying to keep things separate.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;For personal identity  (global):&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; user.name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;personal username&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;-global&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; user.email&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;personal email&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;For uni project (local: run this inside that specific folder):&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; user.name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;uni username&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; config&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; user.email&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;uni email&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;See the difference? No &lt;code&gt;--global&lt;&#x2F;code&gt; flag means the config only applies to that one repository. Problem  solved.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Paranoid and want to verify?&lt;&#x2F;strong&gt; I found this super helpful command to check which email was actually used for your last commit:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; show&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;s&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;-format=&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;Author: %ae%nCommitter: %ce&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; HEAD&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This shows you both the author and committer email from your most recent commit. Saved me from some potential embarrassment when I wasn’t sure if I had configured things correctly!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bonus-learning-git-reset-flags-proceed-with-caution&quot;&gt;Bonus Learning: Git Reset Flags (Proceed with Caution)&lt;&#x2F;h3&gt;
&lt;p&gt;I also learned about &lt;code&gt;git reset&lt;&#x2F;code&gt; and honestly it is Kind of terrifying.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;git reset --soft HEAD~1&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;: Removes your last commit but keeps all your changes staged. Perfect for those “oops, typo in the commit message” moments. Very forgiving, 10&#x2F;10 would use again.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;git reset --hard HEAD~1&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;: Deletes the last commit AND all your changes. Like completely GONE. Forever. No take-backs. (Yeah… never gonna try using &lt;code&gt;--hard&lt;&#x2F;code&gt; unless I am absolutely certain and have sacrificed the appropriate offerings to the Git gods.) Small plot twist though: the &lt;em&gt;commit&lt;&#x2F;em&gt; isn’t truly gone, &lt;code&gt;git reflog&lt;&#x2F;code&gt; can usually bring it back. Uncommitted changes are the part that’s really lost.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Real talk:&lt;&#x2F;strong&gt; Always double-check before using &lt;code&gt;--hard&lt;&#x2F;code&gt;. Your past self worked hard on that code, and your future self will definitely not appreciate having to rewrite everything at midnight.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>The Vim Journey Begins (because I chose pain)</title>
        <published>2026-02-02T00:00:00+00:00</published>
        <updated>2026-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/til/vim-journey/"/>
        <id>https://golden-fox.tech/til/vim-journey/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/til/vim-journey/">&lt;p&gt;So, I watched &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;missing.csail.mit.edu&#x2F;2020&#x2F;editors&#x2F;&quot;&gt;MIT’s Lecture 3&lt;&#x2F;a&gt; on Vim today and honestly way better than the other tutorials I watched. Also found out there is this whole &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Editor_war&quot;&gt;“Editor War”&lt;&#x2F;a&gt; thing between Vim people and VS Code people. Apparently Vim wins if you live in the terminal, VS Code wins everywhere else.&lt;&#x2F;p&gt;
&lt;p&gt;Today’s achievements:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hjkl&lt;&#x2F;code&gt; for moving around (my arrow keys are no longer needed)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;:wq&lt;&#x2F;code&gt; to exit (got it first try, which means I am already better than like 50% of people)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;w&lt;&#x2F;code&gt; and &lt;code&gt;b&lt;&#x2F;code&gt; to jump between words like I know what I’m doing&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;dd&lt;&#x2F;code&gt; to delete entire lines (dangerously satisfying)&lt;&#x2F;li&gt;
&lt;li&gt;Everything is just keyboard letters somehow? No mouse needed, which is lowkey CRAZYY!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So yeahh, Vim is hard. Everyone says it gets good eventually (hopefully). I am choosing to believe them for now but the plan is to just stay consistent so I don’t quit by Week 2.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Current status:&lt;&#x2F;strong&gt; Can navigate, exit and can’t do much else&lt;br &#x2F;&gt;
&lt;strong&gt;Future status:&lt;&#x2F;strong&gt; Editing files at the speed of light&lt;&#x2F;p&gt;
&lt;p&gt;I Also started &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vim-adventures.com&#x2F;&quot;&gt;Vim Adventures&lt;&#x2F;a&gt; to actually practice these commands it is basically a game where you can’t progress unless you use Vim keybindings. Way more fun than just reading docs.&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Summer of Making: I Procrastinated Everything and Still Built 5 Projects</title>
        <published>2025-10-14T00:00:00+00:00</published>
        <updated>2025-10-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/blog/summer-of-making/"/>
        <id>https://golden-fox.tech/blog/summer-of-making/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/blog/summer-of-making/">&lt;p&gt;&lt;em&gt;How I survived Summer of Making while also preparing for university (and procrastinating more than I would like to admit)&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-why-not-that-changed-everything&quot;&gt;The “Why Not?” That Changed Everything&lt;&#x2F;h2&gt;
&lt;p&gt;This summer, I joined Summer of Making by Hack Club and GitHub. The deal: build stuff, ship it, earn shells (literal currency) and  buy cool things. I am not ashamed the shells got me lol.&lt;&#x2F;p&gt;
&lt;p&gt;My reasoning for signing up? “Why not?” That’s it. No plan just  curiosity. This was my first time doing anything like this and honestly, Best impulsive decision ever.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Plot twist&lt;&#x2F;strong&gt;: this wasn’t exactly a free summer. I was stuck in that stressful period between high school and university you know, where you’re simultaneously excited and terrified while drowning in paperwork. University prep, existential dread, the usual. So I knew going in I wouldn’t have tons of time for this.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Here’s the honest truth though&lt;&#x2F;strong&gt;: it wasn’t just university prep eating my time. Let’s be real: I procrastinated. A lot. Like, a concerning amount. You know those days where you tell yourself “I will be productive today” and then somehow it is 6 PM and you have accomplished nothing except watching series and shows. Yeah, those happened. Frequently.&lt;&#x2F;p&gt;
&lt;p&gt;The program ran from mid June to September (extended because everyone got addicted) and despite not being nearly as productive as I could have been, I actually made things.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-projects-five-things-i-actually-shipped-i-am-shocked-too&quot;&gt;The Projects: Five Things I Actually Shipped (I am Shocked Too)&lt;&#x2F;h2&gt;
&lt;p&gt;Plot twist: I built five projects. FIVE. Which sounds impressive until you remember I spent half the summer binge watching series. But they exist, they work (mostly), so let’s go.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;project-1-rock-paper-scissors-the-oops&quot;&gt;Project 1: Rock Paper Scissors – The Oops&lt;&#x2F;h3&gt;
&lt;p&gt;Started with a Rock Paper Scissors game. HTML, CSS, JavaScript. Emoji choices because I have taste. Best of three against the computer. Simple stuff.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;summer-of-making&#x2F;images&#x2F;rps.png&quot; alt=&quot;rps&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The catch? I didn’t realize we had to build things during the program, not submit pre made stuff.  But hey, at least the emojis were adorable, and we learn from our mistakes (supposedly).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.github.io&#x2F;Rock-Paper-Scissors&#x2F;&quot;&gt;&lt;code&gt;Try the demo (spoiler: you&#x27;ll lose) →&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;project-2-anime-quote-generator-how-did-this-work&quot;&gt;Project #2: Anime Quote Generator – “How Did This Work?”&lt;&#x2F;h3&gt;
&lt;p&gt;Built an anime quote generator in React. Keyword: rookie React skills. I genuinely don’t know how I made this work. Looking back at the code is like reading hieroglyphics written by my past self.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;summer-of-making&#x2F;images&#x2F;anime-quotes.png&quot; alt=&quot;anime-quotes&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;But it works! Your favorite anime quotes, delivered with maximum chaos. Just like my development process. Chef’s kiss.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.github.io&#x2F;quote-generator&#x2F;&quot;&gt;&lt;code&gt;Get your daily dose of anime wisdom here →&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;project-3-pong-war-lowkey-proud-of-it&quot;&gt;Project #3: Pong War – lowkey proud of it&lt;&#x2F;h3&gt;
&lt;p&gt;Decided to build Pong in Godot 4. But make it harder for no reason. Zero external assets. No sprites, no sounds, no fonts. Just raw code.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;video 
  controls 
  src=&quot;images&#x2F;pong-war-demo.mp4&quot;
  title=&quot;Pong War Demo&quot; 
  style=&quot;width:100%; max-width:800px; border-radius:8px; display:block; margin:1rem auto;&quot;&gt;
&lt;&#x2F;video&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Why? Probably avoiding university paperwork. But it was weirdly fun making things difficult for myself. Pure code, pure Pong.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.itch.io&#x2F;pong-war&quot;&gt;&lt;code&gt;Play if you&#x27;re into retro vibes →&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;project-4-todo-list-the-typescript-flex&quot;&gt;Project #4: ToDo List – The TypeScript Flex&lt;&#x2F;h3&gt;
&lt;p&gt;Yes, a to-do list. Yes, in 2025. BUT …first TypeScript project, Jumping from JavaScript to TypeScript felt like a genuine achievement, even if the project is basic.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;summer-of-making&#x2F;images&#x2F;todo.png&quot; alt=&quot;todo-image&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Best part: “Proving I can actually finish tasks at least in code.” The irony of building a productivity app while procrastinating everything else? Immaculate.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;to-do-golden-fox07.vercel.app&#x2F;&quot;&gt;&lt;code&gt;Organize your life here (ironic, I know) →&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h3 id=&quot;project-5-echoes-in-red-the-one-that-actually-matters&quot;&gt;Project #5: Echoes in Red – The One That Actually Matters&lt;&#x2F;h3&gt;
&lt;p&gt;Okay, this one. THIS ONE. My pride and joy. A looping visual novel in Renpy where you wake up, make choices, regret everything and loop back.&lt;&#x2F;p&gt;
&lt;p&gt;My pitch: “At least it’s cheaper than therapy.”&lt;&#x2F;p&gt;
&lt;p&gt;This took FOREVER. Mapping the story loops, all the choice branches, making it actually work  exhausting. But also the most fun I had all summer. When I actually care about something, even my procrastination brain shuts up (temporarily).&lt;&#x2F;p&gt;
&lt;!-- | ![cover](images&#x2F;vn-cover.png) | ![disclaimer](images&#x2F;vn-disclaimer.png) |
|---------------|---------------|
| ![compliment](images&#x2F;vn-compliment.png) |  --&gt;
&lt;div style=&quot;display:grid; grid-template-columns:1fr 1fr; gap:12px; margin:1rem 0;&quot;&gt;
  &lt;img src=&quot;images&#x2F;vn-cover.png&quot; alt=&quot;cover&quot; style=&quot;width:100%;&quot;&gt;
  &lt;img src=&quot;images&#x2F;vn-disclaimer.png&quot; alt=&quot;disclaimer&quot; style=&quot;width:100%;&quot;&gt;
  &lt;img src=&quot;images&#x2F;vn-compliment.png&quot; alt=&quot;compliment&quot;
       style=&quot;grid-column:1 &#x2F; -1; max-width:60%; justify-self:center;&quot;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Got multiple compliments on Slack for this. Literally made my entire summer. Nothing beats shipping something you actually love and having people say “hey, this is cool.” 10&#x2F;10, would emotionally damage players again.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.itch.io&#x2F;echoes-in-red&quot;&gt;&lt;code&gt;Play at your own risk (therapy not included) →&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So yeah. Five projects. From “wait, I did this wrong” to “I’m genuinely proud of this.” Not bad for someone who spent significant time doing absolutely nothing productive.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-community-wish-i-had-been-more-active&quot;&gt;&lt;strong&gt;The Community: Wish I had Been More Active&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;The Hack Club Slack was genuinely cool from what I saw. People building wild stuff, helping each other, sharing wins. Good vibes all around.&lt;&#x2F;p&gt;
&lt;p&gt;Real talk though: I wasn’t very active. Between university prep and, let’s be honest, my Olympic level procrastination skills, I mostly lurked. I would check in occasionally, see the interesting conversations happening, think “I should participate more,” and then… not do that. Classic move.&lt;&#x2F;p&gt;
&lt;p&gt;I did catch some helpful advice when I did pop in, and the few interactions I had were great. The community seemed genuinely supportive and fun. Do I wish I had been more involved? Absolutely. Did my brain cooperate with that wish? Not really. That’s the authentic experience right there.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;final-thoughts-you-don-t-have-to-be-perfect-to-ship&quot;&gt;&lt;strong&gt;Final Thoughts: You Don’t Have To Be Perfect To Ship&lt;&#x2F;strong&gt;&lt;&#x2F;h2&gt;
&lt;p&gt;Summer of Making taught me that you don’t need to be consistently productive or perfectly disciplined to make things. You just need to actually do it, even if it’s messy and inconsistent. I procrastinated a lot. I wasn’t as active in the community as I could have been. I probably wasted half my summer doing nothing.&lt;&#x2F;p&gt;
&lt;p&gt;But I still end up shipping multiple projects. They are real, they work and I made them. That’s more than I would have done if I’d waited to “be more productive first.”&lt;&#x2F;p&gt;
&lt;p&gt;If you are someone who struggles with consistency or procrastination (yep, I feel you), don’t let that stop you from joining things like this. You will probably still procrastinate. But you might also actually finish something for once. Worth it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;strong&gt;And just like that, here’s my own Summer of Making Wrap… the projects, the progress, the procrastination and the wins ✨&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;video 
  controls 
  src=&quot;images&#x2F;wrap.mp4&quot;
  title=&quot;wrap&quot; 
  style=&quot;width:100%; max-width:800px; border-radius:8px; display:block; margin:1rem auto;&quot;&gt;
&lt;&#x2F;video&gt;&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;p&gt;&lt;em&gt;Stop waiting to be perfectly productive. You won’t be. Build something anyway&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Echoes in Red</title>
        <published>2025-10-01T00:00:00+00:00</published>
        <updated>2025-10-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/echoes-in-red/"/>
        <id>https://golden-fox.tech/projects/echoes-in-red/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/echoes-in-red/">&lt;p&gt;A visual novel I built in Ren’Py where you wake up, make choices, regret them and end up back where you started.&lt;&#x2F;p&gt;
&lt;p&gt;The story is built around looping, with different choices leading to different parts of the story before eventually coming back together. This meant I had to keep track of what the player had already seen across each loop.&lt;&#x2F;p&gt;
&lt;p&gt;It ended up teaching me a lot about state and how branching stories can basically work like a state machine. A lot of the challenge was making sure the game remembered the right things without letting the story get too complicated.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Ren’py, Python&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.itch.io&#x2F;echoes-in-red&quot;&gt;Play it on itch.io&lt;&#x2F;a&gt; | &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;golden-fox07&#x2F;Echoes-in-Red&quot;&gt;Source&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Summer of Making</title>
        <published>2025-09-30T00:00:00+00:00</published>
        <updated>2025-09-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/hackathons/summer-of-making-2025/"/>
        <id>https://golden-fox.tech/hackathons/summer-of-making-2025/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/hackathons/summer-of-making-2025/"></content>
        
    </entry>
    <entry xml:lang="en">
        <title>Pong War</title>
        <published>2025-08-05T00:00:00+00:00</published>
        <updated>2025-08-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/projects/pong-war/"/>
        <id>https://golden-fox.tech/projects/pong-war/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/projects/pong-war/">&lt;p&gt;Pong but as a fight. Two paddles, one ball and absolutely no mercy.&lt;&#x2F;p&gt;
&lt;p&gt;I built this in Godot as part of Hack Club’s Summer of Making. Godot was completely new to me when I started and coming from web development, one of the biggest things I had to get used to was the scene tree. Everything is a node and figuring out collisions, scoring and how signals move between nodes took some getting used to.&lt;&#x2F;p&gt;
&lt;p&gt;It was definitely a learning curve but I had a lot of fun making it and learning GDScript along the way.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Built with:&lt;&#x2F;strong&gt; Godot, GDScript&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;golden-fox07.itch.io&#x2F;pong-war&quot;&gt;Play it on itch.io&lt;&#x2F;a&gt; | &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;golden-fox07&#x2F;Pong-war&quot;&gt;Source&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>How I started Blender!</title>
        <published>2025-05-21T00:00:00+00:00</published>
        <updated>2025-05-21T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/blog/blender-donut/"/>
        <id>https://golden-fox.tech/blog/blender-donut/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/blog/blender-donut/">&lt;p&gt;In April 2024, I came across a cool animation made in Blender and thought, ‘Wow! That’s crazy. I want to learn how to do that too’. So, I started my journey&lt;&#x2F;p&gt;
&lt;p&gt;At first, I was really confused because there were tons of buttons, shortcuts, tabs and a cube in the middle.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;&#x2F;strong&gt; Use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hollisbrown.github.io&#x2F;blendershortcuts&#x2F;&quot;&gt;&lt;strong&gt;Blender Shortcuts&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; cheatsheet as it helped me remember the keys.&lt;&#x2F;p&gt;
&lt;p&gt;(Shortcut key: X to delete the default cube)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Default-Cube.png&quot; alt=&quot;Default-Cube&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;So, I did what everyone does when they’re new and lost – I searched for “Blender tutorial for beginners” and came across the &lt;em&gt;iconic donut&lt;&#x2F;em&gt; tutorial by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;@blenderguru&#x2F;featured&quot;&gt;&lt;strong&gt;BlenderGuru&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;. If you want to learn Blender, start by making a donut 🍩. Most people begin their Blender journey here.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-i-learned-throughout-the-tutorial-series&quot;&gt;What I Learned Throughout the Tutorial Series&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;part-1-modeling-the-donut-base&quot;&gt;Part 1: Modeling the Donut Base&lt;&#x2F;h3&gt;
&lt;p&gt;I started by doing what every Blender user does, that is to delete the default cube.Then I added a torus and began learning how to navigate in 3D space.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Torus-Mesh.png&quot; alt=&quot;Torus-Mesh&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-2-adding-realistic-details&quot;&gt;Part 2: Adding Realistic Details&lt;&#x2F;h3&gt;
&lt;p&gt;I started adding little bumps and imperfections to make my donut look like it came from a real bakery instead of a computer. I found this part really satisfying once I got used to the sculpting brushes.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-3-creating-icing&quot;&gt;Part 3: Creating Icing&lt;&#x2F;h3&gt;
&lt;p&gt;This part blew my mind. I duplicated my donut, scaled it up slightly and used Blender’s modifier system to create icing that actually dripped down the sides using a sculpting brush grab.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-4-making-it-look-like-real-food&quot;&gt;Part 4: Making It Look Like Real Food&lt;&#x2F;h3&gt;
&lt;p&gt;I learned to create realistic surfaces using the shader editor. The donut got texture and the icing became glossy.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-5-adding-sprinkles&quot;&gt;Part 5: Adding Sprinkles&lt;&#x2F;h3&gt;
&lt;p&gt;I created different types of sprinkles - long and round ones. I used geometry nodes for this. The setup involved using “Distribute Points on Faces” to scatter points across the icing surface, then “Instance on Points” to place the sprinkle geometry. I controlled the sprinkle density with a named attribute and used Collection Info to randomly choose between different sprinkle shapes. The geometry nodes gave me precise control over placement, rotation and scale variation etc.&lt;&#x2F;p&gt;
&lt;p&gt;Geometry Node for Long Sprinkles:
&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Long_Sprinkles.png&quot; alt=&quot;Long Sprinkles&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Geometry Node for Round Sprinkles:
&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Short_Sprinkles.png&quot; alt=&quot;Round Sprinkles&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-6-making-the-background-and-adding-textures&quot;&gt;Part 6: Making the Background and Adding Textures&lt;&#x2F;h3&gt;
&lt;p&gt;Once the donut was done, I added a simple plane for the tabletop and textured it with a marble material using a Principled BSDF shader for realism. Then, I modeled a plate for the donut and applied a shiny ceramic material with subtle imperfections.&lt;&#x2F;p&gt;
&lt;p&gt;I duplicated the donuts a few times and stacked them on the plate. The combination of textures and stacked donuts really brought everything together.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Donut-Plate.png&quot; alt=&quot;Donut Plate&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;After this I set up the lighting to make the donut look good and positioned the camera and added depth of field to blur the background.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;part-7-creating-my-final-render&quot;&gt;Part 7: Creating My Final Render&lt;&#x2F;h3&gt;
&lt;p&gt;The last step was generating the final image. I learned about render settings, balancing quality with render time and made some basic color corrections to enhance the scene.&lt;&#x2F;p&gt;
&lt;p&gt;I used Cycles with GPU compute for faster rendering. After adjusting the settings, I rendered the scene and was finally able to see my donut in all its glory.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Final Result!&lt;&#x2F;strong&gt;
&lt;img src=&quot;https:&#x2F;&#x2F;golden-fox.tech&#x2F;blog&#x2F;blender-donut&#x2F;images&#x2F;Donut.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;I had so much fun creating it, and I’m so happy with the final result. I never expected it would turn out this well. I’ll be spending this week getting back to learning more about Blender, and I’ll be sharing my progress soon.&lt;&#x2F;p&gt;
&lt;p&gt;I hope you enjoyed this blog post :)&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="en">
        <title>My Nand to Tetris Journey</title>
        <published>2025-05-09T00:00:00+00:00</published>
        <updated>2025-05-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Aakriti Agarwal
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://golden-fox.tech/blog/nand-to-tetris/"/>
        <id>https://golden-fox.tech/blog/nand-to-tetris/</id>
        
        <content type="html" xml:base="https://golden-fox.tech/blog/nand-to-tetris/">&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;&#x2F;h2&gt;
&lt;p&gt;In March 2025, I signed up for the Coursera course &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.coursera.org&#x2F;learn&#x2F;build-a-computer&quot;&gt;&lt;strong&gt;From Nand to Tetris: Building a Modern Computer&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; by Shimon Schocken and Noam Nisan. I thought “Why not learn how computers work from the basics?” Spoiler:- It’s not as easy as it sounds. The course promised to turn me into a computer-building wizard, and I got pretty far completing four out of six projects.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;logic-gates-from-nand&quot;&gt;Logic Gates from NAND&lt;&#x2F;h2&gt;
&lt;p&gt;The course starts with a simple idea: using only the elementary NAND gate, you can construct all other logic gates necessary for a modern computer. This concept blew my mind, the idea that complex systems ultimately reduce to this simple building block.&lt;&#x2F;p&gt;
&lt;p&gt;I started by implementing basic logic gates in the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nand2tetris.github.io&#x2F;web-ide&#x2F;chip&#x2F;&quot;&gt;&lt;strong&gt;NAND2Tetris Hardware Simulator&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt; using hdl:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;NOT gate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; CHIP Not {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    IN in;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    OUT out;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    PARTS:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Nand (a = in, b = in, out = out);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;AND gate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHIP And {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    IN a, b;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    OUT out;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    PARTS:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Nand (a = a, b = b, out = aNandb);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = aNandb, out = out);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;OR gate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHIP Or {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    IN a, b;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    OUT out;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    PARTS:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = a, out = nota);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = b, out = notb);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    And (a = nota, b = notb, out = and);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = and, out = out);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;XOR gate&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;CHIP Xor {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    IN a, b;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    OUT out;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    PARTS:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = a, out = nota);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Not (in = b, out = notb);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    And (a = a, b = notb, out = temp1);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    And (a = nota, b = b, out = temp2);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    Or (a = temp1, b = temp2, out = out);&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Pro Tip&lt;&#x2F;strong&gt;: Use &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.nandgame.com&#x2F;&quot;&gt;&lt;strong&gt;NAND Game&lt;&#x2F;strong&gt;&lt;&#x2F;a&gt;! to understand how theses gates are formed using NAND.&lt;&#x2F;p&gt;
&lt;p&gt;As It transforms theoretical concepts into visuals that make implementation much easier than it seems.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;from-gates-to-chips&quot;&gt;From Gates to Chips&lt;&#x2F;h2&gt;
&lt;p&gt;Once I had a grip on basic gates, it was time to get serious and build some chips. Enter the realm of multiplexers and demultiplexers. These allow you to:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;MUX (Multiplexer): Choose which input signal to use.&lt;&#x2F;li&gt;
&lt;li&gt;DMUX (Demultiplexer): Route signals to different outputs based on selection bits.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I thought the difficulty would skyrocket when I started with the 16-bit and multi-way chips, but once I built the first 16-bit chip, the rest were a breeze, just a bit of grunt work, really.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Arithmetic Components&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Next came the exciting part which is creating chips that can actually compute! I implemented:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Half Adder (adding two bits)&lt;&#x2F;li&gt;
&lt;li&gt;Full Adder (adding three bits with carry)&lt;&#x2F;li&gt;
&lt;li&gt;Multi-bit Adder (for 16-bit )&lt;&#x2F;li&gt;
&lt;li&gt;The ALU (Arithmetic Logic Unit)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;from-bits-to-storage&quot;&gt;From Bits to Storage&lt;&#x2F;h2&gt;
&lt;p&gt;The next phase took me into the realm of computer memory, where I designed:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Registers: Flip-flop based storage units that hold data temporarily&lt;&#x2F;li&gt;
&lt;li&gt;RAM8: A small 8-register memory unit&lt;&#x2F;li&gt;
&lt;li&gt;RAM64: A memory unit of 64-register&lt;&#x2F;li&gt;
&lt;li&gt;RAM512, RAM4K and RAM16K: Increasing memory units&lt;&#x2F;li&gt;
&lt;li&gt;Program Counter (PC)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This hierarchy of memory components taught me how computers are organized.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;challenges-and-limitations&quot;&gt;Challenges and Limitations&lt;&#x2F;h2&gt;
&lt;p&gt;While I successfully completed four projects, the two modules focused on assembly language programming were… let’s just say, less successful. I realized I’m a visual learner who prefers tools like simulators. Still, the struggle was part of the fun. Sort of.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;resources-that-helped-me&quot;&gt;Resources That Helped Me&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;The  NAND game (seriously, don’t skip it!)&lt;&#x2F;li&gt;
&lt;li&gt;Course forums where students swapped war stories about their challenges (misery loves company).&lt;&#x2F;li&gt;
&lt;li&gt;Drawing chips designs on paper before implementation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;While I didn’t complete all six projects, the four I finished gave me a solid foundation in computer architecture that I’ll build upon.&lt;&#x2F;p&gt;
&lt;p&gt;If you’re curious about how computers really work from the ground up, I highly recommend this course. It’s tough, but incredibly rewarding. After all, who wouldn’t want to say, “I built a computer from scratch with just a NAND gate”?&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
