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

The only security header our site sends is HSTS, and 74 of our 76 pages tell any origin it may read them

The only security header our site sends is HSTS, and 74 of our 76 pages tell any origin it may read them

Comments
5 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
We refuse 121,969 email domains at sign-up, and 2.4 MB of them never reach the browser

We refuse 121,969 email domains at sign-up, and 2.4 MB of them never reach the browser

Comments
6 min read
One screen in our app has eight empty states, and four of them are the same emptiness for four different reasons

One screen in our app has eight empty states, and four of them are the same emptiness for four different reasons

Comments
6 min read
Our getting-started checklist stores no progress, and three of its five steps are asking about different campaigns

Our getting-started checklist stores no progress, and three of its five steps are asking about different campaigns

Comments
5 min read
Our three clock components return null on the server on purpose, and one of the three has no importers

Our three clock components return null on the server on purpose, and one of the three has no importers

Comments
5 min read
Five notes tour the big card on our homepage, and two of the four places a note can sit have never rendered

Five notes tour the big card on our homepage, and two of the four places a note can sit have never rendered

Comments
6 min read
We honour reduced motion in JavaScript and ignore it in CSS, and the three elements that prove it are all on the homepage

We honour reduced motion in JavaScript and ignore it in CSS, and the three elements that prove it are all on the homepage

Comments
5 min read
Thirty-two JavaScript files serve all 79 pages of our site, and two of them are the same 93,022 bytes of animation library under different names

Thirty-two JavaScript files serve all 79 pages of our site, and two of them are the same 93,022 bytes of animation library under different names

Comments
5 min read
Our marketing homepage ships two canvas elements, and the animation loop they run stops itself when there is nothing to draw

Our marketing homepage ships two canvas elements, and the animation loop they run stops itself when there is nothing to draw

Comments
8 min read
A directory in our repo lived for one hour and fifty-four minutes, and took the stylesheet's only reduced-motion rule with it when it went

A directory in our repo lived for one hour and fifty-four minutes, and took the stylesheet's only reduced-motion rule with it when it went

Comments
6 min read
We added seven pages, and six older ones now serve a link they say they have not been edited since September

We added seven pages, and six older ones now serve a link they say they have not been edited since September

Comments
6 min read
Four mascots share one 397-line parts file, and five pints are sitting in our homepage markup

Four mascots share one 397-line parts file, and five pints are sitting in our homepage markup

Comments
8 min read
Four surfaces carry one find, and exactly one of them has a switch

Four surfaces carry one find, and exactly one of them has a switch

Comments
6 min read
Five of our eight delete routes delete something you did not ask them to

Five of our eight delete routes delete something you did not ask them to

Comments
5 min read
61% of our HTML is inside script tags. Then I compressed it and found the real bill.

61% of our HTML is inside script tags. Then I compressed it and found the real bill.

Comments
6 min read
Our page template is not allowed to write prose. I diffed all 15 generated pages and found six sentences it writes.

Our page template is not allowed to write prose. I diffed all 15 generated pages and found six sentences it writes.

Comments
6 min read
I counted every internal link on our 38 page site. 64% of them are the footer.

I counted every internal link on our 38 page site. 64% of them are the footer.

Comments
6 min read
I said our typed pages could not promise unlimited searches. Thirteen of them do.

I said our typed pages could not promise unlimited searches. Thirteen of them do.

Comments
7 min read
Two hubs for the same subject in two Englishes, and the footer that stays British on both

Two hubs for the same subject in two Englishes, and the footer that stays British on both

1
Comments
5 min read
Twelve files in one commit changed by exactly one line, and ten of those lines were the word seven

Twelve files in one commit changed by exactly one line, and ten of those lines were the word seven

1
Comments
5 min read
291 employer profiles, 301 citations, and the 44 that record finding nothing

291 employer profiles, 301 citations, and the 44 that record finding nothing

1
Comments
5 min read
Our two apps hand a session to each other in a URL fragment, and the point is the server that never sees it

Our two apps hand a session to each other in a URL fragment, and the point is the server that never sees it

1
Comments
5 min read
Nine Dutch pages declare an English twin, and the test proves it by reading the twin's source file

Nine Dutch pages declare an English twin, and the test proves it by reading the twin's source file

Comments
4 min read
Twenty-four of our twenty-five video compositions declare themselves one frame long, and one of them means it

Twenty-four of our twenty-five video compositions declare themselves one frame long, and one of them means it

Comments
6 min read
We deleted our only dynamic content route to get fourteen folders, and not one URL changed

We deleted our only dynamic content route to get fourteen folders, and not one URL changed

Comments
4 min read
29 API routes, not one CORS header in any of them, and the only browser that needs them is our own app

29 API routes, not one CORS header in any of them, and the only browser that needs them is our own app

1
Comments
6 min read
Fifty pages about fifty tests, 210 sources, and the 29 tests we refused to write a page about

Fifty pages about fifty tests, 210 sources, and the 29 tests we refused to write a page about

1
Comments
5 min read
491 FAQ questions in our markup, and 461 of them are the only question on their page

491 FAQ questions in our markup, and 461 of them are the only question on their page

Comments
6 min read
Fourteen branches, 132 new pages, and 46 links written to pages that did not exist yet

Fourteen branches, 132 new pages, and 46 links written to pages that did not exist yet

Comments
4 min read
One of our 516 sitemap entries has a date on it, and an hourly job is why the other 515 do not need one

One of our 516 sitemap entries has a date on it, and an hourly job is why the other 515 do not need one

Comments
6 min read
Sixty-three of our pages are one 208-line component, and seven of the eight routes behind them are one-liners

Sixty-three of our pages are one 208-line component, and seven of the eight routes behind them are one-liners

1
Comments
6 min read
72,683 lines of TypeScript with one any in them, and two compiler flags that would add 455 errors

72,683 lines of TypeScript with one any in them, and two compiler flags that would add 455 errors

1
Comments
6 min read
Zod does two opposite jobs in our app, and the call shape tells you which one

Zod does two opposite jobs in our app, and the call shape tells you which one

1
Comments
6 min read
A mistyped URL on our site gets the login page instead of our 404, and one capital letter changes which

A mistyped URL on our site gets the login page instead of our 404, and one capital letter changes which

1
Comments
6 min read
Every page on our site is two clicks from home, and 21 of them only because of the footer

Every page on our site is two clicks from home, and 21 of them only because of the footer

1
Comments
6 min read
Next 16 prints no bundle sizes, so I measured ours three ways and found 198 KB of analytics

Next 16 prints no bundle sizes, so I measured ours three ways and found 198 KB of analytics

1
Comments 1
6 min read
Our WebSocket server is also a three-route HTTP server, and the only open route is the one that counts the phones in the room

Our WebSocket server is also a three-route HTTP server, and the only open route is the one that counts the phones in the room

1
Comments
6 min read
Our developer-only page is a prerendered 404 served from the edge cache, and the only part of it that shipped is its name

Our developer-only page is a prerendered 404 served from the edge cache, and the only part of it that shipped is its name

1
Comments
5 min read
One page on our site types 2026 sixty-nine times, and the plan for January is a new URL rather than an edit

One page on our site types 2026 sixty-nine times, and the plan for January is a new URL rather than an edit

1
Comments
5 min read
There is not one pixel size on our big screen: 128 container-query values, and the same component is a card on our homepage

There is not one pixel size on our big screen: 128 container-query values, and the same component is a card on our homepage

1
Comments
5 min read
Our break-even number is a loop over sixty integers, because the line it sits on has a kink in it

Our break-even number is a loop over sixty integers, because the line it sits on has a kink in it

1
Comments
6 min read
Our app opens two Postgres pools, and exactly one method crosses from the first to the second

Our app opens two Postgres pools, and exactly one method crosses from the first to the second

1
Comments
5 min read
34 of our 38 sitemap dates are wrong, and every one of them was right when it was typed

34 of our 38 sitemap dates are wrong, and every one of them was right when it was typed

1
Comments
5 min read
Our 35 cached pages entered the edge over eight hours, one visitor at a time, and 16 of them in the same minute

Our 35 cached pages entered the edge over eight hours, one visitor at a time, and 16 of them in the same minute

1
Comments
4 min read
I checked all 40 outbound links on our site, and the dead one is inside our privacy policy

I checked all 40 outbound links on our site, and the dead one is inside our privacy policy

Comments
5 min read
1,097 files in our app's data folder are mode 0600 and 19 are 0644, and the 19 are the ones with secrets in them

1,097 files in our app's data folder are mode 0600 and 19 are 0644, and the 19 are the ones with secrets in them

Comments
5 min read
Our Mac app's code signature says its name is Electron, and its launcher is byte for byte the one in node_modules

Our Mac app's code signature says its name is Electron, and its launcher is byte for byte the one in node_modules

Comments
5 min read
Our Mac app ships 32 Info.plist keys, 21 of them untouched Electron, and four of those ask for a camera

Our Mac app ships 32 Info.plist keys, 21 of them untouched Electron, and four of those ask for a camera

Comments
5 min read
One page on our site holds 461 of its 516 URLs, 154 KB of HTML, and its biggest section is the condition we shipped last

One page on our site holds 461 of its 516 URLs, 154 KB of HTML, and its biggest section is the condition we shipped last

Comments
5 min read
Three promises hold our splash screen, a font error counts as loaded, and the session is deliberately not one of them

Three promises hold our splash screen, a font error counts as loaded, and the session is deliberately not one of them

Comments
6 min read
Our menu reader may never say a dish is good, and the photo it reads is handed over in a module variable

Our menu reader may never say a dish is good, and the photo it reads is handed over in a module variable

Comments
6 min read
Our Android app is also a 1,176 byte HTML file, and exactly one file in the repo is web only

Our Android app is also a 1,176 byte HTML file, and exactly one file in the repo is web only

Comments
5 min read
Six files in our Next app assert they are static, 41 declare they are not, and 14 of the 41 have no GET to make static

Six files in our Next app assert they are static, 41 declare they are not, and 14 of the 41 have no GET to make static

Comments
5 min read
512 of our 516 pages carry a breadcrumb trail, and not one of them names the page you are on

512 of our 516 pages carry a breadcrumb trail, and not one of them names the page you are on

Comments
5 min read
Forty-six research dossiers, 702,000 words, 3,750 source URLs, and three that shipped as articles instead of products

Forty-six research dossiers, 702,000 words, 3,750 source URLs, and three that shipped as articles instead of products

Comments
5 min read
We pin the nine dependencies nobody can see and let the forty-two in the browser float

We pin the nine dependencies nobody can see and let the forty-two in the browser float

Comments
5 min read
Six of our URL families return a real 404 and the seventh returns 200, because it reads the session

Six of our URL families return a real 404 and the seventh returns 200, because it reads the session

Comments
4 min read
React 19.2, zero useOptimistic, and five Suspense boundaries on our homepage that nobody wrote

React 19.2, zero useOptimistic, and five Suspense boundaries on our homepage that nobody wrote

Comments
4 min read
Zero ts-ignore comments and 111 as-unknown-as casts, and 64 of them are one missing type

Zero ts-ignore comments and 111 as-unknown-as casts, and 64 of them are one missing type

Comments
4 min read
Thirty-five eslint-disable comments, and no ESLint anywhere in the repository

Thirty-five eslint-disable comments, and no ESLint anywhere in the repository

Comments
4 min read
loading...