For people who build or use SaaS products, I’m curious about something. What makes you go from “this looks interesting” to actually keeping a product in your workflow long-term? Is it: Saving significant time? Replacing an existing tool? Integrations with tools you already use? A really good onboarding experience? Something else? I’m building a SaaS product myself and I’m trying to better understand what makes people stick with a product rather than just trying it once. Interested in he...
I’ve been exploring how motion design can make a product feel more engaging without sacrificing clarity. For this concept, I wanted to take inspiration from Duolingo’s playful visual language and translate the product experience into a short motion piece. The main challenge was balancing fun animation with product storytelling . Instead of simply animating UI screens, I focused on: • Creating a strong visual hook in the opening seconds • Using motion to guide the viewer through the pro...
Officially sold my B2B Saas after 8 years of grinding. Not a unicorn but got up to 175k MRR and was only spending 20% of my time on it its final year. AMA Or don’t. I probably won’t read it anyways but if I see it I very well might.
There's two things you should know about me, your intrepid reviewer: I hate the feature creep associated with modern power banks, and I love shaving grams off the gear I carry when backpacking, bikepacking, and trail running. So imagine my delight when Nitecore released a new generation of its ultralight NB10000 battery. After a few […]
Last month I posted here about my agents running across model swaps without losing their memory. The top comment pushed back with a warning from their own setup: the dangerous failure isn't memory loss, it's an agent handing you a confident report of work that never actually happened. Sounded right, filed it away. Three weeks later one of my agents did it to me. Quick background - my agents live in separate projects and talk over an internal mail system. The reply command had been broken bet...
I've been working on a project called Leo / PSCLS. The goal isn’t to build yet another Transformer with a different name. I’ve been trying to explore a different question: «What if we built an AI architecture around persistent neural state, sparse connectivity, recurrent processing, and memory — instead of making attention and large dense parameter matrices the core building blocks?» Leo is still very early and nowhere near a fluent language model. But we’ve reached a point wh...
Today, we are officially announcing Early Access for our latest and most advanced model, Horus Cyper Nano 1.0 BETA. We are making Horus Cyper Nano 1.0 BETA available to developers, researchers, and students through our Early Access program. You can apply through the official Early Access portal. Once you meet the required eligibility criteria and your application is approved, you will receive your personal Access Token, which can be used through our NeuralNode Framework to access and integra...
The uuid npm package is one of the most downloaded libraries in the JavaScript ecosystem. The vast majority of those installs exist for one thing: uuid/v4 , which generates a random unique identifier in the standard xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx format. The browser — and Node.js — have been doing this natively since 2021. No package needed.
The native API
const id = crypto . randomUUID ();
// "110e8400-e29b-41d4-a716-446655440000"
That's th...
Building a modal from scratch means writing the same boilerplate every time: a <div> with role="dialog" , an aria-modal attribute, a tabindex="-1" to steal focus, a keydown listener to catch Escape, a focus-trap library to keep Tab cycling inside the dialog, and a click listener on the backdrop overlay you rendered yourself. It works, but you're doing the browser's job.
The <dialog> element exists to take that job back.
The baseline API
<dialo...
Scraping Ethically: A Practical Guide to Respectful Web Crawling
The single most important thing to understand about web scraping is this: ethical crawling is not a legal gray area—it’s a technical and reputational survival strategy. If you scrape without respecting robots.txt, rate limits, and site terms, you will get blocked, your IPs will be burned, and you may face legal action. In 2023, the US District Court for the Northern District of California ruled in hiQ Labs v. LinkedIn that ...
I audit websites from the outside and then write to whoever owns them, which means I spend a lot of
time in other people's contact channels — forms, chat widgets, published addresses. Over one week
that came to seventy-odd contact pages and around a hundred messages.
The thing I did not expect to learn: whether a message arrives is a completely separate question
from whether the form works. Four failure modes, all measured, all of them holes that a site owner
cannot see from the inside,...
Your prose survives the move to Docmost almost intact. Your databases do not. Docmost ships an importer that reads a Notion HTML or Markdown export and rebuilds pages, hierarchy and attachments, but it has no database concept at all, so every Notion table, board, calendar, relation, rollup and formula arrives as flat page content that you maintain by hand from then on. Decide by asking what share of your workspace is written pages versus structured records, because that ratio, not the import qua...
This is part four of a series about pointing an append-only audit log at things that count tokens. Part one found that a missing model line was half my agent overspend. Part two found two accounting bugs in splitrail. Part three found a 2.35× over-count in a 30k-star repo that the vendor's own documentation had warned about.
I promised this post at the end of part two and pushed it at the start of part three. Here it is.
The first three parts asked whether tools counted correctly. Th...
When we write:
SELECT *
FROM users
WHERE id = 100 ;
it looks incredibly simple.
We send SQL.
PostgreSQL gives us rows.
But what actually happens between those two steps?
There is a lot going on internally.
Understanding this process changed the way I think about database performance.
Instead of thinking:
"I wrote a query and PostgreSQL executed it."
I started thinking:
"What path does PostgreSQL take to turn my SQL into actual d...
In Part 1 , we explored why modern AI systems need more than carefully written prompts.
In Part 2 , we looked at tokens, context windows and memory and why simply adding more context doesn't necessarily produce better results.
In Part 3 , we went one step further:
RAG helps retrieve relevant information.
Tool Calling lets an AI application interact with external systems.
MCP provides a standardized way for AI applications to interact with tools.
But there's one ...
We replaced MUI with Radix + Shadcn across a multi-tenant SaaS dashboard over the last quarter. Bundle size dropped. Theming finally made sense. Our design system stopped being two different design systems wearing a trench coat.
It also wasn't smooth.
Most "migrate to shadcn" posts you read online are clean. They show you the add command, the new component, a screenshot, and call it done. That's not a migration. That's a greenfield. A real migration is six different teams with five diffe...
In December 2024, Jeremy Howard, the creator of fast.ai, proposed a simple standard: an llms.txt file placed in a domain's root directory, telling AI systems about the structure and content of the site. The standard is supported by Anthropic (Claude), Perplexity and a dozen or so other AI tools. Implementation cost: a few minutes. Potential effect: better understanding of your site by AI systems.
What is llms.txt?
llms.txt is a Markdown-format text file placed at yourdomain.com/l...
Every Indian GST invoice carries a 15-character GSTIN. If you've ever had to validate one in code, you've probably written a regex like this and called it done:
/^ [ 0 - 9 ]{ 2 }[ A - Z ]{ 5 }[ 0 - 9 ]{ 4 }[ A - Z ]{ 1 }[ 1 - 9 A - Z ]{ 1 } Z [ 0 - 9 A - Z ]{ 1 } $ /
That regex checks the shape of a GSTIN. It says nothing about whether the number is real. A typo that happens to land on a syntactically valid string will sail str...
Written against main at the time of publishing. Every regex and line number is cited so you can re-check with grep -n and there's a runnable reproduction at the end that needs no build.
TL;DR
A PROMPT_TEMPLATE artifact in Apicurio Registry is rendered by three
different pieces of code that don't share an engine and don't agree on what a template means beyond a plain {{name}} . Add a space, a dot, or an {{#if}} block and the same stored template renders three differe...