24 ms·
“Make” as a static site generator (2022)
- liveoneggs 3y agohey I wrote almost this exact blog post 15(ish?) years ago except mine used m4 as an "exotic dependency" ;)
- dwheeler 3y agoI've been doing this for decades. It works very well, it can handle complex cases, and it ports trivially between different hosting systems.
- danielvaughn 3y agoIt's a neat idea, though I have to point out that if you're already pushing to Github, you could just push the source and Github will publish your markdown as a hosted page: https://pages.github.com/ https://pages.github.com/
- account42 3y agoBut that makes you dependent on GitHub for more than just dumb hosting - better make sure you can run the site generation locally from the start.
- danielvaughn 3y agoFair point, the makefile is nice and portable.
- donatj 3y agoJust a couple days ago I set up a site with GitHub Pages and used a very similar setup. I learned about envsubst in the process which let me fill in values here and there. This is the rough way the homepage works. public/index.html: index.md template/header.html template/footer.html cat template/header.html > public/index.html DATE=$(shell date +%Y-%m-%d) envsubst < index.md | npx marked --gif >> public/index.html cat template/footer.html >> public/index.html GitHub’s newer version of pages that lets you deploy via GitHub Actions rather than being forced into using Jekyll is just so amazing. I have converted a bunch of static sites to using it as hosting.
- hnarayanan 3y agoJust as straightforward as this is another method that has worked for me for years (decades?). Server Side Includes. Have a separate files for the header, content and footer and only edit the content files.
- donatj 3y agoI was there 3,000 years ago… I used SSI’s in the late 90s/early 2000’s before replacing all that with PHP which was a huge step up at the time. I am more than familiar. The convenience here is largely in being able to use GitHub Pages to host the page while being able to do almost anything you want for a build process. It’s really neat.
- mkoryak 3y ago> There are no exotic dependencies, nothing to maintain and you can quickly adapt it to your needs. Yeah kinda, except that most people making static sites aren't the people who know Make.
- jetrink 3y agoI regularly see people on HN who have a static site for their personal site or blog. There's a niche for this kind of thing.
- rcarmo 3y agoUp until a certain point, yes. Then you start wanting back links, navigation, etc., and doing that with make alone doesn’t quite work, especially if you have a deep tree of files - single folder sites don’t typically have a lot of content in them. (My site is generated by a Python commit webhook that indexes new files, diffs an Azure storage container and uploads updated files only).
- envsubst 3y agoit's a crazy concept, but people are willing to learn to use a new tool for their hobby project.
- bradley_taunt 3y agoI was instantly inspired by Karl's work on his "blog.sh" shell script[0] that he mentions in this article. I took it and tweaked it to create my own minimalist SSG called "barf"[1]. That wouldn't exist if Karl didn't share his wonderful work publicly! [0]: https://github.com/karlb/karl.berlin/blob/master/blog.sh https://github.com/karlb/karl.berlin/blob/master/blog.sh [1]: https://barf.bt.ht https://barf.bt.ht
- adityaathalye 3y agoAh, a fellow person of culture. Mine is called shite [1], which makes my site [2]. The name alludes to the software quality :) What I like most about it is I haven't had to upgrade anything, and don't expect to forever. And a close second; it "hot reloads" without javascript. [1] https://github.com/adityaathalye/shite https://github.com/adityaathalye/shite [2] https://evalapply.org https://evalapply.org
- gnyman 3y agoHaha I sense a trend for these home grown static site generators :-) Yours are much more advanced, but a few years back I made a minimal PHP static page generator and named it... PHP keep It Stupid Simple, or in short P.I.S.S. https://blog.nyman.re/2020/10/11/introducing-piss-a.html https://blog.nyman.re/2020/10/11/introducing-piss-a.html
- adityaathalye 3y agoWell, if you see my templating code, I've basically written PHP, but in Bash :D
- w4rh4wk5 3y agoI did some similar experiments some time ago. It includes Makefiles, Rakefiles, SASS, Ruby erb, Jade, m4, and a few other tools. https://github.com/W4RH4WK/static-page-generators https://github.com/W4RH4WK/static-page-generators Over all, I quite like Ruby since it comes with rake and erb.
- maccard 3y agoRake is probably my favourite of them all, but it adds a dependency on ruby. We've settled with using make and accepting the limitations
- m000 3y agoAdding a pinch of m4 [1] can give you a bit more of flexibility while sticking with the same barebones approach. I used to maintain a small website built like that some 20 years back. But I can't see the model working today, personal websites excluded. The problem is that the approach essentially enforces Web 1.0 roles: You either need every contributing user to be html-proficient, or someone willing to assume the drudgery of being the "webmaster". [1] https://en.wikipedia.org/wiki/M4_(computer_language) https://en.wikipedia.org/wiki/M4_(computer_language)
- q3k 3y ago> a pinch of m4 nononononononononono for the love of everything please no m4 isn't even a good esolang!
- Tomte 3y agoYou need to combine it with Perl and a collection of other special passes, of course: https://web.archive.org/web/20180309134414/http://thewml.org/about/ https://web.archive.org/web/20180309134414/http://thewml.org...
- PaulHoule 3y agoAt the dawn of the age of PHP, I created a user management system (registration, verification, admin interface, …) that was based on well-established ideas (how login worked at Yahoo, Amazon, and every other process major site) but got no traction at all as a open source project. In any language that wasn’t PHP it would be necessary to write an “authentication module” which as about 50lines of cookie handling code. Multiple times I managed to out several existing apps together and make an advanced web site. About 10 years ago the idea suddenly got traction once it was legitimized by the SAAS fad, I would tell people “don’t you know they’re going to end the free tier or go out of business or both?” and sure enough they did. Anyhow, I bring it up because the system used M4 to interpolate variables into PHP, other languages, shell scripts, SQL scripts, etc.
- gabereiser 3y ago
- PaulHoule 3y agoFunny I am setting up a blog with Pelican which uses “make” for executive control.
- jrm4 3y agoInteresting. So I'm a weird sort, I imagine, in that I'm the type that has been using Linux and shell scripts for 20+ years, but never actually done any big-time coding, and thus I really don't know "make." Point being, I do something very similar to this; except I first simply write/create my website in Zim-wiki, but then I have a bunch of little tasks to "clean up," i.e. fix/modify some links and then use the Canvas API to update my main course page (which, because I hate Canvas that much, simply links out to my own site). Why make instead of shell scripts?
- aquova 3y agoMakefiles honestly are just glorified shell scripts. Some of the syntax is a little odd, but you trade that for a more standarized format and the ability to add different build options without mucking around with argparse yourself.
- thaumasiotes 3y ago> Makefiles honestly are just glorified shell scripts. Not really. The concept of a script is "do these things in this order". The concept of a makefile is "here are a bunch of things that might or might not need to be done, you figure it out".
- dahart 3y agoAs someone who also writes a lot of shell scripts and has for decades, I’d guess that if you learn just a little make, you’ll find lots of non-coding uses for it and wish you’d learned it earlier. ;) It’s just another great unix tool that is sometimes very handy to augment shell scripts when you need it, not unlike find+grep+sort, cut+join, awk+sed, gnu parallel, etc.. I think make is under-appreciated for its uses outside of code compilation. I use it anytime I’m making gnuplots, or doing image processing on the command line, for example. Whenever you have a batch of files to process, and the batch might need to re-run, and it transforms into other files or a single big file, then make may be the right tool Make has at its core one thing that would be pretty tedious to do in shell scripts: update the target (output) file only if it’s older than the prerequisite (dependency/input) file(s). This applies transitively to files that depend on other files that might change during the run of make, which is the part that really separates make from a shell script. The thing you do when the target needs updating is run a little snippet of shell script, so that part you already know. After learning how a rule works, you can combine it with ‘pattern rules’ to abstract a rule over all files that share a common prefix or common extension. Suddenly you have a loop but without any loop syntax, and can process a thousand files on demand with 2 lines of make - and without modification you can change a single input file, have it process only a single output file, and not waste your time re-running the 999 other files. Also pro-tip: make will run in parallel if you use -j, and it will do it without breaking any dependency chains. If you have a process that turns text files into sql files and then turns this sql files into html files (possibly nonsensical example), make running in parallel will not blindly update html files first, it will run parallel jobs in the correct dependency order. You can use make to build something like gnu parallel, but is able to resume a batch job that was interrupted in the middle!
- p4bl0 3y agoMy personal website (https://pablo.rauzy.name/ https://pablo.rauzy.name/) used to be generated using a simple Makefile. Then I added features like news and an RSS feed, a way to automatically list my research publications and course materials, a list of books filterable with tags, etc. So now it still is a Makefile but the Makefile itself is a bit simpler than it used to be, but it calls a few Bash scripts that in particular make use of the awesome xml2 and 2xml utilities to be able to manipulate HTML in a line-oriented manner using the core utils (grep and sed mostly). On top of that I have a few git hooks that call make automatically when needed, in particular on the remote server where the website is hosted so that the public version is rebuilt when I push updates the repository there. It's been working like a charm for years! My git history goes back to 2009. EDIT: I just had a look at the first commits… beccad7 (FIRST_VERSION) Initial commit d1cc6d7 adding link to Google Reader shared items 6ccfd0c fix typo d337959 adding link to Identi.ca account … 15 years have passed indeed.
- e12e 3y ago> xml2 and 2xml utilities Seems somewhat abandoned? https://github.com/cryptorick/xml2 https://github.com/cryptorick/xml2 https://manpages.debian.org/unstable/xml2/2xml.1.en.html https://manpages.debian.org/unstable/xml2/2xml.1.en.html
- enriquto 3y agos/abandoned/crystalized/g
- tannhaeuser 3y agoIf converting markup to/from line format is your thing to put awk, perl, and other line-oriented tools to use, there's also the ESIS format understood by traditional SGML tools and used by SGML formal test suites even.
- naniwaduni 3y agoOne of the nifty parts about having a static site generated offline from trusted inputs is that it doesn't matter whether the generator components are "abandoned" or complete.
- TekMol 3y agoWhat does make bring to the table here compared to a shellscript which loops over the files in the source dir?
- oftenwrong 3y agoMake provides incremental execution of the build graph. It is aware of the dependency graph, and the state of inputs and outputs. It will (ideally) only execute the minimal build rules necessary. A shell script that checks file mtimes to determine what has already been built, and therefore what can be skipped, is close in spirit. Make variants like GNU Make have additional functionality, like automatic concurrent execution of parts of the build graph.
- tyingq 3y agoThe syntax takes a little trial and error and usually finding real-world examples, but I like "make". I had one project that involved downloading a jdk, using it to build a project specific jre, patching some class files with local java sources, bundling it, etc. Without being a make expert, it took me a couple of hours of reading, finding examples, etc...but now I have the dependency stuff working perfectly. Where it now only re-downloads or re-builds things if something upstream from it changed, handles errors well and points out what broke, etc. All that to say, for some things, it's worth looking into for it's built-in dependency chain stuff. When you need to run arbitrary outside scripts/tools, it sometimes does things that other build tools can't (gradle in my case, couldn't easily do this, or at least I couldn't figure out how).
- dijit 3y agoMake is excellent for tasks where you have a file that needs to exist and steps that reliably cause it to exist. Excellent too for building a tree of things that depend on prior stages; in your example needing java to run a java applet which generates a file. the syntax takes some getting used to, but in those cases there is little better. But I do find people using it as a glorified task runner and it works but it’s quite possibly the least ergonomic tool available. - especially for things like making docker images, which I see extremely often
- maccard 3y agoThere's not really any better option though. Once you start setting environment variables, customising tagging, adding file prerequisites, handling building from a different directory (monorepo requiring access to shared resources), you need some sort of wrapper, with options, argparsinc and some rudimentary dependency checking. Make is a super low barrier to entry solution that with a small workaround (phony targets) gives you all of the above.
- gigatexal 3y agoI do this too! But my make-fu isn’t as good. I’ll use what I learned from here to make it better.
- tiehuis 3y agoI as well moved to this sort of approach a few years ago [1]. Definitely like the simple approach and it just stays out of the way. [1] https://tiehu.is/blog/blog1 https://tiehu.is/blog/blog1
- adityaathalye 3y agoI love the code [1]. Mine [2] is a bit over engineered because I wanted hot-reloading (without JS), and it was a delightful yak shave. But the basic idea is the same --- heredocs for templating, using a plaintext -> html compiler (pandoc in my case), an intermediate CSV for index generation. Also some handy sed-fu [3] to lift out front matter. Classic :) Very nice! [1] https://github.com/karlb/karl.berlin/blob/master/blog.sh https://github.com/karlb/karl.berlin/blob/master/blog.sh [2] https://github.com/adityaathalye/shite https://github.com/adityaathalye/shite [3] I'm doing this: https://github.com/adityaathalye/shite/blob/master/bin/templating.sh#L34 https://github.com/adityaathalye/shite/blob/master/bin/templ... case ${file_type} in org ) # Multiline processing of org-style header/preamble syntax, boxed # between begin/end markers we have defined. We use org-mode's own # comment line syntax to write the begin/end markers. # cf. https://orgmode.org/guide/Comment-Lines.html sed -n -E \ -e '/^\#\s+shite_meta/I,/^\#\s+shite_meta/I{/\#\s+shite_meta.*/Id; s/^\#\+(\w+)\:\s+(.*)/\L\1\E,\2/Ip}' ;; md ) # Multiline processing of Jekyll-style YAML front matter, boxed # between `---` separators. sed -n -E \ -e '/^\-{3,}/,/^\-{3,}/{/^\-{3,}.*/d; s/^(\w+)\:\s+(.*)/\L\1\E,\2/Ip}' ;; html ) # Use HTML meta tags and parse them, according to this convention: # <meta name="KEY" content="VALUE"> # cf. https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML sed -n -E \ -e 's;^\s?<meta\s+name="?(\w+)"?\s+content="(.*)">;\L\1\E,\2;Ip' ;; esac
- rcarmo 3y agoI found his GEMINI approach quite funny - it strips out most of the formatting with a regexp. There is a bit of a limitation, though - I organize posts by namespace and with the date in the URL, and make can’t really handle that directly.
- adityaathalye 3y agoHuh, I previously skim-read the code and didn't notice the GEMINI regex detail. I wonder why they're doing that. Re: namespace organisation. I thought about that a lot, and decided to adopt namespace-only convention for symmetry between text file layout, html file layout, and url scheme. I've treated Date/time as metadata, which I can use to organise index pages. If I get to years worth of posts, then I'll group them by year/month or something reasonable. Likewise tags. I debated tags _and_ categories. But I decided on "everything is a post with tags, and categories will emerge based on topical coverage + post format".
- Kiuhrly 3y agoWow, this is almost exactly what I was planning to do for my site. For another small project, I wrote a tiny shell script as a makeshift "bundler" (just embeds the CSS and JS inside the HTML) with the goal of also being able to serve the unbuilt files locally: sed \ -e '/[/][/]script/r index.js' -e '/[/][/]script/d' \ -e '/ <script defer src="[.][/]index[.]js"><[/]script>/d' \ -e '/[/][*]style[*][/]/r styles.css' -e '/[/][*]style[*][/]/d' \ -e '/ <link rel="stylesheet" href="styles[.]css">/d' \ index.html The HTML contains something like this: <link rel="stylesheet" href="styles.css"> <style> /*style*/ </style> and the script just deletes the <link> tag and replaces the /style/ comment with the contents of styles.css. Definitely not my finest work but it worked well enough.
- denvaar 3y agoIt’s fun to make your own SSG tool, and this is a great example of keeping it simple. It’s also interesting to read so many comments of people doing similar things. For my own site, I find that I want an SSG tool that is simple, intuitive, and stays out of the way. With these goals in mind, I have been able to slowly improve my tool over and over. It’s been awesome to be able to do more using less.
- nonethewiser 3y agoIt also makes you realize what they actually are.
- adityaathalye 3y agoAbsolutely! What mental model did you arrive at? Mine is "an SSG is just a source to HTML compiler and compositor, plus file organiser". I reviewed a few tools (jekyll, emacs.love/weblorg, hugo), and ended up making mine in big part because I went down the rabbit hole of "well, why is this part here? why is it like this? why can't we do this other thing? wow this bit is cool, how do I make it myself?".
- bundie 3y agoHmm, is this SSG tool public? like, on GitHub or something?
- superlopuh 3y agoIs there a GitHub workflow available for this or similar tool?
- adriangrigore 3y agoShameless plug for my shell based static site generator https://mkws.sh https://mkws.sh. You can replace the bin/mkws script with a Plan9 mk file anytime.
- prabal97 3y agoVery cool! How long did it take you to make something like this?
- adriangrigore 3y agoWell, I implemented the main idea in a day or two. That being the pp preprocessor. The rest, I really can't remember, it was mainly grunt work to see what are the minimum things a web site is required to have. I still have some stuff to remove.
- superkuh 3y agoOr maybe don't make a site generator and just make a website using HTML files? You'll spend a lot less time painting the shed and a lot more time actually putting your ideas/content on the website. If you want templating then use server side includes. It's much less attack surface than say, PHP or some complex CMS, but you can still just make a footer.html and stick in at the bottom of every other .html page easily and avoid the one problem with file based sites: updating shared bits.
- ttfkam 3y agoIf only there were a way to make consistent structure in an online document (such as hypertext) and separate the styling into distinct files. Even better, what if we could make separate styling for mobile, desktop, and printing, all with the same content? If only it were possible using existing standard web technology. Sadly it was never designed with such goals in mind. /s
- mosselman 3y agoThis amazing course by Avdi Grimm on make and rake for the same purpose has completely changed my understanding of rake and I recommend anyone checking it out: https://graceful.dev/courses/acapa/ https://graceful.dev/courses/acapa/
- defanor 3y agoI used a shell script for that, but vaguely thought of changing to a Makefile for a while, and finally did now, thanks to the article reminding of that; it is more appropriate. Though the shell script still invokes make, and then rsync, since rsync seems less appropriate for a Makefile. But now it synchronizes fewer files. As a side note, I am quite happy with XSLT templates to produce the pages (instead of attaching a static header, as in the article), as well as to generate indexes and an Atom feed.
- jez 3y agoA problem with this approach is that deleting a file from source/ does not delete it from build/. In my own projects, simply rebuilding the whole site is fast enough, so I opt to remove the whole build folder before a rebuild: https://github.com/jez/jez.github.io/blob/source/Makefile#L10 https://github.com/jez/jez.github.io/blob/source/Makefile#L1... This defeats a big part of why you’d want a build system in the first place (incremental builds), but at least if you know the page you want to regenerate you can still `make` that file directly. If there’s a common workaround for this pattern in makefiles I’d love to learn it.
- linkdd 3y agoSomething like this should do the trick: rm/%.html: @rm -f source/%.html build/%.html Run with: $ make rm/page.html
- rustybolt 3y ago> If there’s a common workaround for this pattern in makefiles I’d love to learn it. "make clean"?
- dmd 3y agoHow does that solve the problem? That forces a total rebuild, which is exactly what he said he didn't want.
- rustybolt 3y agoYes, I didn't read properly. I guess you could do some magic to delete "unexpected" files, but are there tools which do solve this problem?
- IshKebab 3y agoThe cleanest way to do it is essentially "make install". You do all the heavy build steps into a build directory, and then the final stage is to delete the "output" directory and copy all the files you need there. Incremental builds should still be pretty fast since the only repeated action is copying files (and you could link them if you want instead).
- ivanstojic 3y agoTossing mine in the pot too: make + pandoc: https://ordecon.com/2020/07/pandoc-as-a-site-generator/index.html https://ordecon.com/2020/07/pandoc-as-a-site-generator/index...
- askiiart 3y agoI did something similar for mine, I do markdown-to-html using pandoc, then replace the language labels using find (so that prism.js works). I've got it all running via a little Python script (I would've done bash but I'm terrible at it) to generate all the the files easily, rather than going through one-by-one: https://git.askiiart.net/askiiart/askiiart-net/src/branch/main/md2html.py https://git.askiiart.net/askiiart/askiiart-net/src/branch/ma... I might move to something make-based like this, looks interesting.
- mjburgess 3y agojust use (gnu) parallel
- askiiart 3y agoUpdate: I made it into a bash script, and now it only runs on changed or new files. Far more efficient, both because it's just bash, and because it only runs on what's needed. https://github.com/askiiart/askiiart.github.io/blob/main/md2html.sh https://github.com/askiiart/askiiart.github.io/blob/main/md2... or https://git.askiiart.net/askiiart/askiiart-net/src/branch/main/md2html.sh https://git.askiiart.net/askiiart/askiiart-net/src/branch/ma...
- marcodiego 3y agoA friend of mine described using make to generate scientific papers. He explained that if he changed a single test file, the entire paper could be regenerated including running tests and generating graphs the changed test with a single command.
- karl42 3y agoAuthor here. Nice to see people appreciate simplicity. If you have any questions, feel free to ask!
- sureglymop 3y agoI use make and pandoc as my static site generator! Generates a good website from my markdown notes.
- girishso 3y agoMost Static Site Generators generate blog from markdown, which is not feasible for projects like company websites etc. For such projects I like Middleman (https://middlemanapp.com https://middlemanapp.com) which provides layouts/partials and things like haml templates.
- petepete 3y agoNanoc is great in cases like this too. It does less out of the box than Middleman but is easier to extend. https://nanoc.app/ https://nanoc.app/
- kazinator 3y agoThe benefit of make is that large programs that are built by slow compilers can be incrementally rebuilt much faster in the face of small changes. Something that would take 40 minutes to do a full rebuild can build in three seconds or whatever. If your static site can be generated from scratch in under a second by just catting a few hundred HTML files with a common header, there is no benefit to using make over a script. You only risk performing an incomplete build due to a bug in the dependencies.
- toast0 3y agoIf the file dependencies don't actually matter, you can mark the build targets as .phony And still get to have things like make build vs make push, etc.
- kazinator 3y agoIf dependencies don't matter, make isn't the right tool. Your scripted actions can be ./build and ./push. If you feel you need to type the name of a tool before your command, you can do that: sh build, sh push.
- mixmastamyk 3y agoFilling your project namespace with a half dozen 2 -3 line scripts is not a big win. One script with a switch case might be better.
- rambambram 3y agoI like it that (almost) every dev blog I come across on HN has an RSS feed. For every interesting article that I read here I follow the feed. Whether you have a Wordpress site, a Bear Blog, a Micro blog, a blog on Havenweb, or a feed on your self-built site, I add them to the 'Really Social Sites' module of Hey Homepage. Ultimately, I would like to publish this list of blogs, just like Kagi now does with their Small Web initiative. But I guess curating is key to adding quality. And when I think about curating, starting some kind of online magazine seems only natural.
- MuffinFlavored 3y agoI'm trying to understand (as a dev) if there is something "wrong with me" for not wanting to have my own blog. Where do people get the "entitlement" (I mean that in the best way possible) to share with other people/assume other people care what they are working on? It feels like a competition sometimes. "I need to work on something as cool as possible so I'll get some likes/impressions on my blog". Collaboration is obviously cool and only works with making it all public, I just don't know where "I'm doing this because I think it's cool" and "I'm going to put effort in to share it with others to get reactions"
- eep_social 3y agoI think the bloggers are a classic vocal minority, nothing to feel weird about.
- rambambram 3y ago> a classic vocal minority Not saying you're right or wrong, but I myself don't want to look at it like it's a competition of the loudest people. I've read so many blogs through HN over the last years, and every one of 'em had something interesting to say while also portraying something personal from the author. Whether that's a nice layout, nice color scheme, or even some nice jokes in their bio text. To me, it can not get any more human than this. Pure individuals connecting on a world wide web. By links, by email, by RSS feeds. All without big tech.
- lacrosse_tannin 3y agoI'm gonna use bazel
- jameshart 3y ago"No exotic dependencies and nothing to maintain" Oh really?: sed -E 's|(href="$(subst source,,$<))|class="current" \1|' header.html | cat - $< > $@ a sed script that modifies HTML fragments isn't nothing. And this just does one thing that you might want to customize in the header for each page. It doesn't do things like handle pages having different <title> tags. Every feature like this that you come up with becomes another thing to maintain, and another thing that can catch you out later. When you come back to fix this later, will you even remember what it's supposed to do? From a web publishing point of view, make and sed are exotic dependencies. There's not going to be a bunch of helpful pointers online to help you debug issues with using them for this purpose. When you google how to fix your sed regex to match specific HTML attributes and not match others, you're going to find stack overflow posts about Zalgo, not quick answers.
- deleted 3y ago[deleted]
- bachmeier 3y agoAs long as we're sharing our own projects... One of the things I did during the pandemic lockdown was work on the simplest possible blog in a single html file. Something that requires essentially no technical knowledge beyond typing text into a file. I recently dusted it off and yesterday I posted the most recent iteration. Demo: https://bachmeil.github.io/minblog/blog.html https://bachmeil.github.io/minblog/blog.html Source: https://github.com/bachmeil/minblog/blob/main/blog.html https://github.com/bachmeil/minblog/blob/main/blog.html There's very little styling, but that's not the objective (and it'd be trivial to add).
- deleted 3y ago[deleted]
- smarnach 3y agoIsn't this "cat" as a static site generator target than "make"? Make is just the build system invoking the static site generator.
- jasonm23 3y agoBash/Zsh as a static site generator would be less steps. Or Github actions workflow as static site generator would only include one shell wrapper, instead of 2.
- mstef 3y agoutterson https://github.com/stef/utterson/tree/master https://github.com/stef/utterson/tree/master is generating blogs using make for a 14 years now...