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 next.config.ts configures nothing, and its only comment describes a mechanism we never used

Our next.config.ts configures nothing, and its only comment describes a mechanism we never used

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 crash window tells you to check a log file that most of the app never writes to

Our crash window tells you to check a log file that most of the app never writes to

Comments
5 min read
One optional phone number, eleven files, five kinds of empty, and no migration

One optional phone number, eleven files, five kinds of empty, and no migration

Comments
7 min read
Two things must happen before our server module loads, and a require is all that enforces the order

Two things must happen before our server module loads, and a require is all that enforces the order

Comments
6 min read
Setting an env var above your imports does not run before them, and our integration test works anyway

Setting an env var above your imports does not run before them, and our integration test works anyway

Comments
6 min read
Two functions decide what to call you, and they disagree on purpose

Two functions decide what to call you, and they disagree on purpose

Comments
4 min read
Our newest commit changed zero files, and the 27 lines it was really about are all pooler workarounds

Our newest commit changed zero files, and the 27 lines it was really about are all pooler workarounds

Comments
5 min read
A malformed uuid is a 500, not an empty result, which is why one five line function has 19 call sites

A malformed uuid is a 500, not an empty result, which is why one five line function has 19 call sites

Comments
5 min read
Seventeen environment variables, all of them secrets, and next build runs with none of them set

Seventeen environment variables, all of them secrets, and next build runs with none of them set

Comments
6 min read
Two taxonomies in our app share the word "engineering", and matching on it is exactly backwards

Two taxonomies in our app share the word "engineering", and matching on it is exactly backwards

Comments
4 min read
Six HTML emails, five plain-text twins, and the one without a twin carries the activation code

Six HTML emails, five plain-text twins, and the one without a twin carries the activation code

Comments
5 min read
48 of our functions are POST endpoints, and the three that read the host page are deliberately not

48 of our functions are POST endpoints, and the three that read the host page are deliberately not

Comments
5 min read
Structured Outputs has no optional fields, so our model schema and our stored schema are different types

Structured Outputs has no optional fields, so our model schema and our stored schema are different types

Comments
7 min read
Our client-side fetch retries POSTs, and a primary key is the only reason that is safe

Our client-side fetch retries POSTs, and a primary key is the only reason that is safe

Comments
5 min read
A photo with no file path, a screen with no stable key, and seven failures with seven sentences

A photo with no file path, a screen with no stable key, and seven failures with seven sentences

Comments
6 min read
Two postgres-js clients for one database, and every number in them is different

Two postgres-js clients for one database, and every number in them is different

Comments
5 min read
The biggest file on our website is the terms of service, and nothing imports it

The biggest file on our website is the terms of service, and nothing imports it

Comments
6 min read
Two weeks ago I argued that flagging beats dropping. The code now drops.

Two weeks ago I argued that flagging beats dropping. The code now drops.

Comments
4 min read
Our inbound mail webhook had a path that skipped signature verification, and reaching it meant leaving a header out

Our inbound mail webhook had a path that skipped signature verification, and reaching it meant leaving a header out

Comments
5 min read
A 120 second request, a 35 second crawl and a 75 second model call, and the arithmetic has to leave slack

A 120 second request, a 35 second crawl and a 75 second model call, and the arithmetic has to leave slack

Comments
7 min read
Our terms version is two constants you bump by 0.1, and renaming the company was enough to bump them

Our terms version is two constants you bump by 0.1, and renaming the company was enough to bump them

Comments
7 min read
wrap, break, minPresenceAhead and fixed: the four react-pdf props that decide where a report splits

wrap, break, minPresenceAhead and fixed: the four react-pdf props that decide where a report splits

Comments
5 min read
Three Supabase clients, one cookie jar, and the response object our proxy is not allowed to replace

Three Supabase clients, one cookie jar, and the response object our proxy is not allowed to replace

Comments
7 min read
Six exercise types, two layouts, and a phone that gets three tabs instead of three panes

Six exercise types, two layouts, and a phone that gets three tabs instead of three panes

Comments
4 min read
A signed-in session crosses two of our domains in a URL fragment, and one consumer handles both producers

A signed-in session crosses two of our domains in a URL fragment, and one consumer handles both producers

Comments
6 min read
Three platforms' logos, three sets of brand rules, and one SVG id that can blank the rest

Three platforms' logos, three sets of brand rules, and one SVG id that can blank the rest

Comments 1
7 min read
Our Redis cache measured one string and stored another, so every read deleted the key

Our Redis cache measured one string and stored another, so every read deleted the key

Comments
6 min read
Four ways to stop our email, and only one of them asks first

Four ways to stop our email, and only one of them asks first

Comments
6 min read
1,250,964 rows that recorded nothing, and why deleting them gave back no disk at all

1,250,964 rows that recorded nothing, and why deleting them gave back no disk at all

Comments
6 min read
373 of our pages live at the site root, and one Set is the only thing stopping a slug from eating /terms

373 of our pages live at the site root, and one Set is the only thing stopping a slug from eating /terms

1
Comments
6 min read
We cut a scene out of our Remotion reel and slowed the rest to 80%, and two one-line functions kept every cue on its frame

We cut a scene out of our Remotion reel and slowed the rest to 80%, and two one-line functions kept every cue on its frame

Comments
7 min read
Four email switches stored as an array of the ones you turned off, and consent that belongs to the address

Four email switches stored as an array of the ones you turned off, and consent that belongs to the address

Comments
6 min read
Forty-one columns in our schema are enums in TypeScript and plain text in Postgres

Forty-one columns in our schema are enums in TypeScript and plain text in Postgres

Comments
6 min read
Our support answers live in a TypeScript array, and every number in them is interpolated from the plans file

Our support answers live in a TypeScript array, and every number in them is interpolated from the plans file

Comments
6 min read
Every line of a new support thread gets its own millisecond, because one transaction would stamp them all the same

Every line of a new support thread gets its own millisecond, because one transaction would stamp them all the same

Comments
6 min read
A background refresh must not move the row under your cursor, so our table renders the snapshot it loaded with

A background refresh must not move the row under your cursor, so our table renders the snapshot it loaded with

Comments
5 min read
Every contrast failure on our site is the same Tailwind feature, and measuring it needs a canvas

Every contrast failure on our site is the same Tailwind feature, and measuring it needs a canvas

Comments
6 min read
Our .env.example documents 19 variables and the app reads 15, and you can read one of them off the live HTML

Our .env.example documents 19 variables and the app reads 15, and you can read one of them off the live HTML

Comments
5 min read
Our heaviest animation is a word nobody is meant to read, at 5% opacity, hidden on every phone

Our heaviest animation is a word nobody is meant to read, at 5% opacity, hidden on every phone

Comments
4 min read
Five ways to say "wait" in one Next.js app, and the sign-in form uses none of them

Five ways to say "wait" in one Next.js app, and the sign-in form uses none of them

Comments
4 min read
I nearly deleted four live components, because my audit grep only matched double quotes

I nearly deleted four live components, because my audit grep only matched double quotes

Comments
4 min read
Three icon conventions in one app, and the copy-pasted one is on every sign-in screen

Three icon conventions in one app, and the copy-pasted one is on every sign-in screen

Comments
5 min read
We ask every desktop notification to never disappear, and on the two platforms we ship to that is one option too many and one too few

We ask every desktop notification to never disappear, and on the two platforms we ship to that is one option too many and one too few

Comments
5 min read
We round a converted price up to the next .99, and three of our currencies have no .99 to round to

We round a converted price up to the next .99, and three of our currencies have no .99 to round to

Comments
6 min read
Four alert emails, eight functions, and a five-line HTML escaper we wrote on purpose

Four alert emails, eight functions, and a five-line HTML escaper we wrote on purpose

Comments
6 min read
Our whole database client is twenty lines, and three of its four options exist because of the connection pooler

Our whole database client is twenty lines, and three of its four options exist because of the connection pooler

Comments
6 min read
One release script, two child processes, and only one of them is allowed a shell

One release script, two child processes, and only one of them is allowed a shell

Comments
5 min read
Two files in our build set an environment variable and then call require(), and an import would have broken both

Two files in our build set an environment variable and then call require(), and an import would have broken both

Comments
4 min read
Four of our expo-router screens sit outside the authenticated group, so the gate had to become a hook

Four of our expo-router screens sit outside the authenticated group, so the gate had to become a hook

Comments
5 min read
Our API client has no idea what a store is, and that inversion is how the app notices its data went stale

Our API client has no idea what a store is, and that inversion is how the app notices its data went stale

Comments
5 min read
Expo in a pnpm monorepo: one flat node_modules, two peer overrides, and the Metro flag you should not set

Expo in a pnpm monorepo: one flat node_modules, two peer overrides, and the Metro flag you should not set

Comments
5 min read
Our label photos leave the phone at a 1,568 pixel long edge, and the crop happens before the resize

Our label photos leave the phone at a 1,568 pixel long edge, and the crop happens before the resize

Comments
5 min read
Our FAQPage markup and our FAQ markup are one array, because the price inside it changes per visitor

Our FAQPage markup and our FAQ markup are one array, because the price inside it changes per visitor

Comments
4 min read
Fifteen numbers on one admin page, one round trip, and a row count Postgres never counts

Fifteen numbers on one admin page, one round trip, and a row count Postgres never counts

Comments
5 min read
Shipping a feature means editing the data export, and deciding which columns are not about the user

Shipping a feature means editing the data export, and deciding which columns are not about the user

Comments
4 min read
The data is in git, the progress is in localStorage, and neither of them is in the database

The data is in git, the progress is in localStorage, and neither of them is in the database

Comments
5 min read
Somebody else's report is a 404, and the user id is in the where clause rather than in an if

Somebody else's report is a 404, and the user id is in the where clause rather than in an if

Comments
4 min read
The list shows two numbers, so the query digs them out of the JSON instead of loading a hundred attempts

The list shows two numbers, so the query digs them out of the JSON instead of loading a hundred attempts

Comments
4 min read
A review still marked "processing" after two minutes was killed sixty seconds in

A review still marked "processing" after two minutes was killed sixty seconds in

Comments
4 min read
Our results screen only lived as long as the tab, so we gave it a URL and ended up with one shape and three renderers

Our results screen only lived as long as the tab, so we gave it a URL and ended up with one shape and three renderers

Comments
4 min read
loading...