DEV Community

Daniel Pertu profile picture

Daniel Pertu

404 bio not found

Location London Joined Joined on  Personal website https://cogniprep.app

Work

Founder of CogniPrep

Two DMGs, because a universal build would ship two Chromiums

Two DMGs, because a universal build would ship two Chromiums

Comments
7 min read

Want to connect with Daniel Pertu?

Create an account to connect with Daniel Pertu. You can also sign in below to proceed if you already have an account.

Already have an account? Sign in
A settings file with one field left, and a migration that only deletes

A settings file with one field left, and a migration that only deletes

Comments
6 min read
A hook whose return value nobody uses

A hook whose return value nobody uses

Comments
5 min read
The app found the listing, and then had nothing to show you

The app found the listing, and then had nothing to show you

Comments
6 min read
A 200 from IndexNow does not mean it read your key

A 200 from IndexNow does not mean it read your key

Comments
7 min read
fs.cpSync copied the framework and left every symlink pointing at the cache

fs.cpSync copied the framework and left every symlink pointing at the cache

Comments
5 min read
There is no hand-typed verdict in our ads: 16 reels rendered by the product engine

There is no hand-typed verdict in our ads: 16 reels rendered by the product engine

Comments
6 min read
We pay contributors with a Stripe coupon, not a balance credit, and tax is why

We pay contributors with a Stripe coupon, not a balance credit, and tax is why

Comments
7 min read
Erasure is easy when the sensitive data was never on your server

Erasure is easy when the sensitive data was never on your server

Comments
6 min read
A sitemap is not internal linking: the index page our 373 generated pages needed

A sitemap is not internal linking: the index page our 373 generated pages needed

Comments
6 min read
38 recipes, seven conditions, and the seven collection pages we did not build

38 recipes, seven conditions, and the seven collection pages we did not build

Comments
6 min read
A four-phase state machine, 88 CSS rules, and no video in our hero

A four-phase state machine, 88 CSS rules, and no video in our hero

Comments
6 min read
"You improved" is a statistical claim, and on eight attempts it is usually false

"You improved" is a statistical claim, and on eight attempts it is usually false

1
Comments
4 min read
One media query fixed every email on mobile, because every row is a direct child

One media query fixed every email on mobile, because every row is a direct child

Comments
5 min read
An onboarding answer is a fact in a column until you join it to behaviour

An onboarding answer is a fact in a column until you join it to behaviour

Comments
5 min read
The components own the markup, the page owns every word

The components own the markup, the page owns every word

Comments
5 min read
The 235 URLs we announce to Bing come from one function, and it is sitemap()

The 235 URLs we announce to Bing come from one function, and it is sitemap()

Comments
5 min read
The price resolved the country one way, and the tax resolved it another

The price resolved the country one way, and the tax resolved it another

Comments
5 min read
Our ad creative imports the production rules engine

Our ad creative imports the production rules engine

Comments
5 min read
One real scan counts a hundred: ranking a curation queue by your own users

One real scan counts a hundred: ranking a curation queue by your own users

Comments
5 min read
Sixty percent of our model backlog was never a question for a model

Sixty percent of our model backlog was never a question for a model

Comments
5 min read
Telling search engines only what actually changed, from 426 pages

Telling search engines only what actually changed, from 426 pages

Comments
5 min read
The quality gates we deleted from our user submitted data

The quality gates we deleted from our user submitted data

Comments
5 min read
A dynamic segment at your site root answers for every URL you never wrote

A dynamic segment at your site root answers for every URL you never wrote

Comments
4 min read
Fifteen nearly identical pages, and a type that refuses to let them be identical

Fifteen nearly identical pages, and a type that refuses to let them be identical

1
Comments 1
6 min read
Four frames before anything happens: what a new SSE client is told

Four frames before anything happens: what a new SSE client is told

Comments
5 min read
The store decides what is new, and the banner follows

The store decides what is new, and the banner follows

Comments
6 min read
The browser copied fine, and every symlink still pointed at the cache

The browser copied fine, and every symlink still pointed at the cache

Comments
5 min read
One POST tells four search engines a page changed, and the URL list must not be typed by hand

One POST tells four search engines a page changed, and the URL list must not be typed by hand

Comments
6 min read
Merchant of record for 27 countries, and deliberately off for our own

Merchant of record for 27 countries, and deliberately off for our own

Comments
6 min read
A 200 from IndexNow does not mean it read your key

A 200 from IndexNow does not mean it read your key

Comments
6 min read
Three signals competed for the post-login redirect, and ranking them was the whole fix

Three signals competed for the post-login redirect, and ranking them was the whole fix

Comments
6 min read
posthog-js on our site never talks to posthog.com, and the rewrite order is the whole trick

posthog-js on our site never talks to posthog.com, and the rewrite order is the whole trick

Comments
6 min read
Our health endpoint reports how many environment variables are missing, never which ones

Our health endpoint reports how many environment variables are missing, never which ones

Comments
5 min read
Three entries in our Next.js config did nothing, and one was holding production up

Three entries in our Next.js config did nothing, and one was holding production up

Comments
5 min read
Our robots.txt allows /games/ and then disallows 165 paths underneath it

Our robots.txt allows /games/ and then disallows 165 paths underneath it

Comments
5 min read
Giving away a licence when the schema assumes a payment

Giving away a licence when the schema assumes a payment

Comments 1
6 min read
Four sites, one publisher, and an @id that is not a link

Four sites, one publisher, and an @id that is not a link

Comments
5 min read
Our retry ladder was keyed by the wrong thing

Our retry ladder was keyed by the wrong thing

Comments
5 min read
Most of our diff code exists to not send an alert

Most of our diff code exists to not send an alert

Comments
5 min read
One banner per search, not one per listing

One banner per search, not one per listing

Comments
4 min read
The window reloads every time you open it, so it cannot own the state

The window reloads every time you open it, so it cannot own the state

Comments
4 min read
1,250,964 audit rows recording that nothing happened

1,250,964 audit rows recording that nothing happened

Comments
5 min read
45% of our stored ingredient tags were derivable, so we deleted them

45% of our stored ingredient tags were derivable, so we deleted them

Comments
6 min read
We stopped letting Stripe convert our price, because nobody could quote it

We stopped letting Stripe convert our price, because nobody could quote it

Comments
5 min read
A food log with no server, no sync and no opinion about your data

A food log with no server, no sync and no opinion about your data

Comments
6 min read
Our product search only returns rows the scanner can actually answer for

Our product search only returns rows the scanner can actually answer for

Comments
5 min read
Citric acid is on 14,836 of our products, so the filter has to stay quiet about it

Citric acid is on 14,836 of our products, so the filter has to stay quiet about it

Comments
6 min read
One @id string, deliberately duplicated across four repositories

One @id string, deliberately duplicated across four repositories

Comments
6 min read
We have no marketing state table, only five SQL windows over timestamps we already had

We have no marketing state table, only five SQL windows over timestamps we already had

Comments
6 min read
The affiliate commission was agreed before we knew the buyer's country

The affiliate commission was agreed before we knew the buyer's country

Comments
6 min read
121,570 blocked domains, and none of them reach the browser

121,570 blocked domains, and none of them reach the browser

Comments
5 min read
Five gates in one API wrapper, and the order is the whole design

Five gates in one API wrapper, and the order is the whole design

Comments
6 min read
Only 15 of our 38 employer pages could cite a source, so the type now demands one

Only 15 of our 38 employer pages could cite a source, so the type now demands one

Comments
5 min read
Four PDF reports, one download helper, and a race I deliberately did not fix

Four PDF reports, one download helper, and a race I deliberately did not fix

Comments
5 min read
Three search rankers in one codebase, and none of them should be shared

Three search rankers in one codebase, and none of them should be shared

Comments
5 min read
A question is not always the unit: four content shapes in one JSON library

A question is not always the unit: four content shapes in one JSON library

Comments
4 min read
'2026-27' is a better database key than a date range

'2026-27' is a better database key than a date range

Comments
4 min read
percentile_cont, a 20,000 row window, and the difference between skipped and failed

percentile_cont, a 20,000 row window, and the difference between skipped and failed

Comments
4 min read
Gmail deletes your SVG logo and Outlook ignores your flexbox

Gmail deletes your SVG logo and Outlook ignores your flexbox

1
Comments 1
4 min read
loading...