I've found that I can use a very similar approach to the one I've used when handling the risks associated with blockchain, cryptocurrencies, "web scale" infrastructure, and of course the chupacabra.
Fair enough. A healthy dose of skepticism has served us well for every overhyped wave so far. The difference this time seems to be that AI systems don’t just fail noisily — they fail convincingly, which changes how risk leaks into production.
Treating them with the same paranoia we applied to web scale infra and crypto is probably the right instinct. The chupacabra deserved it too.
To someone that has paid zero attention and/or deliberately ignores any coverage about the numerous (and often hilarious) ways that spicy autocomplete just completely shits the bed? Sure, maybe.
That’s fair — if you’re already skeptical and paying attention, the failures are obvious and often funny. The risk tends to show up more with non-experts or downstream systems that assume the output is trustworthy because it looks structured and confident.
Autocomplete failing loudly is annoying; autocomplete failing quietly inside automation is where things get interesting.
This hits a key point that isn't emphasised enough. A few interactions with technology and people have shaped my view:
I fiddled with Apple's Image Playground thing sometime last year, and it was quite rewarding to see a result from a simple description. It wasn't exactly what I'd asked for, but it was close, kind of. As someone who has basically zero artistic ability it was fun to be able to create something like that. I didn't think much about it at the time, but recently I thought about this again, and I keep that in mind when seeing people who are waxing poetic about using spicy autocomplete to "write code" or "analyse business requests" or whatever the fuck it is they're using it for. Of course it seems fucking magical and fool proof if you don't know how to do the thing you're asking it for, yourself.
I had to fly back to my childhood home at very short notice in August to see my (as it turned out, dying) father in hospital. I spoke to more doctors, nurses and specialists in two weeks, than I think I have ever spoken to about my own health in 40+ years). I was relaying the information from doctors to my brother via text message. His initial response to said information was to send me back a Chat fucking GPT summary/analysis of what I'd passed along to him... because apparently my own eyeballs seeing the physical condition of our father, and a doctor explaining the cause, prognosis and chances of recovery were not reliable enough. Better ask Dr Spicy Autocomplete for a fucking second opinion I guess.
So now my default view about people who choose to use spicy autocomplete for anything besides shits and giggles like "Write a Star Trek fan fiction where Captain Jack Sparrow is in charge of DS9", or "Draw <my wife> as a cute little bunny" is essentially "yeah of course it looks like infallible magic, if you don't know how to do it yourself".
The real risk with LLMs isn’t when they fail loudly — it’s when they fail quietly and confidently, especially for non-experts or downstream systems that assume structured output equals correctness.
When you don’t already understand the domain, AI feels infallible. That’s exactly when unvalidated outputs become dangerous inside automation, decision pipelines, and production workflows.
This is why governance can’t be an afterthought. AI systems need deterministic validation against intent and execution boundaries before outputs are trusted or acted on — not just better prompts or post-hoc monitoring.
That gap between “sounds right” and “is allowed to run” is where tools like Verdic Guard are meant to sit.
I think there's something wrong with whatever bot/abuse detection you're using.
I got an error about "preventing attacks" the first time I tried to load your site.. and then again (I assume) in German when I clicked somewhere else. One time out of 10 I got a real page (I think) but it was also in German.
> Your postscript explains why: using the same "btn-primary" as every other user of the framework hints that you're not building something with its own visual identity.
You know that bootstrap is trivial to customise right?
It turns out identifying primary and secondary buttons is a pretty standard thing in any kind of UI that has... buttons.
What fresh fucking hell is this? I can't say I've had the (mis)fortune of being forced to work with Tailwind (I've seen the name enough to know it's something vaguely "CSS framework"-adjacent though).
Seriously, though what kind of crack induced nightmare state was required for someone to think up such an abomination, implement it, and then make it public for the world to see?
Furthermore, who in their right mind saw that and said "yep this is fine"?
Not a tailwind geek myself but I think how they justify is "better to have a little extra spaghetti in your html code than create a truck load of spaghetti in your app.css stylesheet."
The alternative to using tailwind here is to define the specific style elements for each one in the css stylesheets yourself with something like this:
.bg-sky-500 {
background-color: blue;
}
Tailwind proponents argue that they avoid this "stylesheet hell" by picking ready pre-defined tailwind classes like bg-sky-500, etc. Plus they also argue that this workflow will increase productivity by standardizing "style mindsets" of your dev team who all will think "blue" means "sky-500" (for example).
Maybe it has use cases in deep or professional design work but for most backend or full-stack devs, bootstrap is definitely better than meddling with this structure.
Once you learn how to read it, it's actually pretty clear.
This element has a small amount of x and y padding that is suitable for (for example) keeping text away from the edge of the container. The text is white. The corners of this are rounded.
The background is the default intensity 'sky' colour, which darkens slightly on hover and darkens further when it's active.
You can take this from 77 characters to 189 like this:
Tailwind simplifies consistency, and frankly is pretty readable. It's not like <button type="button" class="button">Button</button> is exactly the pinnacle of human clarity and simplicity in the first place.
Of course there are other ways to do it, but this faux outrage demonstrates not that this is some 'fresh fucking hell' or some 'crack induced nightmare', but rather that you simply don't get it.
I didn't say I can't read it. I asked who thought it was a good fucking idea. I guess you've answered that implicitly.
Embedding every style directly into the style attribute is also readable, and as a side benefit it doesn't need a build step just to make your styles actually work.
I can now see exactly why OP made this post. If a client told me they don't want to use something akin to bootstrap or any other sane css library, and that instead I will need to ensure that every element has every manner of css states expressed as a faux class, I wouldn't even stop to make a coffee before telling them how far they can jump.
This sounds perfect for front end “developers" who struggle even with css, and want any reason possible to pad out their billable/working hours doing nothing productive.
Oh what's that, you want to change the style of standard button everywhere in the codebase?
No of course we can't just update a single css file you silly goose.
I feel like half the bad problems in web development are because JavaScript developers saw that j2ee guys had ant and whatnot, and said "hey what if we started inventing reasons to have a build step"?
> button class="button"
The thing is, that is more readable for a sane code base. If I can glance and know it's using the correct standard button class, it means I don't need to memorise the fucking pixel sizes and states of button paddings.
I get it alright. It's a solution looking for a problem that doesn't exist, and instead found a crowd of "developers" looking for anything shiny to pad their resume and keep themselves looking busy.
> Embedding every style directly into the style attribute is also readable, and as a side benefit it doesn't need a build step just to make your styles actually work.
Critical difference: media queries are unavailable to inline styles, making impossible to implement responsive designs this way. And anyway, CSS is so much more verbose than Tailwind that it really wouldn’t be very readable outside of toy examples.
Personally, I have used CSS since it was first created. I also have used Bootstrap and Foundation, but found them brittle and cumbersome. Now I just write 95% of styles with Tailwind.
Which everyone says is only really useful if you use in a JSX Component...
So you're writing it in XML...
But then that gets converted into JavaScript....
Which then writes out some HTML and CSS?
I will absolutely not be surprised when someone declares that the XML part of JSX is too verbose and creates a library to generate the JSX code. Fuck it who am I kidding, it probably already exists doesn't it?
Clearly you’ve made your mind up so I won’t push harder, except one point:
> Oh what's that, you want to change the style of standard button everywhere in the codebase?
Tailwind excels when you are using component based frameworks. This change should be at least as simple as updating main.css, except it’s in Button.tsx
I think these debates ultimately come down to what you’re making with these tools: is it documents or application interfaces? If it’s documents, then plain HTML, CSS and a touch of JS sprinkles on top works very well, as they were designed for this. If you’re making software, though, at some point you’re going to need some additional tooling to make it feasible.
> at some point you’re going to need some additional tooling to make it feasible.
I mean sure, most people will pick some kind of abstraction over parsing and constructing raw HTTP messages.
But it boggles the mind that apparently a large chunk of "developers" cannot see the insanity in writing XML to generate JavaScript which generates HTML and CSS because they want to write `<Button variant="primary">Save</Button>` rather than... `<button class="primary">Save</button>`.
Like I said earlier: so much of the folly in the NodeJS community looks like bizarre adoration of early-2000s J2EE stack.
You have a language that requires no AOT.. ah better invent increasingly convoluted and ever-changing build processes for it.
You're writing output that's essentially just a string to be sent over the wire... ah better create a wrapper for the wrapper that creates the service which renders the string.
But sure. That is totally a rational approach to development, and the nodejs community has never shown itself to be prone to chasing shiny useless things or cargo culting. I must just be overreacting.
> But it boggles the mind that apparently a large chunk of "developers" cannot see the insanity in writing XML to generate JavaScript which generates HTML and CSS because they want to write `<Button variant="primary">Save</Button>` rather than... `<button class="primary">Save</button>`.
I'm wondering if some of the disconnect here is that you don't have personal experience with this type of development, so you might not see what pain points it solves.
The first thing I would mention is that components encapsulate function and styling. Buttons don't illustrate this well because they're trivial. But you can imagine a `<DatePicker>` that takes a `variant` property ("range" or "single"), `month` and `year` properties, and perhaps a property called `annotations` which accepts an array of special dates and their categories (`[{date: "2026-07-04", code: "premium_rate"}, {date: "2027-07-07", code: "sold_out"} ...]`). The end result is an interactive picker that shows the desired span, with certain dates unselectable and others marked with special color codes or symbols. You're going to have a very unpleasant time implementing that with globally scoped CSS classes.
And this isn't a string sent over the wire. The "document" that the browser renders is changing continuously as you interact with it. If you were to open Chrome Devtools and look at the subtree of the DOM containing the date picker, you would see elements appearing and disappearing, gaining or losing classes and attributes, in real time as you select/deselect/skip forward/etc. That's what makes it work, rather than being a static drawing of a calendar.
I personally do not like the Javascript frontend ecosystem. It's hacks on top of hacks on top of hacks. But, do you know another way to deploy software that's cross-platform and basically free of gatekeepers? Sometimes we just have to do weird things because they're really useful.
> I personally do not like the Javascript frontend ecosystem. It's hacks on top of hacks on top of hacks. But, do you know another way to deploy software that's cross-platform and basically free of gatekeepers?
One way is what I call the "Modular MVC pattern" that involves pure js routing and manual DOM manipulation without using any framework at all. You handle complexity in two ways: by modularizing the "controller" parts into multiple js modules for each route, and "view" parts into multiple HTML partials - and using the event bus pattern if your app gets too complex (as alternative to modern reactive frameworks like react/vue).
Shameless plug: I've tried to implement this exact pattern with limited success in Abhyasa Quiz App[1], a side project.
> you don't have personal experience with this type of development, so you might not see what pain points it solves.
That all depends what you mean by "this type of development".
Do you mean development targeting a browser? Do you mean development targeting client-side interaction in a browser? Or do you mean writing JSX/React/Whatever flavour of the week is hip with the NodeJS community?
If you meant either of the first two: I have about 20 years experience.
If you meant the last: No. If I wanted to be a masochist that badly I'd buy my wife a leather whip and a strap on.
As much as I generally avoid front-end dev when I can now, at one point it was a much greater part of my work. I've written modular/resuable client-side libraries/widgets (i.e. self-contained elements that other developers then used in their own separate projects to add functionality... you know, a "component" by another name) since IE6 was not just in-use, but current and popular. So to rebut your claim: I'm well aware of the "pain points" developing code like this for re-use.
> You're going to have a very unpleasant time implementing that with globally scoped CSS classes.
Have you ever used CSS or Bootstrap before? You know that bootstrap is meant to be a starting point for your codebase, right? Even the most bare-bones official Bootstrap "example" designs use custom CSS specific to that use-case. If you're trying to create anything beyond the most basic hello world page with nothing but bootstrap classes on your markup, you're doing it wrong.
If your argument for using Tailwind (and apparently by necessity, JSX components) is to avoid having someone write a handful of CSS rules specific to the widget you're creating, I can't help you mate.
> It's hacks on top of hacks on top of hacks. But, do you know another way to deploy software that's cross-platform and basically free of gatekeepers? Sometimes we just have to do weird things because they're really useful.
My argument isn't against using Javascript for interactivity on webpages/webapps. As I said, I've been doing it for a couple of decades now. I have my issues with JS, but for browser interaction it's mostly fine.
You see the "current ecosystem" the NodeJS/Javascript community has created, complain about it being "hacks upon hacks" and then still defend the batshit crazy stuff when someone calls it out.
I see the batshit crazy stuff and just ignore it. Just because something new exists, doesn't mean you have to use it. The browser environment for JS is slowly improving, gaining native abilities that we once had implement in libraries or from scratch.... and the majority of the JS-focussed community seems to continue to be obsessed with adding more and more and more layers of abstraction.
If you told 20-year-ago me that the browsers would all supported a native way to implement custom elements (i.e. Web Components) that can be initiated using regular markup in the page, it would never once have occurred to me that the JS developers of the day would then find some way to not just use the built-in capabilities and instead have a dependency chain and build system so complex there are fucking memes about it.
Why would you want to have to maintain a separate file instead of keeping it all in the same place?
Preference I guess. I’m not bashing anyone who prefers writing CSS that way. But there are a lot of people who think it’s very important to share that they don’t like how Tailwind looks.
This just sounds like more evidence that most middle management is unable to accurately measure productivity, hence their oft-repeated lie of "remote workers aren't productive".
What even is the point of these roles, if they can't measure the productivity of their reports, and when pushed for it, have to ask the people in question what their best work is.
When the managers at your employer start asking you questions like you'd hear from people who don't know you at an interview, alarm bells should be screaming in your head.
reply