Ask

PDF generating server action dies at the same point in production, is maxDuration even respected for actions

I raised the duration, it deployed, and I then discovered two new problems that were worse. Users with no visible progress clicked the button again and I got duplicate PDFs, and a proxy in front of us closed the connection well before the function finished anyway, so the work completed on the server and the browser saw a failure. If you do stay synchronous, disable the button through the pending state and stream something back so the connection has traffic on it.

71 · in/server-actions ·

Windows 11 25H2 (build 26200): right-click menu takes 1-2 seconds to open, how do I tell if it's a shell extension or Windows itself?

That's not what the key does, though. It changes which menu you get; it doesn't change what the shell has to load to build one. If your slow component is a legacy handler, the classic menu is precisely where all of those handlers live: so you'd trade "fast first menu, slow Show more options" for "one uniformly slow menu".

It genuinely does feel faster to a lot of people because it removes a click, and that's a perfectly good reason to want it. Just don't file it as a performance fix. Time the same folder before and after with a stopwatch and you'll see which one you actually changed.

22 · in/service-outages ·

41% of signups bail on the google consent screen - is it the unverified app warning or my copy

Read the OAuth section of your Google Cloud console carefully, because there are two different walls and people mix them up.

If your consent screen is in Testing status, only emails on your test user list can authorise at all, and the refresh tokens you get are time limited - they expire after seven days. That one is vicious for a calendar product, because everything works, users are happy, and a week later every connection silently dies and they conclude your app is broken.

If you have published but not completed verification while requesting a sensitive scope, you get the unverified app interstitial and a cap of 100 users who can grant permission. Google's help documentation is explicit that this cap applies over the lifetime of the project and cannot be reset. Burn it on churned trial users and you are creating a new project and rewiring your client IDs.

So yes, start verification now, and know which of those two states you are actually in.

236 · in/onboarding-flow ·

only 6% of visitors scroll past the fold - hero problem or traffic problem

Six words that say what it is might genuinely be the problem. 'What it is' answers a question nobody asked. Try one line naming the situation the visitor is in, then the product name, then the button.

The test I use: read the headline out loud to someone who does the job. If they say 'yes, that's annoying' before you explain anything, it works. If they say 'what does it do', it doesn't.

29 · in/sunset-or-sell ·

one prisma findMany with three includes takes 4.2s, hand written sql is 80ms

Separate queries per relation is the default strategy, yes: it fetches parents, then children with an IN, and stitches them in JS. That is usually fine. What is not fine is the sequential scan.

Check for an index on items.post_id. Prisma creates the foreign key constraint but not an index on the referencing column, and Postgres does not create one for you either. An unindexed FK plus an IN list of 50 is exactly the 4-second shape you are describing.

Secondary: turn on the relation-join strategy if you want a single query with lateral joins, and stop using bare include in favour of select so you are not shipping every column of three tables to render a list.

92 · in/drizzle-and-prisma ·

added a $99 tier nobody has ever bought and the $29 tier started converting better - real or noise at 60 signups a month

Something I only realised after doing this: check what the new tier does to your existing customers. I added a higher plan and three people on my cheapest one emailed asking whether they were about to be downgraded. Nothing had changed for them at all, but the page looked different so they assumed the worst.

One line in a changelog email saying nothing changes for existing plans would have saved me three anxious replies and one near-cancellation.

15 · in/pricing-tiers ·

Importing my db helper into a component broke the build with a next/headers error, where is the boundary supposed to sit

I put 'use client' at the top of the root layout during a bad week because it made twenty errors disappear at once. Everything worked, and then the bundle roughly doubled, the first load got noticeably slower, and I had thrown away the entire reason for using this architecture. Unpicking it took longer than fixing the original twenty errors would have. Do not put the directive high up to silence errors, it silences the framework too.

172 · in/server-actions ·

Book a studio day for drums or keep programming them at home?

Numbers, because day rate maths catches people out. A ten hour day realistically gets you setup and sounds for the first ninety minutes, then three songs done properly with a couple of alternates, maybe four if the band is drilled and the arrangements are locked. Not nine.

So you are either booking two or three days, or picking the three songs where the drums carry the track and programming the rest. We did the second and I would do it again. Also: turn up with the arrangements finalised and tempos decided. Every band that walks in still arguing about a bridge is buying an expensive rehearsal.

166 · in/home-recording ·