RSSAmplifier

Blog

Steve Hanov's Blog

I know how to make and sell software online, and I can share my tips with you.

stevehanov.caRSS feed ↗20 posts

Latest posts

How to Run a Fellowship Program Into the Ground (and get 18M impressions in the process)

If you spent any time on tech LinkedIn in the spring of 2026, you probably saw them. They were everywhere. A highly coordinated swarm of 20-something engineers posting about a little-known Waterloo AI startup called Polarity . By the time the fellowship wrapped, Polarity had generated over 18 million organic impressions across LinkedIn, X, and Instagram, flooded their pipeline with demo calls from…

My Waterloo Intern went back to school. I'll miss him dearly but here's how I replaced him with Hermes

I was talking to Mike Bird , who podcasts about AI tools. He asked me if I was using Hermes. "Of COURSE! Everyone knows HERMES. Who doesn't love a good... Hermes!" I said, slyly googling under the camera. Soon, I was having PTSD flashbacks to my experience with OpenClaw. Setting that up felt like getting a Roomba to stop trapping itself under the couch. I eventually got it working out of pure…

I learned Mandarin. Here's what it taught me about B2C SaaS.

Praise is NOT validation. I learned the crucial SaaS secret: find customers with real pain. Avoid empty encouragement. Click now.

The VC's Waterloo Coffee Tour: Where to Find Canada's Next Unicorn

90% of Waterloo's top deals happened at these 6 coffee shops. Skip this? You'll miss Canada's next unicorn. Proven VC secrets to find the billion-dollar star...

How I run multiple $10K MRR companies on a $20/month tech stack

Last night, I was rejected from yet another pitch night. It was just the pre-interview, and the problem wasn't my product. I already have MRR. I already have users who depend on it every day. The feedback was simply: "What do you even need funding for?" I hear this time and time again when I try to grow my ideas. Running lean is in my DNA. I've built tools you might have used, like…

How to Save a Gemini Canvas as Markdown

I was working on a project the other night, using Google's Gemini to help brainstorm a technical plan. If you've used it recently, you've probably seen the "Canvas" feature. It pops up on the right side of your screen, rendering code and text beautifully. It looks great. But then I actually finished the document, and I needed to get that text out of the browser and into my actual codebase. I…

A Ralph Loop for Reading: Beating GPT 5.2 with a 4k Context Window (and 4 GPUs)

Tired of AI’s high costs and limits? Discover how a home server and graph theory outperformed GPT-5.2 for deep research, saving $550/month while owning your ...

I built a Chrome extension that lets an LLM “see” tweets

What if your AI could *see* X tweets? My Chrome extension grants visual context, boosting my reach 10x. Don’t miss this secret to breaking algorithm limits.

Fighting Blog Comment Spam with Qwen3 and Ollama

Tired of comment spam? Automate detection with Qwen3 & Ollama, saving hours. Eradicate spam—click to reclaim your blog's sanity!

Make a web page screenshot service

I'll take you step by step into how to make a service that takes screenshots of webpages and returns them as an image.

Automatically remove wordiness from your writing

Shorten your writing with this tool, made well before AI was popular.

I found Security Vulnerability in your web application

Shocked? 90% of passwords are guessed in 100 tries. Discover 5 essential security fixes to block hackers, avoid costly bounties, and protect your data—before...

How to detect if an object has been garbage collected in Javascript

If you are writing an application in Javascript, soon you will have to worry about memory leaks. But it is difficult to even know if a memory leak exists. This handy method can help.

My favourite Google Cardboard Apps

I have never been a gamer. The most I've played was Super Mario Bros (the original). I then took a break for a decade or two and spent a few weeks with Simcity 4. All that changed when I got Google Cardboard.

O(n) Delta Compression With a Suffix Array

The difference between two sequences A and B can be compactly stored using COPY/INSERT operations. The greedy algorithm for finding these operations relies on an efficient way of finding the longest matching part of A of any given position in B. This article describes how to use a suffix array to find the optimal sequence of operations in time proportional to the length of the input sequences. As…

Finding Bieber: On removing duplicates from a set of documents

Using a locality sensitive hash, you can mark duplicates in millions of items in no time.

Let's read a Truetype font file from scratch

Walkthough of reading and interpretting a TrueType font file in a few lines of Javascript.

A Quick Measure of Sortedness

How do you measure the "sortedness" of a list? There are several ways. In the literature this measure is called the "distance to monotonicity" or the "measure of disorder" depending on who you read. Here, I propose another measure for sortedness.

My thoughts on various programming languages

Some ill-informed remarks on various programming languages.

A little VIM hacking