* Good clean default CSS so I don't have to mess with it
* Automatically upload website to CDN and trigger expirations as necessary.
* Self-hosted
* Runs on AWS Lambda or any other Function as a Service equivilient
* Has a super lightweight CMS that I can easily use on both desktop and mobile, so if I have ideas I can start writing anywhere, and can also make minor corrections to existing posts while on the go.
* The CMS can be a frontend to git, but git is hard to use on mobile, so I don't want the CMS to just be git.
If anyone knows of something that meets these requirements I'd be super grateful!
Looking at your profile, I get the sense you are trolling :) but I have a bad time imagining the need for the elasticity of lambda for those single-user actions.
I'm not sure whether it's what they meant, but I could see the "admin" cms portion being hosted on lambda.
You'd load a static editor page, write your content, and then post it to a lambda endpoint. That lambda would then generate static pages for your content and push it to s3 or wherever.
We're also considering providing our CMS as headless via an API so that you can connect it to your SSG and make your own template, host it wherever you want, etc, but we haven't decided yet on the pricing for that but it would be much cheaper than our main product.
Sounds like you just need a way to modify a remote filesystem, then trigger a build step when you're done with the modifications.
Assuming it was wrapped up in a nice UI, would that be missing any features you need?
EDIT: Put more concretely, if you had a site hosted on S3, all you need is a way to modify the source files of that site, either directly or by modifying files in another directory and running a transform step to produce the final result?
Sounds like previews is the main thing missing though? I don't consider github to be similar to a remote filesystem, because like you said certain simple things like uploading images and other arbitrary data isn't easy.
There's no simple commercial solution that does exactly this that I know of, but you can get very close with Google Cloud Functions, a GitHub Pages site, and a Google Sheets spreadsheet as a datastore. Not static, but it is fast, and you get a 'CMS' for free (the spreadsheet). Plus all of these services can be used completely for free.
I'd advise just running Wordpress or Ghost. Even a small VPS is more than enough scale and you get a working blog out of the box with easy extensibility for the future. And you can still use a CDN in front.
People think a static site is enough without realizing SEO, RSS feeds, comments, etc, are all things you might need and would have to rebuild yourself.
With self hosting I can control the code, what it does, the cost, where it stores data, how backups are made, when new versions and updates are deployed, etc.
It’s always a trade off on control, and my comfort point is “on AWS”.
For some people they want their own servers. Some people want to own the network block. It’s just what level of comfort you have with each type of control.
I don’t know what CMS I’m going to use, that was my question. Which one operates the way I want?
It's a single-file app. You can host it yourself, and it edits static files in a github/gitlab repo. The deployment after push and hosting with custom domains and CDN is already handled by Netlify. And it's all free.
If you use Jekyl then you can skip Netlify and Github will build and serve your site.
I'm struggling to understand what you mean by self-hosted. What does AWS Lambda do in this scenario? Surely not host the blog, so it must be the "cms"? At that point I'm not clear why you'd rule out netlify, as it's no longer "self-hosted." Please clarify! :)
* this triggers a lambda function that generates a static website and puts it on s3
* this triggers another lambda function that pokes the CDN and expires anything that changed
By self-hosted I mean I control all the parts. I can change the generation code, the CDN upload/expiration code, I can change the output, I can view the logs, all within my own account.
I don’t know... I have a Github actions workflow that on a commit, it builds a site (mkdocs) and upload it to a gh-pages branch for hosting on Github. You could also push the generated html to S3.
That coupled with Working Copy could be a pretty good mobile workflow.
For me, this was much easier than deploying Lambda code and managing How all of that worked together. Using Github Actions wasn’t much more than setting up a deploy script.
Have that. It sucks. UI on github sucks (need something I can access anywhere, not just my desktop, thought github might cut it, it doesn't). Uploading images sucks. No preview sucks. I suppose I could trigger to staging but that means I have to commit just to see a preview then wait for the entire process vs say wordpress which has instant preview.
Managing posts also sucks. I can pre-date posts but I can't at a glance get a list of posts with data about each one. Instead I just get a file listing and have to open each file and read its headers to see its metadata (date, title). Publish vs unpublished also suck. I have folders for my posts and another folder for drafts but moving something from one to the other is no fun compared to just checking a box in wordpress.
I've build something like this using Hugo as a SSG and a custom Micropub-backend that commits new content to a Git repo and pushes it to a Git hosting platform. That then triggers a CI build for the site generation and upload to the webserver as well as a CDN purge.
Netlify CMS uses the GitHub (or bitbucket, etc) API to modify your repository with the new/updated content. You can self-host the entire system, or have netlify handle the GitHub auth while you self host your website.
You could use GitHub actions to do the build and send it off to some CDN to deploy, or if you were self-hosting the whole thing, you could have a Flask app listen for a webhook and re-build your site when that's received. Or simply pull in from the git origin and rebuild with a cron job.
I guess what I'm getting at is doing that would be a big patchwork of putting all that together. Not a unified system. I'd gladly make a one time payment for a unified piece of software that does everything (or of course gladly adopt something open source).
Also, to your specific example, does there exist a Flask app that runs on AWS lambda that can listen for a webhook and then build a static website?
Does there exist code that I can put into Github actions that builds a static website and uploads it to a CDN?
That's basically what I'm looking for.
Of course I could write my own solution or cobble it together with a bunch of moving parts, but my whole point is that I'm looking for an existing package that already does it.
If you use a tool like the Serverless Framework, you can "cobble together the moving parts" and store it into GitHub and make it easily deployable into the cloud. Putting together pieces is what software development is. If you are used to OOP this is even more relevant as the entire idea of OOP is to create discrete pieces of code and compile them together.
PHP for example used to be a "big patchwork" of seperate files working together, but the right tooling came along to think of it as "a unified system". Same thing with Serverless and the Serverless Framework
Shouldn't be too difficult to hook this up to a build command for hugo, jekyll, or whichever static site generator you'd prefer. But this gets away from the self-hosted part of what you were saying a bit.
With self hosting I can control the code, what it does, the cost, where it stores data, how backups are made, etc.
It’s always a trade off on control, and my comfort point is “on AWS”.
For some people they want their own servers. Some people want to own the network block. It’s just what level of comfort you have with each type of control.
What if your content doesn't have enough views / you get bored / life changes so can't afford server costs anymore / die. Your server will expire eventually, and there goes your content. web.archive.org might have some sites archived, but many blogs won't have been archived so their content is just gone forever.
I've self-hosted many platforms, and many have died, perhaps due to running costs or lack of need anymore. It's partially why I'd never self-host my email, for example.
You can't know the future, and if your content is gone, it's gone for all of your audience (or potential future audience). Perhaps an ideal solution is some kind of self-hosted platform that mirrors content into a forever-public external repository, and hence preserves it, even if your hosting ceases to exist.
Yeah. There's a wordpress.com blog I frequently go back to and reference and the author passed away in 2014. Thanks to it being hosted on wordpress.com it will stay up there for the foreseeable future. Had it been relying on monthly payments for hosting and yearly payments for the domain it would probably have been down already by the time I realized he was no longer with us (some three months after the fact). And at that point, not all content would've probably been in archive.org and thus lost forever.
I also have a bunch of old blogs that I've just given up on at some point and now they're gone forever.
Your last point is kind of what archive.org's Wayback Machine does. Haven't checked whether they have an API where you can submit URL's you publish* or if you'd have to submit new posts manually, but this could be a decent solution. It wouldn't cover non-tech people though.
*) I just now quickly browsed through their API doc but couldn't find anything clear, other than uploading random files
* Generate lightweight static website
* Good clean default CSS so I don't have to mess with it
* Automatically upload website to CDN and trigger expirations as necessary.
* Self-hosted
* Runs on AWS Lambda or any other Function as a Service equivilient
* Has a super lightweight CMS that I can easily use on both desktop and mobile, so if I have ideas I can start writing anywhere, and can also make minor corrections to existing posts while on the go.
* The CMS can be a frontend to git, but git is hard to use on mobile, so I don't want the CMS to just be git.
If anyone knows of something that meets these requirements I'd be super grateful!