The notebook
All articles
Everything in one place — 27 articles across 8 categories. Filter by category or tag, or sort by date.

The empty week after a build is a cost, not a verdict
The low that arrives between builds is usually mistaken for boredom or burnout. For someone who came to building late and without training, it is closer to losing the evidence: the ability only feels real while something is being made, so an empty week reads as proof it was never there.

Is AI-generated code safe for production? Ask who read it
Safety is a property of review and testing rather than of authorship — nobody asks whether hand-written code is safe, they ask what was tested. What genuinely differs is volume, plausibility, and the author's weaker familiarity with code they did not type, which together make skimming ineffective. The answer is an audit trail, not an origin story.

I had never written code. Two years later, I have shipped twenty-one products.
Suman Debnath spent nine years in brand and performance marketing before building any software. Starting in late 2024 with a reminder app abandoned on a free tier, he has since shipped twenty-one products, trained a language model from scratch and run a fleet of autonomous agents — with no computer science degree and no developer job.

Keeping API keys out of an app you built with AI
Three rules do most of the work: never let a key appear in code, keep environment files out of version control, and hold production values in the host's environment settings. Rotation is the part most people skip. Push protection catches known key formats only, so it is a net rather than a guarantee.

I never let a coding agent run on autopilot
Running a coding agent with auto-accept enabled removes the only step that checks whether the work is the right work. The common failures are not broken code but overbuilding, quiet substitution of a different solution, and confidently finishing something nobody asked for. Keeping approval manual costs time and is what makes the output defensible.

No computer science degree. Here is the case I make for an AI product role.
The objection to hiring a product manager without an engineering qualification is rarely about the qualification. It is about whether they can tell when a system is wrong. That is answerable with evidence — shipped products, a measured model, a documented review practice — and it is answerable badly with a list of tools.

The expensive part of building alone is not the hours
The expensive part of building software alone is not the hours, it is the absence of correction. There is no colleague to say the approach is wrong, no review before a decision becomes permanent, and no one who knows the codebase well enough to disagree usefully. Tutorials, forums and AI assistants each replace part of that, and none of them replace disagreement.

AI replaces tasks, not jobs — unless your job is only tasks
AI replaces tasks rather than whole jobs, but a role made up entirely of replaceable tasks is effectively a replaced role. In marketing the exposed work is reporting, data gathering, first drafts, asset variants and rule-based campaign operations. What survives is deciding what is worth doing, judging whether it lands, being accountable, and governing the systems.

Why is my JSON-LD missing from the HTML in Next.js?
Next.js does not emit a script element for a component using next/script with strategy beforeInteractive. It serialises the payload into a self.__next_s array that the client bundle reads after hydration, so JSON-LD declared that way is absent from the served HTML and invisible to any crawler that does not execute JavaScript.

Is it a real AI product or a wrapper? Ask what is left without the model.
The useful test is not whether a product calls somebody else's model, because most do, including good ones. It is what would remain if the model were removed. A product with its own evaluation, defined behaviour when the answer is wrong, real integration and data you can export is a product. One with none of those is an interface charging a markup on an API.

Eight repositories in eleven days. Six died within three.
Between 21 June and 1 July 2026, Suman Debnath created eight repositories. Six of them stopped receiving commits within three days; the two that did not became an agent fleet still in active development two months later. The mistake was not speed — it was treating a working first version as a finished product.

ChatGPT started citing my site. Here is what I changed, and what I still cannot prove.
ChatGPT began naming Suman Debnath for the query "who is Suman Debnath" two days after a full answer-engine optimisation pass — a generated llms.txt, extractable answer blocks, entity disambiguation and structured data. Keyword stuffing was tried first and did nothing. Two days is not proof of cause, and Claude, Gemini and Grok still do not cite the site.

What a marketer has to learn to ship software — and it is not syntax
Less syntax than expected and more operations than anyone warns you about. The gap is not writing code — an assistant does that — it is knowing where data lives, how deployment differs from a machine that works, what happens when something breaks in front of a user, and being able to read a change well enough to accept or reject it.

Agentic-ready: the four things an agent has to be able to do
Four questions decide it: can an agent find the site, fetch it, read it without executing JavaScript, and recover when it hits a URL that does not exist. Most sites fail on the third for a dull reason — the content or the structured data only exists after the client bundle runs, and many fetchers never run it.

"AI-native" is being claimed faster than it is earned. Five questions that check it.
AI-native describes someone whose default working method is building with these systems, rather than someone who added them to an existing method. The claim is checkable: ask what they shipped, what they did when the model was wrong, what they refused to automate, and how they verify output. Tool familiarity answers none of those.

I spend a fifth of every project before I write the first prompt
Research before prompting accounts for roughly ten to twenty percent of a project's duration, and generating the first working version takes less time than any other phase. The prompt is written last, after the reading, and carries context, goal and worked examples — which is what prevents confident but confused output.

What should a marketing team automate first?
Start with the highest-frequency, lowest-judgement work — reporting, data gathering, asset variants and routine checks — because that is where hours accumulate without any decision being made. The selection rule that matters most is error visibility: automate where a mistake is obvious and cheap, and never where it would be silent and expensive.

AEO vs SEO: what changes when the reader is a model
Search optimisation competes to be ranked among ten results; answer optimisation competes to be the one passage quoted. The unit shifts from the page to the self-contained block, the currency shifts from keywords to resolved entities, and the outcome becomes largely unmeasurable — there is no rank to track and the same question returns different answers on different runs.

A weekend gets you a working version, not a product
A weekend produces a working version, not a finished product — those are separated by weeks of unglamorous work. What makes the weekend possible is severe scope discipline and research before the first prompt. What makes it defensible is refusing to cut the handful of things that are cheap now and expensive later.

Taste is the last thing to be automated
Taste is the ability to choose between options that are all technically correct, and it becomes the scarce skill once generation is cheap. A model optimises whichever metric it is given. Deciding which metric is the right one — and recognising when a measurable win is the wrong trade — is the part that cannot be delegated.

Do you need an llms.txt file? Google says no.
Probably not for search visibility. Google has publicly declined to support llms.txt, and reported monitoring of AI crawler traffic through 2026 found direct fetches to be negligible. Where it does get read is agent-side — coding assistants and desktop agents retrieving a domain because a user named it. Worth having if it is generated, not worth maintaining by hand.

The AI skills worth putting on a marketing CV — and the ones to delete
Named tools are not skills, because everyone has access to the same tools and the claim cannot be checked. What survives scrutiny is anything with an artefact or a measured outcome attached: a process automated with the time saved stated, a system built and linked, or a described method for judging whether an output is correct.

Why does position: sticky silently stop working?
An ancestor with overflow: hidden becomes the sticky element's scroll container. That container never scrolls, so the sticky child has nothing to stick to and scrolls away with the page instead. Nothing errors and no warning appears. Check every ancestor for overflow-hidden before touching the sticky element's own CSS.

React StrictMode permanently disables your init guard in development
React StrictMode mounts every component, runs cleanup, then remounts. A module-level `if (initialised) return` guard is set on the first mount, survives the cleanup because it lives outside the component, and blocks the second mount from ever re-attaching its listeners. The feature is then dead for the whole dev session while production works fine.

Next.js 16 replaced middleware.ts with proxy.ts
In Next.js 16, middleware.ts is gone. The replacement is proxy.ts at the project root, exporting a function named proxy(request) and a config.matcher, and it runs on the Node runtime rather than Edge. The matcher is read statically at build time, so it cannot reference an imported constant.

three.js r152 re-tints every colour written before it
Since three.js r152, ColorManagement.enabled defaults to true, so new THREE.Color(0xADC1DE) converts sRGB to linear before reaching the shader. Red loses proportionally more than blue, so colours picked against older releases drift violet. Nothing errors — the scene simply renders a different colour than the hex you wrote.

The debugging note I wrote was wrong for a year
I documented that window scroll listeners never fire on this site because the body is the scroll container. Half of that was true: document.body.scrollTop does read 0. The conclusion was not. When I finally measured, a window scroll listener fired 19 times during a single programmatic scroll. The note had been steering design decisions away from working approaches.