9 ms·
Minimum Viable Blog
- Xeoncross 1y agoThis is why I created https://github.com/xeoncross/jr https://github.com/xeoncross/jr all those years ago You don't need a backend.
- p4bl0 1y agoNice, 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.
- ostwilkens 1y agoThat's fair! 1- I'm leaning towards an automatically generated file containing metadata, TOML or such 2- RSS is definitely coming, but is dependent on point 1 :-)
- MarceColl 1y agoIn the spirit of being minimally viable you could just have that in the filename and sort it before generating.
- kryptiskt 1y agoSince RSS is a pretty simple format, it doesn't require any automation, just a little copy and paste. "Handwriting your RSS feed"[0] makes the case for doing it that way. [0] https://everest-pipkin.com/teaching/handmadeRSS https://everest-pipkin.com/teaching/handmadeRSS
- arccy 1y agowhile rss is nice, it really shouldn't be required to be considered a blog. being "followed" isn't always a good thing, it can create pressure to pander to your audience, the same thing that makes social media bad.
- susam 1y ago> while rss is nice, it really shouldn't be required to be considered a blog. I agree. A blog is literally a web log. A chronological sequence of posts published on the web. RSS is certainly helpful for syndication and distribution but I wouldn't consider it to be a defining part of what a web log is.
- prox 1y agoGood point. My idealistic (realistic?) view of a web log is just a person typing out something unique that concerns that person and their view, life, or experiences. As soon as you start catering to and fishing for views you lose that angle. Not a drama, but it’s already 99.5% of the internet. Edit : I really like Marginalia search, for prioritizing non commercial content. https://marginalia-search.com/ https://marginalia-search.com/
- citizenkeen 1y agoI don’t think RSS is required for soldering to be a blog, but I do think it’s required for it to be a viable one.
- qudat 1y agoI agree but I could also imagine a world where a minimally viable blog is just an RSS feed.
- politelemon 1y ago> it can create pressure to pander to your audience RSS creates no such pressure, as you needn't be aware of who/what is following you. It's a convenience function simply for the convenience, rather than as a form and measure of external validation.
- jlundberg 1y agoDoing it easy for yourself and get quicker to the content is the way to go.
- concrete_head 1y agoThanks 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.
- ostwilkens 1y agoThanks! Yeah, I find this a lot easier. And yes, hosting is an exercise left to the reader :-) I might write about my hosting setup in an upcoming blog post.
- balazs4 1y agoyes.
- dpacmittal 1y agoStarts getting messy once you add sorting, pagination, categories/tags.
- ostwilkens 1y agoTrue! Luckily, I don't have a need for those features :-)
- cosmicgadget 1y agoDefinitely one of those things to design with the expectation that it will grow.
- vemom 1y agoI'm more of a WordPress guy. Click "install wordpress". When I need something I add a plugin. No code required.
- ostwilkens 1y agoI would be genuinely interested to know how well the average wordpress blog handles a hug from the HN frontpage! :-)
- deleted 1y ago[deleted]
- vemom 1y agoThere are cache plugins that effectively turn it into a static site. You could also run CF atop of it. WordPress is used at scale by many companies.
- paulnpace 1y agoCache plugins still go through the PHP interpreter. I'm under the impression there still isn't anything faster than serving HTML files. Better is use a static site plugin, then you don't have to bother with configuring any caching or external services. Best is also use the SQLite Database Integration plugin, so the server doesn't even have to run MySQL/MariaDB (other than initial installation), and on an otherwise light server, the filesystem will effectively keep the site in page cache while using less memory, if I understand that correctly. The WordPress interface can be kept behind HTTP auth or client cert.
- vntok 1y ago> Cache plugins still go through the PHP interpreter. I'm under the impression there still isn't anything faster than serving HTML files. Several WordPress caching plugins, like W3TC (https://wordpress.org/plugins/w3-total-cache/ https://wordpress.org/plugins/w3-total-cache/), actually add rules to your Apache/Nginx server so that the cached HTML pages are served statically without touching PHP.
- echoangle 1y ago> 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?
- ostwilkens 1y agoOh yes, good catch! The code in the post is the first draft from O1 and this string has been replaced with {{ title }}.
- febusravenga 1y agoSo every time you post snippets how of code from your template/blog engine, it will be replaced by current blog post title? /s
- echoangle 1y agoKind of not /s, there’s currently no way to escape the template tags to make them appear in the output (except adding invisible Unicode characters or so).
- ostwilkens 1y agoWow, yes.. that's actually exactly what happened here :-)
- 90s_dev 1y agoAlso you don't need to separate :root from html in your code, they're always the same here, so you can save a couple lines by joining them.
- chrismorgan 1y agoAnd if talking of such optimisations— • Trailing slashes in HTML content (apart from SVG/MathML) are completely useless, unless you’re serving the document in XML syntax (which you can’t do by accident). I personally think they’re harmful, because they encourage an incorrect belief, and are seldom even applied consistently. • <html>, <head>, </head>, <body>, </body> and <html> are all optional. In practice, you should have an <html lang> attribute so that you can’t omit that tag, but the others can normally all be omitted. • In case-insensitive things, lowercase will normally compress better. But Brotli messes things up because it’s a popularity contest of the HTML that people actually write, so that <!DOCTYPE html> compresses better than <!doctype html>, and even <meta charset="utf-8"> compresses better than <meta charset=utf-8>. Anyway, <meta charset="UTF-8" /> would be better as <meta charset="utf-8">. • In <meta name="viewport" content="width=device-width, initial-scale=1.0" />, the space after the comma, and the .0 in initial-scale, are unnecessary. (In fact, in theory the .0 might not even be parsed: the badly-incomplete-and-extremely-dodgy spec says to use strtod, which is locale-dependent, so a French machine might parse initial-scale=1.5 as only one, ignoring the .5 because it’s not ,5. In practice I’d be mildly surprised if browsers used the real locale-dependent strtod, though I haven’t checked. If some spec somewhere says “assume LC_ALL=C in such cases”, which would also largely resolve the problem, I’d like to know.) All up (and with title fixed to be a proper placeholder, as discussed): <!DOCTYPE html> <html lang="en"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>{{ title }}</title> <style> html { color-scheme: light dark; font-family: system-ui, sans-serif; max-width: 70ch; padding: 3em 1em; margin: auto; line-height: 1.5; font-size: 1.25em; } </style> <a href="/" id="head-link">Carl Öst Wilkens' Blog</a> {{ content }}
- revskill 1y agoThe hardest part is the DevOps part where you need to find out reliable host, how to deploy, CI/CD and all the server-related stuff if you want maximum customization.
- agubelu 1y agoI 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 https://blog.borrego.dev Source: https://github.com/agubelu/blog https://github.com/agubelu/blog
- indigodaddy 1y agoI like this a lot and it looks great! How does it look on mobile?
- agubelu 1y agoIt looks pretty good I'd say. Feel free to use the design if you like it!
- Retr0id 1y agoThis 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 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!
- john-h-k 1y agoThats an awesome setup and very similar to the one I have. But damn triple-digit-ms does actually sound shockingly slow for what is effectively just heavy text processing. Is there a huge amount of text?
- Retr0id 1y agoOne of my more dubious design decisions (7 years ago...) was to inline all my images as base64 (I was originally planning on having only simple diagrams that would compress well, but this is less true now). I like that every page load generates just a single request, and that you can ctrl+s the page without any breakage. I haven't profiled anything though, it could also be the syntax highlighting being slow (it generates quite a soup of HTML tags).
- 90s_dev 1y agoA trick I used to use is to check during my custom build step whether the image is under 1k, and inline it if so, otherwise add its hash to the url and add a preload to the html header. I'm trying to get back to that in my latest custom build tool, but it's a gradual process to evolve it to that point properly.
- ostwilkens 1y agoLooks nice and minimal as well. Love the look of your blog! The markdown2 package includes an option for syntax highlighting. You need to bring your own css though.
- yawpitch 1y agoDear god the bugs in that Python…
- susam 1y agoNice 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 https://github.com/susam/susam.net/blob/main/site.lisp
- ostwilkens 1y agoThank you for the kind words. RSS and dates will definitely be needed! I can also see myself wanting to embed shaders and web games in the future... hopefully without increasing the complexity too much. I think your blog is perfect!
- llimllib 1y agomy path went similarly to yours, I've actually done it a couple of times. Here's my current iteration, a python script that does manage to stay under 1000 lines: https://github.com/llimllib/obsidian_notes/blob/c93b9b5c46fe4f08d51a0cbeddb588d4f3682969/run.py#L4 https://github.com/llimllib/obsidian_notes/blob/c93b9b5c46fe...
- bambax 1y agoI 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.
- vaylian 1y agoYou can edit the typo directly in the already published document. The pre-rendering is just there to provide the surrounding page content when you create a new page.
- bob1029 1y agoIf 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.
- miragecraft 1y agoI was handwriting HTML for a while but found that I write a lot more with an actual CMS. At the end of the day it doesn’t matter what your setup is as long as it helps you write as much as possible.
- SoftTalker 1y agoStatic HTML will also hold up a lot better if a post gets popular than a heavyweight dynamic site framework will.
- FlyingSnake 1y agoIt 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 https://512kb.club 2. https://radar.cloudflare.com/scan https://radar.cloudflare.com/scan
- deleted 1y ago[deleted]
- theletterf 1y agoThe 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?
- zooi 1y agoThree lines in a Caddyfile would be sufficient
- sureglymop 1y agoImo oracle cloud free tier vm with a simple caddy or traefik setup.
- owzkshfjsekui 1y agogood idea .... for ipfs
- GaggiX 1y agoI was thinking, another thing you could probably easily add is optimizing the images for web delivery, in your first article there are quite large jpgs.
- 90s_dev 1y agoI'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 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 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)
- tomalaci 1y agoI've been wondering what is the benefit of putting up your own web server or scripts to serve your static content when you could put it in a Github repo or serve from something like S3? The nice thing about latter is that the bandwidth, DDoS or other load-related issues aren't that much of a problem. Server maintenance also isn't a problem as you don't have any.
- chneu 1y agoUsually a web server is a real simple add-on to an already established home network/lab. It's not necessary. Just a fun thing to do.
- motorest 1y ago> I've been wondering what is the benefit of putting up your own web server or scripts to serve your static content when you could put it in a Github repo or serve from something like S3? I think you're overestimating the work required to put together a web server. For example, you mention dumping files in a S3 bucket, but that doesn't require much more work than whipping out a nginx instance and dropping said files in a folder. Also, some people already run their own servers or deploy their services in some cloud procider. The work required to put together a blog is minimal.
- Linux-Fan 1y agoOne key benefit of putting up an own server is that there are no limitations on file types and much fewer restrictions on what kind of content you can create. For serving static files, I can (and have) lived a long time with one of the "free hoster" sites -- from times before Github Pages or S3 were a thing I guess, today I'd go for Github Pages. A key advantage of moving to an own server was that I can enable the odd feature or technology any time. E.g. most recently I wanted to have some "private" subspace with fancy authentication and it was easy to add with proper access to the server config.
- mrroryflint 1y agoI have a very simple setup using 11ty (https://rory.codes https://rory.codes) - but nowhere near as simple as this. Very impressive!
- deleted 1y ago[deleted]
- ds-rants 1y agoI 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
- thenthenthen 1y agoAuto-index with header.html and some js for me
- sandebert 1y agoNice solution, and congrats on winning HN for the moment. And thanks for 46elks. (Happy customer here.)
- jlundberg 1y agoThat was unexpected! My friend Calle wrote this article and he has made some really cool projects with 46elks (and demos with voice recognition). Ping me on my work email and I’ll send you some fun links! :)
- Igor_Wiwi 1y agoyour blog has 1 big problem - no SEO optimization, meaning that after spike of visitors from HN today, it will disappear in Google void after couple of days, meaning no visitors in the future, no mentions from ChatGPT, etc. It's most common problem for all self-hosted blog engines, though idea I like that main idea of minimalist blogs (I am using Bear blog by myself).
- cenamus 1y agoHow much does that actually matter? Most blogs I read I found via HN or through other blogs, I'd seldomly go googling for one, except when maybe lost the link, etc.
- Igor_Wiwi 1y agoIf you don't want others to discover it later, then it doesn't matter
- cosmicgadget 1y agoThis is tongue in cheek yes? I thought you were actually advocating for SEOization until the GPT mention. I think even SEO is on the outs in favor of established domain authority, so the best tactic is to blog expecting obscurity.
- wood_spirit 1y agoI 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?
- prmoustache 1y agoThere are still some wysiwyg html editors available. On the top of my head I can think of the editor included in the Seamonkey suite. Also, etherpad can export to html.
- strzibny 1y agoVery 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.
- AndrewStephens 1y agoI 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 https://github.com/andrewstephens75/gensite
- ostwilkens 1y ago>The most important thing in blogging is to get something simple that will not get the way of you actually writing. Yes! I find the easiest way for me is to just open a new tab in my code editor and typing. Exif is a real gotcha. I'm planning to compress images anyway, so this could be done in the same step.
- AndrewStephens 1y ago> Exif Yeah, I thought I was being careful and manually stripping it from photos until a nice reader emailed me to gently let me know i had missed a few.
- abhisek 1y agoI 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 :)
- sirodoht 1y agoInspiring. I've built a blogging platform with similar vision which I could call "Minimum Viable Blogging Platform" https://mataroa.blog/ https://mataroa.blog/
- qudat 1y agoI love matoaroa.blog! When I was experimenting with SSH apps I decided to create a blog platform inspired by it: https://prose.sh https://prose.sh Thanks for the inspiration!
- ksec 1y agoI remember I read it on HN a few years ago and then I completely forgotten about it. I am moving (some of) my blog over now.
- yaKashif 1y agoYeah but too technical for 99% of the humanity. For all of them I built Lykhari.com
- captn3m0 1y agoSomething 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.
- Lord_Zero 1y agoGemini has its own format?
- tweetle_beetle 1y ago> It has some superficial resemblances to Markdown, which will make it easy to learn if you know MD, but it's quite different in other ways. https://geminiprotocol.net/docs/gemtext.gmi https://geminiprotocol.net/docs/gemtext.gmi
- quectophoton 1y ago> Something I’d like to see in browsers is native support for text/markdown [...] Sadly, I can see why it's unlikely that we'd get this. First, browsers would need to agree on which flavor of Markdown, what extensions, and so on. After all, Markdown is almost like the CSV of text formats, with everyone doing their own thing ("almost" because you can still assume that some basic things work as you'd expect). Only with that, I can already see the backlash no matter what they choose to do here. Too minimal, and get complains about not being too useful. Choose some extensions, get complains about being bloated. Make any attempt to have a thoughtful discussion about pros and cons (short and long term), get shut down with "don't let perfect be the enemy of good". If we can get past that and finally agree on one specific set of features, there's still the question of whether it's actually worth it or not. The difference between Markdown and PDF is that reading PDFs directly in the browser is a common enough activity, but reading Markdown directly is only going to benefit the tiny audience of the small percentage of software devs that exist in the world, and maybe 5 weird people. Everyone else with a blog would just use the WYSIWYG from their CMS. That's why I wouldn't be surprised if I don't see native Markdown rendering during my lifetime.
- floathub 1y agoIf 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 https://stuff.sigvaldason.com/how.html
- VoodooJuJu 1y ago[dead]
- rambambram 1y agoIt's 2025, the web has come full circle again, so where's the RSS feed?
- 38 1y ago> Tired, so ask O1 for a render.py script Groan
- emadda 1y agoSomething 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.
- keepamovin 1y agoI 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/ https://o0101.github.io/mvb/ I think I like simple. [0]: https://studio.dosaygo.com https://studio.dosaygo.com
- hxii 1y agoI 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.
- indigodaddy 1y agoHi sounds interesting, do you have this tool online anywhere?
- hxii 1y agoYeah, the source is on SourceHut: https://git.sr.ht/~hxii/hajime https://git.sr.ht/~hxii/hajime
- _fat_santa 1y agoI 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.
- achierius 1y agoDo you use someone else's theme or did you write your own?
- _fat_santa 1y agoWrote my own. TBH never even thought about custom themes though your comment makes me a bit curious.
- shepherdjerred 1y agoAstro is absolutely amazing. I don't know how it's more popular.
- hcarvalhoalves 1y agoHere’s one using Emacs’ Org mode built-in HTML publishing capabilities: https://github.com/hcarvalhoalves/org-mode-site-template https://github.com/hcarvalhoalves/org-mode-site-template
- froggertoaster 1y agoI feel like the first MVB was Maddox - too bad he fell way off.
- jprokay13 1y agoI 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?
- shakna 1y agolistFiles is not sorted. It provides the files in the order that the OS provides them. That it's ordered on your machine, probably has to do with when the underlying nodes were created. But that's not going to much work in production. dirInfo, err := dir.Readdir(0) if err != nil { return nil, err } names := make([]string, len(dirInfo)) for i, fileInfo := range dirInfo { names[i] = fileInfo.Name() }
- jprokay13 1y agoYeah that was what I was afraid of. I thought I saw in the caddy code that they did a sort on file name, but I must have misread it. Thanks for responding! Edit: after looking more closely at sprig, the solve was sortAlpha
- indigodaddy 1y agoI'd love more info about your process!
- Tallain 1y agoI'm reminded of the chart from this blog post: https://molodtsov.me/2023/02/how-to-start-your-blog-in-2023/ 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.
- atoav 1y agoI agree, but I think wordpress is overkill in 95% of cases. Why? Because it takes too much maintenance (keep it up to date ornbecome part of a botnet) for features you probably don't need. A static site generator is totally fine for most blogs and if it needs maintenance it is at a time of your own choice.
- pclmulqdq 1y agoI ran into the maintenance load of an SSG for my blog, and only just now switched themes over this rather than fixing the old theme (which had several customizations). In that theme swap, I think I lost all the productivity I gained from using the SSG over raw HTML.
- tlavoie 1y agoOne other productivity gain though is that if you end up switching SSG engines entirely, you still have your source files. Those could easily work with the next one, or at least leverage trying others out. If everything is baked into rendered HTML, it will be much more work.
- Tallain 1y agoI disagree, it's not overkill unless you make it overkill. My update process is: - Click a button to back up - Click a button to update everything - Open my blog to make sure it still looks normal Definitely not onerous. To be fair I don't use many plugins, and my theme is very simple. I don't think a plain old blog doesn't need many plugins. Sometimes I take a break from blogging. I don't want to have to read documentation on how my SSG works (either my own docs or docs on some website) to remember the script to generate the updates, or worry about deploying changes, or fiddling with updates that break my scripts, or anything like that. I do stuff like this for my day job. I like my blogging experience to be focused on a single thing: writing.
- Keyb0ardWarri0r 1y agoTake a look at https://markdown.ninja 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.
- capitanazo77 1y agoThe 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.
- accrual 1y agoEnjoyable 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.
- lelanthran 1y agoAm I the only one who uses bash and pandoc? I really should switch to a "real" language for SSG
- to-too-two 1y agoMakes me think of https://bearblog.dev/ https://bearblog.dev/. I've been thinking about using Obsidian as a static site generator.
- gavmor 1y agoBesides Obsidian Publish, one may consider the Digital Garden extension or https://benchristel.github.io/mdsite/ https://benchristel.github.io/mdsite/
- sareiodata 1y agoMade 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 https://github.com/sareiodata/hx-weaver That being said, I don't find myself actually writing a blog :)
- wvh 1y agoThis 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.
- _dain_ 1y agohtml_content = html_content.replace('Minimum viable blog', title) Did this originally say html_content = html_content.replace('{{ title }}', title) And then you ran it? Sanitize your strings!
- geor9e 1y agoI 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.
- hackerbeat 1y agoLove this, and how more and more folks are going minimal, like https://wordgag.com/ https://wordgag.com/.
- bartread 1y agoI'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.
- rodolphoarruda 1y agoThank you for putting the effort to keep the open web alive, especially by sharing this simple though effective tool. I use Wordpress and like it. I learned to enjoy using it when I stopped reading "pros & cons" bulleted lists about it.
- naveed125 1y agoThis is the kind of post that makes me visit Hacker News time to time.
- appleaday1 1y agoI want to blog but my DOMAIN name got taken and it costs 16k now wtf.
- karaterobot 1y agoMy 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.
- hu3 1y agoCould you share the URL please? I'd like to try the same thing. Is there a list of posts at the top or just H1s for each post?
- notenough 1y ago[dead]
- karaterobot 1y agoSorry, there's no way to do that without doxxing myself. It's pretty simple to implement though, and I'd be happy to answer any questions. I'm sure you can do the same thing with any CMS that lets you customize templates, or you could just roll your own (probably even by modifying the code in this article)
- ulrischa 1y agoIt can be more simple: Just use php for SSR
- pvtmert 1y agoI 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.
- nicbou 1y agoI 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.
- KronisLV 1y agoI did something a bit unconventional for my own blog: https://blog.kronis.dev/blog/my-blog-doesnt-need-quality-it-needs-to-look-like-its-from-the-90s 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/ 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).
- Rush2112 1y agoNot 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).
- AlexK90 1y agoThanks for Posting this. I have a question about this line of code file_path = os.path.join(posts_dir, post_directory, 'eng.md' Is eng.md an extra addition here? By looping through the directory, would the post names be found in the loop? By deleting this I was able to get the code to run and think I'll start using this as a blog template!