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

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

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
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

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

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

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

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

Comments
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

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

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

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

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

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

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

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

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
All 25 of our tables have row level security on and not one policy, and that is the finished design

All 25 of our tables have row level security on and not one policy, and that is the finished design

1
Comments
4 min read
A notice to every account goes out 100 at a time, and the browser is what keeps the loop going

A notice to every account goes out 100 at a time, and the browser is what keeps the loop going

Comments
6 min read
With JavaScript off our site still reads and the FAQ still opens, and sign-up is where it stops

With JavaScript off our site still reads and the FAQ still opens, and sign-up is where it stops

Comments
5 min read
72,683 lines of app code and no console.log, and 42 of our 65 error lines end in the same word

72,683 lines of app code and no console.log, and 42 of our 65 error lines end in the same word

Comments
5 min read
Every lock in our app is one line of SQL, and a 32-bit hash is why two accounts can share one

Every lock in our app is one line of SQL, and a 32-bit hash is why two accounts can share one

Comments
5 min read
74 of our 76 public pages come from the cache, and one import decides the other two

74 of our 76 public pages come from the cache, and one import decides the other two

Comments
5 min read
Our marketing site writes nothing to seven storage surfaces, and reads one key that is never there

Our marketing site writes nothing to seven storage surfaces, and reads one key that is never there

Comments
4 min read
Our copy is British, our code is American, and the border runs exactly along the identifier

Our copy is British, our code is American, and the border runs exactly along the identifier

Comments
4 min read
I opened DevTools on all 72 of our pages and the console said one thing, 72 times

I opened DevTools on all 72 of our pages and the console said one thing, 72 times

Comments
5 min read
The back button costs nothing on 70 of our pages and a server render on the two that take money

The back button costs nothing on 70 of our pages and a server render on the two that take money

1
Comments 1
4 min read
Twenty-two of the thirty-six tap targets on our mobile homepage are 20 pixels tall, and the page passes WCAG anyway

Twenty-two of the thirty-six tap targets on our mobile homepage are 20 pixels tall, and the page passes WCAG anyway

Comments
4 min read
I told readers to date a Vercel deploy by reading two headers, and both of them moved without a deploy

I told readers to date a Vercel deploy by reading two headers, and both of them moved without a deploy

Comments
5 min read
Our desktop app reaches our own server from six places, and only two of them can report a failure

Our desktop app reaches our own server from six places, and only two of them can report a failure

Comments
6 min read
Three of our 38 pages tell every cache not to store them, and all three are the ones with a price on

Three of our 38 pages tell every cache not to store them, and all three are the ones with a price on

1
Comments 2
6 min read
27,231 words of comments in our repo, and "rather than" appears 107 times to "because" 66

27,231 words of comments in our repo, and "rather than" appears 107 times to "because" 66

Comments
6 min read
Our privacy policy lists eight things kept on your device, and the file with your logins in it is not one of them

Our privacy policy lists eight things kept on your device, and the file with your logins in it is not one of them

Comments
7 min read
Thirteen of the sixteen types in our Electron UI are second copies, and one field in them exists nowhere else

Thirteen of the sixteen types in our Electron UI are second copies, and one field in them exists nowhere else

Comments
6 min read
Our installer names 454 of the 528 MB in node_modules to leave out, and 7.4 MB of React still gets in

Our installer names 454 of the 528 MB in node_modules to leave out, and 7.4 MB of React still gets in

Comments
6 min read
Two version numbers in one TypeScript file decide what our legal pages say about themselves, who sees a notice, and which two URLs get resubmitted

Two version numbers in one TypeScript file decide what our legal pages say about themselves, who sees a notice, and which two URLs get resubmitted

1
Comments
6 min read
88 label words on one page, three group counts that are counted rather than typed, and four slugs that would have asked a question of themselves

88 label words on one page, three group counts that are counted rather than typed, and four slugs that would have asked a question of themselves

1
Comments
5 min read
Our longest search snippet is 148 characters of a 160 character budget, and the 12 that are left over are why the answer is written twice

Our longest search snippet is 148 characters of a 160 character budget, and the 12 that are left over are why the answer is written twice

Comments
5 min read
Our URLs are the questions, 417 of them starting with is- and 44 with does-, and the guard list naming the paths they must never take is missing five

Our URLs are the questions, 417 of them starting with is- and 44 with does-, and the guard list naming the paths they must never take is missing five

Comments
5 min read
Not one sentence on 461 of our pages was typed by a person, and the day a filler ingredient started answering the questions

Not one sentence on 461 of our pages was typed by a person, and the day a filler ingredient started answering the questions

Comments
5 min read
One function answers the question on the phone and on 461 static pages, and the package it lives in has no build step

One function answers the question on the phone and on 461 static pages, and the package it lives in has no build step

Comments
5 min read
We draw our own Trustpilot stars in 60 lines, and the score next to them is a constant with a date on it

We draw our own Trustpilot stars in 60 lines, and the score next to them is a constant with a date on it

Comments
5 min read
Twelve pages in one commit, and four of the new ones are linked from nowhere but each other

Twelve pages in one commit, and four of the new ones are linked from nowhere but each other

Comments
5 min read
One string in localStorage decides where signup drops you, and the first page of the visit is the one that writes it

One string in localStorage decides where signup drops you, and the first page of the visit is the one that writes it

Comments
6 min read
Our "tell us what you'd pay" form sends nothing to the client, and the price in the answer is resolved on the server

Our "tell us what you'd pay" form sends nothing to the client, and the price in the answer is resolved on the server

Comments
6 min read
Nine countries pay more for our product, and the entire uplift is one constant worth £2.50

Nine countries pay more for our product, and the entire uplift is one constant worth £2.50

Comments
6 min read
Our India prices are a third of standard, so checkout authorises the card first and decides second

Our India prices are a third of standard, so checkout authorises the card first and decides second

Comments 2
7 min read
loading...