Tailwind Labs loses 80% of revenue and 75% of engineering due to AI
99 points by brtkdotse
99 points by brtkdotse
The business side of it is unfortunate but it feels like regardless of AI the entire thing is built on very shaky foundations. Tailwind has always been a solution to an easy problem (how do we style components in a way that scales?) with a dubious value proposition, benefitting from unclear guidelines for styling components in React and CSS spec being relatively slow to update. But it feels like in the recent years, we got a host of solutions that are just better suited for the problem that do not involve leaky abstractions. It became very easy to use CSS modules, and there were a lot of useful things added to CSS that made the OSS Tailwind value proposition as a whole much lower, not to mention their paid offering.
That's not the point here, Tailwind is being used more than ever, most vibecoding tools will spit React and Tailwind solutions nowadays. The problem here is that AI is eating up traffic to their docs which is impacting their revenue. I find quite disingenuous to call it shaky foundation with dubious value proposition, Tailwind was an example of a successful OS project being able to sustain itself until now.
I've seen lots of comments suggesting that Tailwind's popularity doesn't make sense in the age of AI. But Adam denies this, and my own experience with AI contradicts it too; LLMs actually seem to prefer using Tailwind for some reason. I'm not surprised usage is booming.
The real problem is that the old funding model (paid components - I've been a customer since 2021, it was a single payment) is no longer sustainable since LLMs can now generate these components for "free". The change happened so fast that Tailwind couldn't reorganize around it.
The ironic (and worrying) part is that if Tailwind fails and shuts down, in a few years LLMs will probably struggle to make it work due to lack of maintenance. Then they won't be able to generate functional UIs anymore. Classic tragedy of the commons, fueled by current hype and investor hysteria.
LLMs actually seem to prefer using Tailwind for some reason.
Because humans use it so often. They're autocomplete engines after all. You can tell it not to use Tailwind, I suppose. Maybe having style inline helps with context windows, but I've got no idea.
It's the locality of effect that Tailwind offers. A normal CSS stylesheet involves a lot of indirection and abstraction, and also requires understanding the entire instantiated layout (which is often less than clear from the code alone). With Tailwind you can understand the layout locally without having to understand the global context. This comes at the cost of some repetition and needing to know the Tailwind vocabulary as you define each component, both of which the AI does without trouble.
Yes! A thing I always do in articles that complain about all the classes in a Tailwind snippet is point out that I can exactly visualize the Tailwind snippet based on classes alone, but have no idea what card__thumbnail will look like. I suppose LLMs appreciate that locality too.
Spatial locality is really underrated in programming nowadays. One of Tailwind selling points is that you can keep your code concise and still packed with functionality, and there’s no need for incessant switching between markup and stylesheet.
In most component-based frameworks CSS modules already solve it in a way that's much closer to the platform.
don't most of those just generate randomly named nonsense classes for everything so that be localized to a single component, just kept in a different file? Frankly doesn't seem any closer to the intent of CSS to me.
my guess is that it's easier to know in-place what you need instead of predefining everything you need then using it.
Did they really get most of their revenue from clicks to their docs? That seems very surprising to me, and not sustainable at all (c.f. news companies having to descend into pure clickbait or implement paywalls in order to make a profit from their websites).
I got the impression that their funding model was more the "Plus" stuff, but that also didn't seem particularly sustainable — it's mostly stuff built on Tailwind, but off-the-shelf components have always been notoriously difficult to monetise at any sort of scale unless you can provide a really comprehensive solution to a complex problem (e.g. grids and charts).
Tbh, I'm not really sure how you sell Tailwind as a product, although I have this feeling about a lot of similar web development startups. It feels like something that either you release as a side-effect of an existing business (see React being paid for by Facebook as a side-effect of needing a framework for their own pages), or something that you release as a community project with some amount of patronage/sponsorship for the core maintainers (e.g. Babel). Like, there's not enough funding there to sustain a whole business, but there might be enough to keep a handful of people working on it part time.
Traffic to our docs is down about 40% from early 2023 despite Tailwind being more popular than ever. The docs are the only way people find out about our commercial products, and without customers we can't afford to maintain the framework.
This is not an issue exclusive to Tailwind team. Some of my friends work in a company that relied on SEO to get users to their content platform (not a news website) and they did it pretty well before Google started to push AI summaries on their search results. In hindsight is easy to criticize someone's monetary model, but again, Tailwind was one the few that were able to monetize part of their offerings whilst keeping a healthy open source project.
My guess is people (developers) look for help/debugging, find their docs and then funnel to their Plus offerings. They were huge enough that even that supported their business.
I learned today that they didn't have any subscriptions, it was just one-time payments. I also am not sure how one builds a "sustainable" business on a product with inherent 100% churn.
Our industry has been building sustainable businesses selling non-subscription software decades before the advent of SaaS & SaaS-like models. There are notable examples that seem to be doing well to this day! (Sublime and DxO immediately come to my mind, but there certainly are others).
SaaS & subscriptions undoubtedly took over — from a VC-want-a-decacorn perspective, it's (kinda tautologically) better for someone to pay for $THING more than once, and there are legitimate reasons why a subscription may be necessary. (The latter is the case if your usage of software is cloud-based and requires a continuous lease of resources to run — sometimes by unfortunate choices made by the software developer, sometimes by sheer necessity.)
I don't see anything inherent to software that would require it to be sold on a subscription basis, though.
There is a lot of history in the Windows development space with paid component toolkits. This seems like a better comparison with what Tailwind are doing when you consider one that offers source-included. Whether it's VB, Delphi, or .NET, you can buy toolkits of components with perpetual licenses (example).
These vendors sell you a perpetual license, but you only get a year of updates. After that, you have to purchase the next edition, if you want to continue having supported components. The source really only exists for escrow reasons because these toolkits mainly operate in a business context where upgrading is much less expensive than maintaining the dependency yourself.
In theory, you can upgrade much less frequently (or not at all). The reality is that businesses want support for OS updates, developer tool updates, the desire for the user interface to match current OS aesthetics, etc. All of these contribute to upgrades (although I will acknowledge that the pace of change is slower with desktop frameworks today.)
So, you end up with a subscription model even if the licensing is perpetual. You note the VC influence, but in the case of these component vendors, it's more a case of private equity who've swept in and tightened up the subscription nature of these businesses. Large organizations typically opt for site subscriptions rather than perpetual licensing given that the initial outlay is lower and purchasing is not driven by individual developers.
Returning to Tailwind's business, it's much harder to force a 2025 and then 2026 edition on you because the original set of components was robust and keep working. Even without AI, they were maintainable and taught you how to develop solid components from scratch. The app runs in the browser, uses your unique design, and is cross-platform, so you don't have to chase some OS changes like recent ones in iOS.
This depends on what one means by "sustainable." In the case of Tailwind I suspect what is meant here is that the business covers the resources needed to sustain the development of the open source project. This is quite different than what Sublime does (I am unfamiliar with DxO), because Sublime as far as I know has no open source offering to fund, their entire work goes into their paid product. Sublime also doesn't offer lifetime free updates. So they aim to attract users who will pay for future versions, there is a recurring revenue stream there.
Another example that I know of a company that sells lifetime license with free updates is Image-Line and FL Studio, but they also have a recurring revenue stream in their plugins, which can cost a lot.
Tailwind on the other hand sells a lifetime license to their Tailwind Plus offering and landing page templates. It's nice from the consumer point of view, don't get me wrong, but as a business practice, it doesn't really work long-term, as we see now.
How does AI reading their docs impact their revenue?
Answered above by jrgtt so you may have already seen it (and I don't want to take credit for someone else's answer!) but basically - by reducing the number of humans reading their docs. Reduced site traffic means fewer visitors to upsell commercial products.
This has already been a problem elsewhere as websites have complained about lost traffic caused by Google scraping their content to answer questions even without AI.
It's really discouraging how hard it seems to be to keep an open source business running. Tailwind is so popular that it has become a de facto standard - LLMs will use it almost as if it was part of html/css, but the company behind it cannot sustain a team of 8 persons.
The problem is of course that companies open source budgets simply do not match the utility they extract from open source projects. I used to work at a company whose business model pretty much is digging money out of the ground. They claimed to be very open source positive, but in reality they were only positive to getting stuff for free. When os projects used extensively within the company were abandoned because of lack of funding, they reacted with anger at the maintainers beacause they had to spend engineering hours on replacing the projects.
I guess it just makes more sense for companies to hope that they can freeload on other companies funding, rather than actually pay for the projects they depend on.
Worth noting from the podcast Adam remains “optimistic” about AI and is interested in using it, suggesting GitHub triage as a possible area. 🤷
I don't understand this at all. Even as someone who doesn't use AI at all and isn't directly impacted by it, I feel like we should burn the entire "AI industry" to the ground because of all the negative externalities it has. And here's someone who's business is directly being destroyed because of AI and is "optimistic" about it?!
we should burn the entire "AI industry" to the ground because of all the negative externalities it has. And here's someone who's business is directly being destroyed because of AI and is "optimistic" about it?!
If you are a saddle maker that makes saddles for horses and your business goes away, you can still be excited about cars and adjust to new realities. Those things are not necessarily in conflict.
The major difference is that tailwind is far from obsolete unlike horses in your simile. If tailwind development goes away it hurts all users. AI is not a replacement for tailwind.
difference is that tailwind is far from obsolete
Tailwind is not, but Tailwind was not commercialized. Tailwind UI was the cash cow and that is obsolete now that you can have an agent build your own components quickly. The entire business model in this form broke away.
To be fair it was a business model that shouldn't exist in the first place, AI just made it more obvious. I place it on the same shelf as other types of jobs that only exist because of some external deficiency not related to the technology they serve, like train fare collectors and pedestrian crossing guards. It's the human element that is lacking in all three of these, either human skill issues for CSS, human dishonesty for trains or human inattention for roads. Once that is solved by some method the need for those business models disappear.
I feel like train fare collectors and crossing guards serve more purpose than just compensating for human dishonesty or inattention.
A fare collector can also help people who have some problem with a ticket. A crossing guard can help people across the street, regardless of how reckless or careful drivers may be.
I also just ... cringe at the idea that everything should just be ruthlessly automated and efficient and there is no place for humans to do jobs that may not be "essential" for some value of "essential" but where a human touch is a good thing. I insist, for example, on using cashiers rather than self checkout.
I'm old. I remember when our town still had a gas station that had an attendant. Yeah, I can pump my own gas. But it sure was nice for my mom when she was wrangling toddlers, or no doubt for older people, etc. Absolutely necessary? No. A fulfilling job? I dunno - ISTM some folks enjoyed the work. I'm not sure we're better off for the automation.
I also just ... cringe at the idea that everything should just be ruthlessly automated and efficient and there is no place for humans to do jobs that may not be "essential" for some value of "essential" but where a human touch is a good thing. I insist, for example, on using cashiers rather than self checkout.
If the human adds value, the human should have a place. But there are plenty of cases where humans add negative value compared to the automation. The self checkout? Depends on the situation, sometimes the human is helpful, sometimes it is not or negative. Ordering at McDonalds? Quite frankly the touch screen version is such an improvement over the human version because the screen is patient and the human is not.
I think there is so much more nuance between machine vs human and there is no one opinion fits all situations here.
If the human adds value, the human should have a place. But there are plenty of cases where humans add negative value compared to the automation. The self checkout? Depends on the situation, sometimes the human is helpful, sometimes it is not or negative.
I think "adds value" is too vague here. Adding value in a job can mean:
2 and 3 are really important for people and society, but businesses choosing to replace a job with AI only give a shit about 1.
I think "adds value" is too vague here. Adding value in a job can mean
I'm only talking about value added in the consumer interaction. As a consumer, I don't care whether the company makes money. What matters is whether an interaction with a human, compared to an interaction with a machine, adds value for me in that moment. And in some cases, the human adds negative value.
I agree that that's the right thing to focus on.
But we also shouldn't be surprised when businesses don't focus on that because they have no incentive to and if they do, they can be outcompeted by other businesses who don't.
I'll admit, I prefer the touchscreen ordering. But I'm not sure it's an improvement for everybody. It's certainly not an improvement for people with visual disabilities (at least my recollection of the touchscreen stuff is that it's not a11y-friendly, I could be wrong here).
"I think there is so much more nuance between machine vs human and there is no one opinion fits all situations here."
Well, we agree on that for sure. I'm taking the position that, because people must have jobs to exist in society as it stands right now, that's priority one. Nobody who is willing to work a full-time job should be unable to find work that pays well enough for the person to sustain themselves and (if necessary) their dependents at a non-poverty level. That's my starting position.
at least my recollection of the touchscreen stuff is that it's not a11y-friendly, I could be wrong here
I don't have disabilities so I cannot judge from first hand, but I know that it has a huge accessibility button that I pressed out of interest and it offers a zoom mode and a reachability mode. The latter I actually use for my kids sometimes.
Nobody who is willing to work a full-time job should be unable to find work that pays well enough for the person to sustain themselves and (if necessary) their dependents at a non-poverty level. That's my starting position.
I agree with this on the surface, at least in theory. But it can’t hold for 100% of people. There will always be individuals who are willing to work but whose skills, or what they can offer, don’t find a buyer on the other side. It’s still a market, and no one can be forced to employ someone. As a result, there will always be a segment for whom finding work is hard. In periods of uncertainty like the one we're in now with AI changing things, that segment naturally grows. I'm sure that over time, things will rebalance. IMO the idea that no job can ever be lost doesn't seem right and it might not even have to be the highest priority.
I started writing this today right after leaving from a Taco Bell where I had just witnessed a fight nearly break out with a customer and some staff because of how behind they were.
This was with:
The problem I think isn't automation really, it's that the wrong things are being automated.
It seems like the fast food industry is only optimizing for the Producer (placing orders) and never touching the Consumer (making orders) part of the fast food industry's version of the Producer-Consumer problem.
There is literally nothing managing back pressure and it is super obvious. "fast food" in 2026 is only fast in the sense that large amounts of orders get to the kitchen very quickly. If you replaced fast food workers right now, it still wouldn't solve anything unless you could plop a giant food factory on top of an existing fast food place or something.
It's part of the reason why dine-in places in 2026 are so much better speed wise. The back pressure management is built into the experience, lol.
If you take out the kiosks and the DoorDash, much to many people's dismay, we'd probably see a vast improvement in how quickly folks can deliver product.
I noticed this at Starbucks in San Francisco. There is no visual clue of what is going on because of mobile orders. I ordered in store a cappuccino and i had to wait for 30 minutes because of how many people were apparently ahead of me.
I'm not sure though if that is a problem at McDonalds. I did not notice it there much, in part because they also make it very clear how long the queue in front of you is visually on the screen. So if there is a lot happening, you can bounce as a customer.
I think there is so much more nuance between machine vs human and there is no one opinion fits all situations here.
Hard agree and I would love to see more (friendly) discussion about this!
But in my experience the current wave that people around me are riding is productivity/result over empathy without much nuance. Buying art generated by a model instead of from people is one of the first examples that come to mind.
because the screen is patient and the human is not.
From a consumer perspective I can understand this, but depending on where you are, instead of paying/improving quality of life for people in service industry...they got replaced with screens? I know that's not what you're saying, but I'm having a hard time understanding the goal here with "humans should add value" w.r.t. McDonalds.
I don't think I'm advocating for automation per se, or even efficiency. Just pointing out that that some jobs are inherently unproductive and merely exist because some other element of society is broken.
In Brazil we have a bus ticket "cashier", sort of an overpowered fare collector. You enter the bus and they sit on a special seat with a turnstile, you pay them and go through the turnstile. If you don't pay they're there to physically stop you. They exist because without them a lot of people would not pay for the bus.
That this job even exists is a deficiency in the Brazilian society both in terms of income inequality as well as dishonesty. In all countries in Europe, Asia or Oceania I've been they don't exist: the driver does that job. In Luxembourg the bus is free so there's not even that issue.
This is an example of a "useless" job. I don't advocate for their disappearance because here at least it'd make a lot of people unemployed but it's a very bad usage of a human brain. That person could be doing better things with their time if society was less broken in that particular way.
"That person could be doing better things with their time if society was less broken in that particular way."
Could they? This assumes there's an available job for them to transition to -- and I'm not convinced that's the case. I don't know how public transit works in Brazil, I'll admit, but if the entity that allocates funds for work eliminates that job -- is it going to create a job elsewhere that the people can move to?
I see a common thread in tech circles where people will voice opinions along the line of "just get a better job" or "that job shouldn't exist because it's a dead-end job", etc. Basically, there seems to be some underlying assumptions that 1) there's an endless supply of jobs, and 2) everybody should always be "upskilling" and trying to hustle into more challenging work, etc. But a lot of people really only care about jobs because they must have one to exist. They don't want to be constantly retraining for new things. They just want to pay their bills and be left alone.
So endlessly automating things so that these "useless" jobs don't exist is, IMO, not a net good for society.
Now - if a job/need exists and you can't find people willing to do it, that's a good sign that it should be automated, eliminated, or otherwise changed so that people are willing to do it. In my previous example of gas station attendants -- if that job was eliminated because nobody wanted to do the work, then that seems like a net benefit for society.
I don't think I'm advocating for automation per se, or even efficiency. Just pointing out that that some jobs are inherently unproductive and merely exist because some other element of society is broken.
I don't really understand how, by this logic, some jobs are productive, and some are not. All jobs are there to "fix" deficiencies with the way things are. Some jobs mold nature into different shapes. Some jobs attempt to fix broken bodies. Some jobs correct for human nature.
I come from Brazil and I haven’t seen a bus with a cashier for more than a decade. Curious to hear where they are still employed.
Pretty much all major cities still have them. Smaller cities usually don't but then again they mostly never did.
With more tech (RFID and NFC fares) there's talks of phasing them out, some places have but it's not widespread.
Once that is solved by some method the need for those business models disappear.
Telerik has the same business model Tailwind does, and has done so for decades. The business strategy is valid because customers don't want to hire someone to do the work themselves and would rather rely on a consultancy. Are you suggesting consultancies are invalid businesses?
Tailwind UI Plus provides ready-made components and templates, it's not a consultancy.
By the way "invalid" is your own take on this. I didn't suggest they are invalid business models, just unnecessary ones that a slight change in external factors would obviate. They provide a value to current society due to these human inefficiencies but their value is not intrinsic.
I didn't suggest they are invalid business models, just unnecessary ones
I think you're just arguing semantics when your phrasing was "shouldn't exist in the first place", i.e., not valid.
provides ready-made components and templates
Sure, but those components have something that makes them special over the OSS offering that people wanted to pay for and were asked for by some customer in the first place.
My point is the "custom widget" market exists, has existed for a long time, and AI killing this business model and being built on stolen code kind of makes this another drop in the bucket against its use.
Sure, but those components have something that makes them special over the OSS offering that people wanted to pay for and were asked for by some customer in the first place.
I'm no expert in this business and I don't know what their consumer base looks like, but I would not be terribly surprised if the purchasers of those components were a very specific crowd. The adoption of tailwind-ui within my circles has been exactly zero. Yet they make a lot of money, so they must have some pretty good usage numbers but they are probably from some specific crowds that were looking for that precise solution.
Among my circles on the other hand shadcn took off quickly and can be found in many applications now. Obviously shadcn is also free, but the value proposition also seems better for react developers than tailwind UI was.
So "people wanted to pay for" is valid, but "some people wanted to pay for" and those people are now increasingly looking elsewhere.
those people are now increasingly looking elsewhere.
I don't think that's the takeaway here. The knowledge of the offering's existence has basically fallen off entirely because the AI isn't showing it to them in the first place unlike if a human was looking at the docs instead.
The knowledge of the offering's existence has basically fallen off entirely because the AI isn't showing it to them in the first place
That is an assumption which might or might not be true. My suspicion is that it's wrong. The AI is building people entire components so the need does not exist. If i ask my coding agent where to get high quality tailwind components the first link it gives me is tailwind UI. If someone were to still ask that question, they would be pointed right at tailwind. But the work the agent does even without having access to it, is sufficient and might even be better.
It's not an assumption, it's a stated fact from their CEO.
The traffic to the docs is down is a fact. That someone were to reach for tailwind UI if only the agent would advertise tailwind UI is the assumption that is not validated. If that was the case, I'm sure they could make the experiment with amp which offer ads in the free coding agent and see if that helps conversions.
One might guess that it's more a case of...
optimistic about the potential of AI technology optimistic about hyping up some new idea by labelling it AI in some way in order to secure VC funding
Oof, audio without a transcript should be illegal. I don't suppose anyone will honour me with a TL;DL while I'm on my morning commute?
Interesting, I would have not guessed the company size being "3 out of 4 engineers" from the headline's choice of wording: "loses 75% of engineering".
It was intentional on Adam's part because "I had to let go of 3 engineers" barely registers without the context of the team being 4 people. In an industry that has had to reckon with thousands being laid off in waves, I think that choice was good and conveys the impact sufficiently without being misleading.
Here's the PR comment that sparked the episode as I understand it
https://github.com/tailwindlabs/tailwindcss.com/pull/2388#issuecomment-3717222957
Gosh, what a soul sucking thread for one to read. I am surprised Adam kept his cool having to deal with randos with AI-generated avatars telling him what to do with his team and project.
Reading the comments in that issue makes me sad. People not listening to the maintainers, still pushing their agendas "make it more visible", "you failed to monetize", "make it available to AI". Like if tailwind wasn't easy enough already, and the tailwind team was probably following already the general manual of build an audience and keep customers happy. It is a great project.
Suggest to replace the main story with this one, also because it's flagged as "broken link"
We don’t allow direct links into project spaces to avoid brigading. A strong majority of our readers will be already logged into GitHub, so sending many thousands of people into an already-heated discussion about the most contentious topic in the field is a recipe for disaster. We didn’t have any big incident, and with 100% of our links getting reposting to HN and Reddit it’s hard to tease out our influence, but in the last couple years we grew big enough that I wanted to head off the inevitable.
Having them in comments seems OK so far. People will usually have read the primary story link and enough of the comments to slow down, contextualize, and remember to be good neighbors.
Ah, thanks for clarifying. Also, the original story's link seems to work for me, so I'm not sure why it's even marked as broken.
Can someone please tell me what the PR is trying to do? I have only tried using a tailwind once and that was a long time ago as a CLI for generating CSS files. Where does this llms.txt "endpoint" go?
Given how easy it is to generate transcripts today as a user, I don't think it should be illegal.
Is it easy to generate an accurate transcript? I scrolled down the comments here on lobsters, saw someone posted a thing and got downvoted straight to hell for it.
A transcript from the original author can be presumed to be (though it probably isn't actually...) proofread and signed off on. A transcript from a third party can not.
Is it easy to generate an accurate transcript?
Yes, I generate transcripts all the time. They from my experience much more accurate than manually maintained subtitles I'm used to from TV. But I usually summarize them or reword them for better consumption since literal transcriptions are painful to read.
A transcript from the original author can be presumed to be (though it probably isn't actually...) proofread
From my experience transcripts that I get myself are more accurate than the ones I find online.
Yeah, that's an exaggerated reaction for sure.
Adding transcripts increases the cost of creating content. What it's essentially saying is: if you cannot afford the time to create the transcript, then don't bother creating/releasing the content, which is a very entitled request.
Doing it yourself is the right solution here.
Here's what NotebookLM gave me:
Introduction and Context All right, going for another walk this morning in the post-freezing rain winter apocalypse that is southern Ontario in January. A lot of things to talk about in this one. Some kind of—I don't know what the right word is, but not great things. So, I don't know if I will even release this one or if I might just record this for myself to force myself to talk through some of this stuff and just get it out of my head and maybe feel a bit better about it. Um, one thing I can promise is if I do release this episode, there will be no value delivered and it will be mostly um just a combination of uh complaining uh venting and uh I don't know, negativity. So, um where do I start? I guess like to set the tone for the entire thing.
The Financial Reality Um, I've talked on the podcast before about how revenue continues to decline here and it's something we're trying to figure out. I've shared some of the ideas we have for turning things around and you know I'm still sort of—I'm still optimistic that we can do that. I'm excited about these ideas. Um, but over the holidays I finally did what any responsible business owner um should probably have already been doing, which is do some proper forecasting of revenue versus just going based on gut feel. Um, yeah, situation was just like significantly worse than I realized. Um so revenue has been like trending down slowly for a couple of years um but it's been almost like so slow and so steady that it's like a "boiling the frog" sort of situation where you almost like don't really notice. You just get used to the lower revenue being sort of normal and you can oh still pay all your bills and stuff but um—almost just got hit by a car backing out of the driveway.
So forgive me for uh being a little uh distracted here. But yeah uh what was I saying? The boiling the frog situation. Every month it feels like it's kind of fine cuz you're still able to pay your bills, still have a little bit of money left over um for yourself and yeah, you know, it seems okay. And you just get used to each month being a little lower than the previous one and you kind of forget that the previous one uh was a little bit higher. And the story I've been telling myself in my head the whole time is that um you know things are low but like they're not really declining anymore or we've sort of hit like a stable point cuz sort of feels like revenue has been the same for a long time now. But yeah, I finally went and did like proper forecasting, looking at the actual data and charting things and calculating what the average drop in revenue is each month and um was sort of caught off guard to realize that no, it's not stabilizing at all.
The Decision to Downsize And um revenue is consistently down by pretty much a fixed amount every month, which means it's an ever-increasing percentage of revenue. Forecasting it out like the next year, if nothing changed at all—which of course is not the plan because we're trying to grow the business we're trying out new ideas and stuff like that so the intention isn't that the trend will continue but um I can't guarantee that it won't right?. I don't control the outcome. If absolutely nothing changed, then in about 6 months, we would no longer be able to meet payroll obligations. Um, which was a pretty s***** thing to realize. 6 months is not a lot of time. Um, so over the break, we had to make the brutal decision to scale down the size of the team to something the business actually can afford. Because if we didn't do it now, then we would not be able to give people generous severance packages for them to have the time to find new roles.
And I don't know, that's important to me because that's what I would hope that someone would do for me if I was in that situation. So, um what's today? Wednesday. Yeah. So, on Monday, um we officially let go 75% of our engineering team um in order to get the business into a place where um our declining revenue can comfortably support um the staff that we have. Now, the company is not huge. So, 75% um isn't tons of people. It's three people that we have to let go, but I do think the percentage is important to share. Um because to say that, oh, we had to let go three people, it doesn't sound like we had to do much, but in reality, we had four engineers on staff and now we have one. So, it is a big change. Um so, yeah, that uh I don't know. Uh I don't it f****** sucks, you know?.
Like these are three people that I really love working with. Three of the most talented people I've ever worked with. Uh people that I was really excited about continuing to build new stuff with going forward. But the reality is like I either had to ask them to work here for free or let them go and find another job where their employer actually could pay them every month. I saw, you know, Jeffrey from Laracasts had to do some layoffs this week, too, and he sort of got dragged through the uh through the mud by a couple people on Twitter. But yeah, some people just think like when you lay people off, it's cuz you're being greedy or because um no one gives a f*** about you or whatever. And I don't know, that's just sort of something that uh that's a burden you f****** carry as an employer. Um but yeah, so I don't know. It it sucks. Sick to my stomach about having to do it. Feel like a failure for having to do it, for building this f**** open source thing that's insanely successful. Um but the business success is like inversely correlated with the popularity of the open source right now**.
Looking Forward and the New Team Structure I am still optimistic. I sort of like my job requires me to be optimistic. And I am, you know, I think um the ideas that we had that we've been working on since before the break are good ideas. Peter on our team has been doing an amazing job um finding partners for our partners program, which has really helped to diversify revenue. Um, so we're hoping to grow that some more, too. Um, but yeah, admittedly, it's going to be an uphill battle with a very small team. Like to be clear, the remaining team is the three owners of the business, which is myself, Steve (of Refactoring UI fame), and then Jonathan Renick (who helped me create Tailwind initially and also created Inertia JS). So there's us three who own the business and then we have one engineer left which is Robin (who built Headless UI and worked on Tailwind 3 and 4). Um and then Peter who's sort of works here on sort of more of a part-time basis doing you know running the partner program doing random operationsy stuff and customer support stuff. Um, but that's it. That's the whole team now.
So, it's three partners and two people on staff. Um, and that's all the resources that we have to build the stuff that we need to build going forward. So, I don't know like the way things need to change like I I'm definitely going to be stepping back into much more of a direct IC [Individual Contributor] role than I've been in the past. Um, which is maybe a bit of a silver lining in some ways because that's what I truly enjoy. As we sort of built a bigger team, um my role transitioned into being a little bit higher level and a little bit more strategic. Still did a lot of individual contributor work, but I delegated a lot of work, too. And that didn't really bring me the same satisfaction as building things directly.
The Impact of AI I think um that whole AI thing is clearly a double-edged sword because I think AI is a huge reason why our business is struggling even though it's making Tailwind more popular than ever. Um, but uh I also think it's an amazing technology and I'm excited about it uh in the ways that it can help me. We're sort of going to be forced to figure out how to leverage some of this stuff to um stay on top of all the things that we need to stay on top of. Like it'd be really interesting to see like how can we throw AI at some of the GitHub issue triage. Uh even yesterday, you know, like we had an issue with a server that was running out of memory and running out of CPU. Um and even like sort of diagnosing the issue we just like sshed into the server installed claude code and just started treating Claude like a DevOps engineer. It's the thing that at least helped us figure out that the load on the thing is too high, not because of any specific bugs in the code. Um, but you know, we're able to sort of troubleshoot things a lot faster because of that.
Open Source Challenges and Documentation It's a s***** spot and it's it's it's causing me to act pretty uh emotional this week. Like someone opened a PR to the Tailwind docs a while ago to add like um copy as markdown buttons to like all the Tailwind docs pages uh because that's a thing that people are doing now because it makes it easier to work with AI. But it's f****** stressful because um traffic to our docs is down like 40% or something from peak even though Tailwind is like three times as popular as it was when traffic was at its peak. And the only way people find out about our paid products is through the docs. The only way that there's money to pay anyone to work on the framework, the free open source framework, is if people buy the products. So if people sort of stop looking at the docs because they're relying on LLMs crawling like the markdown endpoints, that just feels like even fewer people are going to find out about the paid products.
Yesterday I kind of went in because I kind of like the most recent complainy comment about why we hadn't merged it was getting under my skin and I just said... Hey, uh don't have the ability to prioritize this right now. Right now, we have to focus on doing things that help the company make money. Otherwise, this framework is not going to be sustainable. And um there's a good chance that working on this is actually going to make us less money. So, closing this for now. And of course, a bunch of people got irritated in the comments. I wrote like a big long response to that last night basically saying, "Okay, assholes, like we had to lay off three people at the beginning of the week because revenue is down so much". Every single second that I spend reviewing a PR to add LLM documentation to the site is a second that I don't spend trying to turn around revenue at the company.
I have to spend the time on uh you know improving Tailwind UI [T1 plus] as a product trying to figure out how to find more customers for it. And when you're in the position that we're in, you know, you just have to—we have to very ruthlessly prioritize right now. I don't want things to get worse. I actually made the tailwindcss.com repo private to just not have to deal with any f****** issues and pull requests to it right now, which I don't know—after sleeping on it, I might uh revert that decision.
Profiles of the Departing Engineers I'm going to spend a the last bit of this podcast talking a bit about some of the guys we had to let go. I want to do everything that I can to help them find really great gigs.
Closing All incredibly talented guys and uh I don't know, it's really disappointing to not be able to work with them. Dark time, dark week, still optimistic. Um, yeah, I don't know. It's hard. Business is hard, you know. It's f****** way harder than programming, I'll tell you that. Anyways, I'll uh be seeing you.
Please don’t post slop
It’s a transcript. The first two paragraphs are accurate to the recording. I didn’t check the others.
You might want to read up on the definition on slop. OP was missing a transcript. This is a transcript. Yes, it's auto-generated, but it is exactly what OP asked for.
It'd have been kinder, IMO, to post instructions for generating the auto-generated transcript as opposed to pasting it inline here. A decent other alternative would've been pasting it into a bin and linking it. Dumping unverified auto-generated text here counts as "slop" IMO.
And when someone takes the effort to pick up someones request, a helpful reply like yours is kinder than a downvote and a generic "dont do <bad thing>" comment. Especially when its very subjective what <bad thing> is.
If people who actively put effort in helping others are met with this response it creates a very hostile environment IMO.
Especially when its very subjective what <bad thing> is.
I miss the days when dumping an unsolicited huge wall of text (which also edges on being advertisement) on others was considered an objectively bad thing.
People who want an "AI" generated transcript can go to their favorite funny text input and ask for one.
In this case it's not a bad thing because it's exactly what the parent comment asked for. It's just someone being helpful
If we're in a world where text-to-speech transcription, something people have been doing for literal decades, counts as "slop", then the word means nothing.
I'm starting to wish good quality speech-to-text was as integrated as the clipboard. I'd love to get 99% accurate subtitles to videos and transcripts of whatsapp voice messages. But it should be a system feature, available to the user regardless of program. An accessibility feature. Composable. Orthogonal.
I agree, and I'm aware of it existing in a couple forms:
I don't really mind a low effort automated transcript when it's better than nothing, and you did label it as such. But the comment nonetheless activates my spam senses because its length overwhelms the discussion page layout. A labeled link to a text file sharing site would have been OK in my opinion.
"Another tailwind"? As in... a collection of CSS utility classes? Can't anyone "fork" or hand-write or vibe out whatever subset of tailwind they might like for any project at any time? I've been writing my own miniature CSS utility class setups -- or using libraries like suit css or atomic or tailwind -- for many years. I am confused by the existential-crisis-level tone surrounding the general tailwind conversation.
I guess to me, tailwind is more of an idea than a library, and the idea is simple enough that the library matters less. Perhaps the "crisis" is obvious and I'm myopic.
There’s a certain distinctive insanity that has made Tailwind successful. It started, I believe, with generating preposterous amounts of stylesheet, and figuring out what wasn’t needed and removing it again. Then before long it was generating too much for even that to be judicious, and switched to only generating what was needed in the first place. And now it can even generate custom classes based merely on you using them. And how does it figure out what’s needed? Basically a bunch of regular expressions scanning your source code for stuff that might be a Tailwind class name. It’s absurd, it’s alarmingly incorrect, it’s distressingly unsound, but when you understand that approach and how you have to be careful and 'w-' + '1' is no longer equivalent to 'w-1', it mostly works.
Tailwind may look on the surface like a collection of utility classes, but even without things like its […] madness it’s quite unlike any that came before it.
Oh thank you — I’m glad it’s not just me. Tailwind is like Helm charts, obviously wrong in such a deep way that I don’t know quite how to explain it to people who don’t immediately see it too.
I am a certified React hater. But I don’t think people who like React are crazy or stupid. I think they just have different priorities than I do.
For some reason though Tailwind haters aren’t content to understand why people like Tailwind even if it doesn’t work for them. Instead there’s a level of ad hominem that’s really quite absurd.
Tailwind isn’t “insanity”. It’s a different approach to an engineering challenge. You all don’t like it. Okay! But “insanity” is an extremely dismissive characterization and it’s not helpful for anyone.
I didn’t call it “insane” or attack anyone personally. I just said it’s “wrong”. Composing data structures by using a text templating language to manipulate a whitespace-significant serialization format works, but it’s wrong. Grepping source code for patterns that look like bits of a syntax invented to make CSS inline styles more compact works, but it’s wrong. And yes, that’s like, just my opinion, man.
(Edit: the parent did use the term “insanity” but I read that as the thing is insane, not that the people who made it are insane. I’ve certainly found myself after many seemingly sensible local iterations on my own stuff stepping back and realizing I’ve ended up with something crazy.)
You didn't, but the parent comment said "There’s a certain distinctive insanity that has made Tailwind successful".
Why is it wrong?
The Tailwind classes have a very specific form that you're probably not that likely to randomly use elsewhere. Even if you do, the result is a useless and very small CSS declaration being emitted. We're not talking about Helm charts where writing something incorrectly can change the entire meaning of the result. Tailwind classes are purely additive, so false positives do nothing, unless you happen to specifically use that class name for something unrelated. (Which is unlikely given the Tailwind class names, but if it is more likely for you, then you can either namespace all classes, or apply Tailwind only in a certain region of the DOM, as needed.)
Tailwind could have tried parsing files and looking for specific nodes that are definitely CSS class fields. But that still falls victim to false positives — consider how you might figure out where the class nodes are in a templating library like Clojure's Hiccup without just parsing the source code and hoping nothing too dynamic is happening. It also has far more false negatives — consider a JSX expression like class={props.error ? 'text-red' : 'text-black'}, and then consider hoisting the contents of that expression out into a separate variable. How can you figure out what possible classes exist in arbitrary dynamic templates? This is ignoring the issue that you'd need a new parser/adapter for every possible templating language or tool that you want to support.
To me, if you want CSS scoped to a particular element or component, Tailwind seems like a very pragmatic solution. It is unlikely to cause issues, but provides escape hatches if that were to happen, it covers a wide range of templating systems and languages, and it allows for static analysis to create precompiled CSS files (rather than generating CSS on the fly). Previous alternatives have not been able to achieve this, particularly the language-independence. Like, if you don't want scoped CSS, then fair enough, Tailwind probably isn't that useful. But if you don't understand why scoped CSS is useful, then there's not much point criticising Tailwind because it's not really designed to solve a problem you have.
We already have CSS scoped to an element. It’s called the style attribute. That’s not what classes are for.
If you think CSS syntax is too verbose, you could expand style abbreviations inline (same TW syntax), and it would be less work and less weird. If you’re generating the style in JS, then you’d need to call the library to expand the abbreviations, which would make perfect sense and be right where you expect it to be.
Edit: I’m sensitive to this at the moment because I’m working on a DSL that generates HTML and the designers want to use TW classes. It’s hard to even explain to them why this is difficult because they don’t seem to understand what TW actually does or how its build system works. I’ve ended up allowing a subset of TW syntax in the DSL’s class attribute and translating it to style attributes.
style is not CSS, that's a common misconception. style gives your access to CSS attributes, but that's just a subset of what you can do with CSS - the power of CSS is in the selectors and the cascade, and how they allow you to enable and disable different attributes. Things like "make all even rows of this table green" or "bump up the shadow on hover" rely on the selectors to work - attributes alone can't do these things.
That's the main reason why style is rarely used in these sorts of tools. It feels like a good choice at first glance, but it's very limited, and really only suitable for dynamic styles where the attribute itself isn't known until runtime. The alternative to Tailwind is not the style attribute, it's some other approach to scoping in CSS (maybe BEM, maybe CSS-in-JS, maybe shadow DOM or the newer scoping rules).
I don't know exactly what you're building, but why can't you use Tailwind directly? Presumably you can run the Tailwind compiler over the DSL source files, and then the designers can use all the Tailwind classes they like and the correct CSS will be generated. Then the generated HTML can reference these generated CSS files and you don't need to translate anything to style attributes at all.
That is indeed the power of CSS, and if you want to use selectors or cascades, you should use CSS. On the other hand, Tailwind classes mostly don't select or cascade; they just translate literally to style attributes on the element they're applied to. The Tailwind docs even tell you what the translation is. So these classes are just an odd implementation of inline styles. If you want to write w-full instead of style: "width: 100%;" because it's smaller, fair enough, but I'd rather just translate that directly rather than bring in a whole other tool.
Hmm, I think we have different experiences of Tailwind here. Yes, w-full corresponds to something like & { width: 100% }, but that composes with the selector syntax, so I can write sm:w-full which roughly means @media screen and (width < 300px) { & { width: 100% } }.
I would guess that maybe a quarter to a third of the Tailwind classes I write use at least one prefix like that. And the project I work on most doesn't use media queries, so that's just handling different states for interactive elements like buttons, or things like first: or group. With media queries like sizes or dark mode, I would expect that proportion to shoot way up. It surprises me that you've not run into the need for prefixes in your DIY Tailwind system yet, because that's when the style attribute stops being viable without JavaScript.
OK, as for the rest of Tailwind… When you use Tailwind selectors, you are effectively using an alternate-timeline version of CSS that didn’t have separate stylesheets, but instead evolved a more complex inline style model with selectors in it. This model is implemented by translating it to the version of CSS that we actually do have, which is in some sense its inverse.
So to me, it’s kind of like the ORM of styling. As with ORMs, it feels more correct — again, just my personal reaction — to just use the thing we have, the way it was designed to be used.
Our DSL does a similar thing without inventing a new syntax by just adding a css attribute to elements, so you can write scoped ordinary CSS if you need to. (It wraps the element, adds an ID, and adds a style tag with the custom CSS scoped to that ID.) But since the components have already been styled by the toolkit and app stylesheets in the normal CSS way, you seldom need to do this.
I kind of get that - and in fairness, I do prefer writing the CSS DSL to the Tailwind DSL - but in my experience you still need some sort of abstraction to handle scoping in CSS. As it stands, CSS is difficult to write because it's basically all global. For something like a blog or a brochure site, that works because the page typically isn't too complicated, but for something like an application full of different components that you want to be able to work on and instead in isolation, that very quickly becomes chaos.
There are CSS-only solutions to this like BEM, but in my experience they aren't normally that good. You use naming to create scopes, but all the names are still global, so it's only half a solution.
And then basically all the other solutions - including yours, by the sound of it - are different forms of DSL that wrap CSS. Some are closer to CSS as she is wrote, like CSS modules or scoped CSS, but even then, you still need to understand how the CSS you're writing is going to get processed to be able to write it correctly. At this point, you've got your ORM either way, it's just a case of figuring out what the trade-offs of the different ORMs are. And Tailwind specifically had the disadvantage that it looks the least like CSS syntactically, but the advantage that it is completely agnostic of the host language or framework. Hence why your designers like it, I imagine.
It's a good point about scoping, and I think @scope opens up approaches to solve this better (though Firefox held it up by a couple of years). I feel like most of the unpleasantness in the tooling comes down to the tension between developers and designers who really want composable components and keep inventing different ways over the years to get them, and the slow pace of HTML/CSS trying to catch up while not breaking stuff.
But these questions of model aside, what really burns my cookies is just the grepping for classes. As a longtime language nerd, that is just a hack; there's no way to make that sound good to me. :)
It is said that markets can remain irrational longer than you can remain solvent. It feels much the same with technical matters. HTML, Markdown, Tailwind… there’s a strong pattern of unsound things winning over sound, to the distress of many.
When I call it insanity, it’s not really a criticism; it’s more a begrudging admiration (mentioning how the specific insanity has made it successful), even though its style is not for me (I tried to like it once, and have kept a fairly close eye on it from its earliest days).
Many of the most brilliant people are eccentric and perhaps not altogether sane.
When I call it madness and describe aspects as preposterous, absurd, alarming and distressing, I figured (perhaps incorrectly) that I was being lyrical enough it was clear this was not a hateful rant, but anguish of the soul: the wail of a poet’s heart on discovering that everything is commonplace.
Oh, hollow! hollow! hollow!
When I describe how it is successful and how it mostly works, I breathe a sigh of lingering melancholy, wistful for perfection, wishing it didn’t work.
What Tailwind does is deeply wrong in at least one way incontrovertible (source file scanning), and I have much more against it that some would quibble over or refute. But whether unfortunately or fortunately, it works well enough.
Exactly why I mentioned Helm — same feeling.
(Is it time for this decade’s rehashing of Worse is Better?)
It wouldn't have landed without the concept of components, I'd imagine. With that context, a collection of what are effectively curated inline stylesheets becomes free, since you send the component to the client once, and the client itself repeats it, no great consideration needs to be made for the size of the html documents, only the stylesheet which can be sent once and cached.
In this context, we can understand why the wrong approach was chosen: Not only HTML needs to be scanned, but JS/JSX/TS/TSX/Coffeescript/Some lisp variant/Python/Java/etc/etc/etc. Whatever language that can produce HTML needs to be scanned over.
An LLM could easily clone Tailwind now that it exists. The point is that it can’t make something fundamentally new.
Adam seems to think the problem is that nobody is reading the docs anymore (due to AI), which prevents upselling to paid offerings. I am surprised; I would analyze it a bit differently.
I think the core problem is that the paid offering of Tailwind focuses on "premium" components (Tailwind UI / Plus, Tailwind Catalyst). Nobody will use those anymore because they will just have the AI write the components for them (for better or worse). Even if the humans would still read the Tailwind docs, it wouldn't help. In fact, the AI might have the premium components in their training data.
Claude Code etc. are very good at using Tailwind, and ironically, that's what might kill Tailwind as a business. I feel bad for the people involved.
I have yet to see anyone discuss this in the context of the choice to use a weak corporate friendly license which makes no distinction between personal and commercial use.
Unfortunately, for a non-trivial portion of people in our field, laying people off makes more sense and is infinitely more palatable than making corporations pay.
It's a bit pointless to discuss counterfactuals, but if it had used a non-corporate friendly license, do you think it would've become even half as popular as it did, and would they therefore have been able to hire those developers they had to fire in the first place?
I believe the bigger issue was using one-time pricing rather than a subscription model. Their revenue is plummeting because they constantly need new customers and a full sales pipeline. Predictable recurring revenue is worth its weight in gold.
I agree on the point about predictable recurring revenue, but I wouldn't say that this is a bigger issue, because if you are not making a distinction between personal and commercial use, you are leaving the customers who extract the most Use-Value completely out of the sales pipeline.
One thing I have been thinking about a lot is whether in the new LLM coding age we are simply reaching for fewer libraries, and thereby paid libraries, than before. The barrier to writing something yourself is becoming lower and lower. You may not even realize that your coding agent has authored code that you may normally have elected to use a library for.
We were promised much higher efficiency and output compared to the "old ways". Yet I don't see any small team with just a few developers creating something groundbreaking or sophisticated like Tailwind.
How hard did you look?
And don't get me wrong, Tailwind is an exceptional piece of software design crafted by human experts over many years.
But the Tailwind creator himself remains excited about using coding agents, even despite the damage LLMs have done to his business! From his podcast:
We had an issue with a server that was running out of memory and running out of CPU… we just like SSHed into the server and installed Claude code and just started treating Claude like a DevOps engineer and asking it questions and asking it to try and diagnose things. [...]
We were able to sort of troubleshoot things a lot faster because of that than we would have been by hand trying to look up what commands I’m supposed to type at the terminal and look at all this data.
Many of the same class of experts who create software of the quality of Tailwind have adopted coding agents, especially over the past ~6 months. Redis creator Antirez and Flask creator Armin are two prominent examples.
It still takes time to spin up a "groundbreaking" and "sophisticated" new library, but I would not take the bet that it isn't happening right now. It will be interesting to look back at this comment in six months and see if I'm right.
Don't expect groundbreaking/sophisticated results from original-definition vibecoders who have no idea what they're doing. Watch for what the experienced engineers with great taste and may years of pre-LLM experience start producing with these tools.
I am sorry Simon but we keep getting these same “next 6 months” every 6 months? So is it going to be in the next 6 months or it might be in the next 6 months? Also what is going to happen in the next 6 months? Are we going to see a team of 3 juniors producing a high quality library like tailwind or some tweets from high profile individuals saying how AI is going to change the world and is driving their productivity to the moon.
I am working on my own app/startup, so I am not opposed to LLMs as a software developer; I do actively use them. As a solo bootstrapped individual, I’d love it if these accessible LLMs could level the playing field with funded teams.
However the productivity I am seeing is minor at best and illusory at worst. I have also noticed degradation in performance in all the latest models except gemini. They are also more prone now to waste my time. So any time or productivity savings are cancelled out. I am at the point where I considering fully removing them from the coding process and limiting them to the exploratory one only.
And all of this and we still have all of these open source libraries and human written documentation to guide them. Now think what their output will be when these packages and docs go stale/unmaintained.
Now think what their output will be when these packages and docs go stale/unmaintained.
The common answer is "Well LLMs will write the documentation for us", but it's really easy to see, based on the testing I've seen performed, that that's going to be a complete and utter disaster.
I was a staunch never-let-LLMs-write-the-docs person until a couple of months ago. I let them write a lot of my docs now. They're doing it really well! Here's a README from this morning.
I won't ever let them write words that represent my perspective or point of view though, so absolutely not for blog posts or forum comments or anything like that.
Also what is going to happen in the next 6 months? Are we going to see a team of 3 juniors producing a high quality library like tailwind or some tweets from high profile individuals saying how AI is going to change the world and is driving their productivity to the moon.
I'll make a concrete bet here (for bragging rights, not cash).
By July 10th there will be at least two clear examples of new (as in did-not-exist today) open source libraries that a panel of unbiased judges would consider to be as "sophisticated" as today's Tailwind, that were built almost entirely by coding agents as opposed to hand-written code.
I think these will be produced by experts, not beginners. I think this requires taste, and beginners don't have that yet.
(The definition of "sophisticated" is going to be extremely difficult here, happy to accept suggestions for a better way of clarifying this!)
I've set a calendar reminder, let's see what happens!
However the productivity I am seeing is minor at best and illusory at worst. I have also noticed degradation in performance in all the latest models except gemini. They are also more prone now to waste my time.
Are you using them as chatbots or are you running them as coding agents via Claude Code / Codex CLI / Gemini CLI? Coding agents are an entirely different beast.
I'll make a concrete bet for demonstrating robustness of modeling and pointing out what you would rather not discuss: Between January 1st and July 10th, 2026, there will be 5-30 reports of self-harm, suicide (including suicides by exposure, cop, or accidental poisoning), murder, attempted murder, or fatal delirium (e.g. walking into traffic or off a cliff without perceiving the danger) primarily caused by chatbot psychosis. My predictions are from fitting Poisson distributions to existing reports from the past three years; the lower end comes from the optimistic assumption that the psychosis rate is disconnected from usage while the upper end assumes that chatbot usage is still exponentially growing and that psychosis rates scale linearly with usage.
Previously, on Lobsters, I believe that you demonstrated a fundamental callousness towards the effects of chatbots on people, and it continues to be on display here. How will we get two new open-source libraries implementing sophisticated concepts? Will we sacrifice 5-30 minds to the ELIZA effect? Could we not inspire two teams of university students and given them pizza for two weekends instead?
Sadly I expect your self harm predictions will prove to be an underestimate.
(I'm sure how that thread about somebody building a joke new programming language with LLMs as a demonstration of the edge of what they could do six months ago counts as "callousness" on my part though.)
Are you using them as chatbots or are you running them as coding agents via Claude Code / Codex CLI / Gemini CLI? Coding agents are an entirely different beast.
I only use Claude Code these days with Claude models or GLM-4.7. I have found that they are the best. I have burnt through billions of tokens, so I developed an instinct for these things. The docs example you linked in a sibling comment is bad. The library is very small and the documentation is very short. That does not represent "real life". Can be useful, yes. But will hardly do any serious jobs for me.
Here is another bet: I bet agent + whatever model won't be able to convert this site https://crates.live to react (right now it's vue) and update to the latest version of tailwind. All combinations of agent/model have failed so far. I've been meaning to do it, but it's a very low priority for me. If an LLM can do it with a few prompts, then that's a real job that the LLM executed.
I'd give it a year. If any combination does, then I'd be glad to be corrected and I'll notify you about it.
Here you go, this seemed to work: https://simonw.github.io/crates-live.github.io/
Transcript for how I created it (using the Claude iPhone app): https://gisthost.github.io/?5ca1b8e2cddf2aea800710f647c6cf66/index.html - it was mostly from just that first prompt but I did have to remind it that it can install Playwright later on (it ran into some environment issues with the Claude Code for web container).
The code is in the react-port-by-claude branch here: https://github.com/simonw/crates-live.github.io/tree/react-port-by-claude
I haven't reviewed a single line of code it wrote but I clicked around and it seems to do the right things.
It also took a bunch of screenshots while it was working: https://github.com/simonw/crates-live.github.io/tree/react-port-by-claude/screenshots
It's not visually identical to crates.live because I told it to use Tailwind, which the previous site didn't use.
Here you go, this seemed to work: https://simonw.github.io/crates-live.github.io/
You can't be serious, right? I'm starting to think there are two types of people now: those working on AI who are completely blind, and those who aren't and have no idea what is going on.
For reference, here is the original website: https://crates.live and here is the pure garbage that claude had output: https://simonw.github.io/crates-live.github.io/ and which "seems to work".
I haven't reviewed a single line of code it wrote but I clicked around and it seems to do the right things.
Exactly. If you looked at the code, you'd see it's not using the original GraphQL endpoint that deduces child dependencies and builds the full tree. Instead, it's using crates.io directly, which is against their data access policy. You're supposed to download their data dump to your own database and serve it from our own infra, not proxy to their API.
It's not visually identical to crates.live because I told it to use Tailwind, which the previous site didn't use.
That is the job. The back-end is separate. The whole job is converting this to React/Tailwind while preserving the visual aspects. It failed at this job. My guess is that if you asked it to start from a clean slate, it would have probably done a better job. The existing code likely just diluted its performance.
You might not realize this, but you've actually proven the exact opposite of your point.
Is https://github.com/crates-live/crates-live.github.io/tree/master the code that's running on https://crates.live right now
That's the code I had it look at - is there a different repo somewhere with more recent code?
I imagine I should probably drop this now, but if you want me to try again let me know what your success criteria is (using the same GraphQL API for example) and I can see if I can one-shot it properly.
I don't understand how porting from Bulma to Tailwind can work while precisely preserving all visual aspects - my mental model of Tailwind is that it forces you to conform to aspects of its own grid layout and other conventions which may not match Bulma's.
It is. Though, that's more like the generated/built code. The front-end/back-end source is private. I've sent you an invite to the org that has both. I haven't audited the repos for the presence of keys or other private data, so don't make it public for now (though the back-end worker is live, the LLM should be able to use that endpoint directly).
Edit: if you are going down that rabbit-hole, start from commit 0f24a03. It has the deployed site as further commits were just attempts by me in the conversion process.
Edit 2:
I don't understand how porting from Bulma to Tailwind can work while precisely preserving all visual aspects - my mental model of Tailwind is that it forces you to conform to aspects of its own grid layout and other conventions which may not match Bulma's.
I mean that's the challenge, right? You read both bulma specs/tailwind specs, the bulma implementation and then slowly convert the styles to tailwind. One attempt I tried is to convert to CSS and then back to tailwind.
It's last midnight here but thanks, I'll take a proper look (actually paying attention to what needs to be done, not just vibe coding it without review) tomorrow.
Sure man!
actually paying attention to what needs to be done, not just vibe coding it without review
Well, I am more interested in what the LLM can do unguided than guided. Preserve the prompts/process if possible.
Why do you think an expert engineer with taste would use an LLM to create a CSS framework as sophisticated as Tailwind when Tailwind already exists? If it is to be a CSS framework with different design goals than Tailwind then why do you think this expert would choose to start now rather than 6 months ago?
I'm not talking about a CSS framework. I'm talking about some other open source library covering a problem that isn't solved today and justifies designing and shipping a new "sophisticated" open source project.
But since you asked:
Why do you think an expert engineer with taste would use an LLM to create a CSS framework as sophisticated as Tailwind when Tailwind already exists.
Because they think they can build a better one!
The Python world had a whole bunch of existing web framework options (remember Zope?) when we created Django.
When Douglas Crockford introduced JSON Dave Winer complained that it didn't even use XML - Crockford replied:
The good thing about reinventing the wheel is that you can get a round one.
I completely understand both the potential for internal motivation and being motivated by the ability to do better than the status quo. The examples of creating Django when Zope existed or creating JSON when XML existed are completely separate from my question because they are about whether the technology would be created and not about when they were created. Your prediction is specifically about something that does not yet exist. Why would this expert be newly motivated to do better than the status quo in the next 6 months rather than the past 6 months?
Because the cost for expert programmers of building software just dropped like a stone.
In the past I would have an idea like "how about a Python library which installs Deno for you and then provides both regular and asyncio wrapper classes that run a worker subprocess and execute JavaScript strings or WASM binaries in the Deno sandbox, communicating via stdin/stdout?" - and then stick it on my backlog of ideas that I'll never have time to dedicate to bringing to fruition.
This morning I had that idea when I saw https://pypi.org/project/deno and prompted Claude Code on my phone while lying in bed and now it's a working library published to PyPI as an alpha.
That's why I think we will see talented small teams of expert developers build Tailwind-scale projects using coding agents in the next six months: I've seen what I can build in less than an hour.
Okay, I think I understand your prediction now. It isn't that the technology is newly capable of making a sophisticated project such that new motivations manifest. It is that you think there is a deep well of existing motivations that are now effectively outsourcable to the LLM because the technology is now cheap enough. Thanks for elaborating!
Your example isn't in line with the sophistication I see in something like Tailwind. I'm also skeptical that the technology scales with the project size in the way you suggest. But I appreciate your willingness to make the prediction.
Yeah, Denobox - my on-my-phone morning project - definitely doesn't fit the level of sophistication I'm predicting here!
Why do you think an expert engineer with taste would use an LLM to create a CSS framework as sophisticated as Tailwind when Tailwind already exists?
Tailwind was not the first CSS framework and it won't be the last one. We constantly create new things.
next 6 months
~~I think you might've misread the "past ~6 months"? (Or perhaps it was originally typo'd and then edited.)~~
EDIT it has been pointed out in a comment that there was another mention to six months that I missed. "I should not try to perform critical reading while barely awake" strikes again.
I think that the comment you're replying to was responding to this from Simon's comment (emphasis mine).
It still takes time to spin up a "groundbreaking" and "sophisticated" new library, but I would not take the bet that it isn't happening right now. It will be interesting to look back at this comment in six months and see if I'm right.
Yet I don't see any small team with just a few developers creating something groundbreaking or sophisticated like Tailwind.
This claim seems incredible since tailwind was itself created by a small team with just a few developers without any AI at all... So obviously it's possible and not related to using AI?
I bought Tailwind UI/Plus just for my side projects several years ago because it was so useful. I'm very sad to see this.
Bit of a tangent, but this particular opposition sets it up nicely. There's something about this whole space that makes the part of me that likes concise code and clean abstractions unsatisfied, but I'm not sure whether it's just that we don't have good abstractions yet, or that the accidental complexity is irreducible and what I wish for is naive/infeasible. It is a weird situation here where there are two directly competing solutions for how to build pretty common websites that don't need anything particularly exotic: 1) I will import a large pile of CSS written by Tailwind Labs into every website, or 2) I will use an LLM to generate a large amount of CSS that will be shoved into every website. In an ideal world the right answer ought to involve... not a large pile of boilerplate CSS? Admittedly if that were easy to do, presumably someone at Mozilla or a similar place would have solved it by now.
I hate so-called "AI" as much as the next guy, it seems like useless nonsense to me, but is it really to blame here? Suppose the internet search providers were to just copy/paste the content of the docs, editing out references to unauthorized (by the search company) ads or sales contacts on the search results instead of linking through. You'd have the same result, right?
The AI just lets them realize this same dream at low enough cost to maintain their profit margin, and under a legal regime that lets them do it (the direct copy/paste stuff would be grounds for a copyright infringement lawsuit). So, it seems more accurate to say "Tailwind Labs loses due to Google's anti-competitive business decision, and is left with no remedy in the courts due to Congress' inaction".
But even then, I'd say we're still not quite there... since of course big corporations are gonna do what big corporations are gonna do - follow the profit motive. And this particular incentive looks like one of those contradictory ones: in the short term, they make more money by squeezing out people like the Tailwind company, but in the long term, if this model is wildly successful, then there'd be nobody left to write the content they depend on, and the search provider goes under too. Of course, they might hope that their AI can take on the job of writing the stuff people want to search for, and then the internet search company also becomes the internet authorship company, but that's a risky gamble.
But if Company A decides they're going to play the long game and protect the little guy, there's nothing stopping Company B or anybody else from chasing the money. And when investors and money managers see Company A's returns slipping while Company B's profits soar.... they have fiduciary duty (like seriously, a third party investment manager is REQUIRED to follow the money) to jump ship. So Company A is taking a risky gamble either way.
When the individual actor's incentive structure is self-destructive like this, it's like the prisoner's dilemma. If they cooperate, maybe they both can win, and maybe they will for a time.... But it's literally called market competition... very risky to trust.
What's my solution? idk. Realistically, Congress prolly needs to do something, like some kind of copyright reform and anti-trust action maybe to change the incentives the big search providers work under, that's worked in the past, but hard to say what would happen now. But again, regardless of my personally feelings about this ai stuff, it's just a tool. What we choose to do with it - choices guided by systemic incentives - is the real question at hand.
but is it really to blame here
It literally sells docs it didn't author and I assume has no license to and makes it possible to do so.
Given that according to this:
This project is not licensed under an open-source license and is the intellectual property of Tailwind Labs Inc.
Source: https://github.com/tailwindlabs/tailwindcss.com
INAL, but it sounds a lot like copyright infringement and while I am not a fan of copyright law it's ridiculous that to assume it somehow doesn't apply to "AI".
Would be nice to have it either enforced or not and not just "not enforced when you are rich". (oversimplified of course, but that's what it appears to boil down to)
INAL, but it sounds a lot like copyright infringement and while I am not a fan of copyright law it's ridiculous that to assume it somehow doesn't apply to "AI".
I personally agree with you, but you and I aren't federal judges. Most copyright suits against AI have failed, either with the plaintiffs failing to prove their work specifically was infringed, or with the defendants successfully arguing that their use is sufficiently transformative to qualify as fair use under existing law. This is why I say the most realistic path is for Congress to do something, to write into the law that yes, it does apply to ai too, or something like that.
Makes sense, but maybe it then would make sense to train GenAI to provide text/music/images/videos/software of eg. music charts and current movies. Would also be nice to train copyright removal just like they did for source code. Would be nice to stream netflix, spotify, etc. through a VM or even record with a cam and mic. Similar things could probably be done with video game files. Might help if one could have the "big players" battle it out.
I know it's a bit naive, but maybe that would be a way to get closer to an actual "either it's legal or it's illegal" state and make "fair use" more fair.
Could maybe also be a nice community project with the technical side (trying to train it so it fits certain law) and funding for copyright lawyers to support on both requirements for the technical implementation as well as any court case.