Sign in

Mastro.{js,ts}

@mastrojs.bsky.social
491 followers 384 following 2.6K posts

No dependencies, #nobuild step. Just a simple web framework and site generator for people who care about their users and web standards. Implemented in ~800 lines of TypeScript. 🧑‍🍳 mastrojs.github.io Account run by Mauro Bieg @mb21.bsky.social

PostsRepliesMedia
Mastro.{js,ts} @mastrojs.bsky.social · 3h
Wouldn’t that be appearance: none; or..?
000
Mastro.{js,ts} @mastrojs.bsky.social · 8h
The kids call it “fetching” these days 😅
110
Mastro.{js,ts} @mastrojs.bsky.social · 8h
Yeah, teams using up all their energy on wrangling the complexities of their “tech stack” that they never get around to the most important thing: is their website even usable?
020
Mastro.{js,ts} @mastrojs.bsky.social · 9h
Maybe. Definitely a new powerful tool in the “attackers” toolbox in this everlasting game of cat and mouse 🤷🏾‍♂️
000
Mastro.{js,ts} @mastrojs.bsky.social · 9h
If somebody wants to pirate a game, seems there are a lot easier ways to run it than decompilation? Regarding ArtCraft:
110
Mastro.{js,ts} @mastrojs.bsky.social · 9h
Mastro would only need $98k!
010
Mastro.{js,ts} @mastrojs.bsky.social · 13h
Regarding the last point: www.phillipcarter.dev/posts/dont-b...
phillipcarter.dev
Don't build your own CRM
You really don't want to be in the business of building your own Salesforce.
120
Mastro.{js,ts} @mastrojs.bsky.social · 14h
Until the SaaS app is too enshittified, or the open source library abandoned because the developer burnt out. Then the cycle starts anew. Because most software is a commodity nowadays. Perhaps the calculus of build vs buy has shifted a bit, but I’m convinced it’s only a tiny, tiny bit. 🤷🏾‍♂️
120
Mastro.{js,ts} @mastrojs.bsky.social · 14h
LLMs are just the latest in a long list of developments that made it cheaper to produce average software. The more things change, the more they stay the same. When having to choose, consumers and enterprises will continue to default to what everyone else is using.
130
Mastro.{js,ts} @mastrojs.bsky.social · 14h
There are millions of free or cheap apps on the app stores, open source programs or libraries on GitHub and package managers, and webapps in your web browser. In fact, there are so many that nobody has the time to install and evaluate all of them for their given use-case.
120
Mastro.{js,ts} @mastrojs.bsky.social · 14h
The commoditization of software has been ongoing for decades: higher level languages, faster hardware, open source, the internet, the web, app stores, LLMs – each made it dramatically easier and cheaper to produce and/or distribute software. Conversely, consumers have been flooded with software.
150
Mastro.{js,ts} @mastrojs.bsky.social · 07/10/2026
Using CSS, or..?
000
Mastro.{js,ts} @mastrojs.bsky.social · 06/10/2026
Agreed. @scope goes a long way:
mastrojs.github.io
Four ways to do component-scoped CSS without a complex build step
140
Mastro.{js,ts} @mastrojs.bsky.social · 05/10/2026
I want a Light DOM Web Components conf ;-)
440
Mastro.{js,ts} @mastrojs.bsky.social · 05/10/2026
After checking everything else twice, I usually discover them in the dish washer 😅
010
Mastro.{js,ts} @mastrojs.bsky.social · 05/10/2026
Agree 100%. But I do worry that a lot of business no longer consider their codebases “sufficiently important” 🫠
110
Mastro.{js,ts} @mastrojs.bsky.social · 04/10/2026
macOS Preview is surprisingly good at editing PDFs (although I’m guessing you need a few features that it doesn’t have)
110
Mastro.{js,ts} @mastrojs.bsky.social · 04/10/2026
Who will be Bluesky’s paying customer? Did they publish a business plan or something? (serious question, I haven’t read up on that stuff)
000
Mastro.{js,ts} @mastrojs.bsky.social · 03/10/2026
ha, that wasn’t even intentional!
010
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
I fear many SPA-only devs don’t even know what “form submit” means 😭
020
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
I got used to it after writing too much JavaScript ;-)
140
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
oh wow, okay. if you see multi-second backend queries, I agree that’s a problem worth throwing an index at. and yeah, if you’re in a world of internal tools that people use with laptops on fast networks, frontend performance is suddenly a lot better than in my world where 60% of users use phones.
010
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
Agree that Tanstack Query is the same in React and Solid, but that’s not the entire world. Hard disagree that most real-world performance is lost in the backend. I’ve rarely seen an API that didn’t load 1MB of JSON in under 500ms. But look at RUM data and you’ll often see LCPs over 5secs!
110
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
And why do we need faster JS compilers/tools now? Because we’ve started shipping so much JS to our users browsers that just transpiling it is slow! Never mind how slow downloading and running it will be on a slow phone!
110
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
Agreed that swapping out one SPA framework for another in a huge app doesn’t move the needle much. But it does for smaller websites, and I was also thinking MPAs and islands and whatnot. Apologies if “lost interest” isn’t the same thing as “stopped caring.” Like I said, can’t blame you if it is.
000
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
I wish…
001
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
I understand that people stop caring, considering… everything. But it’s still very sad people just don’t care about web performance etc. anymore. Especially now that it’s easier than ever to migrate a codebase.
210
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
But yes, some finally do the migration they’ve always wanted to do but couldn’t realistically pull off without the clanker.
000
Mastro.{js,ts} @mastrojs.bsky.social · 02/10/2026
In theory, yes. But are people migrating their projects en masse? It doesn’t seem so. Some people are even saying they continue to use React because the LLMs have more of it in the training data 😭 and their team’s novelty budget is all used up on AI, so they stick to what they know.
110
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
Congrats!
020
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
right? Seems a lot of people might prefer “the original”? But it is a great incremental migration story!
110
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
Fair, that's exactly what I'd say if I worked support for a WP plugin!
000
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
They just moved the red stuff to another file and added zod to packge.json 🤣 (sorry, I shouldn't always expect the worst).
020
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
but the $ namespace is already taken by jQuery! more seriously, to save two characters, you can also use the module system as a namespace: import { C } from "./helpers"
000
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
A <darkmodeswitch> element (similar to <geolocation> in a way).
000
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
“The part where I write code is such a small part of what I do, that there’s not huge efficiency gains to be had there. When I do generate code using AI, I find that the requirement to check it for accuracy negates any time saved during the coding part.”
000
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
“The most frustrating thing is that it’s the first part of the process where AI can be most helpful. It can help you answer questions, do research, and pull together data much faster than has been possible before.”
110
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
“You might reach out to a coder, who won’t have time to fix the problem as they will need to go back and do the needed research. Even if they do have time, you probably won’t have time to wait for the solution.”
100
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
Surprised how well replacing writing with coding worked here! “If you come from a starting point of assuming the job of a coder is to write code, you will ask the agent to write code. You will get lines of code, probably a lot of them, and then you will wonder why you aren’t achieving your goals.”
120
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
Could create a function that’s just called capital C to do that?
100
Mastro.{js,ts} @mastrojs.bsky.social · 01/10/2026
Maybe nobody expected an article author to write an actual code block not inside a codepen? 😅
020
Mastro.{js,ts} @mastrojs.bsky.social · 30/09/2026
great, keep going!
000
Mastro.{js,ts} @mastrojs.bsky.social · 30/09/2026
This is awesome! nit-pick: I just feel like all the drawers should be openable ;-)
110
Mastro.{js,ts} @mastrojs.bsky.social · 30/09/2026
I wouldn't call anything built on top of a bundler like vite "simple" 😅 But I get it: if you want to do an SPA you don't really have a choice, you must ship the whole next page's code to the client, and that means you need a bundler that does chunking etc.
000
Mastro.{js,ts} @mastrojs.bsky.social · 30/09/2026
Maybe become a PO/product manager if such a thing still exists? 😬
010
Mastro.{js,ts} @mastrojs.bsky.social · 30/09/2026
Unfortunately, the market can stay irrational longer than I can stay solvent 😭
030
Mastro.{js,ts} @mastrojs.bsky.social · 29/09/2026
yes, it's great that you can add it later. if it's a ref that would prevent downloading it always if you only want the other fields (basically what's in package.json)?
001
Mastro.{js,ts} @mastrojs.bsky.social · 29/09/2026
can you leave room for a binary field in the future, where you can attach a zip of the npm package? 😁
100
Mastro.{js,ts} @mastrojs.bsky.social · 29/09/2026
I get that things like "EmDash CMS" are not a drop-in replacement because existing WP plugins don't work there. But looking in from the outside, I'm surprised there is no WP fork that has gained traction yet. 🤔
110
Mastro.{js,ts} @mastrojs.bsky.social · 29/09/2026
ha, I read "clunky" at first and was wondering for far too long why that'd be the case :-)
110