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

Our site redirects /.well-known/change-password to a login form, which is worse than answering 404

Our site redirects /.well-known/change-password to a login form, which is worse than answering 404

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
Our production JavaScript ships no source maps, so I identified 1.2 MB of it by its copyright strings

Our production JavaScript ships no source maps, so I identified 1.2 MB of it by its copyright strings

Comments
4 min read
I throttled our marketing site to Fast 3G and the 400 KB of JavaScript was not the problem

I throttled our marketing site to Fast 3G and the 400 KB of JavaScript was not the problem

Comments
5 min read
A reader who sets their browser font to Very Large gets a smaller headline on our homepage than one who sets it to Large

A reader who sets their browser font to Very Large gets a smaller headline on our homepage than one who sets it to Large

Comments
5 min read
I pressed Tab 35 times on our own page, and one of the 35 focus rings does not exist

I pressed Tab 35 times on our own page, and one of the 35 focus rings does not exist

Comments
5 min read
Our stylesheet has no forced-colors rules, so Windows High Contrast deletes 61 gradients from our homepage

Our stylesheet has no forced-colors rules, so Windows High Contrast deletes 61 gradients from our homepage

Comments
5 min read
Seven addresses at our own domain: one sends everything, six receive, and the one in our screenshot does neither

Seven addresses at our own domain: one sends everything, six receive, and the one in our screenshot does neither

Comments
6 min read
Our licence key is 60 bits in three groups of four, and it is unbiased only because the alphabet has 32 letters

Our licence key is 60 bits in three groups of four, and it is unbiased only because the alphabet has 32 letters

1
Comments
5 min read
Our release doc says 600 MB. The download is 278, and the app's own index lists 355 MB that is not there.

Our release doc says 600 MB. The download is 278, and the app's own index lists 355 MB that is not there.

Comments
6 min read
140 tests on our website, and every single one is about money or search engines

140 tests on our website, and every single one is about money or search engines

Comments
5 min read
Our five sites agree byte for byte about each other, and four of them contradict themselves

Our five sites agree byte for byte about each other, and four of them contradict themselves

Comments
5 min read
Fifteen of our 38 pages have 37 ways in, and the newest page has one

Fifteen of our 38 pages have 37 ways in, and the newest page has one

Comments
5 min read
The one screen in our app that is forbidden from selling anything, and the sentence on it that is deliberately not a link

The one screen in our app that is forbidden from selling anything, and the sentence on it that is deliberately not a link

Comments
5 min read
Five shared packages, no build step, 1,129 tests in under four seconds, and the import extension that decides which runtime can run them

Five shared packages, no build step, 1,129 tests in under four seconds, and the import extension that decides which runtime can run them

Comments
5 min read
Our nightly backup refuses to run for three reasons before it ever reaches pg_dump, and each refusal names the fix

Our nightly backup refuses to run for three reasons before it ever reaches pg_dump, and each refusal names the fix

1
Comments
5 min read
Our food log has three feelings and 140 characters, and nothing in the app is allowed to read it back to you

Our food log has three feelings and 140 characters, and nothing in the app is allowed to read it back to you

Comments
5 min read
A finger draws a box over a live camera preview, and 194 lines of arithmetic decide which pixels that means

A finger draws a box over a live camera preview, and 194 lines of arithmetic decide which pixels that means

Comments
5 min read
Our scanner throws away the first time it reads a barcode, and the lookup it fires anyway is what made that free

Our scanner throws away the first time it reads a barcode, and the lookup it fires anyway is what made that free

Comments
5 min read
Six predicates in this codebase are written twice, once in TypeScript and once in SQL

Six predicates in this codebase are written twice, once in TypeScript and once in SQL

Comments
7 min read
Our admin panel can read the inbox and deliberately cannot answer it

Our admin panel can read the inbox and deliberately cannot answer it

Comments
5 min read
Ten rules for writing a page, measured against the 76 pages: six a test holds, four only I do

Ten rules for writing a page, measured against the 76 pages: six a test holds, four only I do

Comments
5 min read
A plan's day is one bar, and a slider can only grow into room that is free

A plan's day is one bar, and a slider can only grow into room that is free

Comments
6 min read
Every panel in our app is a Sheet, and the Dialog file the CLI wrote has zero importers

Every panel in our app is a Sheet, and the Dialog file the CLI wrote has zero importers

Comments
5 min read
Our campaign layout awaits one thing, the URL, and the header streams in behind it

Our campaign layout awaits one thing, the URL, and the header streams in behind it

Comments
6 min read
Three number fields on our free tools, three different places they are clamped, and a comment promising sixteen cards from a sheet of four

Three number fields on our free tools, three different places they are clamped, and a comment promising sixteen cards from a sheet of four

Comments
6 min read
Our stylesheet contains no hex codes, our social card contains five, and our one email contains seven the stylesheet has never heard of

Our stylesheet contains no hex codes, our social card contains five, and our one email contains seven the stylesheet has never heard of

Comments 1
6 min read
Our site hides every scrollbar, smooth-scrolls for exactly one link, and that link does not scroll

Our site hides every scrollbar, smooth-scrolls for exactly one link, and that link does not scroll

Comments
6 min read
189 exported symbols in our desktop app, 14 that nothing imports, and one of them is a feature with no button

189 exported symbols in our desktop app, 14 that nothing imports, and one of them is a feature with no button

Comments
7 min read
Our HTML names the same 32-character deployment id 6,052 times, and its job is to discard 456 KB of correctly cached JavaScript

Our HTML names the same 32-character deployment id 6,052 times, and its job is to discard 456 KB of correctly cached JavaScript

Comments
5 min read
We write four version numbers to disk and read none of them, and every migration we shipped is a shape check

We write four version numbers to disk and read none of them, and every migration we shipped is a shape check

Comments
6 min read
Our no-em-dash test walks five directories and passes. The repo has 454 of them, and exactly one is in a string.

Our no-em-dash test walks five directories and passes. The repo has 454 of them, and exactly one is in a string.

Comments
5 min read
581 inline icons, 21 shapes between them, and 164 KB of our HTML is the attributes around the drawings

581 inline icons, 21 shapes between them, and 164 KB of our HTML is the attributes around the drawings

Comments
6 min read
Our Electron UI has 37 buttons, 8 aria attributes and one Escape handler, and the modal is not a dialog

Our Electron UI has 37 buttons, 8 aria attributes and one Escape handler, and the modal is not a dialog

Comments
7 min read
I fetched every URL in our sitemap. The homepage still advertises seven conditions, and the app has eight.

I fetched every URL in our sitemap. The homepage still advertises seven conditions, and the app has eight.

Comments
5 min read
Two invisible characters in our Israeli price, a yen sign our font does not have, and 72 pages that all say lang=en

Two invisible characters in our Israeli price, a yen sign our font does not have, and 72 pages that all say lang=en

Comments
7 min read
Account deletion was clearing two cache keys the app had stopped writing, and the test that caught it reads source code

Account deletion was clearing two cache keys the app had stopped writing, and the test that caught it reads source code

Comments
5 min read
A text page on our site ships 1 MB of JavaScript, and 45 per cent of it is the error reporter

A text page on our site ships 1 MB of JavaScript, and 45 per cent of it is the error reporter

Comments
6 min read
A serving stepper that is not allowed to change the answer, and the 608 checks that say it does not

A serving stepper that is not allowed to change the answer, and the 608 checks that say it does not

Comments
5 min read
I measured the title and description of all 461 generated pages, and exactly one of them loses the brand name

I measured the title and description of all 461 generated pages, and exactly one of them loses the brand name

Comments
5 min read
We call notFound() four times and never wrote the page it lands on, and the default has zero links

We call notFound() four times and never wrote the page it lands on, and the default has zero links

Comments
7 min read
Our interviewer's voice is cached by a hash of the model, the voice, the instructions and the question

Our interviewer's voice is cached by a hash of the model, the voice, the instructions and the question

Comments
4 min read
Our privacy policy names the two fields our app sends us, and the alert request has nine

Our privacy policy names the two fields our app sends us, and the alert request has nine

Comments
8 min read
A whole second interview format cost us two columns, one CHECK constraint and a 312-byte migration

A whole second interview format cost us two columns, one CHECK constraint and a 312-byte migration

Comments
4 min read
Whisper transcribes silence as "Thanks for watching!", so we wrote a function that calls it silence

Whisper transcribes silence as "Thanks for watching!", so we wrote a function that calls it silence

Comments
4 min read
Our eighth condition was 63 changed files, and the number eight is typed in none of them

Our eighth condition was 63 changed files, and the number eight is typed in none of them

Comments
5 min read
Two MediaRecorders on one stream: the audio we upload and the video that never leaves the device

Two MediaRecorders on one stream: the audio we upload and the video that never leaves the device

Comments
4 min read
We deleted the part of our interview feedback that scored your face, and the privacy policy went to 1.9.0

We deleted the part of our interview feedback that scored your face, and the privacy policy went to 1.9.0

Comments
5 min read
Our interview guide cluster went from 5 pages to 14, and the new code is a three-value union

Our interview guide cluster went from 5 pages to 14, and the new code is a three-value union

Comments
4 min read
Our 266 tests have never run anywhere but this laptop, and I found out two of them are red by running them

Our 266 tests have never run anywhere but this laptop, and I found out two of them are red by running them

2
Comments
4 min read
Two of our pages answer DELETE with the whole page, the other 70 answer 405, and we never wrote a line about HTTP methods

Two of our pages answer DELETE with the whole page, the other 70 answer 405, and we never wrote a line about HTTP methods

1
Comments
5 min read
With JavaScript off our dark site renders white, and there is no noscript tag on any of its 72 pages

With JavaScript off our dark site renders white, and there is no noscript tag on any of its 72 pages

2
Comments
5 min read
94 page files, zero dynamic routes, and 67 pages that write their own URL twice with nothing checking the folder

94 page files, zero dynamic routes, and 67 pages that write their own URL twice with nothing checking the folder

1
Comments
4 min read
635 paragraphs on our site cannot contain a link, because the page body is data and not JSX

635 paragraphs on our site cannot contain a link, because the page body is data and not JSX

1
Comments 1
4 min read
13.3 per cent of our HTML is class attributes, 324 distinct strings doing it, and the proof tailwind-merge works is a class that is missing

13.3 per cent of our HTML is class attributes, 324 distinct strings doing it, and the proof tailwind-merge works is a class that is missing

1
Comments
5 min read
All 516 of our pages have exactly one h1, no skip link, and skip a heading level in exactly the same place

All 516 of our pages have exactly one h1, no skip link, and skip a heading level in exactly the same place

1
Comments
5 min read
Our updater is the download page, and the one string that stops a reinstall wiping your licence is productName

Our updater is the download page, and the one string that stops a reinstall wiping your licence is productName

Comments
7 min read
Eight entries in one content array, 1,041 to 2,034 words each, and the optional field that has exactly one user

Eight entries in one content array, 1,041 to 2,034 words each, and the optional field that has exactly one user

Comments
4 min read
56 pages that answer the same question, 12 to 21 percent shared text, and three of them collect every related link

56 pages that answer the same question, 12 to 21 percent shared text, and three of them collect every related link

1
Comments
5 min read
Two of our pages are 1,065 and 1,083 words long, and the reading times under their titles say 6 minutes and 8 minutes

Two of our pages are 1,065 and 1,083 words long, and the reading times under their titles say 6 minutes and 8 minutes

1
Comments
6 min read
Our only patched dependency spells its version in four places by hand, and the install checks three of them

Our only patched dependency spells its version in four places by hand, and the install checks three of them

1
Comments
4 min read
loading...