logoalt Hacker News

Minimum Viable Blog

328 pointsby jlundbergyesterday at 9:08 AM160 commentsview on HN

Comments

Tallainyesterday at 3:29 PM

I'm reminded of the chart from this blog post: https://molodtsov.me/2023/02/how-to-start-your-blog-in-2023/

As I fell into the SSG pit I found I mostly wrote about and fooled around with the SSG itself, instead of all the things I originally planned on writing about and doing. So I threw away the SSG and installed Wordpress and stopped caring. It's been liberating.

If the goal is to tinker and write about the tinkering, that is fine. If you're not like me and the tinkering never gets in the way of the writing, that's also fine. But that wasn't me. I had to learn yet again that the best tool was the one that got out of my way and let me do what I came to do.

The last thing I need when I'm aiming to write is a chance to procrastinate.

show 7 replies
p4bl0yesterday at 9:54 AM

Nice, but I feel like to be qualified as a blog it needs two little additional things:

1- Make sure to order post by date (most recent first) and to display that date somewhere. The date can simply be taken from the post file meta data (e.g. creation time) to keep things minimal.

2- An RSS feed of course! It should be quite easy to generate a minimal one with only links and titles based on the existing script and a minimal RSS template.

show 2 replies
susamyesterday at 10:25 AM

Nice post. Thanks for sharing! I've always been fond of independent websites like this. My own website began in a similar fashion about 25 years ago - minimal, straightforward, and entirely built with ASP (now known as Classic ASP), simply because that was the only suitable technology I knew at the time. Of course, that's not the case anymore. These days, it runs as a statically generated site using Common Lisp [1], and I expect this to be my long-term setup.

Starting with a simple collection of pages was a great way to get started and set up a minimum viable website. But as time passed, I found myself needing a few more features. In order of priority, these included:

1. RSS feeds.

2. A blog listing page with posts ordered by date.

3. The ability to tag posts by topic and generate tag-based index pages.

4. Support for non-blog content, like tools, games, demos, etc. that can also be tagged and included in the RSS feed.

5. Support for comments without relying on third-party services.

With each new requirement, the source code gradually grew. What started as a few hundred lines has now expanded to around 1300 lines of Common Lisp. Not too big in the grand scheme of things but not exactly tiny either. Still, I try to resist the temptation to keep adding every shiny new idea that comes to mind. This remains a solo passion project. I want the entire source code to be something I can hold in my head at once. If I encounter a bug, I want it to be something I can reason about and fix in under 10 minutes, and so far, fortunately, that has been the case.

That said, new ideas are always tempting. Lately, I've been enticed by the idea of adding a blogroll that provides a list of posts from my favourite bloggers. This could replace my usual feed reader. I haven't had the time to implement it yet, but if a quiet weekend comes along, that might just be the next feature I work on. Of course, I remind myself not to let this project spiral out of control. I certainly don't want this to grow into something that can read my email.

[1] https://github.com/susam/susam.net/blob/main/site.lisp

show 5 replies
nicboutoday at 8:26 AM

I think that the best setup is Jekyll on GitHub pages. It's the lowest-effort way to turn text files into a website.

If you don't start from scratch, the biggest problem with static websites is maintaining old URLs. At some point you need URL rewrite rules, and then you can't just have static files on a server. You need server rules.

It's also nice to just editing text files locally without having to install stuff. Then you need some sort of build system on another server.

Then you might find that you need forms, comments and other features beyond text on a page.

Basically, it's hard to have just static files.

KronisLVtoday at 8:34 AM

I did something a bit unconventional for my own blog: https://blog.kronis.dev/blog/my-blog-doesnt-need-quality-it-...

I decided on running an instance of Grav, which is a flat file CMS, with a fairly minimalist theme, except I version all of the files (even the PHP dependencies) in my Git repo, from which I build Docker images that actually get deployed: https://getgrav.org/

The benefit here is that I can launch it locally and see how the blog posts look, it's just a bunch of files unlike SSG, but with dynamic templating, meaning that I also get an updated index of the pages, as well as search functionality out of the box.

Furthermore, each new post is basically a deploy of a new version of the container, which curiously also means that if something goes wrong (e.g. if it gets hacked), there is no serious data loss because none of the data is meant to be truly persistent, I don't even need to think that much about backing it up, rather just the Git repo its built from.

Plus, there's a nice admin UI if I need it (behind additional auth through the web server), or I can just write things in a text editor of my choice locally.

Oh, and the performance is pretty good, too, because there is no database to hit with complex SQL, more like some disk I/O (which also is lessened by the cache).

pvtmerttoday at 7:56 AM

I use the GitHub pages for that. Though hopping through various CMS or static-site-generators (like, Hugo, Jekyll, etc), I settled on a fully static and custom system, works with Javascript.

I think same could also be achieved via React, but I did not want any `npm install` hence, I used some JS libraries like marked and markdown.js directly at the frontend. (Added as git submodules)

I also sort-of liked how a dependency management mechanism could be built directly on top of the git submodules, without requiring an explicit package manager. Given the commits cloned are already pinned and committed to the repository. Though, the tooling is not as good as the well-established dependency management software like Maven, NPM, PIP, etc.

Nevertheless, it worked well for a basic blog, I publish the articles directly in markdown format, embedding some HTML if necessary. In fact, all the pages are some sort of markdown, rendered to HTML upon loading. But of course, the URLs are not "real", I use the query string to refer to the pages, such as `mert.akeng.in/?/blog`, the JS fetches `/blog.md` and renders it to the `<main>` element. Much like how you would initialize React through/within JS.

captn3m0yesterday at 12:34 PM

Something I’d like to see in browsers is native support for text/markdown and text/gemini.

If browsers can decide to render PDFs, surely a simple formatter and user-decidable stylesheets for markdown/gemini content can’t be that hard to ship.

As it stands you can write a text/plain blog but you will be hurt with SEO concerns since it isn’t really hypertext (maybe you could do some magic with link headers). Supporting other formats lowers the barrier to publishing in a neat manner and gives control back to users.

show 2 replies
echoangleyesterday at 10:08 AM

> html_content = html_content.replace('Minimum viable blog', title)

So every time your post contains the string 'Minimum viable blog', it will be replaced by the title of the current post? That’s a bug, right?

show 1 reply
_fat_santayesterday at 2:23 PM

I ran an "MVB" for a while but mine was even more simplistic. Just a straight HTML page and for posts I would write them as .txt files and manually update the homepage. While it was quite "verbose", I would still say it was easier than having to deal with the "modern web".

Since that time I have moved to something more sophisticated and now run Astro for my personal site and blog and honestly it's freaking awesome. On their landing page they claim it's the best platform for "content driven sites" and after using it for 6 months I have to say I agree, they take all the BS out of building a blog and just give you clear and easy to follow conventions for just about everything you'd want for a blog.

show 2 replies
90s_devyesterday at 10:48 AM

I've been experimenting with minimal blogs for about 15 years. Some tricks I learned:

* You can get away with const title = lines.match(/# (.+)/)[1] and avoid frontmatter.

* My blogs never have so many posts they need pagination or tags, or categories, or sorting.

* JSX turns out to be a great vanilla server side string builder if you use a questionable hack like https://immaculata.dev/guides/enabling-jsx.html

* GH Pages with arbitrary build steps instead of (sigh) Jekyll is really easy now with things like https://immaculata.dev/guides/using-gh-pages.html

* highlight.js is still basically the king of super easy code syntax highlight by adding literally three lines to your HTML (shiki is cool but slooooow)

Rush2112today at 10:07 AM

Not following all requirements, but you could also just have an RSS feed generated from markdown files you have locally and publish that (using a tool like mdrss).

emaddayesterday at 1:46 PM

Something I have experimented with for a few sites is using Bun JS with HTML in JS strings.

Bun has a —hot flag that regenerates static html on change.

IntelliJ IDE can detect a // language=html comment above strings which formats the html inside and does highlighting etc.

Just using vanilla JS functions instead of a template language lets you write any logic yourself instead of looking up the template languages way of doing it.

FlyingSnakeyesterday at 10:30 AM

It is easy using standard static blogging framework like Hugo/Zola + Cloudflare Pages. I have a minimal blog (<100kb) and it meets all the criteria that OP has listed.

This is what I did:

- Use Hugo Blog Awesome theme

- Followed the 512kb guidelines and verified the page size.

- Stripped down any images and unwanted JS, but there weren't many.

1: https://512kb.club

2. https://radar.cloudflare.com/scan

show 1 reply
karaterobottoday at 3:44 AM

My blog is more minimal, and still viable. It's just a big page with 761 posts on it. It's 360 KB all in, and it's interactive in about 1 second.

No category pages, no individual pages. No search... well, CMD+F is your search engine, and it's blazingly fast.

That design actually works really well if all you care about is getting text content out there, and the idea of comments—let alone ads—isn't appealing to you.

show 1 reply
abhisekyesterday at 11:38 AM

I would really think it depends on use-case. If you are tired of Wordpress bloat and want something simpler you can probably build a markdown server over a directory with a very very minimal template. I remember Renato used to do that for docs, just serve a website on top of a dir containing markdown files.

But as you invest time and effort, get more readers and asks from your readers, your need for features even for a simple blog will increase. At least basic conversation around content. You will probably end up using Discuss or decide to make your simple blog much more complex by introducing a database (or may even be just flat files on S3).

At some point you will either focus on only "writing" and sharing ideas in which case a simple publishing infra is good. If you want more, you will probably end up building a Jekyll, Hugo etc. from scratch or better adopt and contribute to one of these :)

agubeluyesterday at 10:13 AM

I use a very similar approach in my own blog, because I'm tired of over-bloated websites that take waaaay too long to load: https://blog.borrego.dev

Source: https://github.com/agubelu/blog

show 1 reply
accrualyesterday at 4:20 PM

Enjoyable to see another minimal static blog and the discussion around it.

Since we're chatting about our static site generators - I've been working on mine for a few months and naturally spend way more time on the generator than the content. ;) Mine is written in TypeScript and I'm targeting HTML 4.01 Strict for compat with old browsers.

It started pretty simple, just walk a directory of .md files and output .html, but it now has RSS, Atom, tags, a "latest" page, sitemap, stats, table of contents, SEO features, etc.

It's been fun - a nice "easy" project to slowly polish over time and to gradually grow my TS skills.

show 1 reply
hcarvalhoalvesyesterday at 2:28 PM

Here’s one using Emacs’ Org mode built-in HTML publishing capabilities:

https://github.com/hcarvalhoalves/org-mode-site-template

bartreadyesterday at 8:36 PM

I'm in the process of resurrecting an old blog of mine, which had used hexo back in the day with all the raw posts being markdown files that are statically rendered to HTML... and to be honest I'm pretty tempted by this very simple approach because hexo is, honestly, annoying me.

For whatever reason it's just not picking up themes even though I'm now using the most up to date everything. And actually I've realised I don't even like the vast majority of the themes anyway, including the one I used previously. And since developing my own hexo theme seems like kind of a faff, I'm pretty tempted to just throw together a Sass sheet, compile it to CSS, and use that as my theme.

I guess if I got into the detail of it - comments, archive pages, etc. - the complexity would start to creep in and I'd find that what I was doing was building my own home-rolled hexo-alike... so maybe I should persist with figuring out why themes aren't working for a bit longer.

Retr0idyesterday at 10:15 AM

This is basically how my blog works, except I use mistune as the markdown renderer, which has allowed me to extend it over time, including adding syntax-highlighted code blocks and latex math syntax: https://www.da.vidbuchanan.co.uk/blog/mathml-blogging.html

I also generate an index page and an RSS feed.

One thing that's been bugging me more recently (now that I have tens of articles written) is that I need to implement incremental rebuilds. Right now every page needs to get regenerated at once, which takes triple-digit-milliseconds. Unacceptable!

show 2 replies
bob1029yesterday at 10:27 AM

If I was going to do a blog today, I'd dump hand written HTML into an S3 bucket and call it a day.

The static site generators are nice, but it's really not a huge deal to spin up a few common css classes and maintain a little bit of mental discipline.

I think using a blog to communicate your ideas and skills is great. I think making the blog tech stack itself representative of those things seems distracting. Not everything has to be a smartass ego implementation. As long as you spend 5 minutes testing on mobile, your audience probably won't notice a damn thing the next time it touches the front page of HN or wherever.

show 2 replies
jprokay13yesterday at 3:26 PM

I went all in on using Caddy for rendering my website and blog, but I’m encountering a frustrating issue that I’m not sure how to solve. The feed on my site uses the listFiles feature to populate from a directory. I take care to name things so ordering is preserved. No problems on my machine getting the feed ordered correctly. However, when deployed to Railway via a container, the ordering is all wrong. Any thoughts on how to debug?

show 2 replies
sirodohtyesterday at 11:55 AM

Inspiring.

I've built a blogging platform with similar vision which I could call "Minimum Viable Blogging Platform"

https://mataroa.blog/

show 2 replies
AndrewStephensyesterday at 11:30 AM

I restarted my own blog in exactly the same way after getting frustrated with WordPress. The most important thing in blogging is to get something simple that will not get the way of you actually writing.

Over the years I have added to my solution with custom markdown, tagging, rss, and most lately exif-stripping. Technically the source is available [0] but I can’t see anyone else using it.

[0] https://github.com/andrewstephens75/gensite

show 1 reply
geor9eyesterday at 6:48 PM

I did the same. Sync'd my Obsidian .md vault between my macbook and my server. Asked AI for an index.php that would render a nice html/css webpage at domain.com/whatever for every whatever.md on the fly. Works fantastic. Supports everything Obsidian markdown does - pics, videos, resizing via drag, wikilinking, codeblocks, etc… No publish step - from my site you can literally see me typing live in Obsidian. No more friction to share things.

to-too-twoyesterday at 4:38 PM

Makes me think of https://bearblog.dev/.

I've been thinking about using Obsidian as a static site generator.

show 1 reply
bambaxyesterday at 10:26 AM

I don't know if a minimum viable blog needs to pre-render html... For this a PHP script is lightning fast and the source markdown file is the only source of truth -- if you correct a typo then it's immediately live, no need to think about rendering.

sareiodatayesterday at 5:17 PM

Made this silly thing to have a site with just html and have a way to have templates & header includes, while still having the site accesible without JS if needed

https://github.com/sareiodata/hx-weaver

That being said, I don't find myself actually writing a blog :)

mrroryflintyesterday at 10:58 AM

I have a very simple setup using 11ty (https://rory.codes) - but nowhere near as simple as this. Very impressive!

Keyb0ardWarri0ryesterday at 4:13 PM

Take a look at https://markdown.ninja

It lets you create a blog and a newsletter with Markdown and publish directly from the command line (or the web editor). You get the offline-first workflow of Markdown, but with beautiful themes like substack.

It's like a mix between Wordpress, netlify and substack.

ulrischatoday at 7:22 AM

It can be more simple: Just use php for SSR

keepamovinyesterday at 1:51 PM

I just made this thing[0] last few days, and it's sooo much, and you showed me simple. So here's my simple: https://o0101.github.io/mvb/

I think I like simple.

[0]: https://studio.dosaygo.com

floathubyesterday at 12:44 PM

If you're already using Emacs and/or org mode, then this is a useful guide to setting up a blog/site that is super easy to maintain/push/etc, including free hosting at github with a custom domain name:

https://stuff.sigvaldason.com/how.html

wvhyesterday at 5:21 PM

This reminds me of my own website using Apache's server side includes in the late nineties. No Markdown though, but otherwise not substantially different. Simplicity tends to work best (most reliable, least resources) for text content.

babuloseotoday at 4:11 AM

I want to blog but my DOMAIN name got taken and it costs 16k now wtf.

Xeoncrossyesterday at 6:45 PM

This is why I created https://github.com/xeoncross/jr all those years ago

You don't need a backend.

hackerbeatyesterday at 7:10 PM

Love this, and how more and more folks are going minimal, like https://wordgag.com/.

ds-rantsyesterday at 11:00 AM

I personally use a combination of quarto to statically render markdown files and hosting on GitHub pages because I don't want to bother with the self hosting for now. In the past I used a combination of R-markdown with a nginx server but decided to move to a simpler solution

sandebertyesterday at 11:03 AM

Nice solution, and congrats on winning HN for the moment. And thanks for 46elks. (Happy customer here.)

show 1 reply
capitanazo77yesterday at 4:16 PM

The perfect minimal web is Astro Js and that’s because of images.

Mobile screens and desktop are fundamentally different. You can’t have small and big at the same time.

That is solved via the standard html img srcset

Astro solves that easily.

And Wordpress of course.

hxiiyesterday at 1:56 PM

I tried to follow the same reasoning and made my own SSG for this purpose - Hajime.

It really does help when you don’t even have the potential option to distract yourself with bells and whistles.

Write some markdown, run a command and your blog updates.

show 1 reply
rambambramyesterday at 1:27 PM

It's 2025, the web has come full circle again, so where's the RSS feed?

concrete_headyesterday at 9:56 AM

Thanks for sharing, I like your approach.

As easy as wordpress, square space or whatever claim to be, in my mind this is even easier, the solution is more elegant, and you expose yourself to a whole lot less crap along the way.

Edit: I recognise this doesn't cover hosting, domain registration etc.

show 1 reply
strzibnyyesterday at 11:18 AM

Very nice and minimal. I am going the opposite direction. I am cancelling my static generated blogs and moving everything to LakyAI which will help me to manage everything from a single place. Not quite ready for prime time tho.

naveed125today at 12:47 AM

This is the kind of post that makes me visit Hacker News time to time.

dpacmittalyesterday at 10:05 AM

Starts getting messy once you add sorting, pagination, categories/tags.

show 2 replies
yaKashifyesterday at 11:59 AM

Yeah but too technical for 99% of the humanity.

For all of them I built Lykhari.com

theletterfyesterday at 10:31 AM

The post is skipping the hosting side. Guess it doesn't matter too much these days? What's the best besides Netlify's or Cloudflare's free tiers?

show 2 replies
wood_spirityesterday at 11:10 AM

I currently have a very similar setup. And tbh I’m keen to move to a less involved solution…

Are there anything like ghpages with a built in wysiwyg editor?

show 1 reply

🔗 View 15 more comments