<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Anees</title><link>https://anees.xyz/</link><description>Recent content on Anees</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 10 Mar 2026 23:52:00 +0000</lastBuildDate><atom:link href="https://anees.xyz/index.xml" rel="self" type="application/rss+xml"/><item><title>Why I Built Sentinel</title><link>https://anees.xyz/posts/sentinel/</link><pubDate>Tue, 10 Mar 2026 23:52:00 +0000</pubDate><guid>https://anees.xyz/posts/sentinel/</guid><description>&lt;h2 id="i-got-tired-of-losing-errors-across-my-services-so-i-built-a-zero-setup-error-tracker-in-go"&gt;I Got Tired of Losing Errors Across My Services, So I Built a Zero-Setup Error Tracker in Go&lt;/h2&gt;
&lt;p&gt;I built Sentinel for a very simple reason: I was tired of losing errors in my own development setup.&lt;/p&gt;
&lt;p&gt;I was working across a FastAPI backend, Celery workers, Celery Beat, frontend, Docker, Redis, Postgres, and Qdrant. Every part of the system had its own logs. Every service had something to say. When things broke, the error was usually there somewhere, but finding it was often more painful than it should have been.&lt;/p&gt;</description></item><item><title>DIY home Security System with an Old iPhone</title><link>https://anees.xyz/posts/diy_home_security/</link><pubDate>Fri, 14 Nov 2025 11:36:55 +0100</pubDate><guid>https://anees.xyz/posts/diy_home_security/</guid><description>&lt;h2 id="building-a-diy-home-security-system-with-an-old-iphone-and-some-determination"&gt;Building a DIY Home Security System with an Old iPhone and Some Determination&lt;/h2&gt;
&lt;p&gt;Look, I&amp;rsquo;ll be honest with you - I was genuinely worried. Our new neighborhood has been seeing break-in attempts every other day. Car break-ins, people trying doorknobs at 2 AM&amp;hellip; the whole deal. I needed something to monitor my driveway at night, and I needed it fast.&lt;/p&gt;
&lt;p&gt;Commercial security cameras? They wanted €200+ per camera, plus subscription fees. Ring doorbell? Another subscription. I&amp;rsquo;m a developer - I build complex systems for a living. Surely I could figure this out myself, right?&lt;/p&gt;</description></item><item><title>📸 ShotBar: Because ⌃⇧⌘4 is ridiculous</title><link>https://anees.xyz/posts/shotbar/</link><pubDate>Mon, 11 Aug 2025 13:52:00 +0000</pubDate><guid>https://anees.xyz/posts/shotbar/</guid><description>&lt;p&gt;&lt;img src="https://github.com/user-attachments/assets/071e3be1-ee02-4ac8-b8f0-e2057357b0f3" alt="ShotBar menu bar screenshot capture interface"&gt;&lt;/p&gt;
&lt;h2 id="-shotbar-because-4-is-ridiculous"&gt;📸 ShotBar: Because ⌃⇧⌘4 is ridiculous&lt;/h2&gt;
&lt;p&gt;I got tired of doing finger gymnastics every time I wanted to take a screenshot.&lt;/p&gt;
&lt;p&gt;You know the drill: &lt;code&gt;⌃⇧⌘4&lt;/code&gt;, wait for the cursor to change, drag to select, hope you got the right area, repeat. It&amp;rsquo;s 2025 and we&amp;rsquo;re still doing this dance.&lt;/p&gt;
&lt;p&gt;So I vibe-coded ShotBar in a weekend.&lt;/p&gt;
&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;ShotBar sits in your menu bar and gives you three capture modes:&lt;/p&gt;</description></item><item><title>📦 grud: GitHub as database</title><link>https://anees.xyz/posts/grud-github-as-a-database/</link><pubDate>Fri, 16 Apr 2021 23:00:00 +0000</pubDate><guid>https://anees.xyz/posts/grud-github-as-a-database/</guid><description>&lt;p&gt;Ever tried building an internal tool at a big enterprise and hit the wall when you need a simple database? That&amp;rsquo;s exactly why I built &lt;a href="https://www.npmjs.com/package/grud"&gt;grud&lt;/a&gt; – a tiny JavaScript package that turns GitHub into your JSON database.&lt;/p&gt;
&lt;h2 id="the-problem-enterprise-tool-purgatory"&gt;The Problem: Enterprise Tool Purgatory&lt;/h2&gt;
&lt;p&gt;Working as a consultant in big enterprises, I constantly run into this frustrating cycle. I want to build a quick internal tool – maybe a React app hosted on GitHub Pages. It&amp;rsquo;s perfect: easy to scaffold, deploy to a public URL, and I don&amp;rsquo;t need to raise tickets or wait for approvals.&lt;/p&gt;</description></item><item><title>🚀Hugo: Deploy with GitHub Actions</title><link>https://anees.xyz/posts/hugo-deploy-with-github-actions/</link><pubDate>Wed, 14 Apr 2021 23:00:00 +0000</pubDate><guid>https://anees.xyz/posts/hugo-deploy-with-github-actions/</guid><description>&lt;p&gt;Setting up automated deployment for my Hugo blog was one of those tasks I kept putting off. You know how it is – the manual process works, so why change it? But once I finally took the plunge with &lt;a href="https://github.com/features/actions" title="GitHub Actions"&gt;GitHub Actions&lt;/a&gt;, I wondered why I waited so long.&lt;/p&gt;
&lt;p&gt;This blog you&amp;rsquo;re reading right now is built with &lt;a href="https://gohugo.io/" title="Hugo website"&gt;Hugo&lt;/a&gt; (a blazingly fast static site generator written in Go) and automatically deploys to &lt;a href="https://pages.github.com/" title="Github pages"&gt;GitHub Pages&lt;/a&gt; every time I commit a new post. Let me walk you through how I set it up.&lt;/p&gt;</description></item><item><title>DevOps at scale: GitHub</title><link>https://anees.xyz/posts/devops-practice-github/</link><pubDate>Fri, 20 Mar 2020 00:00:00 +0000</pubDate><guid>https://anees.xyz/posts/devops-practice-github/</guid><description>&lt;p&gt;I&amp;rsquo;m documenting some DevOps practices and personal recommendations we follow, especially around source control with Git and GitHub.&lt;/p&gt;
&lt;p&gt;Working as a Lead DevOps Engineer at one of the biggest financial enterprises, &lt;a href="https://www.schellman.com/blog/2016/01/what-are-service-organization-controls-soc-reports/"&gt;SOC&lt;/a&gt; compliance is absolutely critical. Staying SOC compliant while scaling hundreds of projects and engineers? That&amp;rsquo;s nearly impossible without consistent team-wide practices and policies.&lt;/p&gt;
&lt;h2 id="tldr"&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Have standard naming convention.&lt;/li&gt;
&lt;li&gt;Follow trunk-based development.&lt;/li&gt;
&lt;li&gt;Always protect the master &amp;amp; &lt;code&gt;develop&lt;/code&gt; branch.&lt;/li&gt;
&lt;li&gt;Set up PR pipelines that trigger on each Pull Request&lt;/li&gt;
&lt;li&gt;Ensure each commit message links to Rally/Jira&lt;/li&gt;
&lt;li&gt;Have a .gitignore file &amp;amp; never commit dependencies into source control&lt;/li&gt;
&lt;li&gt;Avoid committing secrets into source control&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="standard-naming-convention"&gt;Standard Naming Convention&lt;/h2&gt;
&lt;p&gt;The most important thing? Adopting consistent naming conventions across your entire organization. The first thing I did after joining this team was developing a &lt;strong&gt;web form&lt;/strong&gt; where you enter your project details, and it spits out the exact naming convention to follow for repository names, pipeline jobs, SonarQube dashboards, Artifactory, and cloud-foundry component names &amp;amp; routes.&lt;/p&gt;</description></item><item><title>snapcircle🎯</title><link>https://anees.xyz/posts/snapcircle/</link><pubDate>Thu, 26 Dec 2019 00:00:00 +0000</pubDate><guid>https://anees.xyz/posts/snapcircle/</guid><description>&lt;p&gt;&lt;img src="https://user-images.githubusercontent.com/8899419/71481784-2470d080-27f7-11ea-8853-9956af2bda71.png" alt="snapcircle loyalty app preview"&gt;&lt;/p&gt;
&lt;p&gt;Moving to Ireland changed my relationship with coffee completely. Back in Dubai, I barely touched the stuff – maybe it was the heat, or just different habits. But Ireland&amp;rsquo;s coffee culture? It pulled me in fast.&lt;/p&gt;
&lt;p&gt;Soon I had a routine: morning coffee from the local shop, another at the office before our daily sprint (essential for staying awake during those early meetings), and one more from &amp;ldquo;Seven Wonders&amp;rdquo; on my walk home. Three different shops, three different loyalty cards stuffed into my wallet.&lt;/p&gt;</description></item></channel></rss>