The Static Site Paradox
Loris Cro's blog post discusses the complexity of personal websites, noting that normal users prefer complicated CMS solutions while engineers overlook simpler static options, advocating for a more accessible web.
Read original articleThe blog post "The Static Site Paradox" by Loris Cro discusses the contrasting complexities of personal websites among normal users and professional software engineers. It highlights two types of websites: one built on a complex CMS requiring extensive infrastructure and the other consisting of simple static HTML files. Contrary to expectations, most normal users opt for the more complicated CMS solutions due to the ease of setup, while few engineers utilize the simpler static options. Cro argues that the web's increasing complexity alienates non-technical users, pushing them towards social networks and away from personal web presence. He reflects on his experience at SquiggleConf, where he presented a language server for HTML, noting that it was the first to provide diagnostics for HTML, which underscores a gap in tooling for standard HTML compared to frameworks. Cro emphasizes the need for simplicity in web development, advocating for a more accessible web that allows diverse voices and creativity, rather than being dominated by complex frameworks and corporate interests. He calls on fellow engineers to prioritize making the web easier to navigate for everyone, as the current state reflects a failure to serve society's broader needs.
- The complexity of personal websites often alienates normal users, who default to complicated CMS solutions.
- Professional engineers have access to simpler static site options but often do not use them.
- The lack of accessible tooling for standard HTML contributes to the reliance on complex frameworks.
- Simplifying web development can enhance accessibility and diversity on the internet.
- Engineers are encouraged to prioritize user-friendly solutions to foster a more inclusive web environment.
Related
Writing HTML by hand is easier than debugging your static site generator
The blog author discusses challenges of static site generators versus manual HTML coding, citing setup complexities and advocating for simplicity, stability, and control in website management. Emphasizes static data benefits.
Rediscovering the Small Web (2020)
The modern web is dominated by corporations, stifling personal expression. The author advocates for rediscovering smaller, independent websites, emphasizing their importance for creativity and individual interests in a commercialized landscape.
Ask HN: Is webdev getting complicated without results to show for it?
The article highlights increasing complexity in web development due to new technologies, noting that many modern websites lack significant functional improvements, with basic CRUD operations still prevalent despite aesthetic enhancements.
The unreasonable effectiveness of simple HTML
Terence Eden emphasizes the importance of simple HTML in web design for public services, advocating for accessibility and usability to ensure vital information is available to users with limited technology.
Putting the "Person" in "Personal Website"
Jim Nielsen's blog post highlights personal websites as vital for self-expression, contrasting them with social media's focus on interaction. He advocates for accessible website creation to promote individuality and creativity.
- Many users prefer the ease of use offered by complex CMS like WordPress, despite the drawbacks of speed and security.
- Static site generators (SSGs) are seen as more efficient and secure, but they often come with a steep learning curve for non-technical users.
- Comments emphasize the need for better user experiences and tools for managing static sites, such as WYSIWYG editors.
- There is a call for simpler, more accessible web solutions that cater to both normal users and engineers.
- Some commenters argue that the complexity of modern web development is driven by market perceptions rather than actual utility.
It comes down to ease of editing. A WP site optimises for the editor. Not the hosting, not the tech folk, not the accountants, and definitely not the reader. The people who edit the site get to say how it's implemented.
If you give them the choice (as I have) between a site that renders in <100ms, is completely secure, and costs literally nothing to host, but requires markdown files and a bit of Git to deploy, and a Wordpress site that's as slow as hell, costs a fortune, is insecure, needs constant maintenance, but has a nice editing process, then they go for WP every time.
I'm always confused as to why these particular people get to be the ones who make the choice. But I've repeated this experiment multiple times and it has always come back with the same result.
It's still easier to make a static site. I think the authoring tools to generate HTML just currently suck, or if they don't suck they have some process that needs to run on the server to serve the site.
Big up this author. Here’s a recent podcast about the recent conference this quote came from (Squiggle Conf), https://changelog.com/jsparty/339
Even as a programmer, I've fallen into the static site generator trap a few times.
It's annoying to start a side project with a static site generator and then realise I want to add a small feature and suddenly I wish I'd just started with a simple Rails or PHP app.
Nowadays, if I want a static site I just start with a folder of html files. It's way less complicated and quicker to go from idea -> execution without bike-shedding or procrastination on tools.
I'm pretty happy writing html and css manually though—I don't recommend it for everyone.
The other cool thing is if I then decide to "abort" to rails.. I can copy the folder of html files into the rails public/ folder.. pretty easy upgrade path.
For those professionals who try to use personal side projects for RDD, so that they don't have to sabotage as many employers' projects as they would otherwise.
Which leads me to this morning, for example... For an indie Web site I'm about to launch -- and for which I'm using a popular modern Web framework, mainly for RDD reasons -- I could no longer update my Web site.
Because an NPM package had a Critical security problem, and trying to get the update got NPM stuck with some interdependency conflict that couldn't be resolved automatically. (Which, ironically, prevented pushing the security update to the production site.)
The site could be 5 simple handwritten HTML files, one with a sprinkling of JS inline in it, plus 2 small Perl CGI scripts. And it would work perfectly for 25 years and counting.
Instead, it's 129 NPM packages, frequently needing security updates, and a large tree of cryptic source files (template fragments, TS configurations, handlers), just for the NodeJS part of the site alone.
But doing it the ridiculously complex way is something that professionals can't afford not to do. (For example, having Perl on your resumé would be the kiss of death for employability. The people who didn't throw away your resume for ageism reasons, would still think you must be an idiot for not doing RDD.)
If you want something like Hugo to really take off in the blogging sphere, all you need to do is create some good looking themes with comments. Figure that out at scale - maybe by using per-blog sharded SQLite, which you can host as a third party for pennies on the dollar - and you have a tiny golden goose on your hands.
The code for a single page looks like this:
<?php
$this->title = "Blog Article Title";
$this->shortTitle = "Title";
$this->date = mktime(0,0,0,1,27,2024);
if ($this->mode == PageMode::Meta) return;
?>
<p>Raw HTML content here<p>
There is a router that automatically adds the site header and footer, and I can add a "_layout.php" file to a folder to add another level of layout for child pages. For blog list page, it just scans all the individual article files in the folder to create the index. That where that $this->mode == PageMode::Meta comes in -- it executes the code in each file (to get the meta data) and then exits before rendering the rest. It's not going to scale to a lot of content but I'll adjust if it becomes an issue.The entire PHP code for my "framework" is only 4 PHP files (init.php, functions.php, Layout.php, and Page.php).
The advantage of being a developer is that you can use code instead of configuration or data. And you can use code to write content more efficiently.
The result (still quite incomplete) is this: https://www.codaris.com/
It’s only a paradox if you think the trade off is spending time configuring things. No, the alternative for most people would be to pay someone to set up their website.
If someone set up a WYSIWYG editor for Hugo that goes from domain registration to published site in a few clicks they’d make a fortune.
Probably because this is something most IDEs have been doing for years, before Microsoft came up with LSP.
I am confused, the inverse would be that professional engineers have [2] and normal users have [1]. But then they write that almost no professional engineer can "afford" [2], so everybody seems to have [1]..?
A startup's market value is often closely tied to its number of employees. From an investor's perspective, a company with 1,000 employees is typically valued much higher than a small team of 37 programmers — regardless of the revenue generated per employee, or even if the company isn’t generating revenue at all. This is largely because interest rates remained very low for a long time, making it reasonable to borrow investment funds for promising companies with large staffs.
However, those employees need to be kept busy with something that appears useful, at least in theory. I believe this is one of the primary reasons we see such complex solutions for relatively simple tasks, which sometimes might not require a large team of advanced web developers or sophisticated technologies at all.
I use several SSGs and wrote one myself. I still can't recommend any SSG to people willing to pay.
Around the dot com boom there were dozens of high quality desktop editors for making websites. All these hosted SaaS systems were just starting to become popular, meant to make it easier for non-programmers to make websites. But did it really? I don't think so. Now those systems are so complex that you need to hire someone to use them. Yet first year students in comp sci who didn't even have any programming background still write HTML and CSS by hand. Templates for WordPress are these complex programs, but a template for HTML and CSS can be as simple as a Hello World example.
For those who are like me and don't know the term, "a language server for HTML" is referring to the plugin that evaluates your HTML syntax. That might be a narrow explanation of the tool but that's the basic idea I got from trying it.
Its not trivial to set up because the list of desired features must be agreed and there are legitimate variations per use case. So most likely it must involve several subcategories.
But somewhere between git, markdown, sqlite, python (or maybe go?) a bare bones linux server and the mighty browser lies our optimal set of solutions. With no more that absolutely needed lines of code, no more than absolutely needed user effort and cost, no more than absolutely needed power consumption etc, in other words our true digital publishing future :-)
A normal human being is going to see something like a checkbox to enable comments as being amazingly simple.
Sure, there are a few options for hosting and generating the build, but when I tried, they were not that good, or had some issues, etc... Meanwhile, wordpress.com never disappointed, and has an app for iOS and Android that you can use to update stuff whenever you are - as long as you have internet, of course.
That's why nowadays I use Obsidian Publish. Of course, I could use Quartz or some other alternative for building a site from my obsidian vault but... none will just work out of the box, from your phone
1. Run a local installation of WordPress on your PC. For one option, see localwp.com (no affiliation).
2. Use WordPress to design whatever website you want, using almost any WordPress plugins you want. Just don't make any calls for time-varying external resources!
3. Use one of the WordPress plugins for exporting a WordPress site as a static site, i.e. as a folder of files that you can upload to GitHub Pages, Netlify, Neocities, or wherever. For one option, see simplystatic.com (no affiliation).
I think the better word for this is "straightforward"; see the Mythical Man Month:
> For a given level of function, however, that system is best in which one can specify things with the most simplicity and straightforwardness. Simplicity is not enough. Mooers's TRAC language and Algol 68 achieve simplicity as measured by the number of distinct elementary concepts. They are not, however, straightforward. The expression of the things one wants to do often requires involuted and unexpected combinations of the basic facilities. It is not enough to learn the elements and rules of combination; one must also learn the idiomatic usage, a whole lore of how the elements are combined in practice.
> Simplicity and straightforwardness proceed from conceptual integrity. Every part must reflect the same philosophies and the same balancing of desiderata. Every part must even use the same techniques in syntax and analogous notions in semantics. Ease of use, then, dictates unity of design, conceptual integrity.
Or you could just use publii, an office suite of your choice, or type bad html and css by hand, then pass raw files on very cheap hosting providers, enjoying a clunky, and sometimes ugly, "website".
The industry for this use-case works on looks and discoverability: the dichotomy of the WP big bloated piece of crap vs static clown generators stands upon having a pretty website which is also functional for Google. Any other alternative (like the builders or the directories) works the same but they also forfeit property of the site from client. It's just because these solutions are pretty for cheap, it's fast fashion.
I'm not complaining, but after a certain threshold, unbundling is much more expensive.
I think this came a bit too late? Astro solves this well, there are other solutions too. From startups building webflow-like SSG platforms to frameworks like astro that requires basic markdown and html.
You can't beat "free hosting" on GitHub Pages CDNs and the reduced maintenance burden of not needing to monitor uptime of static sites, infrastructure dependencies, OS updates, etc. They can also be maintained by editing .md files from GitHub's UI
We use them everywhere we can and maintain a number for Free SSG project templates which include GitHub Actions to publish them to your GitHub Repo's CDN for free hosting.
All templates use the same markdown format and structure to edit content making them easily to move content across different SSG templates built with different tech stacks.
[1] https://razor-ssg.web-templates.io - C# Razor SSG for Marketing Websites/Blogs/Podcasts
[2] https://razor-press.web-templates.io - C# Razor SSG for docs
[3] https://press-vue.servicestack.net - Vue SSG for Marketing Websites/Blogs/Videos
[4] https://press-react.servicestack.net - React SSG for Marketing Websites/Blogs/Videos
The web is turning increasingly monolithic entirely thanks to the modern social network conglomerate. That has nothing to do with the choice of technology.
Mandatory Rich Hickey "Simple Made Easy" link => https://youtu.be/SxdOUGdseq4?si=IY8mWzR3C-ru5Das
"This keynote was given at Strange Loop 2011, and is perhaps the best known and most highly regarded of Rich's many excellent talks, ushering in a new way to think about the problems of software design and the constant fight against complexity."
Imho, the big lie regarding static sites is that it's showcasing only part of the solution it fixes. In the end it does not reduce complexity, it pushes it away from your immediate attention span(it's serverless), either to building tools, browser and configuration files.
You still need to build it, pick a layout, maybe some plugins. That requires not only the time to do it but also infrastructure behind, to push changes. If you consider that, from the start till the end, there is the same amount of complexity around it. You still need to persist data, md files look more appealing, but in the end is a disk data store, and if you need to collaborate, edit, etc, you end up realizing why why databases were invented.
To conclude, I really like static sites for the reasons I didn't include here.
Various startups built solutions that snapshotted WordPress installs and put the snapshots on static hosting. Best of both worlds. The one I know best got acquired: https://elementor.com/blog/elementor-acquires-strattic/
This doesn't explain the difference, why would you have to figure it out yourself is some other company could just as well sell all those services, just with an SSG?
Mind boggling to me such an overly complex system has such a large market share.
I'll take my Gatsby TypeScript React components / <<insert your favorite static site generator here>> any day
> only few professional software engineers can "afford" to have the second option as their personal website
In the quote "second option" refers to SSGs. But likely most of us here, and surely most engineers I interact with, would use the word "affordable" to describe why the first option (complex CMS like WordPress) is generally AVOIDED. The post quotes "professional engineers" or "professional software engineers". And points at SSGs as an "unaffordable" solution over WordPress.
The basis for this blog posts are however, that setting up SSG is time consuming while WP comes with less strings. Scroll to the end of this blabber to see the strings.
WordPress is not really an option for "professional software engineers". Most of us would be ashamed of having our personal websites defaced or allowing an attacked to read our databases and change entries. The "pros" own their swolutions and are careful around what that ownership entails. YOLO-approach CMS foer the personal website is simply not an option...
It's due to man-hours required to secure all the underlying dependencies (PHP, database), problems related to managing multiple system services to make a personal website work (outside of caddy, nginx etc) and how compute-heavy using WP is. And how much more knowledge (and - again - time) one needs, to harden a WP website for heavy load. You know - the "hug" thing which is not a thing with SSG-generated stupid static HTML, CSS and JS files.
Or, maybe I'll just quote the nonsense... According do the author WP is better than SSG because it doesn't require one to:
Buy a domain
Find a hosting platform
Configure DNS
Find an SSG (or handcraft everything yourself)
Learn how to setup a deployment pipeline
I haven't spent so much dopamine on decrypting few opening paragraphs of any blog posts in a good few weeks. This blog post was "unaffordable".I didn't even use a framework and chose to just use libraries and implement the features only if I need them. Probably it took more than just using a framework but it's pretty minimal and I know all the parts of my toolchain. And I learned much more than I could learn if I used a framework.
On the other hand, normal users don't have an understanding of static/dynamic site and which one to choose. It is entirely up to the non-greedy/greedy clowns to go for a complex CMS written in some programming language initially by themselves or a WordPress or HTML static site initially.
I think the author should have told whether this personal website is a static site or dynamic.
It’s mostly list of markdowns and images in folders. Everything else generates during deployment on GitHub:actions
It was simpler to show GitHub desktop rather than installing something like Wordpress machinery monster and spent hours to teach how to use it. Now the process is simple:
1. Create a folder
2. Put there markdown and images
3. Commit
I know other people like jekyll or hugo or whatever, but I've never seen anything comparable to the simplicity of mkdocs. It has built in search for the entire site, nice looking nav, everything is markdown.
The best part though? Here's my "build pipeline".
$ mkdocs build
$ scp -r ./build <user>@dangerlibrary.com:/site
I love it.
Simple, has text-focused CMS, lightweight and content generated is static. Plus, dev is a nice guy.
Surely this is the "best of both worlds" answer?
A case of irony?
> Don't you find it infuriating when lawyers and accountants fail to clarify how their respective domains work, making them unavoidable intermediaries of systems that in theory you should be able to navigate by yourself?
> Whenever we fail to make simple things easy in software engineering, and webdev especially, we are failing society in the exact same way.
Exactly right.
Huh? You're not confined to Automattic or WP-Engine, there are tons and tons of regular web hosting providers with Wordpress and a bunch of other stuff included in a standard hosting package, you can use the free Wordpress, and you can self-host. That's the whole point of Wordpress being open source, and it's working as intended.
There's absolutely nothing wrong with the status quo around blogging.
Static site generators are used by technologists who want to tinker and check all the boxes in whatever Chrome's latest devtool benchmark tool is called. Which is fine too, good for you if that's what you like to do with your time! For "normies" (or SME's who just want to publish their web content and move on), there are more than enough options around.
Consider what's needed for someone non-programmer-y to use an SSG:
* Download a copy of the repository and install the SSG tooling, then fire up the SSG in listening mode so they can see their changes. * Write out the Markdown for their page. Oh, hope you have short-codes in place for things like images-next-to-paragraphs, info callouts, common page structures (cards, hero blocks, buttons), and so forth. If not, either they'll have to pause and get you to work with them to have them implemented, or they'll have to figure out writing the templates required. Regardless, once the bits are implemented in the site the writer has to work in the arcane short-code format markup required to include them. * Now they've got their changes, they need to figure out how to stage them — either they need to zip up the whole working directory and send it to you to sort out, or they get to learn how to commit a pull-request to a Git repository.
I don't mind doing all of that — it's quite enjoyable to figure out, and I get the chance to structure things exactly as I like them. But trying to teach a theatre director accustomed to writing in Google Docs how to do all of that? Nope. Which then turns into, "here, I wrote this out in G-Docs — hope you can figure out how to turn that into a site page!".
I really do wish there were a better competitor to WordPress, something that offered the ability to lift the hood and customize more easily. There are some CMS front-ends to SSGs, but the last I checked they either were more "CMS" in the sense of "put stuff in database and this will render it" or they still weren't particularly user-friendly (or were abandoned).
Guess that idea is long gone...
Now when a new post added happens what?
#1. You log-in to admin panel and write a post. A row is added to the database, a worker subscribed to the table sends the row via websocket to every active visitor on the site. They download few hundred bytes of data and see the post immediately without needing to refresh their browser. If they refresh, they will get cached version of the app and data instantly, then fill in the missing post from the API.
#2. You either use SSG or you generate a new static HTML page by hand, specifically on a device which has a private key for uploading to the server. If you don't choose an SSG, then since Javascript is complex, scary and prohibited, you also change the main feed HTML to include a new post, you timestamp all the new stuff by hand, etc. You upload it to the server via ftp. Great, now new visitors of the main blog feed will see it. Active visitors will see it only if they reload the whole page (hopefully they don't load the cached version).
Being professional is not to choose an extreme. Being professional is to solve a problem, and to make the best tradeoffs possible when solving it. There are many different configurations which are somewhat in the middle of extremes provided in the post, and using any of them professionally is about using them right and fitting them to solve an issue.
You would expect all normal users, including professionals to distribute normally between your neo-web-luddite static NGINX+HTML+FTP solution and javascriptpunk2033 complex CMS.
Huh? <confused-dog.jpg> Either the page gets rendered server-side and (possibly) hydrated client-side, or it gets rendered client-side (i.e. a classic SPA) but then there is no hydration.
Oh come on! You don't really expect that to last, do you?
Learned back in 2004 that it's better to pay than to rely on free services. I pay for source code repositories, email, web hosting, etc.
"normal users are stuck with a bunch of greedy clowns that make them pay "
Here we go again, software needs to be free as in beer and anyone that charges for software is the devil
"software engineers enjoy free hosting & custom domain support with GitHub Pages / Cloudflare Pages "
You get what you pay for buddy.
And there it is, beautifully distilled into one sentence.
I'm surprised I haven't come across more examples of people using GitHub Actions with static site generators like this. Ideally someone would share a GitHub repository template that comes pre-configured with a good static site generator which people could then use as a one-click starting point for their own sites.
I've considered building one of those myself but I tend not to use static site generators (I like Baked Data instead: https://simonwillison.net/2021/Jul/28/baked-data/) so I'm not a great person to take on that project.
Related
Writing HTML by hand is easier than debugging your static site generator
The blog author discusses challenges of static site generators versus manual HTML coding, citing setup complexities and advocating for simplicity, stability, and control in website management. Emphasizes static data benefits.
Rediscovering the Small Web (2020)
The modern web is dominated by corporations, stifling personal expression. The author advocates for rediscovering smaller, independent websites, emphasizing their importance for creativity and individual interests in a commercialized landscape.
Ask HN: Is webdev getting complicated without results to show for it?
The article highlights increasing complexity in web development due to new technologies, noting that many modern websites lack significant functional improvements, with basic CRUD operations still prevalent despite aesthetic enhancements.
The unreasonable effectiveness of simple HTML
Terence Eden emphasizes the importance of simple HTML in web design for public services, advocating for accessibility and usability to ensure vital information is available to users with limited technology.
Putting the "Person" in "Personal Website"
Jim Nielsen's blog post highlights personal websites as vital for self-expression, contrasting them with social media's focus on interaction. He advocates for accessible website creation to promote individuality and creativity.