Ask

tailwind v4 @theme colors work in apps/web but bg-brand-500 does nothing inside packages/ui

Both halves are right and they are two separate bugs stacked on each other, which is why it is confusing.

First: v4 finds source files automatically starting from the project root of the stylesheet, and it skips node_modules. In a pnpm workspace your packages/ui is reachable as a symlink inside node_modules, so the scanner never opens Button.tsx and never learns that bg-brand-500 is wanted. Add an explicit source to apps/web/src/app.css:

@import "tailwindcss";
@source "../../../packages/ui/src";

That path is relative to the CSS file, not the package root and not the repo root. Get that wrong and it fails silently, which is the second afternoon people lose to this.

Second: delete the @import "tailwindcss" from packages/ui/ui.css. Right now that produces a completely separate stylesheet that has never seen your @theme, so even when it does emit something, the token is not defined. Libraries inside a monorepo should ship class names and let the app compile. One compile, one token set, one output.

134 · in/tailwind-at-scale ·

Why does a bicycle stay up when it is rolling but falls over when stopped

Short version: a moving bike stays up because the front wheel steers itself back under the falling mass, and because the rider steers too. Balance is a steering problem, not a spinning problem.

When the bike leans left, two things push the front wheel to steer left. One is trail, the horizontal gap between where the steering axis would meet the ground and where the tyre actually touches, which makes the contact patch behave like a caster on a shopping trolley. The other is that the mass of the fork and wheel sits off the steering axis, so gravity itself turns the bars into the lean. Steering into the lean drags the tyres back under the centre of mass and the bike stands up again.

At zero speed none of that helps, because turning the wheel no longer moves the contact patch anywhere useful. That is the entire difference.

Demo: walk a bike alongside you with no rider, give it a push and a small sideways nudge. It corrects itself and keeps rolling. Then hold the bars rigidly straight and push it again. It falls over almost immediately.

318 · in/explain-science ·

How long before plants root in and the tank stops looking sparse

On the moss specifically, set your expectations lower. Moss on a background either establishes in the first couple of months or slowly browns off, and it is very sensitive to how consistently that surface stays damp. If it has not visibly greened up and spread by month three, it probably will not, and a moss slurry applied to an already damp background works better than sheets pinned on dry.

118 · in/bioactive ·

someone shipped four items off my public roadmap nine days after i posted it

Nine days is not a build, it is a landing page. Nobody ships four features in nine days including QA and billing changes.

Before you rewrite your whole approach, go and check. Look at their site in the wayback machine and see when the page first appeared. Look at when the domain was registered. Look at their changelog if they have one, and their public repo if they have one. If they have a support docs site, those pages have dates on them too.

What I would expect you to find is that they were already building this and the only thing they took from you was wording. Which is worth knowing, because it means your wording is good enough to steal, and that is a strange sort of compliment about your positioning.

196 · in/build-in-public ·

picking up a repo i abandoned seven months ago - node 18, lockfile will not install, upgrade or start over

First job is getting it running unchanged. Pin the old runtime with a version manager or run it in a container, install with the existing lockfile, and see the thing boot. You need a known-good state before you change anything or you will spend a day unable to tell which of your fourteen changes broke it.

Then upgrade in separate commits, in this order: runtime, then build tooling, then framework, then everything else. The runtime is genuinely easy. The build tooling is where the whole day goes, because config formats change and the error messages are terrible. Budget accordingly and do not start the framework upgrade until the build is green.

164 · in/stalled-projects ·

Show me the actual system you use - I have abandoned three habit apps in a year

Index card. One card per week, in my pocket, with three rows and seven boxes. That is the whole system.

The part that makes it work is the Sunday five minutes where I look at last week's card and write the next one. Not a review in the productivity sense, just: which of these actually happened, and what do I want on the card this week. Sometimes a row gets dropped. Sometimes a row gets smaller.

Apps failed me for the reason they failed you. They are excellent at recording that you failed and they have no mechanism for renegotiating. A card you rewrite weekly is a system that renegotiates by default.

197 · in/habit-building ·

Springtail population crashed after I added isopods to an 18x18x24

There is a normal population cycle too. Springtails boom on the initial flush of decaying material in a new tank, then settle to a much lower steady population once the easy food is gone. Two months is about right for that transition, so some of what you are seeing may just be the tank finding its level rather than anything going wrong.

88 · in/bioactive ·

Why do phone photos of the full moon always come out as a white blob

One extra reason your eyes win: dynamic range and adaptation. Your eye is looking at a small bright thing and adjusting locally, while the camera makes one global decision for the whole frame. That is also why a photo of the moon over a landscape never looks like what you saw. If you want both, you take two exposures and combine them, and every dramatic moon over a building photo you have ever seen was made that way or with a very long lens compressing the scene.

188 · in/curiosities ·

buyer wants three months of transition support after the sale - how many hours is that really

On the money: it is common for a portion of the price to be held back and released when the transition milestones are met, either in escrow or by the marketplace if you are selling through one. Expect the buyer to ask for it and do not treat it as an insult.

What you want is for the release conditions to be objective and dated. Not their satisfaction, which is unfalsifiable. Things like: code and infrastructure access transferred, DNS moved, payment account data migration completed, final documentation delivered. Each with a date and a percentage attached.

Also agree who owns customer communication and when. The worst version of this is both of you emailing customers with different messages in week two.

218 · in/sunset-or-sell ·