
Building a fast, secured and free static site in less than three hours - leoht
https://fillmem.com/post/self-hosted-fast-secured-and-free-static-site/
======
douglasfshearer
Neocities [0] does all of this!

\- It's free (though you can become a supporter and get some extra benefits)
[1]

\- It's fast, since it uses it's own CDN. [2]

\- It's secure, all pages support SSL, even with custom domains. [3]

\- It has a command line tool [4] that can be wrapped to automate upload of
pages, or used in a Git hook.

\- It has a plethora of learning resources [5].

[0] [https://neocities.org](https://neocities.org)

[1] [https://neocities.org/supporter](https://neocities.org/supporter)

[2]
[https://www.youtube.com/watch?v=-i6wvix6buI](https://www.youtube.com/watch?v=-i6wvix6buI)

[3] [https://blog.neocities.org/default-
ssl.html](https://blog.neocities.org/default-ssl.html)

[4] [https://neocities.org/cli](https://neocities.org/cli)

[5] [https://neocities.org/tutorials](https://neocities.org/tutorials)

~~~
michaeloblak
If you don't like to play with CLI and want to host files on Amazon's S3, go
with the Sheetsu Pages [1] (I'm co-founder). \- It's uses Amazon's S3 CDN,
actually your site is deployed to their all edge locations \- supports https
\- you can add your custom domain \- you upload files to Google Drive, click
sync button and it's done

[1] [https://pages.sheetsu.com](https://pages.sheetsu.com)

~~~
homero
Bad ssl

~~~
michaeloblak
Why?

~~~
tinalumfoil
> pages.sheetsu.com uses an invalid security certificate. The certificate is
> only valid for the following names: sheetsu.com, www.sheetsu.com Error code:
> SSL_ERROR_BAD_CERT_DOMAIN

~~~
michaeloblak
All the pages hosted with Sheetsu Pages are hosted under sheetsu.io domain.
Which has wildcard SSL.

~~~
michaeloblak
Replying to the child comment from whorleater - that's a good catch! Our
mistake with the domain redirects and certs. Will fix it ASAP. Thanks for
spotting this bug.

------
alias_neo
I host mine on Digital Ocean. I commit the code to github, dev branch is
deployed to stg.mydomain and master is deployed to mydomain.

In terms of deployment, I use Caddy which, with ~3 lines of config will auto-
TLS your site using Lets Encrypt, and handle renewing the certs for you each
month. Caddy also automatically pulls your changes, builds them with hugo and
deploys them with ~2 more lines of config.

It's the easiest solution (as a developer) I've come across where I just
commit to Github and my blog is updated, and Caddy deals with my cert
renewals.

~~~
pc86
Assuming your blog is technical, this would have been a good chance to get
some more traffic by at least mentioning the actual domain, linking to the
github repo, or having one or both of those in your profile.

Edit: Not sure why this has been met with a stream of downvotes. Is there
something wrong with saying "I use a different approach to publish this blog:
[link]," especially if it's technical and would be of interest to HN anyway? I
see many people do it constantly, even when it's not relevant to the article
or discussion at hand.

Edit 2: I don't generally care where a post is but this went from -2 to +6
pretty quickly. Weird?

~~~
option_greek
"Edit 2: I don't generally care where a post is but this went from -2 to +6
pretty quickly. Weird?"

Probably I can answer that :) I noticed that when one of my posts get down
voted even when having a neutral comment, it swings back to positive fast when
touching -1 or -2. I guess that the gray comment takes a while for HN'ers to
notice as down voted. And when they find that there is nothing wrong with it
or they actually like it, many people simultaneously click the upvote swinging
it back wildly to positive zone. It is HN's own version of 'universe making
right what it deems as correct' :D

~~~
bluetwo
I think we need to clarify what a down vote is... My assumption was it was to
flag something mean or off topic. Now People seem to use it to say "I disagree
with your opinion but am too lazy to express my own".

~~~
j_s
Ask HN: Why has the downvoting timelimit been reduced? |
[https://news.ycombinator.com/item?id=12330029](https://news.ycombinator.com/item?id=12330029)
(Aug 2016)

TL;DR: _I think it would be a big mistake to [...] outlaw downvoting for
disagreement_ \- dang (HN mod)

~~~
dhimes
Yeah pg agrees with that. In the early days downvoting for disagreement was
discouraged among the heavier users, but things change.

------
Lord_Zero
I wrote a similar blog post:
[https://tberra.com/aws/amazon/meta/2016/11/12/the-birth-
of-a...](https://tberra.com/aws/amazon/meta/2016/11/12/the-birth-of-a-blog/)

The main differences on mine are:

\- I use Jekyll, which is ranked #1 in the static site generator space.

\- Hosted on AWS S3.

\- CloudFront in front of S3.

\- Routing and aliases handled by Route53.

\- Deployed using a tool called s3_websites (change detection only uploading
generated files AND cloud front cache invalidation for only the changed
objects).

\- Coded in a Docker container via a cloud IDE called c9.io using the Ruby
template.

\- Generator and site files committed to a GIT repository hosted on AWS
CodeCommit.

~~~
AdmiralAsshat
I see both Jekyll and Hugo mentioned frequently in the "Using GitHub and X to
host your website" space. Do you have any practical our technical reasons for
preferring one over the other?

~~~
seanwilson
Having used both quite a lot, I much prefer Jekyll's template language as it's
easier to use and more readable. It's a lot easier to install plugins to
extend Jekyll as well. However, Hugo coming in a single binary makes it easy
to get working when you come back to a site you've not updated in a while (my
Jekyll toolchain was a combination of Ruby + Node + Gulp that felt brittle but
could be improved with some work), it's suppose to be significantly faster
(I've seen people saying it takes Hugo seconds to generate thousands of posts
compared to minutes with Jekyll) and I've had less issues with Hugo's watch
feature (Jekyll doesn't refresh when you change files sometimes for me). I
don't use a lot of plugins or complex templates so the speed and simplicity of
Hugo is a big factor for me.

~~~
andrei_says_
Does Hugo support partials? An equivalent of frontmatter? Slim Lang?

~~~
seanwilson
It has partials, Front Matter as well and you can use Ace or Jade templates as
an alternative but not Slim Lang as far as I know.

------
tbrock
Holy cow. Is this an improvement? Remember in 1999 when you could get a static
website up in 3 minutes using ftp?

~~~
onion2k
I made my first website using vi to make an index.html file in the
~/public_html directory in the home directory of my account on a university
Solaris server back in 1997. FTP was a luxury.

Kids today.

~~~
msla
Can we avoid the ageism?

~~~
reaperducer
It's called humorous nostalgia. You must be young if you're so easily
offended.

~~~
ant6n
Can we avoid the ageism?

~~~
mfoy_
It's called sarcasm. You must be old if you don't get it.

~~~
ant6n
Can we avoid the ageism?

------
tonyztan
Note that in this setup, the connection between Cloudflare and GitHub is
plaintext / not secure, because by default Cloudflare uses "Flexible SSL".

It is possible to make it more secure by changing the setting to "Full SSL
(non-strict)", which encrypts the connection between Cloudflare and GitHub
against passive attacks but not active interception. Unfortunately, GitHub
pages does not work with Cloudflare's "Full SSL (strict)" option.

Cloudflare SSL Options: [https://support.cloudflare.com/hc/en-
us/articles/200170416-W...](https://support.cloudflare.com/hc/en-
us/articles/200170416-What-do-the-SSL-options-mean-)

Example of attack between Cloudflare and origin:
[https://medium.com/@karthikb351/airtel-is-sniffing-and-
censo...](https://medium.com/@karthikb351/airtel-is-sniffing-and-censoring-
cloudflares-traffic-in-india-and-they-don-t-even-know-it-90935f7f6d98)

GitHub issue page:
[https://github.com/isaacs/github/issues/156](https://github.com/isaacs/github/issues/156)

------
jwilliams
After many different iterations, I'm now using netlify (with middleman).
Really hard to beat.

GitHub pages are amazingly fast and a pretty good default choice. With
cloudflare it's a pretty solid combo.

But netlify's awareness/integration between the content and the cdn is really
compelling. Imagine they'll be able to do a lot more with it down the line
too.

~~~
elliotec
Me too. My personal site is in Middleman hosted on a digital ocean instance so
I can have more control of that side (also wanted to learn more about nginx
and SSL) but lately I've been using Middleman with Netlify - it's unbeatable
for getting projects up and running fast.

Built-in continuous integration and automatic SSL, you can even get your
domain through them. Their CMS makes creating a fully featured blog
ridiculously easy. 10/10 would Netlify again.

~~~
jwilliams
Yup! Actually I forgot one feature that would be nice - being able to get the
raw HTTP logs...

------
kaushalmodi
The author has done a great job of documenting all the low-level details about
even how to use git to push stuff to the GitHub repo. Kudos for the excellent
documentation.

I use Hugo + Gitlab + Netlify (free https). I use Emacs as my development
environment, and Magit ([https://magit.vc](https://magit.vc)) has come as a
boon to me. All the git shell scripting mentioned in this post reduce to few
key strokes with the help of Magit. I'm not intending to divert the topic, but
couldn't help mentioning that the Magit Kickstarter [1] needs some love.

Coming back to the Hugo topic, I believe that the 3 hours is a good practical
estimate for someone who has never dabbled with git/github, domain control
tweaks, CNAME, etc.

So don't take that 3 hour mention as a negative, and jump right into the post.
Once you have the whole setup, updating your site is a simple git commit + git
push (hardly a minute -- not counting the time it takes to gather content for
a new post :)).

[1]: [https://www.kickstarter.com/projects/1681258897/its-magit-
th...](https://www.kickstarter.com/projects/1681258897/its-magit-the-magical-
git-client)

------
abricot
I had really hoped that this was about building a static site, but again
you'll end up with a blog.

I've created an actual static site myself, but it takes a bit extra -
especially from the theme.

Also, I don't understand why you'd use Hugo with Github when it already
supports Jekyll?

~~~
fazkan
hugo builds are faster than jekyll, or so it was atleast the one time I
experimented with it...

~~~
abricot
That might be the case, but when using jekyll you don't even have to build
anything - you simply change the source and gihub builds it automatically.

------
deepakkarki
I wonder why people (many devs included) use stuff like wordpress to host
simple blogs. static site generators are a blessing :)

I built my own custom static site generator (python + jinja2) for running my
side project[1]

I just git push and Netlify picks it up. Simple, to the point and no JS.

[1] I run [https://discoverdev.io](https://discoverdev.io) , a "product hunt"
for top engineering blog posts!

~~~
wutwutwutwut
The answer to your question is in the second paragraph.

------
qubyte
I rolled my own static site generator for very little effort. As it stands,
the generator (which isn't public so you'll have to take my word on it) is
~100sloc plus templates, CSS, etc. The process has been interesting and
educational, and I recommend it on those grounds. Adding and modifying
features is very easy since it's so little code to work with. Currently:

\- posts are rendered from markdown with syntax highlighting for code

\- safe links to other domains (noopener and _blank)

\- bundled CSS, which look good (or as bad) on mobile

\- a PWA (the service worker is the only JS run client-side)

\- pre-populated links out to twitter (with a card) and mastodon with tags
drawn from markdown metadata

\- HTTPS using a letsencrypt cert and a one-liner in cron.daily to update it
when close to expiry

\- a smallish nginx config focussed on security to serve files

Much of the generator is just glue code around some good modules. Some
important things like safe links were hacked together by me.

(if you're interested, [https://qubyte.codes](https://qubyte.codes), but I
need to post more often)

------
falsedan
Bit surprised to see this advertised as 3 hours (how long can it take to dump
HTML into a gh_pages branch & push?). After reading, I see that there's a huge
overhead in setup and configuration. The complexity seems way out of line with
the result!

~~~
jordanrobinson
Looks like it's all mainly to do with the static site generation though. You
can certainly still dump some handmade html into a gh-pages branch and have a
(non-generated) static site in less than ten minutes.

------
czechdeveloper
Or you can just use Gitlabs pages which can handle Hugo generation for you. I
do that and I definitely did not spend so much time by it. I can also add new
posts directly from Gitlabs UI, which is nice.

------
discreditable
I use Pelican and host on NearlyFreeSpeech.net behind Cloudflare. I really
like using Pelican. I'm hardly a front-end dev and I found it easy to create a
custom minimalistic theme that I'm quite happy with. No JS required! Fire up
your network monitor and head to
[https://brashear.me/blog/2017/07/30/migration-from-
octopress...](https://brashear.me/blog/2017/07/30/migration-from-octopress-to-
pelican/) It's pretty easy to see <500ms load times.

Octopress was getting to be a pain in my butt due to ruby dependencies being
awful to deal with.

~~~
desireco42
"Ruby is annoying"... then suggest Python :)

~~~
discreditable
pip isn't great but I've had a much better time with it than rubygems.

------
IgorPartola
Is there a piece of software that creates nice looking static photo galleries?
I have used a few and they all seem to suffer from design that is 10-15 years
old.

~~~
j_s
Show HN: Exposé – a static site generator for photos and videos

[https://news.ycombinator.com/item?id=10376468](https://news.ycombinator.com/item?id=10376468)

> jack000: _there was some interest in what I was using for the backend, so I
> cleaned up the code a bit_

[https://news.ycombinator.com/item?id=10794715](https://news.ycombinator.com/item?id=10794715)

> hlawson: _Expose looks very impressive_

hat tip:
[https://hn.algolia.com/?query=static%20photo%20comments%3E5](https://hn.algolia.com/?query=static%20photo%20comments%3E5)

------
trextrex
As far as I know, Github pages doesn't support https for custom domains [1]. A
better option for free hosting would be netlify, which supports Let's encrypt
for custom domains.

[1]
[https://github.com/isaacs/github/issues/156](https://github.com/isaacs/github/issues/156)

~~~
austenallred
We use cloudflare on our Github pages custom domain, so you can easily get
https support that way.

~~~
thesmallestcat
People need to stop calling Cloudflare's offering HTTPS support. It's snake
oil.

~~~
chrift
This is the first time I've heard such claims. Do you have any more details
about this?

~~~
sleepychu

        +------------------+               +------------------+             +-----------------------+
        |                  |               |                  |             |                       |
        |    CLIENT        | +---------->  |    CLOUDFLARE    | +---------> |       YOU             |
        |                  |     SSL       |                  |   NOT SSL   |                       |
        +------------------+               +------------------+             +-----------------------+

------
j_s
Are there any walkthroughs from zero to all done of best practices to setup a
_product website_ using a static generator (Jekyll, Hugo, or whatever) rather
than a _blog_?

I will see what is required to swap something like the kube theme into this
guide:

[https://themes.gohugo.io/kube/#GettingStarted](https://themes.gohugo.io/kube/#GettingStarted)

    
    
      "There are a few concepts this theme employs to make a personal documentation site.
      It’s important to read this as you may not see what you expect upon launching."

------
ekianjo
Its not self-hosted if you rely on Github for hosting.

~~~
r3bl
Seems like the author is now using 301 to redirect to a URL that doesn't
include the term "self-hosted" in its slug.

------
seanwilson
I really like the speed of Hugo but I find the template language unintuitive
and hard to read e.g. "if or condition1 condition2" and "lt 1 2". I wish you
could swap it out for something else like Liquid templates...is that possible?

I'd just go for Netlify as well for hosting. It'll build Hugo sites for you
when you push commits, they have a CMS you can connect with most static site
generators, they deal with SSL setup for you and tons more features. Self-
hosting anything eats up time and it wouldn't be as robust.

~~~
kaushalmodi
I have learnt that you can throw in parentheses for readability..

    
    
        if (or cond1 cond2)

~~~
cmsd2
The next logical step is to mark with parentheses the two branches of the if
expression:

    
    
      (if (or cond1 cond2) (then) (else))
    

although i suppose it's not really hugo anymore..

~~~
seanwilson
Is there a reason something more standard like "if cond1 or cond2 then x else
y" isn't supported? Parsing speed?

~~~
aloisdg
Maybe. It looks like Reverse Polish Notation.

~~~
jloughry
It's regular Polish notation.

------
jpz
Just to make mention in the comments in case people haven't seen the product,
I've found Amazon's Lightsail
([https://amazonlightsail.com](https://amazonlightsail.com)) incredibly easy
and cheap to launch a simple website upon, along with using their Route53 for
DNS hosting.

Even though I know all the ins and outs of AWS, I really like this product for
simple projects.

(I have no affiliation with Amazon)

~~~
miketery
What are the costs associated with something like that?

------
255kb
This is the path I choose for most of my websites nowadays. Usually a
combination of static generated website (I created my own generator), Firebase
hosting (which offers the same free autogenerated SSL + url rewriting), and
Cloudflare. Like this, it's fast, SEO friendly and most of all completely
free.

------
alfonsodev
My preferred alternative is:

\- mustache(command line) + html

\- Firebase hosting (superstatic)

I just install a command line version of mustache for example [1] and run it
over simple static templates:

`mustache data.json myTemplate.mustache > output.html`

I only need to install superstatic[2] locally if I want to debug a rewrite
rule or redirect otherwise clean URLs work pretty well with a simple setting.

[1]
[https://github.com/janl/mustache.js/](https://github.com/janl/mustache.js/)

[2]
[https://github.com/firebase/superstatic](https://github.com/firebase/superstatic)

------
in9
Has Hugo made any progress with intergrating Jupyter Notebooks as a blog post?
The latest version of Blogdown was just realeased and the R community has now
an even better way of writing blog posts.

------
mizzao
Another nice feature on top of this type of setup is to set up CI hooks on
your repo to check for broken links on every push, e.g. with
[https://github.com/gjtorikian/html-
proofer](https://github.com/gjtorikian/html-proofer).

Example:
[https://github.com/mizzao/andrewmao.net/blob/master/Rakefile](https://github.com/mizzao/andrewmao.net/blob/master/Rakefile)

~~~
diggan
Checking for broken links is probably something you want to run every X days
or something like that, rather when you push your update, unless you only want
to check if you accidentally wrote a link wrong, rather than if the link
itself broke.

------
secminion
I'm using React Gatsby on my blog.

I have access to all the npm ecosystem. Is fast. No bloatware or weird code.

Styles with styled-components for easy maintenance.
[https://mateom.io](https://mateom.io)

Deployed to an S3 bucket connected to CloudFlare.

I just type 'yarn deploy' and it builds my blog and pushed it. And I can
commit everything to source control as they keys are in aws-cli

~~~
rootlocus
> I have access to all the npm ecosystem. Is fast. No bloatware or weird code.

I see npm as the best source of slow, bloated, weird modules.

------
MatthewK
Might be a little off-topic but hopefully relevant enough. I'm rather new to
web dev but currently have a static website hosted on AWS S3. My current
workflow is to code the HTML and CSS files using Sublime Text then upload
these files into a bucket manually via the AWS console. Is there a more
efficient way to do this? And is there a simple way to enable HTTPS?

~~~
ajanuary
If you have multiple HTML pages, using a templating engine saves a lot of
copy/pasting when you change headers, menus etc. (in the article they're using
Hugo).

You can automate the uploading of files by writing a script to upload the
files to the bucket so you can deploy in a single command (it gets trickier if
you want to do a sync and delete files).

Personally I use rake [0] to create build and deploy tasks so I can do `rake
build` and `rake deploy:prod`.

[0] [https://github.com/ruby/rake](https://github.com/ruby/rake)

------
kadal
A question:

I have nearly 0 experience with web-dev. I'd like to add some _minimal_ user
tracking to my static site on Github; just when & where the requests are
coming from (geographically), which posts they're looking at and maybe a
referrer.

I don't want to use Google Analytics (seems unfair given that I block it). Is
there an easy way to do this?

~~~
azdle
Honestly, I do use Google analytics on one of my sites. If figure, anyone who
cares even a little bit about privacy will have it blocked. Using something
more rare means that they might not be blocking it even if they would want to
if they knew about it.

------
IamNotAtWork
Can someone explain the use for cloudflare at the end? I thought you can do
the same thing just through your domain registrar?

~~~
godman_8
Cloudflare DNS is one of the best authoritative DNS hosters in the world, if
not the best already.

[https://www.dnsperf.com/](https://www.dnsperf.com/)

Cloudflare is also a great free CDN and has a crap ton of edge servers to make
your static content serve quickly around the world. Has a lot of other great
features too.

Anycast ftw.

~~~
ge96
Just need to remember to turn off caching when updating or set the time to
update cached data at an interval that works for you. I keep forgetting that
sometimes like why isn't the site changing?! Oh right...

------
justinhj
This is a neat tutorial. I use github pages with their built in Jekyll stuff
which I'm semi happy with but I found Jekyll a big learning curve compared to
Blogger which I was using before.

Curious why people want to serve static sites to users over https though.

[http://justinhj.github.io](http://justinhj.github.io)

~~~
megawatthours
[https://doesmysiteneedhttps.com/](https://doesmysiteneedhttps.com/)

------
KirinDave
I really don't understand why we are seeing Yet Another Tutorial for Yet
Another SSG on the front page of HN.

~~~
tomc1985
Coding to SSGs are fashionable at the moment, yet somehow writing your own
HTML isn't...

~~~
CrystalGamma
Writing the template and the content in HTML is easy enough for me, but I'm
still struggling to make post lists, feeds and other things out of it without
a lot of administrative effort.

~~~
RobGav
Just use Publii, it's new static CMS with GUI and themes, supports Netlify,
GitHub Pages, Google Cloud, S3 or SFTP.
[https://getpublii.com](https://getpublii.com)

------
testloop
I also used Hugo for my site -
[https://testloop.co.uk](https://testloop.co.uk) It's so simple.. and FAST.
It's hosted on AWS S3 with CloudFront & Route53 so it's not free, but at a
cost of around $1.20 per month, it's not far off.

~~~
majewsky
$1.20 a month is really expensive. I have a whole virtual server for €5 a
month (and there are smaller ones) that hosts 10+ sites/apps.

EDIT: I just realized that's a question I should ask: Does your price include
the domain?

~~~
ArchReaper
What service do you use? 5/mo is really cheap for 10+sites/apps

~~~
j_s
Not to discourage a response with a personal anecdote, but don't miss
[https://github.com/joedicastro/vps-
comparison](https://github.com/joedicastro/vps-comparison) and its HN
discussion
[https://news.ycombinator.com/item?id=14245538](https://news.ycombinator.com/item?id=14245538).

------
plg
Benefit above and beyond writing your own html and css? (Serious question). I
see a lot of the example tutorials show a simple blog example. In this case
why not just html and css and your favourite text editor? With css you can
separate style from content, you can "change themes" etc.

~~~
RUG3Y
This is exactly what I decided to do. Adding some posts manually to an html
file is really not onerous, and the setup time and complexity of the project
directory are near zero. Plus, I don't have to take the time to understand
someone else's theme in order to make changes. Whipping up a simple css theme
is really not difficult.

------
Iv
I feel old.

I would simply install nginx and write HTML by hand.

If I felt fancy, markdown + pandoc. But if you feel like you need to put some
content online, you don't need much more than a text file with some links.

[http://motherfuckingwebsite.com/](http://motherfuckingwebsite.com/)

------
free_everybody
To anyone confused about how to manage Hugo themes, check out this article I
wrote. [http://stephendrake.me/post/deploying-
hugo/](http://stephendrake.me/post/deploying-hugo/)

------
free_everybody
IMO this guide is great, but uses some unnecessarily complex terminal
commands. You don't need to use `git worktree` and `git submodule` to set up
your hugo site. There are more self-explanatory ways of doing the same things.

------
busterarm
Damn, I must be doing something wrong...

It took me three months to rebuild
[https://www.forthepeople.com](https://www.forthepeople.com) as a Jekyll site
on a load-balanced cluster from WordPress.

~~~
flangillion
I note that your mailto: links don't include an email address. e.g. at the
bottom of the page [https://www.forthepeople.com/class-action-lawyers/clergy-
sex...](https://www.forthepeople.com/class-action-lawyers/clergy-sex-abuse-
lawsuit/) the mailto link (black envelope image) has the email address "?".

~~~
busterarm
It's an email share link. It's for you to share with whoever. All of those
icons are social sharing icons.

? is actually for the query parameters and that's a properly-formed URI.

~~~
j_s
To be clear (since it wasn't to me; best tag-team approach to trick me into
clicking some lawyer's website ever!): ...

The user is expected to click the email icon, then fill in the to: address,
with the body pre-filled with the current url.

Most email urls passing query string parameters fill in the address (which
winds up in the to:) and subject instead.

~~~
busterarm
Absolutely follow you. Business decision, wasn't up to me ;)

That said though, best damn lawyer's site on the web, amirite?

------
q1t
I would pay couple bucks per month for any vps just only for not using
Cloudflare. Why anyone concerned about security and not just about green lock
would use Cloudflare over LetsEncrypt.

------
carlmr
I love it! This is the part of the 90s I want back (not the dial-up)

------
tomcam
Really good because it walks you through every step and explains what's going
on. The result is a version-controlled, robust, easy to maintain site that
scales beautifully.

------
Spacemolte
Any particular reason why you don't install using homebrew?

~~~
gsempe
The only reason is that this way I can stick to a Hugo version and make my
environment completely reproductible. Cf. the jump-start script in the
repository
[https://github.com/gsempe/gsempe.github.io/blob/source/jump_...](https://github.com/gsempe/gsempe.github.io/blob/source/jump_start.sh)

------
therealmarv
That's still pretty complicated IMHO. Write some markdown files in a directory
structure, run mkdocs over it. Voilà... indexed, searchable static website.

------
tomc1985
In this thread: a million ways to drop HTML into a webroot that are anything
but simply dropping HTML into a webroot

------
eighthnate
A fast static site? Have we traveled back to 1997.

