Haseeb Majid
majiy00.bsky.social
Haseeb Majid
@majiy00.bsky.social
I am Haseeb, a Backend software engineer 💻, Linux enthusiast 🐧 and village cricketer 🏏. If you want to see what I write about, visit my blog.

Currently Building:
- Voxicle: https://voxicle.app
Day 98

#buildinpublic

I'm still working on my Gopher Con slides today but as part of that. Fixed some issues with Voxicle's setup not pushing logs, metrics and traces to a local Grafana instance.
June 8, 2025 at 5:12 PM
Day 93 & 94

#buildinpublic

Don't have much time to spend working on voxicle but managed to finish open tofu infra code for now and have it deploying via CI.
June 4, 2025 at 8:41 PM
Day 84 - 87

#buildinpublic

Spent the weekend in the peak district. So didn't code much but very much needed break.

Worked on a few other small DevEx improvements. I am using mprocs to start my app locally now.
May 27, 2025 at 9:16 PM
Day 83

#buildinpublic

Wrote the main business logic to allow users to add anonymous feedback. Decided to take a break and work on some DevExy stuff. Like setting up Zellij to have a tab for some important tasks like running tests and linter.
May 23, 2025 at 8:08 PM
Day 82

#buildinpublic

Start to allow anonymous users to add feedback to organizations.
May 22, 2025 at 8:50 PM
Day 81

#buildinpublic

Added more tests to allow users to anonymous vote and downvote if they aren't logged in.
May 21, 2025 at 6:32 PM
Day 78 & 79

#buildinpublic

Working on styling the main public page and allowing the filters to work normally (unauthenticated users).
May 19, 2025 at 8:51 PM
Day 77

#buildinpublic

Decided to refactor the schema and therefore need to update a lot of code, but this will mean fewer DB calls.
May 17, 2025 at 9:25 PM
Day 70

#buildinpublic

Added more tests and made them run in parallel with t.parallel in Go. They now run 50% quicker in CI. E2E tests used to take 3 mins now down to 1 minute, even though there are 2x more tests.
May 10, 2025 at 9:02 PM
Day 67 & 68

#buildinpublic

After a few days of debugging, finally managed to get RLS to work. At the service layer at least.

So now I can simplify my SQL queries, fewer WHERE clauses items.
May 8, 2025 at 9:26 PM
Day 65 & 66

Worked on row level security for authorization for the multi tenant SaaS. So you can only access feedbacks based on the organization you belong to.

#buildinpublic
May 6, 2025 at 8:46 PM
Day 61

#buildinpublic

Fixed some of my E2E tests. Then decided to have another chill day. It was too hot in London (29 degrees). Spent some time moving from nvim-cmp to blink.cmp (neovim).
May 1, 2025 at 9:46 PM
Day 57

Worked out my issue with alpinejs, needed to get htmx to re-evaluate the `hx-delete`.

Now, users can edit their feedback. I think I will change the UX to the user can click anywhere on the card vs click a specific button.

#buildinpublic
April 27, 2025 at 9:24 PM
Day 55 & 56

Working on allow users to edit their feedback. Currently having some issues with the modal. And alpinejs with htmx, to send the feedback ID with the request.

Anyone know potentially what is the issue?

#buildinpublic
April 26, 2025 at 10:04 PM
As you can see, the E2E are not fully working locally. Time to get the debugger out. #buildinpublic
April 24, 2025 at 9:54 PM
Day 53 & 54

#buildinpublic

Had to rebuild my PC, luckily with NixOS and nixos-anywhere it was really painless to do, after I copied my home directory.

Spent the last two day adding some more E2E tests running with playwright. Testing the app from browser.
April 24, 2025 at 9:54 PM
Day 51

#buildinpublic

Add more filters feedback type as well. Added more tests and fixed a bug with the pricing not appearing. Falling back to some default values if we cannot fetch from the DB.
April 21, 2025 at 10:45 PM
#buildinpublic

Went down a few random rabbit holes. But now users can select multiple status types as filters. Whereas before you could only select one. I was using the daisyui builtin filter list but that wasn't good enough. So I built my own checkbox select.
April 20, 2025 at 10:53 PM
#buildinpublic

Question for those building multi-tenant applications. How do you guys handle user authorization i.e. can a user create a resource in the correct tenant/organization. I am currently doing this in the data layer. Before we enter the data in the DB.

Is there a better way?
April 20, 2025 at 11:11 AM
Day 49

I worked on making the search bar work. So you can search through the feedback. It does take into account the current filters as well. Working out how to do this in htmx. As this will be a dynamic query param i.e. `?search=xxx`

#buildinpublic
April 19, 2025 at 10:18 PM
Added logic to allow users to filter some of the feedback as well. Do you like the teal/blue or shall I make it the purple. Like the other buttons?
April 18, 2025 at 9:35 PM
Launching this inside neovim.
April 13, 2025 at 9:41 PM
I did do the cardinal sin of adding some time.Sleeps we don't like at all but will fix soon. It seems the test were too fast and not waiting for the page to load.
April 12, 2025 at 8:49 PM
Day 42

Added some E2E tests using playwright, I decided to make sure I spin up my actual app and run tests against that. Previously, I found myself copying a lot of the main.go into this test setup file. But now I have the skeleton to run tests as if I was a user of the app #buildinpublic.
April 12, 2025 at 8:49 PM
Day 39 & Day 40

(Please ignore the day counts, I am terrible it seems to keep track of it myself 😂, from previous days). Spent the last few days writing tests, I was lacking tests. Harder to make changes. So added loads more unit and integration tests. #buildinpublic.
April 10, 2025 at 9:17 PM