<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Zayan Mohamed</title>
    <description>The latest articles on Forem by Zayan Mohamed (@zayanmohamed).</description>
    <link>https://forem.com/zayanmohamed</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3665292%2F09df11c8-4f09-4b45-8740-06f65e0d499b.jpeg</url>
      <title>Forem: Zayan Mohamed</title>
      <link>https://forem.com/zayanmohamed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zayanmohamed"/>
    <language>en</language>
    <item>
      <title>I Built a Terminal-Based WiFi &amp; LAN Security Scanner in Go (NOVA)</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Sun, 01 Mar 2026 06:34:47 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/i-built-a-terminal-based-wifi-lan-security-scanner-in-go-nova-918</link>
      <guid>https://forem.com/zayanmohamed/i-built-a-terminal-based-wifi-lan-security-scanner-in-go-nova-918</guid>
      <description>&lt;h2&gt;
  
  
  The Terminal Needs More Security Tools 🛡️
&lt;/h2&gt;

&lt;p&gt;If you spend most of your day in the terminal (shoutout to my fellow Neovim and Zsh users), switching to a heavy GUI just to check your network's security posture feels like a context switch you shouldn't have to make.&lt;/p&gt;

&lt;p&gt;When you want to know what devices are lurking on your local subnet, or if your nearby WiFi networks are leaking data via outdated encryption, the standard approach usually involves running raw &lt;code&gt;nmap&lt;/code&gt; commands and parsing through walls of text.&lt;/p&gt;

&lt;p&gt;I wanted something faster, more visual, and entirely keyboard-driven. I wanted a tool that didn't just dump data, but actually analyzed it and gave me a &lt;strong&gt;risk score&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, I built &lt;strong&gt;NOVA&lt;/strong&gt; (Network Observation &amp;amp; Vulnerability Analyzer).&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NOVA? 🌌
&lt;/h2&gt;

&lt;p&gt;NOVA is a purely defensive security assessment tool written in Go. It wraps powerful underlying system utilities (&lt;code&gt;nmap&lt;/code&gt; and &lt;code&gt;nmcli&lt;/code&gt;) in a beautiful, interactive Terminal User Interface (TUI).&lt;/p&gt;

&lt;p&gt;Instead of parsing terminal vomit, NOVA gives you an organized dashboard to understand your environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Capabilities:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📡 
&lt;strong&gt;WiFi Analysis:&lt;/strong&gt; Instantly list nearby access points. NOVA detects their encryption types (Open, WEP, WPA, WPA2, WPA3) and flags weak or broken configurations.&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Fuzzy Filtering:&lt;/strong&gt; Live search by SSID/BSSID and cycle through security filters with a single keystroke.&lt;/li&gt;
&lt;li&gt;🖥️ &lt;strong&gt;LAN Host Discovery:&lt;/strong&gt; Performs a ping-sweep of your subnet to enumerate active hosts, complete with MAC addresses and vendor lookups.&lt;/li&gt;
&lt;li&gt;🚨 &lt;strong&gt;Risk Scoring &amp;amp; Tagging:&lt;/strong&gt; This is the best part. NOVA scans common ports and assigns a weighted 0–100 security score. If it finds a dangerous open port (like an exposed Telnet, SMB, or MongoDB instance), it color-codes the finding from &lt;em&gt;Info&lt;/em&gt; to &lt;em&gt;Critical&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Tech Stack 🛠️
&lt;/h2&gt;

&lt;p&gt;Building CLI tools in Go is a fantastic experience, especially when you bring in the right libraries.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Engine:&lt;/strong&gt; Go 1.24+. Fast, statically typed, and perfect for compiling single binaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The UI:&lt;/strong&gt; &lt;a href="https://github.com/charmbracelet/bubbletea" rel="noopener noreferrer"&gt;Bubble Tea&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/charmbracelet/lipgloss" rel="noopener noreferrer"&gt;Lip Gloss&lt;/a&gt;. If you haven't used Charm's libraries for Go TUIs yet, you are missing out. They make building interactive terminal apps feel like writing a modern frontend component.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Muscle:&lt;/strong&gt; NOVA relies on &lt;code&gt;nmap&lt;/code&gt; for the heavy lifting in host discovery and port scanning, and &lt;code&gt;nmcli&lt;/code&gt; (NetworkManager) for grabbing raw wireless data on Linux.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Crucial Note on Ethics ⚖️
&lt;/h2&gt;

&lt;p&gt;Because I’m releasing this into the wild, I have to state the obvious: &lt;strong&gt;With great power comes great responsibility.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;NOVA is a &lt;em&gt;defensive&lt;/em&gt; tool. It is designed to help you secure your own home lab or company network. Scanning networks without authorization is illegal. To enforce this mindset, NOVA actually boots up with a strict legal consent screen that you must explicitly acknowledge before any packets are sent.&lt;/p&gt;

&lt;p&gt;Keep it legal, keep it ethical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Out &amp;amp; Break It 🔨
&lt;/h2&gt;

&lt;p&gt;NOVA is completely open-source, and I'd love for the community to test it, critique the code, and suggest new features.&lt;/p&gt;

&lt;p&gt;If you are on Linux or macOS (note: WiFi scanning is currently Linux-only, but LAN scanning works on both!), you can grab the pre-built binaries from the repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 GitHub Repo:&lt;/strong&gt; &lt;a href="https://github.com/Zayan-Mohamed/nova" rel="noopener noreferrer"&gt;github.com/Zayan-Mohamed/nova&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;📖 Full Docs:&lt;/strong&gt; &lt;a href="https://zayan-mohamed.github.io/nova/" rel="noopener noreferrer"&gt;zayan-mohamed.github.io/nova&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m currently looking for feedback on the Risk Scoring algorithm and how to better present the vulnerability data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drop a ⭐ if you find it useful, and let me know in the comments what your go-to network scanning workflow looks like right now!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>security</category>
      <category>cli</category>
      <category>networking</category>
    </item>
    <item>
      <title>Why Everyone Is Talking About Claude Code (And Why Open Source is Sleeping on the Sidelines)</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Sun, 01 Feb 2026 18:23:28 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/why-everyone-is-talking-about-claude-code-and-why-open-source-is-sleeping-on-the-sidelines-12ek</link>
      <guid>https://forem.com/zayanmohamed/why-everyone-is-talking-about-claude-code-and-why-open-source-is-sleeping-on-the-sidelines-12ek</guid>
      <description>&lt;p&gt;If you’ve been on Twitter (X) or LinkedIn this week, you’ve seen it. The "Claude Code" hype train has left the station, and it is moving fast.&lt;/p&gt;

&lt;p&gt;Developers are posting screenshots of Anthropic’s new CLI tool fixing bugs in seconds, refactoring legacy codebases, and generally acting like the senior engineer we all wish we had paired with us. It feels magical. It feels polished.&lt;/p&gt;

&lt;p&gt;But in the middle of this noise, I have to ask a question that’s been nagging me:&lt;br&gt;
Where is the hype for Open Source Coding Agents?&lt;/p&gt;

&lt;p&gt;We have incredible open-source tools like for an example Aider, OpenHands (formerly OpenDevin), Continue, and the broader "OpenCode" ecosystem. They have been doing agentic coding for months. Yet, Claude Code drops, and suddenly it’s like the concept of an AI agent in your terminal was invented yesterday.&lt;/p&gt;

&lt;p&gt;Why? Is it just marketing? Or is there something deeper broken in the way we talk about Open Source AI?&lt;/p&gt;

&lt;p&gt;Let’s break it down.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The "Apple" Effect: UX vs. Raw Power 🍎&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is the hard truth: Claude Code just works.&lt;br&gt;
You install it. You run claude. It asks to authenticate. You are done.&lt;br&gt;
Now, compare that to setting up an open-source agent environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Pull the Docker container."&lt;/li&gt;
&lt;li&gt;"Set up your OPENAI_API_KEY... wait, no, now you need a GROQ_API_KEY for speed."&lt;/li&gt;
&lt;li&gt;"Oh, the sandbox crashed? Just restart the daemon."&lt;/li&gt;
&lt;li&gt;"Configure the config.toml to exclude your .env file so you don't leak secrets."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open-source tools (let's call them "OpenCode" for short) often feel like Linux in 1999. They are infinitely powerful, customizable, and free (mostly)—but you have to be a mechanic to drive the car.&lt;br&gt;
Claude Code feels like a MacBook. &lt;/p&gt;

&lt;p&gt;You open the lid, and it does the thing. Anthropic realized that developers, despite loving to tinker, hate tinkering with their tools when they have a deadline. They just want the bug fixed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The "Thinking" Advantage 🧠&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The secret sauce of the current hype isn't just the CLI tool; it's the model behind it: Claude 4.5 Sonnet.&lt;/p&gt;

&lt;p&gt;Anthropic didn't just release a tool; they released a model with "extended thinking" capabilities and wrapped a tool around it perfectly. When you run Claude Code, the agent isn't just auto-completing; it is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading your file structure.&lt;/li&gt;
&lt;li&gt;Thinking (literally spending tokens to plan).&lt;/li&gt;
&lt;li&gt;Executing terminal commands (running tests, ls, git).&lt;/li&gt;
&lt;li&gt;Self-correcting when it messes up.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open-source tools can do this. Tools like Aider are actually phenomenal at it. But they are often model-agnostic. They have to work with GPT-4o, DeepSeek, Llama 3, and Claude.&lt;/p&gt;

&lt;p&gt;Because Claude Code is vertically integrated (The Model + The Tool + The UI are all one company), the friction is zero. The "thinking" tokens are optimized exactly for the agent's behavior. Open source is trying to fit a generic engine into a custom chassis.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Branding Problem: "OpenCode" isn't a Name&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If I tell you "Use Claude Code," you know exactly what to download.&lt;br&gt;
If I tell you "Use Open Source AI Coding," what do you download?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you use Aider? (Great for CLI power users)&lt;/li&gt;
&lt;li&gt;Do you use Continue? (Great for VS Code integration)&lt;/li&gt;
&lt;li&gt;Do you use OpenHands? (Great for full autonomous tasks)
The open-source community is fragmented. We have 50 different "Devin Killers" on GitHub with 2,000 stars each. It dilutes the hype. There is no single "champion" for the open-source side that rivals the marketing machine of Anthropic or OpenAI.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Why We Should Still Care About OpenCode 🛡️&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Okay, I’ve bashed the open ecosystem enough. Here is why the hype should swing back.&lt;br&gt;
The Lock-in Trap.&lt;br&gt;
Claude Code is amazing, but it is a walled garden. You are sending your codebase to Anthropic. You are paying Anthropic's pricing per token. If they change the API, you are stuck.&lt;/p&gt;

&lt;p&gt;The Cost Factor.&lt;/p&gt;

&lt;p&gt;Open-source tools let you plug in DeepSeek-V3 or Llama 3. You can run local coding agents for a fraction of the cost (or free, if you have the GPU). Claude Code is premium software at a premium price.&lt;br&gt;
Privacy.&lt;/p&gt;

&lt;p&gt;For many companies, sending proprietary code to a cloud LLM is a non-starter. OpenCode agents that can run locally (using Ollama or vLLM) are the only option for banks, healthcare, and defense.&lt;/p&gt;

&lt;p&gt;The Verdict&lt;br&gt;
Everyone is talking about Claude Code because it solved the friction problem. It made AI coding feel like a teammate rather than a science project.&lt;/p&gt;

&lt;p&gt;But don't sleep on the open alternatives. While everyone is distracted by the shiny new toy, the open-source community is building the infrastructure that will eventually give us that same power privately, cheaply, and without the corporate lock-in.&lt;/p&gt;

&lt;p&gt;I’m curious:&lt;br&gt;
Are you team Convenience (Claude Code/Cursor) or team Control (Aider/Open Source)?&lt;/p&gt;

&lt;p&gt;Drop a comment below, I genuinely want to know if I'm the only one feeling the FOMO. 👇&lt;br&gt;
If you enjoyed this breakdown, give it a ❤️ and follow for more honest takes on the AI dev stack.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claudecode</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Why I Spent 4 Months Building a "Map" for the Model Context Protocol (MCP)</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Wed, 28 Jan 2026 18:24:45 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/why-i-spent-4-months-building-a-map-for-the-model-context-protocol-mcp-349</link>
      <guid>https://forem.com/zayanmohamed/why-i-spent-4-months-building-a-map-for-the-model-context-protocol-mcp-349</guid>
      <description>&lt;p&gt;&lt;strong&gt;Imagine this:&lt;/strong&gt; It’s 2 AM. You just found a cool new tool that promises to let your AI read your local database, search the web, and even manage your calendar. You’re excited.&lt;/p&gt;

&lt;p&gt;But then, the "Config Nightmare" begins.&lt;/p&gt;

&lt;p&gt;You’re staring at a &lt;code&gt;claude_desktop_config.json&lt;/code&gt; file. The documentation is scattered. Is the argument an array or a string? Does this server need an API key? And most importantly—&lt;strong&gt;is it safe to give this server access to my entire file system?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a &lt;strong&gt;Data Science undergraduate at SLIIT&lt;/strong&gt;, I’ve spent the last few months obsessed with the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;. But the more I explored, the more I realized we were missing a "Map."&lt;/p&gt;

&lt;p&gt;So, I decided to build one: &lt;strong&gt;&lt;a href="https://github.com/your-username/mcp-registry" rel="noopener noreferrer"&gt;mcp-registry&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Beginning: From Data Science to AI Agents
&lt;/h3&gt;

&lt;p&gt;A few months ago, while working on data preprocessing and ensemble learning assignments, I started experimenting with how AI could help me automate my workflow. I wanted my AI to do more than just write code; I wanted it to interact with my local environment—running security scans with tools like &lt;em&gt;SecScan&lt;/em&gt; or managing my commits with &lt;em&gt;GitWizard&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;MCP was the missing link. It turned my AI from a "chatter" into a "doer." But every time I wanted to try a new server, I had to hunt down the repo, guess the environment variables, and pray it didn't break my config.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Middle: Curating the Chaos
&lt;/h3&gt;

&lt;p&gt;Over the last few months, my private "note-to-self" list started growing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"This one is great for Google Search."&lt;/li&gt;
&lt;li&gt;"This one is essential for Postgres."&lt;/li&gt;
&lt;li&gt;"Watch out, this one needs full admin access."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I started treating this list like a Data Science project—categorizing servers by their &lt;strong&gt;capabilities&lt;/strong&gt;, auditing their &lt;strong&gt;security profiles&lt;/strong&gt;, and writing down &lt;strong&gt;standardized configuration snippets&lt;/strong&gt;. I wanted a place where any developer could just copy, paste, and play.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Result: The mcp-registry
&lt;/h3&gt;

&lt;p&gt;I finally decided to open-source this list. It’s not just a "link list." It’s a discovery engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s inside?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📂 &lt;strong&gt;Categorized Servers:&lt;/strong&gt; From Dev Tools to specialized Data Science and ML connectors.&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Security Profiles:&lt;/strong&gt; I’ve audited each one so you know exactly what permissions (Network/File System) you’re granting.&lt;/li&gt;
&lt;li&gt;📋 &lt;strong&gt;Copy-Paste Configs:&lt;/strong&gt; Ready-to-use JSON blocks for Claude Desktop, Cursor, and Zed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why I’m doing this
&lt;/h3&gt;

&lt;p&gt;I believe MCP is the future of how we work with AI. But for that future to happen, the tools need to be accessible. Whether you’re a student like me or a senior engineer, you shouldn't have to spend hours on a JSON file just to get a weather tool or a database connector working.&lt;/p&gt;




&lt;h3&gt;
  
  
  Check it out!
&lt;/h3&gt;

&lt;p&gt;I’m still adding to it every day. If you’ve built a server or found one that changed your workflow, let’s add it to the map!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repo Link:&lt;/strong&gt; 


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/mcp-registry" rel="noopener noreferrer"&gt;
        mcp-registry
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A curated discovery engine for Model Context Protocol (MCP) servers: installation guides, security profiles and configuration snippets.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Essential MCP Server Registry&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A curated discovery engine for Model Context Protocol (MCP) servers: installation guides, security profiles and configuration snippets.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./INSTRUCTIONS.md" rel="noopener noreferrer"&gt;INSTRUCTIONS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./TEMPLATE.md" rel="noopener noreferrer"&gt;TEMPLATE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://Zayan-Mohamed.github.io/mcp-registry" rel="nofollow noopener noreferrer"&gt;DOCS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/3e2f2125d04703cab632ff7c05e3d81f1ad9502a0be2bc5361c0a858b537a834/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656769737472792d4865616c7468792d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/3e2f2125d04703cab632ff7c05e3d81f1ad9502a0be2bc5361c0a858b537a834/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656769737472792d4865616c7468792d677265656e" alt="Registry Status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Master List&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Knowledge Retrieval&lt;/h3&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./knowledge-retrieval/overview.md" rel="noopener noreferrer"&gt;Overview&lt;/a&gt; — Summary and recommendations for retrieval tools.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./knowledge-retrieval/claude-desktop.md" rel="noopener noreferrer"&gt;Claude Desktop&lt;/a&gt; — Local-first connector for semantic search.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./knowledge-retrieval/cursor.md" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; — Streaming retrieval &amp;amp; developer UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Vector Stores&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/overview.md" rel="noopener noreferrer"&gt;Overview&lt;/a&gt; — Summary and guidance for vector databases.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/pinecone.md" rel="noopener noreferrer"&gt;Pinecone&lt;/a&gt; — Managed vector DB.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/qdrant.md" rel="noopener noreferrer"&gt;Qdrant&lt;/a&gt; — Open-source vector database for production.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/milvus.md" rel="noopener noreferrer"&gt;Milvus&lt;/a&gt; — Scalable vector store for large datasets.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/weaviate.md" rel="noopener noreferrer"&gt;Weaviate&lt;/a&gt; — Schema-driven vector search engine.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/chroma.md" rel="noopener noreferrer"&gt;Chroma&lt;/a&gt; — Lightweight embedded vector DB.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/faiss.md" rel="noopener noreferrer"&gt;FAISS&lt;/a&gt; — Local similarity search library.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./vector-stores/redis-stack.md" rel="noopener noreferrer"&gt;Redis Stack&lt;/a&gt; — In-memory vector similarity with Redis Stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Data Stores&lt;/h3&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./data-stores/overview.md" rel="noopener noreferrer"&gt;Overview&lt;/a&gt; — Guidance for choosing a backing store.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./data-stores/duckdb.md" rel="noopener noreferrer"&gt;DuckDB (Local)&lt;/a&gt; — Local analytical DB for fast SQL queries.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./data-stores/postgres.md" rel="noopener noreferrer"&gt;Postgres&lt;/a&gt; — Relational DB for metadata and schemas.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./data-stores/cockroachdb.md" rel="noopener noreferrer"&gt;CockroachDB&lt;/a&gt; — Distributed SQL for fault tolerance and geo.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/Zayan-Mohamed/mcp-registry/./data-stores/supabase.md" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt; — Hosted Postgres +…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/mcp-registry" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>mcp</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I Built a TUI to Replace `git commit` (and it's written in Go)</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Sat, 24 Jan 2026 20:01:43 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/i-built-a-tui-to-replace-git-commit-and-its-written-in-go-3co3</link>
      <guid>https://forem.com/zayanmohamed/i-built-a-tui-to-replace-git-commit-and-its-written-in-go-3co3</guid>
      <description>&lt;p&gt;We have all been there. You've been coding for three hours, you finally get the build to pass, and you just want to save your work. You type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"updates"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;...and immediately regret it. Or maybe you're pair programming and need to add a &lt;code&gt;Co-authored-by&lt;/code&gt; trailer, but you can never remember if the email goes in angle brackets or parentheses.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;GitWizard&lt;/strong&gt; (&lt;code&gt;gitwiz&lt;/code&gt;) to solve this. It’s a secure, interactive CLI tool written in Go that replaces the standard &lt;code&gt;git commit&lt;/code&gt; flow with a beautiful Terminal UI (TUI).&lt;/p&gt;
&lt;h2&gt;
  
  
  Why build another Git tool?
&lt;/h2&gt;

&lt;p&gt;There are plenty of git helpers out there, but I wanted something that hit three specific criteria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Security First:&lt;/strong&gt; Many CLI wrappers are vulnerable to command injection. I wanted something that uses strict &lt;code&gt;exec.Command&lt;/code&gt; handling without shell concatenation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native Feel:&lt;/strong&gt; It needed to feel like a modern part of the terminal ecosystem, not a clunky script.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Aware:&lt;/strong&gt; It should know who I've been coding with and what issues I'm working on.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  The Tech Stack: Go + Charm
&lt;/h2&gt;

&lt;p&gt;I chose &lt;strong&gt;Go&lt;/strong&gt; for this project because I wanted a fast, static binary that could run anywhere without complex dependencies.&lt;/p&gt;

&lt;p&gt;For the UI, I used the incredible libraries from &lt;a href="https://charm.sh/" rel="noopener noreferrer"&gt;Charm&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bubble Tea:&lt;/strong&gt; For the Elm-inspired TUI framework.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Huh:&lt;/strong&gt; For the form inputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using these libraries allowed me to create a "Wizard" that guides you through the commit process step-by-step, validating your input in real-time.&lt;/p&gt;
&lt;h2&gt;
  
  
  Features at a Glance
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Interactive Context Wizard
&lt;/h3&gt;

&lt;p&gt;Instead of remembering flags, &lt;code&gt;gitwiz&lt;/code&gt; asks you for what matters. It enforces subject line length limits automatically so your git log stays readable.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Auto-Detect Co-Authors
&lt;/h3&gt;

&lt;p&gt;This is my favorite feature. &lt;code&gt;gitwiz&lt;/code&gt; scrapes your recent git history to find people you've collaborated with. When you reach the "Co-Authors" step, you get a selectable list of your actual teammates. No more copy-pasting names and emails.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Smart Issue Linking
&lt;/h3&gt;

&lt;p&gt;If your branch is named &lt;code&gt;feat/123-user-auth&lt;/code&gt;, the tool automatically suggests linking to Issue #123. It also scans your clipboard for potential references.&lt;/p&gt;
&lt;h3&gt;
  
  
  4. Security
&lt;/h3&gt;

&lt;p&gt;As developers, we often blindly trust CLI tools. I designed &lt;code&gt;gitwiz&lt;/code&gt; to be paranoid. It strips control characters to prevent terminal corruption and sanitizes all inputs to prevent argument injection.&lt;/p&gt;
&lt;h2&gt;
  
  
  How it works (The Architecture)
&lt;/h2&gt;

&lt;p&gt;The architecture is kept simple to ensure maintainability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;internal/git&lt;/code&gt;&lt;/strong&gt;: Handles all git operations safely. It wraps &lt;code&gt;os/exec&lt;/code&gt; to ensure we never pass user input to a shell interpreter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;internal/tui&lt;/code&gt;&lt;/strong&gt;: Contains the Bubble Tea models and Huh forms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;internal/logic&lt;/code&gt;&lt;/strong&gt;: Handles the business logic of formatting trailers (like &lt;code&gt;Fixes: #123&lt;/code&gt;) according to Git standards.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Give it a Try
&lt;/h2&gt;

&lt;p&gt;If you have Go installed, you can grab it right now:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/Zayan-Mohamed/gitwiz@latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Or, if you prefer binaries, I have releases for Linux and macOS on the &lt;a href="https://github.com/Zayan-Mohamed/gitwiz/releases" rel="noopener noreferrer"&gt;GitHub Releases page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once installed, just stage your files and run:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;gitwiz

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Contributing
&lt;/h2&gt;

&lt;p&gt;This is an open-source project, and I'd love to see it grow. If you're looking to contribute to a Go project, I'm currently looking for help with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding custom trailer configurations (e.g., &lt;code&gt;Reviewed-by&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Improving the co-author scraping logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the repo here:&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/gitwiz" rel="noopener noreferrer"&gt;
        gitwiz
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      🧙 Interactive Git commit wizard with smart metadata trailers. Compose better commit messages with TUI-guided co-authors, issue references, and conventional commits. Built with Go + Charm.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;GitWizard 🧙&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://golang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3739f5de9c73cc8958bee2fa167c81c0c41a8f56340723a8eda5d37c1717e6df/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f676f2d6d6f642f676f2d76657273696f6e2f5a6179616e2d4d6f68616d65642f67697477697a" alt="Go Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/gitwiz/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/46bd8625ae954a621e5568f9220b73586be92233e7819f726fe253f969485697/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f5a6179616e2d4d6f68616d65642f67697477697a" alt="Release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/gitwiz/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3949d83aaf2a990b8f7a46acca5e1d1f2a4f19d36358727d9ff136851c4e0595/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f5a6179616e2d4d6f68616d65642f67697477697a" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/gitwiz/actions" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/e30bc36a4f09014eb3a79933d91cf85eb69dbf419b88beb3be0bdbef68ffba1c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f5a6179616e2d4d6f68616d65642f67697477697a2f63692e796d6c3f6272616e63683d6d61696e" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://goreportcard.com/report/github.com/Zayan-Mohamed/gitwiz" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2701b4844ac17b72a3701c2a5c14377bcbc8fba7d29fcf30f074d2d02056596f/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f5a6179616e2d4d6f68616d65642f67697477697a" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/gitwiz/SECURITY.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/eb64e759a48cc5c15e934ba4f6b2628f357f073cfbdd8567a160f519d999272c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73656375726974792d617564697465642d73756363657373" alt="Security"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A secure, user-friendly CLI tool that replaces &lt;code&gt;git commit&lt;/code&gt; with an interactive commit context wizard.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📸 Screenshots&lt;/h2&gt;
&lt;/div&gt;

Click to see the GitWizard UI in action
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Commit Subject Input&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage.png" alt="Commit Subject"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Commit Body (Optional)&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image2.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage2.png" alt="Commit Body"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Co-Authors Selection&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image3.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage3.png" alt="Co-Authors"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Issue References&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image4.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage4.png" alt="References"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Fixes Issues&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image5.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage5.png" alt="Fixes"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Final Commit Preview&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/gitwiz/demos/screenshots/image6.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Fgitwiz%2Fdemos%2Fscreenshots%2Fimage6.png" alt="Preview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interactive TUI&lt;/strong&gt; - Beautiful terminal UI powered by Charm's Huh&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Co-Author Detection&lt;/strong&gt; - Automatically scrapes recent contributors from git history&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Issue Linking&lt;/strong&gt; - Extracts issue references from branch names&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clipboard Integration&lt;/strong&gt; - Suggests references from clipboard&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security First&lt;/strong&gt; - Built with command injection prevention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git Trailer Support&lt;/strong&gt; - Generates properly formatted trailers for GitHub/GitLab&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📦 Installation&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Using Go Install&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;go install github.com/Zayan-Mohamed/gitwiz@latest&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Download Binary&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;Download the latest binary from &lt;a href="https://github.com/Zayan-Mohamed/gitwiz/releases" rel="noopener noreferrer"&gt;releases&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Linux&lt;/span&gt;
wget https://github.com/Zayan-Mohamed/gitwiz/releases/latest/download/gitwiz-linux-amd64.tar.gz
tar -xzf gitwiz-linux-amd64.tar.gz &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod +x gitwiz-linux-amd64.tar.gz
sudo mv gitwiz-linux-amd64 /usr/local/bin/gitwiz&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; macOS&lt;/span&gt;
wget https://github.com/Zayan-Mohamed/gitwiz/releases/latest/download/gitwiz-darwin-amd64.tar.gz
tar -xzf gitwiz-darwin-amd64.tar.gz &lt;span class="pl-k"&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod +x gitwiz-darwin-amd64.tar.gz
sudo mv gitwiz-darwin-amd64 /usr/local/bin/gitwiz&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; windows&lt;/span&gt;
wget https://github.com/Zayan-Mohamed/gitwiz/releases/latest/download/gitwiz-windows-amd64.zip
&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/gitwiz" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;Let me know what you think in the comments! Happy committing. 🧙‍♂️&lt;/p&gt;

</description>
      <category>go</category>
      <category>git</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>From Zero Echo to Top 7: Why Consistency Wins</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Wed, 21 Jan 2026 17:28:01 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/from-zero-echo-to-top-7-why-consistency-wins-2pah</link>
      <guid>https://forem.com/zayanmohamed/from-zero-echo-to-top-7-why-consistency-wins-2pah</guid>
      <description>&lt;h2&gt;
  
  
  The Intention
&lt;/h2&gt;

&lt;p&gt;I joined &lt;a href="http://dev.to"&gt;dev.to&lt;/a&gt; with a simple intention: to build real applications, design systems that actually work, and share what I was learning along the way.&lt;/p&gt;

&lt;p&gt;I wasn’t chasing views or "clout." I wanted to contribute, document my thinking, and invite others to test my ideas—sometimes even to roast them. My logic was simple: &lt;strong&gt;If something I built was weak, I wanted to hear it so I could make it stronger.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Ghost Town" Phase
&lt;/h2&gt;

&lt;p&gt;For a long time, nothing happened.&lt;/p&gt;

&lt;p&gt;I posted anyway. No reactions, no comments, no feedback. Just me showing up, writing code, documenting the process, and shipping.&lt;/p&gt;

&lt;p&gt;It’s easy to feel discouraged during that phase. You wonder if you’re just shouting into the void. But here’s the thing I realized during the silence: &lt;strong&gt;the process itself was already paying off.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why It Was Worth It
&lt;/h2&gt;

&lt;p&gt;Even without the likes, the act of writing changed how I worked:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Forced Clarity:&lt;/strong&gt; You can't explain a complex system if you don't fully understand it yourself. Writing exposed my knowledge gaps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accountability:&lt;/strong&gt; Hitting "Publish" kept me shipping features instead of leaving them in "local dev hell."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engineering Growth:&lt;/strong&gt; Building in public slowly shaped how I think as an engineer. It made me more deliberate.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Quiet Confirmation
&lt;/h2&gt;

&lt;p&gt;Now, being named among the &lt;strong&gt;Top 7 Authors of the Week&lt;/strong&gt; feels like a quiet confirmation that consistency matters, even when it looks like no one is watching.&lt;/p&gt;

&lt;p&gt;This journey has been more fruitful than I expected—not just because of the recognition, but because it kept me moving forward when it would have been easier to stop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's Discuss 💬
&lt;/h2&gt;

&lt;p&gt;If you’re reading this, I’m curious:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Have you ever kept building or writing when there was zero response? What kept you going?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Let me know in the comments. 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thank you to everyone who has read, reacted, or commented on my recent posts. It means a lot.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>writing</category>
      <category>motivation</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Stop Zipping Folders: How I Built a Zero-Trust Tunnel to Share Files Instantly (in Go)</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Wed, 14 Jan 2026 20:13:13 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/stop-zipping-folders-how-i-built-a-zero-trust-tunnel-to-share-files-instantly-in-go-4ape</link>
      <guid>https://forem.com/zayanmohamed/stop-zipping-folders-how-i-built-a-zero-trust-tunnel-to-share-files-instantly-in-go-4ape</guid>
      <description>&lt;h2&gt;
  
  
  The Problem with "Quickly" Sharing a Folder 😫
&lt;/h2&gt;

&lt;p&gt;We’ve all been there. You need to send a directory of files—maybe logs, a build artifact, or some sensitive config files—to a colleague.&lt;/p&gt;

&lt;p&gt;What are your options?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zip it and Slack it:&lt;/strong&gt; Now that zip file lives on Slack's servers forever.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Upload to Google Drive/Dropbox:&lt;/strong&gt; Great, now you have to manage permissions, generate a link, and trust that they aren't scanning your files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;scp&lt;/code&gt; / &lt;code&gt;rsync&lt;/code&gt;:&lt;/strong&gt; Requires SSH access, keys, and knowing IP addresses. Not exactly "quick."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Magic Wormhole / Croc:&lt;/strong&gt; Awesome tools, but they transfer file-by-file. You can't &lt;em&gt;browse&lt;/em&gt; a remote directory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted something better. I wanted the &lt;strong&gt;ease&lt;/strong&gt; of a cloud link with the &lt;strong&gt;security&lt;/strong&gt; of a direct, encrypted SSH connection.&lt;/p&gt;

&lt;p&gt;I wanted to type one command, get a secure code, and send it to a friend so they could browse my folder instantly—without ever uploading my data to a third-party server.&lt;/p&gt;

&lt;p&gt;So, I built &lt;strong&gt;Orb&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Meet Orb: Zero-Trust, Terminal-First File Sharing 🛡️
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Orb&lt;/strong&gt; is a CLI utility written in Go that lets you share a local folder over the internet using an end-to-end encrypted tunnel.&lt;/p&gt;

&lt;p&gt;It’s designed around a simple philosophy: &lt;strong&gt;The relay server should be blind.&lt;/strong&gt; It just shovels encrypted bytes back and forth. It doesn't know who you are, what you're sharing, or what your passcode is.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment 💡
&lt;/h3&gt;

&lt;p&gt;The coolest part of Orb isn't just the encryption; it's the &lt;strong&gt;developer experience (DX)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When a receiver connects, they don't just get a dump of files. They get a full, interactive &lt;strong&gt;Terminal User Interface (TUI)&lt;/strong&gt; file browser. They can navigate directories, view file metadata, and download only what they need.&lt;/p&gt;

&lt;p&gt;It feels like SSH-ing into a machine, but without the hassle of user accounts or port forwarding.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Use It (In 30 Seconds) ⏱️
&lt;/h2&gt;

&lt;p&gt;Orb is a single binary with no dependencies.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Share a Folder (Alice)
&lt;/h3&gt;

&lt;p&gt;Alice wants to share her &lt;code&gt;~/documents/project-x&lt;/code&gt; folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;orb share ~/documents/project-x &lt;span class="nt"&gt;--readonly&lt;/span&gt;

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Session ID: abc123def456
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Passcode:   correct-horse-battery-staple
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Relay:      https://relay.orb.sh
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Share these credentials securely.
&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Waiting &lt;span class="k"&gt;for &lt;/span&gt;connection...

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  2. Connect and Browse (Bob)
&lt;/h3&gt;

&lt;p&gt;Bob gets the session ID and passcode from Alice via a secure channel (like Signal).&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;orb connect abc123def456

&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; Enter Passcode: &lt;span class="k"&gt;****************************&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Boom. Bob's terminal transforms into a file browser showing the contents of Alice's folder. He can navigate around and press &lt;code&gt;d&lt;/code&gt; to download files.&lt;/p&gt;
&lt;h2&gt;
  
  
  Under the Hood: The Nerdy Stuff 🤓
&lt;/h2&gt;

&lt;p&gt;This is where I had the most fun. Building a truly secure, zero-trust system is a rabbit hole of cryptographic choices. Here is the stack that makes Orb sleep-at-night secure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Language:&lt;/strong&gt; Go. Perfect for networking, concurrency, and cross-platform binaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Protocol:&lt;/strong&gt; We use the &lt;strong&gt;Noise Protocol Framework&lt;/strong&gt; for the handshake. It’s the same tech powering WireGuard and WhatsApp. It provides mutual authentication and forward secrecy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Derivation:&lt;/strong&gt; The short passcode you see is hashed using &lt;strong&gt;Argon2id&lt;/strong&gt; (the winner of the Password Hashing Competition) to generate the actual encryption keys. This makes brute-force attacks computationally expensive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transport Encryption:&lt;/strong&gt; Once the handshake is complete, all data is encrypted with &lt;strong&gt;ChaCha20-Poly1305&lt;/strong&gt;. It's fast, secure, and runs well on mobile devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The TUI:&lt;/strong&gt; Built with the incredible &lt;strong&gt;Bubble Tea&lt;/strong&gt; framework.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Security is Not an Add-on
&lt;/h3&gt;

&lt;p&gt;We spent a lot of time thinking about attack vectors.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Path Traversal:&lt;/strong&gt; A malicious client can't request &lt;code&gt;../../../../etc/passwd&lt;/code&gt;. Orb sanitizes all paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Symlink Attacks:&lt;/strong&gt; Orb detects and blocks symlinks that point outside the shared directory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relay Compromise:&lt;/strong&gt; Even if the relay server is hacked, the attacker only sees encrypted noise. They cannot decrypt your files.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Why Open Source? ❤️
&lt;/h2&gt;

&lt;p&gt;I'm releasing Orb as open source because I believe security tools &lt;em&gt;must&lt;/em&gt; be transparent. You shouldn't have to trust me; you should be able to audit the code yourself.&lt;/p&gt;

&lt;p&gt;This is just the beginning. I have a big roadmap, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] FUSE support (mount a remote Orb folder as a local drive)&lt;/li&gt;
&lt;li&gt;[ ] Web-based client (decrypt in the browser via WebAssembly)&lt;/li&gt;
&lt;li&gt;[ ] Decentralized relays (p2p)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Try It Out! (And Roast My Code) 🔥
&lt;/h2&gt;

&lt;p&gt;I’m looking for feedback, security audits, and feature requests.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Go grab a binary&lt;/strong&gt; from the &lt;a href="https://github.com/Zayan-Mohamed/orb/releases" rel="noopener noreferrer"&gt;Releases page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try sharing a folder&lt;/strong&gt; with a friend (or yourself on another machine).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check out the code&lt;/strong&gt; on GitHub.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/orb" rel="noopener noreferrer"&gt;
        orb
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Orb is a secure, terminal-first utility that allows you to share a local folder across the internet using end-to-end encryption. No accounts, no cloud storage, no port forwarding required.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Orb — Zero-Trust Folder Tunneling Tool&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/Zayan-Mohamed/orb/actions/workflows/build.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/Zayan-Mohamed/orb/workflows/Build/badge.svg" alt="Build Status"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/orb/actions/workflows/release.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/Zayan-Mohamed/orb/workflows/Release/badge.svg" alt="Release"&gt;&lt;/a&gt;
&lt;a href="https://goreportcard.com/report/github.com/Zayan-Mohamed/orb" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/183b523f5d46745320eb4e007f816a9f66e45ff4223726cc19ffecbfe4adf340/68747470733a2f2f676f7265706f7274636172642e636f6d2f62616467652f6769746875622e636f6d2f5a6179616e2d4d6f68616d65642f6f72623f763d31" alt="Go Report Card"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/orb/go.mod" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1d916a93d45c770d5185b0dd7db146b5bd792733225be8c7587edfb04b54c0d7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f676f2d6d6f642f676f2d76657273696f6e2f5a6179616e2d4d6f68616d65642f6f7262" alt="Go Version"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/orb/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7013272bd27ece47364536a221edb554cd69683b68a46fc0ee96881174c4214c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c75652e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://zayan-mohamed.github.io/orb/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3f5a3ed8d9459fd9c634af175f5a633c40dd5342e4d781e5c878124a8571bfa0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f646f63732d6d6b646f63732d626c75652e737667" alt="Documentation"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/orb/docs/development/contributing.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs Welcome"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Orb is a secure, terminal-first utility that allows you to share a local folder across the internet using end-to-end encryption. No accounts, no cloud storage, no port forwarding required.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Demo&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Sharing a Folder&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/orb/docs/assets/images/orb-share-demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Forb%2Fdocs%2Fassets%2Fimages%2Forb-share-demo.gif" alt="Orb Share Demo"&gt;&lt;/a&gt;
&lt;em&gt;Share a folder with a single command - encrypted end-to-end&lt;/em&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Browsing Shared Files&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/Zayan-Mohamed/orb/docs/assets/images/orb-connect-demo.gif"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2FZayan-Mohamed%2Forb%2Fdocs%2Fassets%2Fimages%2Forb-connect-demo.gif" alt="Orb Connect Demo"&gt;&lt;/a&gt;
&lt;em&gt;Interactive TUI browser for secure file access&lt;/em&gt;&lt;/p&gt;



&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Trust Architecture&lt;/strong&gt;: The relay server never sees plaintext data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong Cryptography&lt;/strong&gt;: Argon2id for key derivation, Noise Protocol for handshake, ChaCha20-Poly1305 for transport encryption&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-Platform&lt;/strong&gt;: Works on Linux, macOS, and Windows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NAT-Safe&lt;/strong&gt;: All connections are outbound, works behind firewalls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TUI File Browser&lt;/strong&gt;: Interactive terminal interface for browsing and downloading files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Long-Term Secrets&lt;/strong&gt;: Sessions expire automatically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure by Design&lt;/strong&gt;: Path sanitization, symlink protection, replay protection&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Quick Start&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Install&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; Download the binary for your platform&lt;/span&gt;
curl -L https://github.com/Zayan-Mohamed/orb/releases/latest/download/orb-&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;$(&lt;/span&gt;uname -s&lt;span class="pl-pds"&gt;)&lt;/span&gt;&lt;/span&gt;-&lt;span class="pl-s"&gt;&lt;span class="pl-pds"&gt;$(&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/orb" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;p&gt;If you think this is a cool idea, please &lt;strong&gt;leave a star ⭐ on the repo!&lt;/strong&gt; It helps more developers find the project.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What's your current workflow for sharing sensitive folders? Let's discuss in the comments!👇&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>cli</category>
      <category>security</category>
    </item>
    <item>
      <title>Job Board Scraping: API Endpoints &amp; Cheat Sheet</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Sat, 10 Jan 2026 08:24:40 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/job-board-scraping-api-endpoints-cheat-sheet-1da7</link>
      <guid>https://forem.com/zayanmohamed/job-board-scraping-api-endpoints-cheat-sheet-1da7</guid>
      <description>&lt;p&gt;I found a Python script that aggregates jobs without needing complex authentication. Here are the endpoints.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. LinkedIn (The "Guest" API Trick)
&lt;/h2&gt;

&lt;p&gt;You don't need OAuth if you use the "Guest" endpoint, but you &lt;strong&gt;must&lt;/strong&gt; use a real User-Agent header.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;https://www.linkedin.com/jobs-guest/jobs/api/seeMoreJobPostings/search&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Method:&lt;/strong&gt; &lt;code&gt;GET&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Critical Headers:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;User-Agent&lt;/code&gt;: &lt;code&gt;Mozilla/5.0 ... Chrome/120.0...&lt;/code&gt; (Use a real browser string)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Upgrade-Insecure-Requests&lt;/code&gt;: &lt;code&gt;1&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Parameters:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;keywords&lt;/code&gt;: (e.g., "software engineer")&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;location&lt;/code&gt;: (e.g., "Remote")&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;start&lt;/code&gt;: Pagination offset (0, 25, 50...)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;f_TP&lt;/code&gt;: &lt;code&gt;1&lt;/code&gt; (Crucial: filters for "Last 24 hours" to avoid dead links)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Remotive (Public API)
&lt;/h2&gt;

&lt;p&gt;Clean JSON response, no scraping html needed.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;https://remotive.com/api/remote-jobs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Params:&lt;/strong&gt; &lt;code&gt;category=software-dev&lt;/code&gt;, &lt;code&gt;limit=10&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. Arbeitnow
&lt;/h2&gt;

&lt;p&gt;Returns a massive JSON list; filter it client-side.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL:&lt;/strong&gt; &lt;code&gt;https://www.arbeitnow.com/api/job-board-api&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Python Snippet: The Rate Limiter
&lt;/h2&gt;

&lt;p&gt;Always sleep between requests to avoid IP bans.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="c1"&gt;# Be polite
&lt;/span&gt;&lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you have time checkout my TIL (Today I learned)!&lt;br&gt;
&lt;a href="https://github.com/zayan-mohamed/til" rel="noopener noreferrer"&gt;Zayan-Mohamed/til&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you find it useful, drop a ⭐ on the repo—it helps a lot!&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>machinelearning</category>
      <category>programming</category>
    </item>
    <item>
      <title>How do I backup my identity files (SSH/GPG) without compromising them?</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Wed, 07 Jan 2026 17:13:31 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/how-do-i-backup-my-identity-files-sshgpg-without-compromising-them-5g21</link>
      <guid>https://forem.com/zayanmohamed/how-do-i-backup-my-identity-files-sshgpg-without-compromising-them-5g21</guid>
      <description>&lt;h2&gt;
  
  
  The Story: Paranoia &amp;amp; SSH Keys 🔑
&lt;/h2&gt;

&lt;p&gt;I have a specific paranoia: losing my &lt;strong&gt;SSH&lt;/strong&gt; and &lt;strong&gt;GPG&lt;/strong&gt; keys.&lt;/p&gt;

&lt;p&gt;If my laptop dies today, I lose access to my servers, my GitHub signing capabilities, and my encrypted backups. But backing them up is terrifying.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copying &lt;code&gt;id_rsa&lt;/code&gt; to a USB drive feels risky (what if I lose the drive?).&lt;/li&gt;
&lt;li&gt;Uploading &lt;code&gt;~/.ssh&lt;/code&gt; to Google Drive or Dropbox feels like a security nightmare.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted a middle ground. I wanted a way to create a "digital safety deposit box." I wanted to take my most sensitive keys, lock them inside a folder that is mathematically impossible to open without my password, and &lt;em&gt;then&lt;/em&gt; feel safe uploading that encrypted blob to the cloud.&lt;/p&gt;

&lt;p&gt;That is why I built &lt;strong&gt;Vaultix&lt;/strong&gt;. It wasn't just for "secrets" in general—it was specifically designed to be the safest transport layer for my digital identity.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Vaultix? 🛡️
&lt;/h2&gt;

&lt;p&gt;Vaultix is a cross-platform command-line tool written in &lt;strong&gt;Go&lt;/strong&gt;. It manages password-protected encrypted folders locally on your machine.&lt;/p&gt;

&lt;p&gt;It’s designed to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simple:&lt;/strong&gt; No complex key management. Just a password.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure:&lt;/strong&gt; AES-256-GCM encryption with Argon2id key derivation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invisible:&lt;/strong&gt; Even the filenames inside the vault are encrypted.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The "Cool" Features
&lt;/h2&gt;

&lt;p&gt;I didn't just want encryption; I wanted a good &lt;strong&gt;Developer Experience (DX)&lt;/strong&gt;. Here is what makes Vaultix fun to use:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Fuzzy Matching 🪄
&lt;/h3&gt;

&lt;p&gt;I hate typing long filenames.&lt;br&gt;
If you have a file named &lt;code&gt;super_secret_aws_keys_v2.json&lt;/code&gt;, you don't need to type that whole thing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# This works!&lt;/span&gt;
vaultix extract aws

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;It finds the best match and extracts it.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Zero Metadata Leaks 🕵️
&lt;/h3&gt;

&lt;p&gt;If someone steals your laptop and finds your vault, they won't even know &lt;em&gt;what&lt;/em&gt; you are hiding. Vaultix encrypts the file contents &lt;strong&gt;and&lt;/strong&gt; the filenames. A file named &lt;code&gt;passwords.txt&lt;/code&gt; becomes a random string like &lt;code&gt;3f9a2c1d.enc&lt;/code&gt; on the disk.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Drop &amp;amp; Go 🗑️
&lt;/h3&gt;

&lt;p&gt;Need to use a file once and then destroy it? Use the &lt;code&gt;drop&lt;/code&gt; command. It decrypts the file for you to use, and immediately removes it from the secure vault.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vaultix drop api_keys

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This specific use case makes the article much more compelling because it's a real problem every developer faces: &lt;strong&gt;"How do I backup my identity files (SSH/GPG) without compromising them?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is a rewritten &lt;strong&gt;Introduction &amp;amp; Story&lt;/strong&gt; section. You can replace the "The Problem with Secrets" section in the previous draft with this.&lt;/p&gt;



&lt;p&gt;Here is how I use Vaultix to sleep better at night. I backup my SSH keys in 3 commands:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Create a secure vault&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;my_identity_backup
&lt;span class="nb"&gt;cd &lt;/span&gt;my_identity_backup
vaultix init

&lt;span class="c"&gt;# 2. Add the sensitive keys&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; ~/.ssh/id_ed25519 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="nb"&gt;cp&lt;/span&gt; ~/.gnupg/private-keys-v1.d/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
vaultix add id_ed25519

&lt;span class="c"&gt;# 3. Verify and Sync&lt;/span&gt;
vaultix list
&lt;span class="c"&gt;# Now I can zip this 'my_identity_backup' folder &lt;/span&gt;
&lt;span class="c"&gt;# and upload it to Google Drive without fear.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  How It Works (The Techy Stuff) 🤓
&lt;/h2&gt;

&lt;p&gt;For the security nerds out there (like me), here is the architecture. I followed the Golden Rule: &lt;strong&gt;Don't Roll Your Own Crypto.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Language:&lt;/strong&gt; Go (1.21+)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption:&lt;/strong&gt; AES-256-GCM (Authenticated encryption ensures nobody tampered with your data).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key Derivation:&lt;/strong&gt; Argon2id (Resistant to GPU cracking attacks).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; All data lives in a hidden &lt;code&gt;.vaultix/&lt;/code&gt; folder in your directory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Crucially:&lt;/strong&gt; Vaultix &lt;strong&gt;never&lt;/strong&gt; stores your password. It exists only in memory while the program is running. If you lose your password, the data is gone forever. That’s a feature, not a bug.&lt;/p&gt;
&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;You can grab the binary for Windows, macOS, or Linux from the &lt;a href="https://www.google.com/search?q=https://github.com/Zayan-Mohamed/vaultix/releases" rel="noopener noreferrer"&gt;Releases page&lt;/a&gt;, or build it from source if you have Go installed:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;go &lt;span class="nb"&gt;install &lt;/span&gt;github.com/zayan-mohamed/vaultix@latest

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Let's secure a folder:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Initialize the vault:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my_secrets
vaultix init
&lt;span class="c"&gt;# Enter a strong password...&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add a file:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vaultix add .env

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List your secure files:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;vaultix list
&lt;span class="c"&gt;# Files in vault:&lt;/span&gt;
&lt;span class="c"&gt;#   .env&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;That's it. Your &lt;code&gt;.env&lt;/code&gt; file is now encrypted at rest.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why Go? 🐹
&lt;/h2&gt;

&lt;p&gt;I chose Go because I wanted a &lt;strong&gt;single static binary&lt;/strong&gt; with zero dependencies. I didn't want users to have to install Python, Node, or OpenSSL libraries just to decrypt their files. You download &lt;code&gt;vaultix&lt;/code&gt;, and it just works.&lt;/p&gt;
&lt;h2&gt;
  
  
  Give it a Try!
&lt;/h2&gt;

&lt;p&gt;I’m looking for feedback, contributors, and security enthusiasts to break it (or fix it!).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;💻 GitHub:&lt;/strong&gt; 

&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/vaultix" rel="noopener noreferrer"&gt;
        vaultix
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A cross-platform CLI tool for managing password-protected encrypted folders. Uses AES-256-GCM encryption with Argon2id key derivation. Single binary, zero dependencies, works on Linux, macOS, and Windows.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;vaultix&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c3bd875c3dca8ec3a9cc1ce0dc586a60956338d61a8bf3ccd2bbdba86dc7aafc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f5a6179616e2d4d6f68616d65642f7661756c7469783f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/c3bd875c3dca8ec3a9cc1ce0dc586a60956338d61a8bf3ccd2bbdba86dc7aafc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f5a6179616e2d4d6f68616d65642f7661756c7469783f7374796c653d666f722d7468652d6261646765" alt="Release"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2644bbb82c159c8889f49f640b2de062ddae5e10c6a7de5055e565e7a5fdd7ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f2d312e32312b2d3030414444383f7374796c653d666f722d7468652d6261646765266c6f676f3d676f266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/2644bbb82c159c8889f49f640b2de062ddae5e10c6a7de5055e565e7a5fdd7ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f476f2d312e32312b2d3030414444383f7374796c653d666f722d7468652d6261646765266c6f676f3d676f266c6f676f436f6c6f723d7768697465" alt="Go Version"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9218332452902d9e542a100d0af126fd3174a116456614d2cf093546a13783db/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e7376673f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/9218332452902d9e542a100d0af126fd3174a116456614d2cf093546a13783db/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e7376673f7374796c653d666f722d7468652d6261646765" alt="License"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d6156a099c42a67070f13dcefed558eb4b0d6ff982309320192e7ca7cf8e50cd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d4c696e75782532302537432532306d61634f5325323025374325323057696e646f77732d626c75653f7374796c653d666f722d7468652d6261646765"&gt;&lt;img src="https://camo.githubusercontent.com/d6156a099c42a67070f13dcefed558eb4b0d6ff982309320192e7ca7cf8e50cd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506c6174666f726d2d4c696e75782532302537432532306d61634f5325323025374325323057696e646f77732d626c75653f7374796c653d666f722d7468652d6261646765" alt="Platform"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ffb5b1714feb6c219addf26c90ae88466989b6c3643b67b0bf76a1dd07f5b0df/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456e6372797074696f6e2d4145532d2d3235362d2d47434d2d7265643f7374796c653d666f722d7468652d6261646765266c6f676f3d676e75707269766163796775617264266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/ffb5b1714feb6c219addf26c90ae88466989b6c3643b67b0bf76a1dd07f5b0df/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f456e6372797074696f6e2d4145532d2d3235362d2d47434d2d7265643f7374796c653d666f722d7468652d6261646765266c6f676f3d676e75707269766163796775617264266c6f676f436f6c6f723d7768697465" alt="Encryption"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/edfa2a44c0b2ed3d2ecd1528bcbe916c3e0b8eb1a09e4c8fa16000ed402097f7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f5a6179616e2d4d6f68616d65642f7661756c7469782f6275696c642e796d6c3f7374796c653d666f722d7468652d6261646765266c6162656c3d4275696c64"&gt;&lt;img src="https://camo.githubusercontent.com/edfa2a44c0b2ed3d2ecd1528bcbe916c3e0b8eb1a09e4c8fa16000ed402097f7/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f5a6179616e2d4d6f68616d65642f7661756c7469782f6275696c642e796d6c3f7374796c653d666f722d7468652d6261646765266c6162656c3d4275696c64" alt="Build Status"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;A cross-platform command-line tool for managing password-protected encrypted folders&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/Zayan-Mohamed/vaultix#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; •
  &lt;a href="https://github.com/Zayan-Mohamed/vaultix#installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt; •
  &lt;a href="https://github.com/Zayan-Mohamed/vaultix#quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt; •
  &lt;a href="https://zayan-mohamed.github.io/vaultix" rel="nofollow noopener noreferrer"&gt;Documentation&lt;/a&gt; •
  &lt;a href="https://github.com/Zayan-Mohamed/vaultix#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt; •
  &lt;a href="https://github.com/Zayan-Mohamed/vaultix#contributing" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 Overview&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;vaultix is a secure, lightweight CLI tool that encrypts files in place using military-grade cryptography. No cloud, no services, no complexity—just strong encryption for your sensitive files.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Key Highlights&lt;/h3&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;🔒 &lt;strong&gt;Strong Encryption&lt;/strong&gt;: AES-256-GCM with Argon2id key derivation&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Zero Dependencies&lt;/strong&gt;: Single static binary, no runtime requirements&lt;/li&gt;
&lt;li&gt;💻 &lt;strong&gt;Cross-Platform&lt;/strong&gt;: Linux, macOS, and Windows support&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;Simple UX&lt;/strong&gt;: Intuitive commands with smart defaults&lt;/li&gt;
&lt;li&gt;🔐 &lt;strong&gt;No Password Storage&lt;/strong&gt;: Passwords exist only in memory&lt;/li&gt;
&lt;li&gt;📦 &lt;strong&gt;Portable&lt;/strong&gt;: Encrypted vaults work across all platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;✅ &lt;strong&gt;Automatic Encryption&lt;/strong&gt; - Initialize a vault and all files are encrypted instantly&lt;br&gt;
✅ &lt;strong&gt;Master Key Encryption&lt;/strong&gt; - Random 256-bit master key protects all vault data&lt;br&gt;
✅ &lt;strong&gt;Recovery Key Support&lt;/strong&gt; - Unlock vault if you forget your password&lt;br&gt;
✅ &lt;strong&gt;Dual&lt;/strong&gt;…&lt;/p&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/vaultix" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;📄 Docs:&lt;/strong&gt; &lt;a href="https://zayan-mohamed.github.io/vaultix" rel="noopener noreferrer"&gt;zayan-mohamed.github.io/vaultix&lt;/a&gt;
&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;If you find it useful, &lt;strong&gt;drop a ⭐ on the repo&lt;/strong&gt;—it helps a lot!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: While I used industry-standard libraries, always have backups of your important data!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>security</category>
      <category>opensource</category>
      <category>cli</category>
    </item>
    <item>
      <title>I Built a Zero-Latency Chrome Extension with Svelte 5 (Runes) &amp; Tailwind v4</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Mon, 05 Jan 2026 17:40:38 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/i-built-a-zero-latency-chrome-extension-with-svelte-5-runes-tailwind-v4-3gc1</link>
      <guid>https://forem.com/zayanmohamed/i-built-a-zero-latency-chrome-extension-with-svelte-5-runes-tailwind-v4-3gc1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s4yzxadbmu5rndl6kfh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s4yzxadbmu5rndl6kfh.png" alt="Main dashboard with clock, top sites, and omnibar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mncov0twogss0dh32j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6mncov0twogss0dh32j7.png" alt="Customizable settings panel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;p&gt;I’ve tried almost every "New Tab" extension out there. They usually fall into two categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bloated:&lt;/strong&gt; Takes 2 seconds to load because it's fetching data from 5 different APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluttered:&lt;/strong&gt; Filled with motivational quotes, random wallpapers, or ads I didn't ask for.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I wanted something &lt;strong&gt;instant&lt;/strong&gt;, &lt;strong&gt;keyboard-first&lt;/strong&gt;, and &lt;strong&gt;private&lt;/strong&gt;. So, I built &lt;a href="https://github.com/Zayan-Mohamed/dev-dash" rel="noopener noreferrer"&gt;DevDash&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tech Stack: Bleeding Edge
&lt;/h3&gt;

&lt;p&gt;I didn't just want to build an extension; I wanted to experiment with the latest tools in the ecosystem. Here is the stack I chose and why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Svelte 5 (Runes):&lt;/strong&gt; I used the new Runes syntax (&lt;code&gt;$state&lt;/code&gt;, &lt;code&gt;$effect&lt;/code&gt;, &lt;code&gt;$props&lt;/code&gt;) for everything. It makes reactivity incredibly explicit and removes a lot of the "magic" from Svelte 4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS v4:&lt;/strong&gt; Yes, v4. It’s faster, has zero configuration (CSS-first), and integrates seamlessly with Vite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SvelteKit + Vite:&lt;/strong&gt; Used for the build pipeline to compile everything down to a static, zero-runtime-overhead extension.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript:&lt;/strong&gt; Strict mode enabled. No &lt;code&gt;any&lt;/code&gt; allowed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Feature Highlights
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Zero Latency
&lt;/h4&gt;

&lt;p&gt;Because Svelte compiles to vanilla JavaScript, there is no heavy runtime. The new tab loads instantly.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The Command Palette (Omnibar)
&lt;/h4&gt;

&lt;p&gt;I’m a Vim user, so I hate reaching for the mouse. The central Omnibar lets you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search Google (&lt;code&gt;g &amp;lt;query&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Search GitHub (&lt;code&gt;gh &amp;lt;repo&amp;gt;&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Open localhost ports (&lt;code&gt;l 3000&lt;/code&gt; -&amp;gt; &lt;code&gt;localhost:3000&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Navigate history with &lt;code&gt;↑&lt;/code&gt; / &lt;code&gt;↓&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Privacy First
&lt;/h4&gt;

&lt;p&gt;Everything is stored in &lt;code&gt;chrome.storage.local&lt;/code&gt;. No analytics, no tracking, no external API calls unless you explicitly ask for them (like the Weather widget).&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Under the Hood: Svelte 5 Runes
&lt;/h3&gt;

&lt;p&gt;If you haven't tried Svelte 5 yet, here is a snippet from my &lt;code&gt;Clock.svelte&lt;/code&gt; component. Look how clean the state management is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;$state&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nf"&gt;$effect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;setInterval&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;clearInterval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;interval&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;font-mono text-6xl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLocaleTimeString&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/div&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;No more &lt;code&gt;onMount&lt;/code&gt;, no more imports for lifecycle hooks. Just standard JS with &lt;code&gt;$effect&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  🎨 Tailwind v4 Configuration
&lt;/h3&gt;

&lt;p&gt;One of the coolest parts of this project was using Tailwind v4. I didn't need a &lt;code&gt;tailwind.config.js&lt;/code&gt;. Everything is configured directly in CSS:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@import&lt;/span&gt; &lt;span class="s1"&gt;"tailwindcss"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;@theme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--color-bg-primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0d1117&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--color-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#58a6ff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--font-mono&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"JetBrains Mono"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;monospace&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Roadmap &amp;amp; Contributing
&lt;/h3&gt;

&lt;p&gt;This project is fully open source. I’m currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Firefox/Edge support&lt;/li&gt;
&lt;li&gt;[ ] A plugin system for custom widgets&lt;/li&gt;
&lt;li&gt;[ ] Cloud sync (optional)&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  🤝 Call for Contributors
&lt;/h3&gt;

&lt;p&gt;I built the core of DevDash, but I want this to be the ultimate developer dashboard—and I can't build every widget alone.&lt;/p&gt;

&lt;p&gt;If you are looking for a project to contribute to (or just want to play with Svelte 5 runes), &lt;strong&gt;this is a great place to start.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is what I need help with right now:&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Build New Widgets 🧩
&lt;/h4&gt;

&lt;p&gt;The widget system is modular. I’m looking for community contributions for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crypto/Stocks Ticker:&lt;/strong&gt; A simple price watcher.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hacker News Feed:&lt;/strong&gt; A minimal list of top stories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Todoist/Notion Integration:&lt;/strong&gt; Sync tasks via API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Monitor:&lt;/strong&gt; CPU/Ram usage (using Chrome System API).&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  2. Browser Support 🌐
&lt;/h4&gt;

&lt;p&gt;Currently, the build pipeline targets Chrome. I need help testing and tweaking the &lt;code&gt;manifest.json&lt;/code&gt; for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Firefox (Gecko)&lt;/li&gt;
&lt;li&gt;Microsoft Edge&lt;/li&gt;
&lt;li&gt;Brave&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  3. Internationalization (i18n) 🌍
&lt;/h4&gt;

&lt;p&gt;I want DevDash to be accessible to everyone. Setting up a lightweight translation layer would be a huge win.&lt;/p&gt;
&lt;h3&gt;
  
  
  💡 How to Start
&lt;/h3&gt;

&lt;p&gt;I’ve tagged a few issues as &lt;strong&gt;&lt;code&gt;good first issue&lt;/code&gt;&lt;/strong&gt; on the repo.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fork the repo.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;pnpm install &amp;amp;&amp;amp; pnpm dev&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create a new file in &lt;code&gt;src/lib/components/widgets/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open a PR!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Check out the Issues tab here:&lt;/strong&gt; &lt;a href="https://github.com/Zayan-Mohamed/dev-dash/issues" rel="noopener noreferrer"&gt;Issues&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;If you want to see how a &lt;strong&gt;Svelte 5&lt;/strong&gt; app is structured in production or just want a faster new tab page, check out the repo!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔗 GitHub Repo:&lt;/strong&gt; 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/dev-dash" rel="noopener noreferrer"&gt;
        dev-dash
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A zero-latency, keyboard-first Chrome Extension that replaces your new tab with a developer-focused dashboard built with Svelte 5 and Tailwind CSS v4.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/73531df2ecd1a3f6a369d4e01d97b15998d5a019307d4eb6e4d995970a1d9a92/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f4173736574253230312e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/73531df2ecd1a3f6a369d4e01d97b15998d5a019307d4eb6e4d995970a1d9a92/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f4173736574253230312e706e67" alt="DevDash Logo" width="300"&gt;&lt;/a&gt;
&lt;p&gt;&lt;strong&gt;A Zero-Latency Developer New Tab Extension&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chrome.google.com/webstore" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/564c4a20d7a0f08fa44e22cf42fddb6072c9aa93ae566728ed7cbd3d9e36decb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d652d457874656e73696f6e2d3432383546343f6c6f676f3d676f6f676c656368726f6d65266c6f676f436f6c6f723d7768697465" alt="Chrome Extension"&gt;&lt;/a&gt;
&lt;a href="https://developer.chrome.com/docs/extensions/mv3/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/d39aefaa1ec207fa619e541af7cf0a068e456971f5cd54f0a76cc95c62849626/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616e69666573742d56332d677265656e3f6c6f676f3d676f6f676c656368726f6d65" alt="Manifest V3"&gt;&lt;/a&gt;
&lt;a href="https://kit.svelte.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5c01e8d384eee2bd00027b52c6bcf2cb0ecd6cc15a3e440ed5131ddc6d544d1d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5376656c74654b69742d322e782d4646334530303f6c6f676f3d7376656c7465266c6f676f436f6c6f723d7768697465" alt="SvelteKit"&gt;&lt;/a&gt;
&lt;a href="https://svelte.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9ce0ce79d749946e5482dbc9384b3147e016ac39c0607e26d9147026805fc7ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5376656c74652d352e34352d4646334530303f6c6f676f3d7376656c7465266c6f676f436f6c6f723d7768697465" alt="Svelte"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/284bb1f372759e321966b5711b3edb087b9fd971f2a06d8e6dbd886db85ae07f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e392d3331373843363f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://tailwindcss.com/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/96fc7677640ce1856f9e292074cde7936d58b3fb037746a38ff7eb6cde30dfb6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5461696c77696e642d76342d3036423644343f6c6f676f3d7461696c77696e64637373266c6f676f436f6c6f723d7768697465" alt="Tailwind CSS"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/dev-dash/releases/latest" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/54e7d54e2656f6c9bfdc1f4e9771767c0971f357a9b02586a71f5a145b6ddf00/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f5a6179616e2d4d6f68616d65642f6465762d646173683f6c6162656c3d52656c6561736526636f6c6f723d353861366666" alt="GitHub Release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/dev-dash/actions/workflows/ci.yml" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/1ef46ea0b2aa9be1508d1aac2b4e9eaab48e17379d887a5434aa04d96b914264/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f5a6179616e2d4d6f68616d65642f6465762d646173682f63692e796d6c3f6272616e63683d6d61696e266c6162656c3d4349" alt="CI"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/dev-dash/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/dev-dash/CONTRIBUTING.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/dd0b24c1e6776719edb2c273548a510d6490d8d25269a043dfabbd38419905da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e737667" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://github.com/Zayan-Mohamed/dev-dash/CHANGELOG.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/f0e1c25bf1b09b7e795fc112a317386df673faa7ee26ff16c23599d49012a0e5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368616e67656c6f672d4b656570253230612532304368616e67656c6f672d6f72616e6765" alt="Changelog"&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;
    &lt;strong&gt;Replace your Chrome new tab with a blazing-fast, keyboard-first developer dashboard&lt;/strong&gt;
  &lt;/p&gt;
  &lt;p&gt;
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-screenshots" rel="noopener noreferrer"&gt;Screenshots&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-installation" rel="noopener noreferrer"&gt;Installation&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-usage" rel="noopener noreferrer"&gt;Usage&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-development" rel="noopener noreferrer"&gt;Development&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash#-tech-stack" rel="noopener noreferrer"&gt;Tech Stack&lt;/a&gt; •
    &lt;a href="https://github.com/Zayan-Mohamed/dev-dash/CHANGELOG.md" rel="noopener noreferrer"&gt;Changelog&lt;/a&gt;
  &lt;/p&gt;
&lt;/div&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📸 Screenshots&lt;/h2&gt;
&lt;/div&gt;

&lt;div&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1e1e419e7b1f2d49bda3a70fac1de5a4b477c2ecaa6cae4a0fa4c13df3072700/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d6167652e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/1e1e419e7b1f2d49bda3a70fac1de5a4b477c2ecaa6cae4a0fa4c13df3072700/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d6167652e706e67" alt="DevDash Main View" width="800"&gt;&lt;/a&gt;
  &lt;p&gt;&lt;i&gt;Main dashboard with clock, top sites, and omnibar&lt;/i&gt;&lt;/p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/35562a3b3849e5ef46240c7caa7b09270a6d2dbc5777778aa066c8c4d46daacf/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d67322e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/35562a3b3849e5ef46240c7caa7b09270a6d2dbc5777778aa066c8c4d46daacf/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d67322e706e67" alt="DevDash Widgets" width="800"&gt;&lt;/a&gt;
  &lt;p&gt;&lt;i&gt;Optional widgets: Pomodoro, Notepad, Weather, and more&lt;/i&gt;&lt;/p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d882c5407cee115d54cda65e7e0dec4c6a31fc6095da31c66478fa8b7951c98f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d67332e706e67"&gt;&lt;img src="https://camo.githubusercontent.com/d882c5407cee115d54cda65e7e0dec4c6a31fc6095da31c66478fa8b7951c98f/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f5a6179616e2d4d6f68616d65642f6465762d646173682f7075626c69632f696d67332e706e67" alt="DevDash Settings" width="800"&gt;&lt;/a&gt;
  &lt;p&gt;&lt;i&gt;Customizable settings panel&lt;/i&gt;&lt;/p&gt;
&lt;/div&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Features&lt;/h2&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🎯 Core Features&lt;/h3&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Zero Latency&lt;/strong&gt; - Instant page load with compiled Svelte (no runtime overhead)&lt;/li&gt;
&lt;li&gt;⌨️ &lt;strong&gt;Keyboard First&lt;/strong&gt; - Command palette with Vim-inspired shortcuts&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Hacker Aesthetic&lt;/strong&gt; - GitHub Dark Dimmed theme with monospace fonts&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;Privacy Focused&lt;/strong&gt; - 100% local storage, zero tracking, no external calls&lt;/li&gt;
&lt;li&gt;🚀 &lt;strong&gt;Modern Stack&lt;/strong&gt; - Built with Svelte 5 (runes), SvelteKit, TypeScript, Tailwind v4&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🧩 Widgets &amp;amp; Components&lt;/h3&gt;

&lt;/div&gt;

&lt;p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;br&gt;
&lt;thead&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;th&gt;Widget&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;br&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/thead&gt;
&lt;br&gt;
&lt;tbody&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;🕐 &lt;strong&gt;Clock&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Large digital clock with 12/24h format &amp;amp; dynamic greeting&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;✅ Core&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;🔗 &lt;strong&gt;Top Sites&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Most visited sites from Chrome history&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;✅ Core&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;tr&gt;
&lt;br&gt;
&lt;td&gt;⌨️ &lt;strong&gt;Omnibar&lt;/strong&gt;&lt;br&gt;
&lt;/td&gt;
&lt;br&gt;
&lt;td&gt;Universal search/command bar&lt;/td&gt;
&lt;br&gt;
&lt;/tr&gt;
&lt;br&gt;
&lt;/tbody&gt;
&lt;br&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/dev-dash" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;p&gt;&lt;em&gt;Stars and PRs are welcome!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>svelte</category>
      <category>opensource</category>
      <category>chromeextension</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Stop paying the 'Vercel Tax' for hobby projects. Here is a complete walkthrough on how I built a powerful, self-hosted deployment platform using Linode and Coolify for just $5/month.</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Sat, 03 Jan 2026 07:36:36 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/stop-paying-the-vercel-tax-for-hobby-projects-here-is-a-complete-walkthrough-on-how-i-built-a-23d</link>
      <guid>https://forem.com/zayanmohamed/stop-paying-the-vercel-tax-for-hobby-projects-here-is-a-complete-walkthrough-on-how-i-built-a-23d</guid>
      <description>&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila" class="crayons-story__hidden-navigation-link"&gt;Goodbye Heroku: How I Built My Own PaaS on Linode for $5&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/zayanmohamed" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3665292%2F09df11c8-4f09-4b45-8740-06f65e0d499b.jpeg" alt="zayanmohamed profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/zayanmohamed" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Zayan Mohamed
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Zayan Mohamed
                
              
              &lt;div id="story-author-preview-content-3143681" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/zayanmohamed" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3665292%2F09df11c8-4f09-4b45-8740-06f65e0d499b.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Zayan Mohamed&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jan 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila" id="article-link-3143681"&gt;
          Goodbye Heroku: How I Built My Own PaaS on Linode for $5
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/selfhosting"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;selfhosting&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/coolify"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;coolify&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/linode"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;linode&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;




</description>
      <category>devops</category>
      <category>selfhosting</category>
      <category>coolify</category>
      <category>linode</category>
    </item>
    <item>
      <title>Goodbye Heroku: How I Built My Own PaaS on Linode for $5</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Fri, 02 Jan 2026 16:06:49 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila</link>
      <guid>https://forem.com/zayanmohamed/goodbye-heroku-how-i-built-my-own-paas-on-linode-for-5-2ila</guid>
      <description>&lt;p&gt;We all love the "git push to deploy" magic of platforms like Vercel, Netlify, and Heroku. But once your hobby project scales or you need a backend database, the pricing tiers can get scary fast.&lt;/p&gt;

&lt;p&gt;I recently decided to take back control. I wanted the Developer Experience (DX) of a PaaS but the price tag of a raw VPS.&lt;/p&gt;

&lt;p&gt;Enter the power couple: &lt;strong&gt;Linode&lt;/strong&gt; (for the hardware) and &lt;strong&gt;Coolify&lt;/strong&gt; (for the magic).&lt;/p&gt;

&lt;h3&gt;
  
  
  Why This Stack?
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. The Hardware: Linode
&lt;/h4&gt;

&lt;p&gt;I chose Linode because it’s reliable, straightforward, and Linux-centric. You don't need to navigate a maze of IAM roles and VPCs just to launch a server. A standard "Shared CPU" Nanode starts at $5/month, which is plenty for a few containerized apps and a small database.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. The Software: Coolify
&lt;/h4&gt;

&lt;p&gt;If you haven't heard of &lt;a href="https://coolify.io/" rel="noopener noreferrer"&gt;Coolify&lt;/a&gt;, it’s an open-source, self-hostable Heroku alternative. It gives you a beautiful dashboard to manage your applications, databases, and services. It handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverse Proxies (Traefik) automatically.&lt;/li&gt;
&lt;li&gt;SSL Certificates (Let's Encrypt) automatically.&lt;/li&gt;
&lt;li&gt;Databases (Postgres, Redis, MySQL) with one click.&lt;/li&gt;
&lt;li&gt;Deployments from GitHub/GitLab.&lt;/li&gt;
&lt;li&gt;Even better: you can host your own &lt;strong&gt;Gitea&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Setup Process
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Spin up the Server&lt;/strong&gt;&lt;br&gt;
Head over to Linode and create a new Compute Instance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image:&lt;/strong&gt; Ubuntu 24.04 LTS (always bet on LTS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Region:&lt;/strong&gt; Pick whatever is closest to your users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan:&lt;/strong&gt; Nanode 1GB (or higher if you plan to host heavy apps).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: DNS Configuration&lt;/strong&gt;&lt;br&gt;
Point your domain (e.g., &lt;code&gt;paas.yourdomain.com&lt;/code&gt;) to your new Linode IP address. This will be the dashboard for your Coolify instance.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 3: Secure the Server &amp;amp; Install (The Right Way)
&lt;/h3&gt;

&lt;p&gt;Before we run the magic Coolify script, we need to do some housekeeping. Remember, when you move from Vercel to a VPS, &lt;strong&gt;you&lt;/strong&gt; are the security team.&lt;/p&gt;
&lt;h4&gt;
  
  
  3.1 First Contact &amp;amp; Updates
&lt;/h4&gt;

&lt;p&gt;SSH into your new Linode instance. If you added your SSH keys during the Linode creation process (highly recommended), use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh root@&amp;lt;your-linode-ip&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once inside, update the package repositories to ensure we aren't installing stale software.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3.2 Configure the Firewall (UFW)
&lt;/h4&gt;

&lt;p&gt;Ubuntu comes with &lt;code&gt;ufw&lt;/code&gt; (Uncomplicated Firewall). We want to close every door except the ones we need.&lt;/p&gt;

&lt;p&gt;Coolify needs a few specific ports open to function:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;22:&lt;/strong&gt; SSH (So you don't lock yourself out!)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80:&lt;/strong&gt; HTTP (For web traffic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;443:&lt;/strong&gt; HTTPS (For secure web traffic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8000:&lt;/strong&gt; The Coolify Dashboard (You can close this later or proxy it, but keep it open for setup)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6001:&lt;/strong&gt; (Optional) If you plan to use the real-time service feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run these commands one by one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8000/tcp
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Press &lt;code&gt;y&lt;/code&gt; when it warns you that this might disrupt existing SSH connections.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  3.3 The Install
&lt;/h4&gt;

&lt;p&gt;Now that the fortress is built, let's install the commander.&lt;/p&gt;

&lt;p&gt;Coolify works best on a &lt;strong&gt;fresh&lt;/strong&gt; server. It relies heavily on Docker and its own internal reverse proxy. If you have Nginx or Apache already running on port 80, the installation will fail.&lt;/p&gt;

&lt;p&gt;Run the official install script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://cdn.coollabs.io/coolify/install.sh | bash

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What is this script actually doing?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It installs &lt;strong&gt;Docker Engine&lt;/strong&gt; (if not found).&lt;/li&gt;
&lt;li&gt;It creates a data directory at &lt;code&gt;/data/coolify&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It pulls the necessary Docker images for the Coolify database and API.&lt;/li&gt;
&lt;li&gt;It sets up a restart policy so your PaaS comes back up if the server reboots.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  3.4 Verification
&lt;/h4&gt;

&lt;p&gt;The script usually takes 2–5 minutes depending on your Linode plan. Once it returns you to the command prompt, verify that the containers are humming along:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker ps

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see &lt;code&gt;coolify&lt;/code&gt;, &lt;code&gt;coolify-db&lt;/code&gt;, and &lt;code&gt;coolify-proxy&lt;/code&gt; listed. If you see them, you're golden.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Always verify scripts before running them on your server!&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Step 4: The Dashboard&lt;/strong&gt;&lt;br&gt;
Once the installation finishes, visit your domain (port 8000). You’ll be greeted by the Coolify setup wizard. From here, you can connect your GitHub account.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Aha!" Moment
&lt;/h3&gt;

&lt;p&gt;The magic happens when you deploy your first app.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select your repository in Coolify.&lt;/li&gt;
&lt;li&gt;Choose your build pack (Node, Docker, Rust, Go, etc.).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Coolify will pull your code, build the container, set up the internal networking, generate an SSL certificate, and expose it to the internet.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pros vs. Cons
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost:&lt;/strong&gt; Fixed monthly cost (Linode) regardless of bandwidth spikes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; You own your data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Limits:&lt;/strong&gt; No "build minutes" or "bandwidth caps" other than what your VPS provides.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Maintenance:&lt;/strong&gt; You are now the sysadmin. If the server goes down, you have to fix it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setup Time:&lt;/strong&gt; Takes about 15-30 minutes upfront compared to 2 minutes on Vercel.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Building your own PaaS might sound like overkill, but tools like Coolify have lowered the barrier to entry significantly. For the price of a coffee, you get a powerful, private, and professional deployment environment.&lt;/p&gt;

&lt;p&gt;If you have a spare domain and $5, give it a try. You might never go back to managed hosting again.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk47gq81gqoj5w5ufhkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjk47gq81gqoj5w5ufhkn.png" alt="Coolify on Linode" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>selfhosting</category>
      <category>coolify</category>
      <category>linode</category>
    </item>
    <item>
      <title>Stop Manual Configs: How I Built a Fully Reproducible Linux Dev Environment</title>
      <dc:creator>Zayan Mohamed</dc:creator>
      <pubDate>Fri, 26 Dec 2025 11:09:57 +0000</pubDate>
      <link>https://forem.com/zayanmohamed/stop-manual-configs-how-i-built-a-fully-reproducible-linux-dev-environment-3584</link>
      <guid>https://forem.com/zayanmohamed/stop-manual-configs-how-i-built-a-fully-reproducible-linux-dev-environment-3584</guid>
      <description>&lt;p&gt;We’ve all been there. You get a new machine, or your OS crashes, and you spend the next three days trying to remember that specific &lt;code&gt;.zshrc&lt;/code&gt; alias or that one Neovim LSP setting that made everything work.&lt;/p&gt;

&lt;p&gt;I decided to end the "Mystery State" of my machine. I built a dotfile management system that turns "Setup" into a single command.&lt;/p&gt;

&lt;h3&gt;
  
  
  My Philosophy: One Repo to Rule Them All
&lt;/h3&gt;

&lt;p&gt;I wanted a setup that followed three rules:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No Manual Copying:&lt;/strong&gt; Everything is symlinked. If I change a config, it’s already in the git repo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Idempotent:&lt;/strong&gt; Running the install script twice shouldn't break anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health Checks:&lt;/strong&gt; A script that tells me if a symlink is broken or if I'm missing a dependency like &lt;code&gt;ripgrep&lt;/code&gt; or &lt;code&gt;fzf&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;

&lt;p&gt;My repository 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Zayan-Mohamed" rel="noopener noreferrer"&gt;
        Zayan-Mohamed
      &lt;/a&gt; / &lt;a href="https://github.com/Zayan-Mohamed/dot_files" rel="noopener noreferrer"&gt;
        dot_files
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Personal Linux dotfiles managed in a single repo with symlinks for a fully reproducible setup. Includes terminal configs, Zsh + Powerlevel10k, Neovim (80+ plugins), helper scripts, health checks, and detailed documentation.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;dot_files&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/69eafbae32834aa69c194479d55fc323aba7f8f6f0155d84f231e1f44da6fbd0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6f732d6c696e75782d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/69eafbae32834aa69c194479d55fc323aba7f8f6f0155d84f231e1f44da6fbd0/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6f732d6c696e75782d626c7565" alt="OS"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/46070d4867e8f55ca0e62f2e40ec0e6c958796085c2b3c368eee5270de073ff7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7368656c6c2d7a73682d677265656e"&gt;&lt;img src="https://camo.githubusercontent.com/46070d4867e8f55ca0e62f2e40ec0e6c958796085c2b3c368eee5270de073ff7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f7368656c6c2d7a73682d677265656e" alt="Shell"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/873669b05b5258a89c3dc6814dffee4c50de8e1f3d8feec53181749d0d6521e9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f656469746f722d6e656f76696d2d353741313433"&gt;&lt;img src="https://camo.githubusercontent.com/873669b05b5258a89c3dc6814dffee4c50de8e1f3d8feec53181749d0d6521e9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f656469746f722d6e656f76696d2d353741313433" alt="Editor"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5e0abb27bc77af909f6e0c7cd00eee168f348ba6cbde1d3b1bcb5789c20477fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c61636b"&gt;&lt;img src="https://camo.githubusercontent.com/5e0abb27bc77af909f6e0c7cd00eee168f348ba6cbde1d3b1bcb5789c20477fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c61636b" alt="License"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A fully reproducible Linux development environment built around symlinks.&lt;/p&gt;
&lt;p&gt;This repository manages everything in &lt;code&gt;~/.config&lt;/code&gt; and essential dotfiles in &lt;code&gt;~&lt;/code&gt;, all tracked in one place and safely symlinked back to the system.&lt;br&gt;
The goal is simple: clone the repo, run one script, and get &lt;em&gt;your exact setup&lt;/em&gt; every time.&lt;/p&gt;
&lt;p&gt;No manual copying. No drift. No mystery state.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;What this repo gives you&lt;/h3&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;A clean, versioned &lt;code&gt;~/.config&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Predictable dotfiles in &lt;code&gt;~&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Idempotent install and update scripts&lt;/li&gt;
&lt;li&gt;Health checks to catch broken symlinks&lt;/li&gt;
&lt;li&gt;A heavily tuned Neovim setup with documentation&lt;/li&gt;
&lt;li&gt;A Zsh environment that feels fast, safe, and modern&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;⭐ Recent Enhancements&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🚀 Starship Prompt Integration&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;This dotfiles setup now includes &lt;strong&gt;&lt;a href="https://starship.rs/" rel="nofollow noopener noreferrer"&gt;Starship&lt;/a&gt;&lt;/strong&gt;, a blazing-fast, cross-shell prompt written in Rust! It works alongside Powerlevel10k, giving you the flexibility to switch between themes instantly.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Why Starship?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;⚡ &lt;strong&gt;Blazing Fast&lt;/strong&gt; - Written in Rust for maximum performance&lt;/li&gt;
&lt;li&gt;🎨 &lt;strong&gt;Beautiful&lt;/strong&gt; - Rich colors…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Zayan-Mohamed/dot_files" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;br&gt;
uses a clean separation of concerns:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/config&lt;/code&gt;&lt;/strong&gt;: Mirrors &lt;code&gt;~/.config&lt;/code&gt; (Alacritty, Kitty, Neovim).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/home&lt;/code&gt;&lt;/strong&gt;: Essential dotfiles that live in the root (like &lt;code&gt;.zshrc&lt;/code&gt; or &lt;code&gt;.gitconfig&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;/scripts&lt;/code&gt;&lt;/strong&gt;: The engine room. Includes &lt;code&gt;health_check.sh&lt;/code&gt; and &lt;code&gt;update.sh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. The "Health Check" Script
&lt;/h4&gt;

&lt;p&gt;Most dotfile repos just link files and walk away. I added a &lt;code&gt;health_check.sh&lt;/code&gt; that verifies every symlink and checks if my favorite CLI tools (bat, eza, fd) are actually installed. No more "Command not found" surprises.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. A 6-Week Neovim Mastery Path
&lt;/h4&gt;

&lt;p&gt;My Neovim setup has 80+ plugins, which can be overwhelming. To solve this, I wrote a full &lt;strong&gt;&lt;a href="https://github.com/Zayan-Mohamed/dot_files/blob/main/NVIM_STUDY_GUIDE.md" rel="noopener noreferrer"&gt;NVIM_STUDY_GUIDE.md&lt;/a&gt;&lt;/strong&gt; inside the repo. It’s not just a config; it’s a curriculum for learning LSP, Telescope, and Git integration.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Modern Tooling
&lt;/h4&gt;

&lt;p&gt;The shell environment is built for speed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zsh + Powerlevel10k&lt;/strong&gt; for the UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FZF-lua&lt;/strong&gt; for lightning-fast searches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ghostty/Alacritty/Kitty&lt;/strong&gt; support built-in.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  How to use it
&lt;/h3&gt;

&lt;p&gt;If you want to try it out or fork it for your own needs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone git@github.com:Zayan-Mohamed/dot_files.git ~/dot_files
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/dot_files
./scripts/install.sh

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Managing your system as code isn't just for DevOps—it's for anyone who values their time. By version-controlling your &lt;code&gt;~/.config&lt;/code&gt;, you treat your development environment with the same respect as your production code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check out the full repository here:&lt;/strong&gt; &lt;a href="https://github.com/Zayan-Mohamed/dot_files" rel="noopener noreferrer"&gt;Zayan-Mohamed/dot_files&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I’d love to hear from you:&lt;/strong&gt; Do you use a manager like GNU Stow or Chezmoi, or do you prefer custom bash scripts like I do? Let's discuss in the comments!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp61dyyz0x3z4fqhery1e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp61dyyz0x3z4fqhery1e.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>productivity</category>
      <category>dotfiles</category>
      <category>neovim</category>
    </item>
  </channel>
</rss>
