Skip to main content
Photo of DeepakNess DeepakNess

Raw Notes

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

Total Notes: 153


The Mobian project

Came across this crazy Mobian project that enables your Android phones to run fully native Linux KDE Plasma, as explained in this video. You can multi-task just like how you do on a desktop, and also install and run any supported apps.

They have a detailed wiki that you can go through and start installing it on the devices it currently supports. The only cons is that it doesn't support front or rear camera currently, otherwise all other functionalities work perfectly.

I would love to learn more about it, and would definitely install it on a device to test it.


Auth and payments on Chrome extensions

Came across this tweet and started exploring different solutions for adding authentication and payments for Google Chrome extensions. And I did find a few options that I have yet to try, but I will be listing out all different options for future references:

  1. Authenticate users with Google: Found this page on Chrome docs that teaches you how to use Google auth for Chrome apps, and it seems very detailed as it covers most of the required things.
  2. Authenticate with Firebase: Yes, Firebase docs also has a detailed page about using the Firebase auth for Chrome extensions. And from the first look, it looks simpler than the #1 method above.
  3. ExtensionPay: Found this amazing open-source API to accept payments in Chrome extensions. It has multi-browser and multi-device login supports. They also have a detailed documentation about the same, and also noticed it being mentioned at multiple places for being the easiest to set up.
  4. BrowserBill: I also found this solution being mentioned as a way to easily monetize Chrome extensions.
  5. Plasmo: A complete browser extension open-source SDK that claims to make the development process faster - calls itself Next.js for browser extensions.
  6. Better-Auth for Extensions: Can be used as an auth solution for Chrome extensions, uses Plasmo in the background.
  7. ExtensionFast: Another react-based boilerplate with inbuilt payments, auth, database, etc.

Of course, one can directly use Stripe or PayPal for accepting payments but those are a bit complicated to set up, at least for me at this point. I am seeing more and more people using the #3 ExtensionPay option for payments, as being discussed in forums and communities.

While researching, I found some other useful stuff for building Chrome extensions as well:

  1. ChromeKit: A boilerplate with ReactJS and TailwindCSS to speed up the development process. Started from $49 at the time.
  2. TurboStarter: Another boilerplate, not specific to Chrome extensions, but does have an option for extensions. Costlier, starts from $199.

And then I also found this informative blog post about different ways of earning money from Chrome extensions.


Coolify is awesome

Recently, I set up a Coolify instance on a Hetzner VPS and I am loving it so far. I didn't know that I can do a lot of things using Coolify, and all for free.

Although, the documentation for Coolify installation should be a bit more descriptive for new-comers like me. There are so many things that are not mentioned in the docs, that I had to look up on Google or ask ChatGPT. But it's good overall, as I got it working.

As of now, I have a Postgres database hosted on the VPS and have also hosted a simple yet full-stack Next.js app. It's working flawlessly.


Showing date as well as time in WordPress

I thought I will need another plugin to also show the time in addition to the published/modified date in WordPress, but no. Not to mention, I am talking about Full Site Editing themes.

When editing a template, click on the post/page date field and turn off the Default format toggle and then select the preferred format from the dropdown that appears, as you can see in this screenshot. You can choose something like Apr 29, 2025 4:40 AM and it would work perfectly.

And the same can be done to the last modified date, just turn on the Display last modified date, turn off the Default format toggle and then select your preferred format.


Self-hosted n8n password reset

For some reason, my self-hosted n8n instance is not remembering the password and wasn't letting me log in using the same credentials I created the account with. And all the docs about resetting passwords are very confusing, either deliberately or otherwise.

But I was finally able to reset mine after spending almost an hour.

First, I logged into my server via SSH by running ssh root@<your-ip-address> and then ran the following command:

docker exec -u node -it n8n-docker-caddy-n8n-1 n8n user-management:reset

It returned "Successfully reset the database to default user state." message. After that I restarted by Hetzner server (where it's hosted) and then the user was reset and I could reset my password.

And yes, all my n8n scenarios did not get deleted after the process.


Keybindings to stage, commit, and sync at once

Came across this tweet that provides a keybinding to automatically stage, generate AI commit message, commit, and sync with GitHub inside Cursor (below, I added the VS Code version as well). Not much, it's going to save 10-20 seconds each time you push your code.

Keybindings for Cursor AI

{
    "key":"ctrl+enter",
    "command":"runCommands",
    "args":{
        "commands":[
        {
            "command":"git.stageAll"
        },
        {
            "command":"cursor.generateGitCommitMessage"
        },
        {
            "command":"git.commitAll"
        },
        {
            "command":"git.sync"
        }
        ]
    }
}

To use this, press cmd+shift+p on macOS or ctrl+shift+p on Windows and type "Preferences: Open Keyboard Shortcuts (JSON)". It opens a file called keybindings.json where you have to add the above JSON code (do not delete the existing code though).

My entire keybindings.json file looks something like this:

// Place your key bindings in this file to override the defaults
[
    {
        "key": "cmd+i",
        "command": "composerMode.agent"
    },
    {
        "key":"ctrl+enter",
        "command":"runCommands",
        "args":{
            "commands":[
            {
                "command":"git.stageAll"
            },
            {
                "command":"cursor.generateGitCommitMessage"
            },
            {
                "command":"git.commitAll"
            },
            {
                "command":"git.sync"
            }
            ]
        }
    }
]

Keybindings for Copilot in VS Code

If you're using GitHub Copilot in VS Code, then the JSON would be like this:

{
    "key":"ctrl+enter",
    "command":"runCommands",
    "args":{
        "commands":[
        {
            "command":"git.stageAll"
        },
        {
            "command":"github.copilot.git.generateCommitMessage"
        },
        {
            "command":"git.commitAll"
        },
        {
            "command":"git.sync"
        }
        ]
    }
}

And then when you press ctrl+enter while being inside Cursor or VS Code, it automatically stages all changes, generates AI commit messages, commits, and then pushes to GitHub within seconds.


Spent $4,300 on AI tools

From early 2023 until today, I have spent around $4,300 on AI tools trying, experimenting, and creating content. I have also tweeted about the same, but here's the breakdown:

Tool Name Amount Months Used Total
OpenAI API $3,384.00 $3,384.00
Anthropic API $50.00 $50.00
Perplexity API $25.00 $25.00
DeepSeek API $10.00 $10.00
GroqCloud API $15.00 $15.00
fal.ai API $32.00 $32.00
ChatGPT Plus $20.00 15 $300.00
Claude Pro $20.00 6 $120.00
Cursor AI $20.00 8 $160.00
Cursor Extra $45.00 $45.00
Bolt.new $9.00 4 $36.00
Lovable.dev $25.00 1 $25.00
v0.dev $20.00 3 $60.00
GitHub Copilot $10.00 1 $10.00
Ideogram $20.00 2 $40.00
$4,312.00

The biggest spending is on the OpenAI API which is from the early days when the API was launched, I created a lot of content and ran a lot of experiments in the initial days.

As of now, I am mainly using subscriptions of ChatGPT Plus, Cursor AI, and v0.dev along with the OpenAI API.


Getting updated docs for LLMs

The Upstash team has launched Context7 which provides updated documentation for LLMs and AI code editors. They also have a MCP server that can be conveniently connected to code editors like Cursor, Windsurf, VS Code, Claude Code, Claude Desktop, etc.

On the homepage, I see more than 4,500 different libraries listed including all popular frameworks like Next.js, Laravel, Clerk, MongoDB, FastAPI, Supabase, etc. And clicking on any one of the libraries takes to a separate page for the library where docs are available as llms.txt or JSON formats.

Currently, it's free to use as I don't see any mentions of pricing anywhere. But they also have an API waitlist page where it's mentioned that:

The Context7 API is currently in private preview. Enter your email and we'll let you know as soon as it's live.

So there are chances that it will become paid, or at least some parts of it will be paid. I am perfectly okay to pay as long as it correctly does what it says.

I tried using it with Cursor and just mentioning "use context7" in the prompt itself triggers the tool and it does work. I am still testing it and will update soon.


Get data from local LLMs to Google Sheets

I created this GitHub repo ollama-py more than a year ago when experimenting with getting local LLM's data via Ollama to Google Sheets, and it now has 20 stars on GitHub. It makes me super happy.

This is how it works:

  1. Run the local LLM via Ollama on your computer
  2. Run the provided Python script
  3. Set up ngrok to create a tunnel to access localhost:5001
  4. Use Google Sheets Apps Script to access locally running LLM's outputs

I also have a detailed blog post as well as a video on the same.


Is it okay to copy someone's HTML/CSS?

I came across this forum thread from 2007 where people are discussing whether it's okay to copy somebody's HTML or not. Some people are in favour, some are against, and then some answers are - it depends.

I absolutely love how useful these forum discussions used to be back then, that I didn't get the chance to participate in.

Arguments for

rocknbil says:

[...] the truth is the code itself most likely came from some other source in the first place, so in a sense we've all borrowed, exchanged, intermixed and added our own flavor to chunks of code to make it our own.

Those that would argue this are probably under the impression they have created something that has never been done before, and are most likely to jump in here and cry copyright. But the truth is, any chunk of html or CSS you copy from a site is likely to be out there in duplicate thousands of times.

BeeDeeDubbleUm says:

It's the nature of the Internet to copy ideas and concepts. Who hasn't used some CSS snippet which originally came from somewhere else? If an idea is seen to work then other people will use it and that's how the Internet has developed.

Dabrowski says:

[...] with HTML/CSS being such a simple 'language', there's generally only 1 or 2 ways to produce a given page, and most people would use it.

If you wrote it from scratch you'd end up with something pretty similar, so go ahead and pinch the code. I would.

Demaestro says:

It isn't stealing and no there is nothing wrong with it. Being inspired by a site and using some of it as a jumping off point is good time management.

Show me an original HTML/CSS website and I will show you original HTML/CSS site that is similar. It is called re-purposing... why re-invent the wheel?

Josefu says:

The answer is pretty simple, but a few of you are mixing things up a bit. Correct that HTML (or any other markup language) is not "computer code".

Arguments against

8kobe says:

I would say that by the letter of the law it is illegal. However it would be pretty difficult to prove that you did it unless the layouts are very unique. [...] However if someone is doing something unique and different and you copy it they may be able to come after you.

swa66 says:

Copyright is never intended to protect the way to do something (the idea), but is intended to protect the expression of that idea.

E.g. it'll does not protect the idea of writing a novel where the butler did it, but it'll protect the words, the drawings, etc. of the cover, the text of the book etc.

So in my book:

  • if you copy a css file: copyright problem
  • if you look at other css files to see how they solve a problem, no problem at all from a copyright point of view if you use the same method to solve the problem. (might be a patent issue, but living where software patents are void and nonexistent I really don't care about them at all).

Basically, for the most point, it's okay to get inspired by a certain design on the web. And since you wouldn't exactly use the HTML/CSS code without modifying for your website, there shouldn't be a problem.


Access Prisma Postgres from frontend

Prisma has introduced a way to securely talk to your database directly from the frontend, without needing the API layer between the client and the database. It's still in early access and they have shared the details in this blog post, and below is what they say:

Security rules in Prisma Postgres allow you to:

  • have an authenticated connection to your database
  • define fine-grained permission rules in plain TypeScript

I think, this can be huge after this is properly tested by the community.


Perplexity now has new models

I just noticed that Perplexity now has new models like Grok, Gemini, and Claude. As of now, the following models are supported on the platform:

Search models:

  • Sonar
  • Claude 3.7 Sonnet
  • GPT-4.1
  • Gemini 2.5 Pro
  • Grok 3 Beta

Reasoning models:

  • R1 1776
  • o3-mini
  • Claude 3.7 Sonnet Thinking

They have been very fast in bringing new models to the platform lately. But there's a lot of confusion on what model is the best for what task, so it's best to select the "Best" model and let it decide what model it's going to use for the task - it works well most of the time.


My ASCII art

Came across this ASCII art generator tool that Guillermo shared on X, and I had to try this. I uploaded my current profile picture and the tool did a great job, you can check the results in this text file (but open on desktop in a full width window, won't work on mobile).

I also remember this idea of pixel paintings in Google Sheets from Amit Agarwal, where you give a photo and spreadsheets rows and columns are auto-adjusted and filled with colors to paint the photo.


We need simpler docs

I already had this idea to build a system to create better and simpler online documentation for apps or anything, and this recent Karpathy's tweet validates it. He argues that the primary audience for your docs are now LLMs so you should be optimizing for them, and it does make sense.

PSA It’s a new era of ergonomics.

The primary audience of your thing (product, service, library, …) is now an LLM, not a human.

LLMs don’t like to navigate, they like to scrape. LLMs don’t like to see, they like to read. LLMs don’t like to click, they like to curl.

Etc etc.

My idea is, as also Karpathy explains, have everything in a single .md file and then connect to a tool that neatly creates sidebar hierarchial links based on headings – h2 can be the main navigational links in the sidebar, and clicking on a section should expand also show h3 as sub-links.

The simple idea can be further refined, but the main concept is that there should be a single .md file containing the entire documentation that LLMs as well as humans can easily access without the need to navigate between pages.

For a better experience, the tool can be directly connected to the Git provider like GitHub so that it automatically publishes and processes the updates to the documentation.

I am not yet sure about the tech stacks, but I don't think this would very difficult to implement.


Separate sitemap for raw notes

For the personal website deepakness.com, I had only one sitemap file at /sitemap.xml earlier. But as I am publishing a lot more raw notes now, the single sitemap file was getting bigger so I created a separate sitemap for raw notes.

Now, my raw notes sitemap is at /raw-notes.xml and the rest (blog posts and a few pages) are at /sitemap.xml.

You can have up to 50,000 URLs in a sitemap as Google suggests, but keeping the sitemap file smaller is a good practices in general from the SEO perspective. For example, in WordPress, SEO plugins like Rank Math and Yoast only keep 200 URLs in a sitemap file by default, and create new sitemaps after each next 200 URLs.

And have also added both sitemap URLs in the robots.txt file. Again, not required, but good to have.


PDF runs AI

Came across this video on YouTube where the person explains how he can run LLMs inside a PDF. The source code is also available here on GitHub. Here's how it's explained:

This is a proof-of-concept project, showing that it's possible to run an entire Large Language Model in nothing but a PDF file.

I also found this super interesting Doom in a PDF file, yes, you can literally play a game right inside the PDF file.


Sorting collections in 11ty

I needed to sort my projects page as per the title, and didn't want to create a custom filter in the .eleventy.js file. So I tried Liquid sort filter like | sort: "title" but it didn't work. But then I found this after spending almost an hour searching:

| sort(attribute='title')

I have a projects.njk file where I am using this, and it works flawlessly.


Redirect subdomain to a URL in Cloudflare

I had to redirect a subdomain of my domain to an external domain, and here's how I did it using Cloudflare Redirect Rules:

Here, I will take the example that I have to redirect test.deepakness.com to the https://rohit.online URL.

Step #1: Create a new CNAME DNS record with the following details:

  • Type: CNAME
  • Name: test
  • Target: deepakness.com
  • Proxy status: Proxied
  • TTL: Auto

Step #2: Create a new rule by clicking on the Create rule > Redirect Rule button by going to the Rules section, and then fill in other info as per below instructions:

  • Rule name: As per your preference
  • If
    • Incoming requests match: Custom filter expression
    • Field: Hostname
    • Operator: equals
    • Value: test.deepakness.com
  • Then
    • Type: Static
    • URL: https://rohit.online
    • Status code: 301
    • Preserve query string: Checked
  • Place at
    • Select order: First

I wish I knew this from earlier.


Cursor is bringing a major shift

Came across this post on Reddit:

I've been leading multiple teams of engineers over the past 15 years. I'm now building one project with o3 (~$40/day in request costs) and using 0.49.

I have to say, I achieve more (and better) than I did with some of my past teams of 10+ engineers. And I'm talking about FAANG teams.

I also came across a tweet talking about the same today, and it's true that Cursor is definitely an important inflection point in the tech history, as the author describes it.


My current usage of Cursor

As I have been using Cursor a lot for coding these days, here is how I am using it currently:

  • Gemini 2.5 Pro: for logic and complex tasks
  • Claude 3.7 Sonnet: for the good looking UI
  • o3 or MAX models: for debugging if stuck

Today, I saw a tweet from Cursor's founder Eric talking about having a similar setup, here's the exact tweet:

using o3 for research & planning and gemini 2.5 pro for implementation feels really good right now

However, I received a reply to one of my tweets and it said that according to Aider, using o3 for planning and then GPT-4.1 for coding scores the highest. But... from my experience, I didn't find GPT-4.1 to write code as good as Gemini 2.5 Pro or Claude 3.7 Sonnet.


Web browsers telemetry – 2025

Came across this detailed post at sizeof.cat talking about web browser telemetry in 2025. And I was surprised to see that how many connections from these popular browsers were phoning home. Let me shock you with the list:

  • Zen Browser: 82
  • Microsoft Edge: 48
  • Floorp: 42
  • Opera: 31
  • Mozilla Firefox: 29
  • Google Chrome: 25
  • Yandex Browser: 24
  • Librewolf: 24
  • Waterfox: 21
  • Brave: 17
  • Arc Browser: 16
  • Mullvad Browser: 15
  • Vivaldi: 11
  • Apple Safari: 6
  • Ungoogled Chromium: 3
  • Pale Moon: 0
  • Kagi Orion: 0
  • Tor Browser: 0

The author mentions that some of these connections were not telemetry, see the exact paragraph here:

Of course, not everything is telemetry per se, some of the connections are from the ‘New Tab’ pages that include Youtube videos, or adblocker updates, but I strongly believe that is the same thing: the software leaks information about you and/or your computer without you actually accepting the data exchange (because you don’t have a way to accept or deny the connection since it’s the first time you’re running the browser).

There are better ways to do adblock blocklist management and not load everything on the first run without user consent. Yeah, I know what pgl.yoyo.org does today, but what will it do tomorrow? Or the day after?

Also, remember that "best browser" cannot be decided just by this one factor and you'd need to consider a lot more.


Comment via email

After my friend Rohit suggested, I have enabled a "comment via email" feature for individual posts a few days ago.

My posts didn't have comment feature earlier, so now this "comment via email" feature opens users' default email client and pre-fills to with my email and subject fields with Comment on: [current post title]. Basically, it makes it easier for people to send me emails about specific posts.

It's been only a few days since I have enabled this feature and I have already received multiple comments via emails this way. To check this, you can visit any blog post or raw note and you will see the option at the bottom.


SQLite internal viewer app

Came across an interesting project by @invisal89 that lets you see your sqlite database in a visual way.

SQLite Internal Viewer update: Each page now shows its table name—so you can finally see how every table is represented in the file format. #sqlite

Give it a try

https://sqlite-internal.pages.dev

I see that the project is hosted at Cloudflare Pages and is built using JavaScript and TypeScript as seen in the public GitHub repo.

And it can be accessed at https://sqlite-internal.pages.dev.


Cursor v0.49 brings interesting features

I have been using Cursor heavily for the past few months and I love it, have tried Windsurf and other setups as well, but I like Cursor the most.

Today, Cursor released a new update (I haven't received it yet, though) which has a feature that automatically generates rules by running the /Generate Cursor Rules command. The idea is, you keep giving a lot of instructions in your chat and the command creates the rules from that information. And the Agent can also be prompt to edit or update the rules file effectively.

One more interesting update is, MCPs now support passing images as context. For example, I have this Playwright MCP by Microsoft installed in my Cursor which automatically take screenshots of the browser window and add it to its context.