<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Tech Cafe - Coop</title>
    <subtitle>Dev adventures, epic bugs, tiny wins, and the occasional meltdown.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://golden-fox.dev/tags/coop/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://golden-fox.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-08-20T00:00:00+00:00</updated>
    <id>https://golden-fox.dev/tags/coop/atom.xml</id>
    <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.dev/blog/first-open-source-contribution/"/>
        <id>https://golden-fox.dev/blog/first-open-source-contribution/</id>
        
        <content type="html" xml:base="https://golden-fox.dev/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>
</feed>
