Office Hours 3 - Website Rebuild Ideas & Explorations #8
Replies: 24 comments 72 replies
-
https://github.com/selfhostedshow/show-notes Here's how we use mkdocs to generate our notes website. |
Beta Was this translation helpful? Give feedback.
-
Hi there, i heard you are looking for input for a possible relaunch of Jupiter Broadcasting and wanted to give my two cents. Congratulations for wanting to move away from Wordpress! What i have used:
What i recommend: Use a headless CMS I have used Cockpit CMS a lot and really like it so far. It provides a simple Webinterface for managing content and creating fields and provides a great REST or GraphQL API to query, modifying and adding content. It is also super easy to write custom API endpoints. It is written in PHP which means it does run everywhere and supports a lot of different database engines and is OpenSource. This eleminates a lot of the painpoints when working with purely static site builders:
Sure, there is client side search like Lunr, but that doesn't perform well on large sites and also the index has to be downloaded by the browser. Or you could use ElasticSearch, but then you need to host and maintain ElasticSearch, which is a bit much. So there are ways to overcome shortages of static site builders, but they are workarounds. If you pile a lot of workarounds together you end up with a huge mess and that's what you want to get away from :D What you use as the frontend is up to you. For example it would be possible to build markdown files and generate the frontend using Hugo. Or you could use NextJS and query the API directly to build a static site. You could also integrate a trigger to a Github Action that does the build process of the static site, when content get's changed or added. The main benefit is that you totally disconnect the backend from the frontend, which is a huge benefit. I hope that helps a bit. Much love Stefan |
Beta Was this translation helpful? Give feedback.
-
I don't know how System76 does it for their pages that allow GitHub editing, but I think it would be a good idea if the community could make contributions via that kind of editing. |
Beta Was this translation helpful? Give feedback.
-
Also, would it be a good idea to run the Git project on a Self-hosted Gitlab instead of GitHub or is it better to reduce the barrier to editing via GitHub? If Gitlab would be use, how would users sign up to do edits? |
Beta Was this translation helpful? Give feedback.
-
Looks like Jekyll (ruby instead of go like hugo) has not been mentioned at all but that also provides static site generation. Also if self-hosting isn't required and the SAAS version of GitLab or GitHub are used I would urge you to check out Cloudflare pages rather than GitHub pages as it is a bit more flexible. |
Beta Was this translation helpful? Give feedback.
-
Hugo can make and manage a podcast feed. Great for the old shows maybe. https://brendamour.net/2021/04/18/how-to-publish-podcasts-with-the-hugo-static-site-generator/ |
Beta Was this translation helpful? Give feedback.
-
I'll throw gatsby into the mix. https://www.gatsbyjs.com/starters/ When I make Gatsby sites, I personally use GitHub to host the code and use Netilify to build and deploy the site. Netilify will automatically rebuild and deploy your site when the associated repo is updated, so I typically deploy main as the production site and a dev branch as dev.domain.com. So when you push your post to dev, you can then let Netilify build it and then go to your secret testing page and do some quality control to make sure it looks right and then merge to main when you are happy with it. Posts are handled through markdown documents and applied to js pages built in react, so building your blog page can be dev heavy if you want to make a lot of changes to how your site/pages look but once it's tweaked to your liking every blog post follows the same design format. So adding content is as simple as creating a markdown document with some metadata at the top, and adding that to your posts or blog folder in the directory. This looks similar to the notes docs with the exception that the metadata would be sitting at the top of the markdown document. Some starters have tied in cms platforms, I have never used them to speak to how well they work or don't, but they are an option. I like to just work in the repo directly. With react if you can think of something to do you can probably implement it via react or just straight javascript. Let's encrypt ties into Netilify and don't really need to be touched if you don't want to. When I want to add something that is very different from the site where it doesn't follow the design subdomains can be used pretty easily in Netilfy. Most starters include graph ql for querying the site. Things I like about Gatsby, once your site is running and you play with modding your pages you can make it to the point where you understand what's being imported to each page where it's being used and the properties that you can change. It's that feeling like I know what's going on and through understanding it you can make changes and extend it the way you like, I get the same feeling on Fedora on my x1. Things I don't like, are it could have better error messages when a build fails, also dealing with npm dependencies. I prefer the gatsby deploys with fewer features/fewer npm dependencies for that reason. https://www.gatsbyjs.com/docs/how-to/adding-common-features/adding-an-rss-feed/ Building a podcast feed. |
Beta Was this translation helpful? Give feedback.
-
Re GitHub, the easiest fairly future-proof option is to have an independent git install on whatever server you like, and set up someone's config so that pushes go to both GitHub and that server. One of the maintainers could occasionally pull and push locally to keep them in sync, or you could set up a GitHub Action to do that. If GitHub goes away or does something stupid, you'll still have the source files and their history, mirrored on N+1 contributor's machines, and you can then pivot any way you like. You'd lose the discussions and issues, but they're second-tier imo. No need to futz w GitLab. |
Beta Was this translation helpful? Give feedback.
-
A strange and glorious idea: I've been following Simon Willison's work for a while now, he's one of the original Django creators, absolutely brilliant dude. He accidentally created a CMS based on flat files ingested into SQLite databases, and it's fantastic. He put up a video very recently (https://www.youtube.com/watch?v=B55hcKYye_c) that goes over the basic premise of his Datasette project (SQLite explorer with SQL-injection-as-a-feature and baked-in json/csv/graphql APIs) then teases how the Datasette website itself is built on Datasette, noting that scaling is very easy bc you just spin up more instances (copy the entire db and the logic around surfacing it to a new node). I love how portable the whole thing is, how using markdown and json for articles and structured data is eminently collaborative and versionable, that you can administer entirely with GitHub Actions if you'd like or spin to bare metal/VPS/etc., how flexible it is (SQLite has support for json fields, so you can make yourself a NoSQL-within-SQL platform if you are so inclined), and how speedy the SQLite backend is, for page rendering and search, natively on a single machine and with the ability to scale horizontally with ease. Not saying any sane person should build his or her whole life on SQLite, but... |
Beta Was this translation helpful? Give feedback.
-
What about Ghost? Its a fully-featured CMS like Wordpress but actually nice to use. I don't know how well it would fit the usecase though, just spitballing. |
Beta Was this translation helpful? Give feedback.
-
I'll throw SvelteKit in here with mdsvex. Svelte is great because it has a really low learning curve compared to React. Svelte can be used for the layout and styling, while with mdsvex, Markdown files can be used for the actual content. It will take more work though to set up and maintain compared to Ghost, but it has a lot of flexibility to create whatever layout makes sense. |
Beta Was this translation helpful? Give feedback.
-
I like and currently use Hugo. I used to be on WP for so long, useful tool but always felt it was overkill for a personal blog. Markdown --> GitHub --> GitHub Action --> Artifacts (html files) --> GitHub pages --> Cloudflare DNS + CDN + SSL |
Beta Was this translation helpful? Give feedback.
-
S’up. I’m an ex-Frontend Developer (and now Platform Engineer). I’d solidly SOLIDLY recommend keeping all content in markdown and using Eleventy to generate your site. Markdown is, I feel, a no brainier as it allowed you to accept pull requests for community contributions, and keeps things simple. No databases, no corruption, yeah? Eleventy I recommend because it’s fast, documented, and has a community surrounding it. People do some fantastically complex stuff with it. Most importantly, unlike some other so-called “SSGs” it only outputs HTML. No React, no client side stuff. Just blazing fast sites. Check it out and I think you might find it useful! |
Beta Was this translation helpful? Give feedback.
-
Here's an idea: how about generating the pages from the RSS feed? That way you don't have to manually update the website, just the feed. |
Beta Was this translation helpful? Give feedback.
-
How about considering Lektor for the CMS? See https://www.getlektor.com It is a static site generator-style of CMS...so the output remains nice and fast for visitors to the website...But, managing the content is done through a simplified WYSIWYG; not unlike Wordpress, but simpler. Obviously, you can read details for yourselves...but the gist:
|
Beta Was this translation helpful? Give feedback.
-
I haven't personally given it a shot, but Elder.js seems pretty cool: https://github.com/Elderjs/elderjs/ |
Beta Was this translation helpful? Give feedback.
-
So many great suggestions in this thread but it's very hard to fully understand the technical merits of any single solution from recommendations alone. Therefore, I'd like to suggest we build a few of these frameworks into MVPs. An MVP in this case is a home page with a few episodes, a single episode page and a basic explanation of how the CI behind it would work. Nothing has to be fully fleshed out or designed or whatever. But some straightforward examples of how you take a page like this of pure markdown and turn it into what we need. The show notes website already scrapes fireside using python and beautifulsoup so feel free to reuse that code as needed. Ideally, though, the new JB site would become our source of truth - NOT fireside as is currently the case. Feel free to add frontmatter to the MD file to enable host profile linking and what not - remember that is a key feature. If a host or guest shows up on multiple shows we should only have to edit one file to update all the episodes they appeared in. Apply that logic to any other "relational" type data structure that you come across too. Good luck! |
Beta Was this translation helpful? Give feedback.
-
Speaking as someone who professionally builds custom CMSs, I'd recommend using something that already exists. So much of what's needed already exists in the world, it'd be a shame to rebuild it. Also, speaking as the person who wrote the notes site, I'd recommend against anything which is static. The ability to have something fully data driven is incredibly powerful, and also means non-technical users can make changes as needed, and pull in live data from other places. The downside however is that the community can't PR in to update the content, which I think could be quite a nice feature (and something which was spoken about). As static site generators go, Hugo and Zola are definitely the 2 best out there (the latter being Rust 🥳 ). For a more custom CMS, building off of something existing like Wordpress or Drupal means we don't need to build from scratch, and there' plenty of community around the frameworks to build some custom integrations if we need it. Alternatively, if we do want something pretty custom, Wagtail is a really good framework for building these things, and used by tonnes of people (Disclaimer: I work for the company behind Wagtail). From experience, step 1 is definitely getting some form of feature spec together. From there, we can match it against the best technology to solve the problems and go from there! |
Beta Was this translation helpful? Give feedback.
-
Repo: https://github.com/StefanS-O/jupiterbroadcasting-hugo-mvp A lot is still missing, but i only spend 6 hours. I think i will add some issues for planning and of course design is far from finished. |
Beta Was this translation helpful? Give feedback.
-
It seems like your have a solution before you determined what requirements you want to hit/problem you want to solve. Note I've never create more than a basic website. Some requirements could be easy management (determine how this would look like for each avenue or tech stack), speed, user contributions or issue tracker, mobile view, content format (think flat files vs database for file storage but for content), application/stack management, other potential features, etc. |
Beta Was this translation helpful? Give feedback.
-
Stripe just came out with Markdoc and I thought it might fit the usecase |
Beta Was this translation helpful? Give feedback.
-
What about using something like Castopod? It's a podcast host that supports Podcasting 2.0 and can be self-hosted or has paid offerings. I think it bundles a homepage for multiple podcasts as well but not sure. |
Beta Was this translation helpful? Give feedback.
-
Payload just went open source. I haven't used it but the excitement and sentiment seem good. https://payloadcms.com/blog/open-source For things I have used Nuxt with the Nuxt Content module is great for static sites. Content can be written in MD or JSON (or more) and then gets templated out. I'd also love to just help with the work in general and know JS, Vue, go, rust, WordPress, and a few others pretty well so if I can be of some help please tag me. |
Beta Was this translation helpful? Give feedback.
-
Hey all! Help us brainstorm ideas of how to build the coming new Jupiter Broadcasting website. We'd love your input!
GitHub actions? Hugo? mkdocs?
Beta Was this translation helpful? Give feedback.
All reactions