Ask

Fourteen months of paying for a sleep app and I'm still awake at midnight

I've paid for both of the big ones at different times, a year each, so I can compare them concretely. One is better at the narrated sleep stories, more voices, longer catalogue, and the narration actually fades rather than ending abruptly. The other has the stronger structured courses, so if you want a ten-part thing on winding down it's the better buy.

What neither did was change when I fell asleep. They changed what I did while lying there not sleeping. That's worth something on a bad night and it is not worth seventy dollars a year twice over, which is what I was doing before I noticed I had both.

167 · in/better-sleep ·

What actually counts as building in public - revenue screenshots, a changelog, or narrating your day?

Fourteen months of doing all three, with the signups attributed as best I could. Weekly changelog: 4 signups total over the whole period, and the people who read it were already users. Monthly revenue posts: high engagement from other makers, almost no signups, and about half the replies were people selling me something. Write ups of a specific problem and how I solved it: 61 signups, of which the top two posts accounted for 40. The distinction is whether a non maker would find the post useful, and only the third category ever does.

76 · in/build-in-public ·

Mix it myself for the tenth time or pay someone - where does hiring out actually pay off?

Paid a mixer once, for one song, and treated it as tuition. Two things came back. First, the mix, which was obviously better in ways I could then hear in my own attempts. Second, and more useful, he sent notes about the recordings, specifically that my vocal comp had three different distances in it and that the acoustic was clipping on the transients before it ever reached him. I have fixed those at the source ever since.

If you do this, label the stems properly, print everything at the same start point, and send them dry unless the effect is part of the sound.

176 · in/home-recording ·

Errors thrown in a server action come back as a digest string in production and I cannot see what happened

The redaction is deliberate, because anything thrown on the server could contain connection strings or user data, so the framework replaces it with a generic message plus a digest and logs the real error server side keyed to that digest. So the first fix is not in your code, it is making sure you can find the digest in your logs, and the hook for that is onRequestError in instrumentation, which is where you forward to whatever error reporter you use. Once a digest maps to a stack trace in your reporter, production stops being guesswork.

218 · in/server-actions ·

zod in the action or react-hook-form on the client, solo and launching in two weeks

Server first, always, because the action is a public endpoint and client validation is a UX feature. One schema in a plain file both sides can import, safeParse in the action, errors back through useActionState:

const parsed = createOrder.safeParse(Object.fromEntries(formData))
if (!parsed.success) return { errors: z.flattenError(parsed.error).fieldErrors }

The field error shape maps straight onto your inputs by name. For nine fields that is the whole implementation. Add react-hook-form later if a form gets long enough that a round trip per validation feels bad.

84 · in/server-actions ·

Six months of sharing a bed and I have never slept worse: separate duvets or separate rooms?

Two single duvets on a double bed. It sounds like nothing and it fixed about seventy percent of the problem for us within a week.

Most of what wakes you when someone turns over isn't the movement, it's the duvet being dragged off you and the sudden cold. Once you each have your own, they can roll all night and your microclimate doesn't change. It's standard across most of Scandinavia for exactly this reason and it cost us the price of one extra duvet and cover.

296 · in/better-sleep ·