My First Open Source Contribution: Renaming a Tab in Coop
4 minutes read •
It was supposed to be a small change. It was a small change. It still took 7 commits.
Why Coop?
Coop is an open source content moderation tool made by ROOST. Basically it’s what trust and safety teams use to look at reported stuff, set up rules and decide what to do about it.
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.
Getting it to run locally
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 8GB of RAM (ughh) and it took one look at that list and basically said “you have got to be kidding me”.
So I cut it down to only what I needed, which was Postgres, ClickHouse and Redis running in OrbStack 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.
The issue I picked
I went with issue #746. There was a settings tab called “Other” and it had become the junk drawer of the settings page. Three things were living in it:
- User strike TTL: which already existed somewhere else so it was just sitting there twice for no reason
- Multiple policies per action: which actually belonged with the other Review Console settings
- Partial Items settings: the only thing that was actually supposed to be there
So the plan was to delete the duplicate, move the policy setting to the Review Console tab and rename “Other” to Partial Items. Ohh and update the docs too (Can’t forget the docs).
Since it was my first ever contribution, I purposely picked one labelled good first issue. 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.
What I actually changed
My PR 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.
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.
The review (aka where I learned the most)
The first reviewer was CodeRabbit, 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:
- Rename the file too. I had renamed the tab everywhere in the UI but the file was still called
OtherTab.tsx. Classic me. It’s nowPartialItemsTab.tsx. - Delete the leftovers. Once the switch was gone, some state that only existed for that switch wasn’t needed anymore either. RIP.
- Fix old links. I had asked in the PR whether old
?tab=otherlinks should redirect somewhere. The answer was yes, so now old links open the new tab instead of just vibing on the default one.
And then there was my favourite review comment of all time:
Not an Oxford comma fan, huh? :)
No. No I am not. And I never will be.
After 7 commits it got approved and merged on 18 August 2026 (YAYYYY!).
Things I learned
- Setting it up is half the work. Getting a huge project running on a tiny laptop taught me more about Docker than any tutorial ever will.
- Just ask in the PR. I overthought things I could have just asked. I spent ages wondering whether old
?tab=otherlinks 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 :) - Maintainers are actually really nice! I was so nervous about getting judged but everyone was patient and friendly.
What’s next
Since then I have also had a PR merged in npmx and I am working on another one so I think I am an open source person now, right??