Skip to main content
Photo of DeepakNess DeepakNess

Raw Notes

Raw notes include useful resources, incomplete thoughts, ideas, micro thoughts, and learnings as I go about my day. Below, you can also subscribe to the RSS feed to stay updated:

https://deepakness.com/feed/raw.xml

Total Notes: 209


Forcefully update open graph images for X (Twitter)

For my Omarchy Hub project, I changed my open graph image but X/Twitter was still showing the old image for days. I changed the image filename, tried using Bitly short links, cleared all build cache, but nothing worked.

I followed the steps explained in this troubleshooting cards page, they recommended adding a random parameter, something like ?4362984378, at the end of my open graph image URL, but it didn't work either.

<meta name="twitter:image" content="http://example.com/myimage.jpg?4362984378"></meta>

Then what worked?

I discovered that adding a random query parameter at the end of the URL, that you're going to share on X, works perfectly. X treats this as a new URL and re-fetches the card image. For example, you can add something like ?test=1 like below example, or whatever random query parameter you like. And then share this URL on X.

https://omarchy.deepakness.com/setups?test=1

But don't worry, adding the query parameter isn't going to break the URL or affect the content shown on the page. It's perfectly safe to use this.


Claude brings web fetch tool to the API

Now, you can search live on the internet when using the Claude API, because Anthropic has brought the new web fetch tool which can search for relevant information online, in the background, and then return the output.

The web fetch tool is currently in beta. To enable it, use the beta header web-fetch-2025-09-10 in your API requests.

And here's the example code provided that you can use to use the web-fetch tool:

curl https://api.anthropic.com/v1/messages \
    --header "x-api-key: $ANTHROPIC_API_KEY" \
    --header "anthropic-version: 2023-06-01" \
    --header "anthropic-beta: web-fetch-2025-09-10" \
    --header "content-type: application/json" \
    --data '{
        "model": "claude-opus-4-1-20250805",
        "max_tokens": 1024,
        "messages": [
            {
                "role": "user",
                "content": "Please analyze the content at https://example.com/article"
            }
        ],
        "tools": [{
            "type": "web_fetch_20250910",
            "name": "web_fetch",
            "max_uses": 5
        }]
    }'

You have to pass the web-fetch in the API request and it works in the background and gives you the output, as you can see in the example above.


x402-mcp: Open protocol for mcp payments

Came across this post on X, where Vercel launched x402 which helps you build paid MCP tools, as you can try out in the demo here. It's explained as:

x402 is an open protocol that addresses this by adding payment directly into HTTP requests. It uses the 402 Payment Required status code to let any API endpoint request payment without prior account setup.

They have also created a starter which you can use to quickly build paid MCP tools.


Fix Claude Code adding 2024 to web searches

Came across a post on X that talked about fixing the issue of Claude Code adding 2024 to its web search queries, even though it's 2025 already.

So Daniel built a simple tool that fixes this, and you can install the tool by running the following command in your terminal:

npx claude-code-templates@latest --hook=pre-tool/update-search-year --yes

Here, you can find more info about the implementation. This is very helpful.


Created a resource library for Omarchy

I loved Omarchy, the new Arch-based Linux distribution created or rather popularized by DHH and couldn't help myself to create a resource website for the distro. So I created Omarchy Hub that contains setups, themes, resources, and much more information about Omarchy.

It's open-source and anyone can contribute here to make the website better.

My current flow is, whenever I see some new information about Omarchy while browsing the internet, I just take a minute to collect and add it to the website. I have multiple JSON files where I have to add the info, but AI makes the process very easy as I can just provide the URL and the screenshot, and it automatically adds a new item to the relevant JSON files.

Also, I am constantly improving the user-experience and trying to make it into an even more helpful resource library for Omarchy.


The best way to raise prices

Loved this post on X explaining how to responsibly raise your prices without driving anyone mad:

  1. Say how long it's been since prices were raised.
  2. Show how much better the product is now.
  3. Show how your costs have gone up as a result.

The post features Nathan's SaaS Kit (previously ConvertKit), the leading email marketing tools provider.


Linux is faster than macOS

Came across this post from DHH explaining Linux is way faster than macOS in real life, and to be exact over 7x faster for the below task:

curl -L https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.16.tar.xz -o linux.tar.xz
time tar -xf linux.tar.xz

Running the above command on Framework desktop, with Omarchy installed, takes around 1.6 seconds whereas it takes 12.2 seconds on MBP M4 Pro. And here is what GPT-5 explains about why there's so much speed difference.

Actually, another person ran the same tests and it was similar, Linux was way faster.


Hosting a Next.js app on a Hetzner VPS via Coolify

A quick guide to host a Next.js app on a Hetzner VPS via Coolify:

  1. Set up an Ubuntu Hetzner VPS and grab the public IP
  2. Connect to the server from your terminal via SSH
    ssh root@[IP_ADDRESS]
  3. Update and upgrade the Ubuntu server
    sudo apt update && sudo apt upgrade
  4. Install Coolify on the server by running the following command
    curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
  5. After successful installation, visit http://[ID_ADDRESS]:8000 and register a new account
  6. Connect your private or public GitHub repo and publish your Next.js app

I have also created this step-by-step YouTube video explaining everything from creating the VPS to installing Coolify and hosting the website.


Reset Windows 11 password when you're locked out

After updating the Windows 11 OS, my sister's laptop was locked out and the existing pin and password were not working at all. We tried several things, but nothing seemed to work. In fact, we even changed the Microsoft account's password from a different device, but it still wasn't able to log in (even though the Wi-Fi was on).

But we finally got a working solution from this video (method 2), but I had to improvise at the end a bit:

  1. Boot your laptop in the Recovery Mode, I had to keep pressing F11 repeatedly after pressing the power button
  2. Click on the Troubleshoot > Advanced options > Command Prompt option which will open a new CMD window
  3. Run the following commands one-by-one in the command prompt window:
    C:
    
    cd Windows/System32
    
    ren utilman.exe utilman1.exe
    
    ren cmd.exe utilman.exe
    
    exit
  4. Then click on Continue and start the Windows 11
  5. When laptop restarts and login screen appears, click on the Accessibility button in the bottom-right area
  6. It opens the command prompt window, where you have to run the following command:
    control userpasswords2
  7. The above command opens the User Accounts window
  8. User's name should be visible, click on it, select Reset Password below and change the password
  9. Now, close everything and restart, and you should be able to log in with the new password

Most of the steps are shown in the video in the method 2 section, but I had to do it a bit differently at the end (only #8 in the above steps is different from the video).

After that I copied all my data to an external drive and reset the PC from Settings using the 'Cloud install' option. The local and cloud reinstall options in recovery mode had failed earlier – the reinstall only worked after I signed in.


Order vs chaos

Came across this post on X where this image was shared that showed "order" vs "chaos". And that hit me really hard.

Someone the post replied, "chaos is the highest form of order", and I was like 🤯.

How accurate!


aria2 download utility tool

Came to know about this aria2 download utility CLI tool which can download anything and everything from the web, even torrent files. I got to know about this from this reply to my post on X.

brew install aria2

I installed this via homebrew by running the above command, and it does seem to be working great so far.


How to add Perplexity MCP to Claude Code

Below is the command to add the Perplexity API to Claude Code:

claude mcp add perplexity -e PERPLEXITY_API_KEY={perplexity_api_here} -- npx -y perplexity-mcp

You have to replace {perplexity_api_here} with the API from Perplexity and then run the command. When you run the command, it modifies the ~/.claude.json file to add the MCP globally.

And I learned about this from this GitHub repo and this page on Anthropic docs.


Remove mistakenly pushed files from GitHub

I accidentally pushed an incomplete blog post .md file to GitHub for my personal blog, and then had to remove from GitHub without deleting it locally. So I looked it up, and this is how it's done:

  1. Remove the file from Git tracking (but keep it locally)
git rm --cached content/blog/still-brave-browser/index.md
  1. Commit the removal
git commit -m "Commit message"
  1. Push the changes to GitHub
git push origin main

Basically, the git rm --cached command removes the file from Git's tracking without deleting it from your local filesystem, so you can continue editing it.


Using Claude Code for non-coding tasks

I came across this post on X where Lenny asked how people are using Claude Code for non-coding related tasks. To which several people replied cool ways they are using it, and I couldn't help but to list some interesting use cases here:

  1. Using Ahrefs, GA4, and GSC MCPs to find high converting pages and come up with new pillars to go after. (Link)
  2. Browserbase and Apify MCPs to find videos over 100k views in the last 90 days in the niche, and plan YouTube strategy.
  3. Obsidian, Notion, and Linear MCPs to write PRDs, auto-generate wikis, projects, and issues. (Link)
  4. Using Claude Code as a doc editor for brainstorming and planning tasks. It's explained in detail here.
  5. Researching and taking notes from YouTube videos by using the Apple Notes MCP and some CLI tools for getting YouTube transcripts. Explained here.
  6. For brainstorming domain names and checking their availability by using this MCP and the process is explained here.

So cool! I will definitely be using some of these workflows.


Modern font loading guide

I came across this blog post from Jono Alderson and learned a lot about how to best load modern fonts so that they do not slow down the website. And below are the notes that I took from the post:

Core fundamentals

  • Use WOFF2 format only: It's the most efficient and universally supported
  • Self-host fonts: Don't rely on Google Fonts or other CDNs for better performance and privacy

Loading strategy

  • Set font-display: swap: Shows fallback text immediately, then swaps when webfont loads
  • Preload critical fonts: Use the rel="preload" tag as shown below
    <link rel="preload" as="font" type="font/woff2" crossorigin href="/fonts/font.woff2">
  • Inline @font-face declarations: Put them in the <head> rather than external CSS files
  • Design with fallbacks first: Choose system fonts that match your custom font's metrics

File optimization

  • Subset fonts aggressively: Only include characters/scripts you actually need using unicode-range
  • Use variable fonts strategically: Only when they're smaller than multiple static files
  • Avoid legacy formats: No need for TTF, OTF, WOFF, or SVG fonts in modern browsers
  • Never use icon fonts: Replace with inline SVG or SVG sprites instead

Metrics and layout stability

  • Match fallback metrics: Use size-adjust, ascent-override, descent-override to prevent layout shift
  • Use font-size-adjust: Scale fallback fonts to match your custom font's x-height
  • Prevent fake bold/italic: Set font-synthesis: none and only declare weights you provide

System and fallbacks

  • Build robust system stacks: Start with -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto
  • Include emoji fonts in stack: Add system emoji fonts rather than shipping custom emoji
  • Test across platforms: Different OS render fonts differently

Performance monitoring

  • Set font budgets: Limit number of weights and file sizes
  • Test on slow networks: Use DevTools to simulate poor conditions
  • Measure layout shift: Monitor CLS caused by font loading

That's it.

By the way, I got to know about this blog post from a post on X when I was casually browsing.


Audacity audio app but on the web

Someone put the Audacity audio app on the web and named it Wavacity, and it's amazing. Worked as expected when I tried recording something directly from my laptop.

And I came to know about this from an X post. Sooo cool!


How to build a web search engine

While scrolling on X, I came across this super technical blog post about building a web search engine from scratch with 3 billion neural embeddings.

  • 3B SBERT embeddings
  • ~280M pages indexed
  • ~50k pages/sec crawl
  • ~500 ms query latency

In the post, Wilson Lin talks about topics like parsing the web, chunking text, crawler, pipeline and queues, storage (RocksDB with BlobDB), service mesh, embeddings at scale, vector search, latency (Cloudflare Argo + server-side streaming HTML), costs, etc.

For embeddings, he started with OpenAI, then ran his own inference on Runpod RTX 4090s. Rust wrapped the Python model with async stages to keep GPUs busy – reaching ~100K embeddings/sec across ~250 GPUs, ~90% GPU utilization.

The blog post is so detailed that I am unable to understand everything as of now, but I'm noting this down in my raw notes section for future references.


How to become a better programmer

I was scrolling and came across this post, where the OP has shared how one can become a better programmer by using AI tools like Claude Code. The post says:

Here's how to become a better programmer in 2025 for $200/month:

  1. Find an open source project you like.
  2. Clone it locally.
  3. Get Claude Code Max ($200/month).
  4. Let Opus 4.1 loose on the codebase and have it explain to you how things work.

Repeat this process with different projects.

And I couldn't agree more with this.

I was discussing the same thing with my friend Amit Sarda only yesterday that instead of starting to learn programming from the start, it's better to learn while vibe coding.

I am definitely going to try this, maybe not with Claude Code, but with Cursor by simply asking to explain the codebase. And can also ask in detail about certain aspects of the codebase.

Update:

Below the same original post, someone shared another way to have the codebase explained in an easy-to-understand way. You just have to replace github.com with deepwiki.org in the URL, and it opens the explained version of the repo. However, this doesn't work on all public repositories, but definitely works on all popular repositories.


Groq subtitle generator

Only a week ago, Groq has released an open-source tool to generate subtitles for videos in multiple languages, and it works like a charm. It has a web interface to upload videos, select languages, generate subtitles, and preview videos with subtitles.

I also found an informative post explaining how it works, and the post also shows examples of the quality of the subtitles. It's perfect, and 10x better than the YouTube's default auto-caption tool.

Backend tech-stack is:

  • FastAPI
  • Groq API
  • FFmpeg
  • Pydantic

And for frontend:

  • Next.js 15
  • TypeScript
  • Tailwind CSS
  • Lucide React

The best thing is, it extracts the audio only (by using FFmpeg) when you upload the video, and then the .wav audio is sent to Groq to process. It uses the OpenAI’s Whisper Large V3-turbo model but the Groq-hosted version, and then Qwen3-32b model by Groq is used for translating into the selected language.

One issue is, as of now it creates burned-in subtitles only, but still very impressive.

Update: I tweeted asking whether one can create soft subtitle and download the file as a .srt file, and they actually added a new branch that does this.

It would be really fun to use a local LLM to do this, and also build a desktop app to do this locally. I am already thinking about this, and might build one.


Fine-tuning gpt-oss

Found this quick guide to fine-tune gpt-oss model completely locally by using the Unsloth AI and Hugging Face transformers. It's a very simple-to-follow tutorial. I think, the only complex task here is to prepare the dataset for fine-tuning, otherwise it's straightforward.

Apart from this, there is also a blog post on the Unsloth AI website about fine-tuning the new OpenAI's gpt-oss model. And there's this video as well that I found to be very helpful.


Funny email typos

Came across a post on Instagram listing out some hilarious and witty email typos, and I couldn't help myself collecting here:

  1. Let's touch later
  2. I'll update you shorty
  3. Good moaning
  4. Please view the attacked documents
  5. Dear sir or madman
  6. I hope this male finds you
  7. Due to the circumcision
  8. Best regrets
  9. Thanks for your massage
  10. Genital reminder
  11. Wishing you a peasant day
  12. Hoe can I help you?
  13. Kind/best retards
  14. Best dishes
  15. You are tight
  16. Let's meat tomorrow
  17. I appreciate your patients

Obviously, most of these are completely intentional, but I burst out laughing when collecting these. So funny.


Carl Jung about sufferings of unlived lives

Came across this post on X and found this fascinating quote:

The world is full of people suffering from the effects of their own unlived life. They become bitter, critical, or rigid, not because the world is cruel to them, but because they have betrayed their own inner possibilities. The artist who never makes art becomes cynical about those who do. The lover who never risks loving mocks romance. The thinker who never commits to a philosophy sneers at belief itself. And yet, all of them suffer, because deep down they know: the life they mock is the life they were meant to live.

– Carl Jung

Though it's a combination of quotes from different Carl Jung works, it does resonate and is explained in a very thoughtful way.


OpenAI GPT-5 is here

Yes, the most awaited GPT-5 is finally here, and I got to watch the announcement livestream and also tried it for a few hours inside Cursor AI for coding. And my experience is kind of mixed here.

Initially, I thought that it's a great model as it did a few tasks better than Claude latest Sonnet and Opus models. But slowly I realized that it's not as good as they are advertising and hyping.

  • Yes, it's better than all previous OpenAI models, even the O-series ones
  • But overall Claude models are still better when it comes to coding

I haven't tried it a lot for writing and other tasks, but I am a bit disappointed when it comes to coding. Also, I noticed that it works way slower than Claude Sonnet 4 inside Cursor.

Somehow, I see GPT-5 in the ChatGPT app on my Android device, but I am still not seeing it on my desktop in the browser.

I am still testing the model for coding and other things and will keep updating the post.