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

I pressed Tab through all 5,495 stops on our site: the order is perfect and 373 of them show no focus ring

I pressed Tab through all 5,495 stops on our site: the order is perfect and 373 of them show no focus ring

Comments
6 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 public pages hold 5,693 stacking contexts and nine z-indexes, and the drawings that make most of them ignore z-index completely

Our public pages hold 5,693 stacking contexts and nine z-indexes, and the drawings that make most of them ignore z-index completely

Comments
5 min read
Our stylesheet declares the same 72 variables twice, and the second copy hides behind a browser sniff dressed as a feature query

Our stylesheet declares the same 72 variables twice, and the second copy hides behind a browser sniff dressed as a feature query

Comments
5 min read
Chrome composites 10 layers on our static FAQ page, and an invisible word is responsible for three of them

Chrome composites 10 layers on our static FAQ page, and an invisible word is responsible for three of them

Comments
5 min read
First paint takes 368ms at my desk and 9.2 seconds on a slow link, and 3.7 of those seconds are our own font preloads

First paint takes 368ms at my desk and 9.2 seconds on a slow link, and 3.7 of those seconds are our own font preloads

Comments
6 min read
Thirty-three useEffect calls in 72,683 lines, and the same six lines are written out four times

Thirty-three useEffect calls in 72,683 lines, and the same six lines are written out four times

Comments
6 min read
I pressed select-all and copy on all 79 of our pages: 393 KB of words and 5.3 MB of markup

I pressed select-all and copy on all 79 of our pages: 393 KB of words and 5.3 MB of markup

Comments
4 min read
I grepped all 38 pages of our site for accessibility: one h1 each, 1,091 links with names, and a focus ring at 1.82:1

I grepped all 38 pages of our site for accessibility: one h1 each, 1,091 links with names, and a focus ring at 1.82:1

Comments
6 min read
37 components in our Expo app, and the one nothing has ever imported was written in the first commit

37 components in our Expo app, and the one nothing has ever imported was written in the first commit

Comments
6 min read
Our activity log paints three lines green that mean nothing happened, and the word the highlighter really wants only exists on our homepage

Our activity log paints three lines green that mean nothing happened, and the word the highlighter really wants only exists on our homepage

Comments
5 min read
Reading a country out of a locale string is 16 lines, because de-DE-u-ca-gregory contains Canada and Intl.Locale throws on what Android hands you

Reading a country out of a locale string is 16 lines, because de-DE-u-ca-gregory contains Canada and Intl.Locale throws on what Android hands you

Comments
6 min read
Our 76 pages print to 496 sheets of A4, and the plan we recommend is invisible on one of them

Our 76 pages print to 496 sheets of A4, and the plan we recommend is invisible on one of them

Comments
6 min read
Our CDN compresses every page with brotli quality 3, and plain gzip wins on 20 of our 79 pages

Our CDN compresses every page with brotli quality 3, and plain gzip wins on 20 of our 79 pages

Comments
5 min read
Our contact form runs four checks in the browser and seven on the server, and the only check both of them do is the one they disagree about

Our contact form runs four checks in the browser and seven on the server, and the only check both of them do is the one they disagree about

Comments
4 min read
We deleted a 308-line unlock dialog and replaced it with a scroll and three pulses

We deleted a 308-line unlock dialog and replaced it with a scroll and three pulses

Comments
6 min read
A document we deleted in September is cited 73 times in our code, and the file explaining the citation convention is one of the citers

A document we deleted in September is cited 73 times in our code, and the file explaining the citation convention is one of the citers

Comments 1
5 min read
Our sitemap lists 38 URLs, our app directory serves 40, and the robots rule protecting one of the other two has a trailing slash

Our sitemap lists 38 URLs, our app directory serves 40, and the robots rule protecting one of the other two has a trailing slash

Comments
5 min read
Our image optimiser offers 15 widths and one quality, and answers an AVIF-capable browser with JPEG

Our image optimiser offers 15 widths and one quality, and answers an AVIF-capable browser with JPEG

Comments
4 min read
Thirty of our 65 providers were £5 cheaper, and deleting that rule removed 67 tests

Thirty of our 65 providers were £5 cheaper, and deleting that rule removed 67 tests

Comments
6 min read
Our Expo app has 42 accessibility labels and three hints, and the hardest one was Chrome refusing to hide a focused element

Our Expo app has 42 accessibility labels and three hints, and the hardest one was Chrome refusing to hide a focused element

Comments
7 min read
Every photo on our landing page is a JPEG with a .webp extension, and the CDN announces it as image/webp

Every photo on our landing page is a JPEG with a .webp extension, and the CDN announces it as image/webp

Comments
4 min read
Our welcome screen is covered by a CSS rule that deletes itself after three seconds

Our welcome screen is covered by a CSS rule that deletes itself after three seconds

Comments
5 min read
Our article type says "keep it honest" above the reading time, and all eight of them are wrong in the same direction

Our article type says "keep it honest" above the reading time, and all eight of them are wrong in the same direction

Comments
4 min read
A readable cookie mirrors our httpOnly session, so a static page can offer My account

A readable cookie mirrors our httpOnly session, so a static page can offer My account

Comments
5 min read
Our 76 pages read at grade 6.9, and the three hardest are the three no test covers

Our 76 pages read at grade 6.9, and the three hardest are the three no test covers

Comments
8 min read
Our 38 page site sends exactly one security header, and we did not write it

Our 38 page site sends exactly one security header, and we did not write it

Comments
5 min read
Eight things our app refuses to do when a dependency is missing, and six it does anyway

Eight things our app refuses to do when a dependency is missing, and six it does anyway

Comments
6 min read
We cut sign-up to two fields, and the field we deleted had a reader three emails away

We cut sign-up to two fields, and the field we deleted had a reader three emails away

Comments
4 min read
We replaced GitHub sign-in with Microsoft, and the provider id in our code is neither of those words

We replaced GitHub sign-in with Microsoft, and the provider id in our code is neither of those words

Comments
5 min read
Our delete-my-data list clears eight keys off the phone, and the product cache moved to v3 without it

Our delete-my-data list clears eight keys off the phone, and the product cache moved to v3 without it

Comments
5 min read
LCP lands in the same millisecond as first paint on all 76 of our pages, and our only layout shift is 58px of header

LCP lands in the same millisecond as first paint on all 76 of our pages, and our only layout shift is 58px of header

1
Comments 1
6 min read
1,734 structured data nodes, zero invalid properties, and half of them describe rich results that no longer exist

1,734 structured data nodes, zero invalid properties, and half of them describe rich results that no longer exist

1
Comments
6 min read
88 commits, one branch, no CI, and 45 per cent of every line ever added is a generated folder

88 commits, one branch, no CI, and 45 per cent of every line ever added is a generated folder

1
Comments
8 min read
I loaded all 76 of our pages at 320px: nothing scrolls sideways, and 1,308 elements hang over the edge

I loaded all 76 of our pages at 320px: nothing scrolls sideways, and 1,308 elements hang over the edge

1
Comments
6 min read
165 HTML errors across our 76 pages, and deleting one attribute removes 152 of them

165 HTML errors across our 76 pages, and deleting one attribute removes 152 of them

1
Comments
7 min read
Every URL in our sitemap says 3 October, and 30 of the 76 pages changed after that

Every URL in our sitemap says 3 October, and 30 of the 76 pages changed after that

Comments
7 min read
866 link tags across 79 pages, and not one of them is a preconnect to the only other host we talk to

866 link tags across 79 pages, and not one of them is a preconnect to the only other host we talk to

Comments
4 min read
Our 79-page site is written in 98 distinct characters, and six of them are an empty table header

Our 79-page site is written in 98 distinct characters, and six of them are an empty table header

Comments
5 min read
Our Permissions-Policy header forbids three of the browser's 80 features, and the other 77 include USB

Our Permissions-Policy header forbids three of the browser's 80 features, and the other 77 include USB

Comments
5 min read
Every one of our 79 pages is two clicks from the homepage, and 24 of them cannot be reached by reading

Every one of our 79 pages is two clicks from the homepage, and 24 of them cannot be reached by reading

Comments
5 min read
The accessibility engine was already in our node_modules, reached by a linter that cannot run

The accessibility engine was already in our node_modules, reached by a linter that cannot run

Comments
5 min read
We preload 52 KB of our brand typeface on every page, and the browser renders the system font

We preload 52 KB of our brand typeface on every page, and the browser renders the system font

1
Comments
6 min read
Our 38 page product site downloads one image file, it is 550 bytes, and there is not a single screenshot on it

Our 38 page product site downloads one image file, it is 550 bytes, and there is not a single screenshot on it

Comments
5 min read
Our third most used colour is #a3a3a3, 138 times, and the Tailwind we install does not have it any more

Our third most used colour is #a3a3a3, 138 times, and the Tailwind we install does not have it any more

Comments
5 min read
I curled the 49 outbound links on our site: 30 answered 200, and the four worth fixing were not among the 19 failures

I curled the 49 outbound links on our site: 30 answered 200, and the four worth fixing were not among the 19 failures

Comments
6 min read
Seven HTML emails in our product, the same 560 pixel table typed seven times, and the escaper defined twice

Seven HTML emails in our product, the same 560 pixel table typed seven times, and the escaper defined twice

Comments
7 min read
Our sitemap tells Google 32 pages changed on 14 September, and the edge cache says the HTML was built on 18 October

Our sitemap tells Google 32 pages changed on 14 September, and the edge cache says the HTML was built on 18 October

Comments
6 min read
Every title on our 38 pages is under 60 characters, and three of them are not if you count the HTML

Every title on our 38 pages is under 60 characters, and three of them are not if you count the HTML

Comments
5 min read
A test in our pricing package fails if any price sentence says approximately, and the banned words include the name of our own currency

A test in our pricing package fails if any price sentence says approximately, and the banned words include the name of our own currency

Comments
5 min read
Our recipe index prints the word eight 29 times without typing it, and our homepage description still says seven

Our recipe index prints the word eight 29 times without typing it, and our homepage description still says seven

Comments
5 min read
Our related-guides block gave every link to the A names, so 61 of 211 pages received none

Our related-guides block gave every link to the A names, so 61 of 211 pages received none

Comments
5 min read
Google indexed /Games, a URL that 404s, so our proxy now lowercases the path before anything else

Google indexed /Games, a URL that 404s, so our proxy now lowercases the path before anything else

Comments
4 min read
Our JavaScript chunks were indexed because robots.txt blocked them, and the fix was to let crawlers in

Our JavaScript chunks were indexed because robots.txt blocked them, and the fix was to let crawlers in

Comments
3 min read
The hreflang rule we shipped last week was wrong, so 13 of our 24 localised pages now declare none

The hreflang rule we shipped last week was wrong, so 13 of our 24 localised pages now declare none

Comments
6 min read
We deleted a true line from our comparison pages because the rival could say it too

We deleted a true line from our comparison pages because the rival could say it too

1
Comments
6 min read
Our new partnership page quotes two percentages, and a test reads the email we already sent

Our new partnership page quotes two percentages, and a test reads the email we already sent

1
Comments
5 min read
I spell-checked 123,831 words across our 76 pages: no misspellings, and the only inline lang attribute is Japanese

I spell-checked 123,831 words across our 76 pages: no misspellings, and the only inline lang attribute is Japanese

1
Comments
8 min read
I checked our privacy notice against the code, promise by promise, and found two missing processors

I checked our privacy notice against the code, promise by promise, and found two missing processors

1
Comments
8 min read
Nine ways this app says "only once", from one request to for ever

Nine ways this app says "only once", from one request to for ever

1
Comments
7 min read
Our daily quota went from 10,000 to 60,000, and only four of the thirteen lines I changed were code

Our daily quota went from 10,000 to 60,000, and only four of the thirteen lines I changed were code

1
Comments
6 min read
loading...