How to build a website without frameworks and tons of libraries

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • editable-website

    A SvelteKit template for building CMS-free editable websites

  • Been dedicating a ton of time to this goal lately.

    I released a "SvelteKit template for building CMS-free editable websites" earlier this year and the idea has evolved since. I started out with using Postgres + MinIO for storage, but have switched entirely to SQLite. I also added an in-place image cropper, to resize and optimize images on the client side (WebP output) before uploading and storing them in SQLite. I chose Svelte because it's easy to build classic Web pages (with minimal JS overhead), and at same time implement the reactive layer (e.g. editing) on top of it (will be loaded async). However we are also evaluating the possibility to port this to a LAMP stack at some point. Oh and everything is dynamic here, no build steps involved, edits are live immediately.

    Just launched my first client project using this approach:

    https://trails-shop.at?editable=true (hit the red button in the bottom-right corner)

    Project website: https://editable.website

  • decap-cms

    A Git-based CMS for Static Site Generators

  • I've thought of something similar! A git-based flow for a friend's static portfolio site, where he can make text edits and upload images, and the site builds that content with HTML templates.

    Not sure how the GitHub markdown editor would feel for the user. It might be really great, even for uploading images.

    I was imagining a static admin page, WYSIWYG, that makes git pushes on submit. These were the headless CMSs that seem to be able to accomplish that:

    https://www.siteleaf.com/

    https://decapcms.org/

    And not git based, but similar idea: https://editable.website/

    And this is what the admin edit page usually looks like: https://quick-edit-demo.vercel.app/admin/index.html#/collect...

    But was taking a bit of work to configure.

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

    SurveyJS logo
  • 10kbclub

    Discontinued A curated collection of websites whose home pages do not exceed 10 KB compressed size

  • zola_jamiedumont.com

    Discontinued Zola codebase behind jamiedumont.com

  • Someone beat me to the punch and added the URL (thanks!).

    The site is what's left over after trying a few different options, most notably Ghost and later Zola.

    Most of the current layout mimics what can be created within Ghost's editor. I then migrated to Zola which shares the bulk of the layout. Currently most of my images are coming from Zola's `processed_images` directory. You can view the Zola codebase here[1] if you like.

    The layouts I'm currently working on (not yet published) are heavily influenced by Andrew Clarke's work [2] and his book "Art Direction for the Web" [3] which I highly recommend if you want to explore less generic layouts online. I hope that on day my site can be example that web design can be as varied and interesting as print!

    1: https://github.com/jamiedumont/zola_jamiedumont.com

  • eureka

    Lucene-based search engine for your source code (by wisercoder)

  • Here's an example of building a well-structured, maintainable web-site using JavaScript, HTML and CSS: https://github.com/wisercoder/eureka/tree/master/webapp/Clie...

    It doesn't use React (imagine the horror!), instead it uses two tine 500-line libs.

  • Slim

    Slim is a template language whose goal is to reduce the syntax to the essential parts without becoming cryptic. (by slim-template)

  • I use something very similar on https://lunar.fyi and https://lowtechguys.com but I wouldn’t call this “simple” anymore.

    They use Jinja templating, I prefer Slim (https://github.com/slim-template/slim#syntax-example) which has a more Pythonic syntax (there is plim [0] in Python for that)

    I use Tailwind as well for terse styling and fast experimentation (allows me to write a darkMode-aware and responsive 100 line CSS in a single line with about 10 classes)

    For interaction I can write CoffeeScript directly in the page [1] and have it compiled by plim.

    I run a Caddy static server [2] and use Syncthing [3] to have every file save deployed instantly to my Hetzner server.

    I use entr [4] and livereloadx [5] to rebuild the pages and do hot reload on file save. All the commands are managed in a simple Makefile [6]

    ———

    You can already see how the footnotes take up a large chunk of this comment, this is not my idea of simple. Sure, the end result is readable static HTML and I never have to fight obscure React errors, but it’s a high effort setup for starters.

    Simple for me would be: write markdown files for pages, a simple CSS for general styling (should be optional), click to deploy on my domain. Images should automatically be resized to multiple sizes and optimized, videos re-encoded for smaller filesize etc.

    I have mostly implemented that for myself (https://notes.alinpanaitiu.com/How%20I%20write%20this%20blog...) but it feels fragile. I’d rather pay for a professional solution.

    [0] https://plim.readthedocs.io/en/latest/

    [1] https://github.com/FuzzyIdeas/lowtechguys/blob/main/src/rcmd...

    [2] https://caddyserver.com/docs/command-line#caddy-file-server

    [3] https://syncthing.net

    [4] https://github.com/eradman/entr

    [5] https://nitoyon.github.io/livereloadx/

    [6] https://github.com/FuzzyIdeas/lowtechguys/blob/main/Makefile

  • syncthing-android

    Wrapper of syncthing for Android.

  • I use something very similar on https://lunar.fyi and https://lowtechguys.com but I wouldn’t call this “simple” anymore.

    They use Jinja templating, I prefer Slim (https://github.com/slim-template/slim#syntax-example) which has a more Pythonic syntax (there is plim [0] in Python for that)

    I use Tailwind as well for terse styling and fast experimentation (allows me to write a darkMode-aware and responsive 100 line CSS in a single line with about 10 classes)

    For interaction I can write CoffeeScript directly in the page [1] and have it compiled by plim.

    I run a Caddy static server [2] and use Syncthing [3] to have every file save deployed instantly to my Hetzner server.

    I use entr [4] and livereloadx [5] to rebuild the pages and do hot reload on file save. All the commands are managed in a simple Makefile [6]

    ———

    You can already see how the footnotes take up a large chunk of this comment, this is not my idea of simple. Sure, the end result is readable static HTML and I never have to fight obscure React errors, but it’s a high effort setup for starters.

    Simple for me would be: write markdown files for pages, a simple CSS for general styling (should be optional), click to deploy on my domain. Images should automatically be resized to multiple sizes and optimized, videos re-encoded for smaller filesize etc.

    I have mostly implemented that for myself (https://notes.alinpanaitiu.com/How%20I%20write%20this%20blog...) but it feels fragile. I’d rather pay for a professional solution.

    [0] https://plim.readthedocs.io/en/latest/

    [1] https://github.com/FuzzyIdeas/lowtechguys/blob/main/src/rcmd...

    [2] https://caddyserver.com/docs/command-line#caddy-file-server

    [3] https://syncthing.net

    [4] https://github.com/eradman/entr

    [5] https://nitoyon.github.io/livereloadx/

    [6] https://github.com/FuzzyIdeas/lowtechguys/blob/main/Makefile

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • lowtechguys

  • I use something very similar on https://lunar.fyi and https://lowtechguys.com but I wouldn’t call this “simple” anymore.

    They use Jinja templating, I prefer Slim (https://github.com/slim-template/slim#syntax-example) which has a more Pythonic syntax (there is plim [0] in Python for that)

    I use Tailwind as well for terse styling and fast experimentation (allows me to write a darkMode-aware and responsive 100 line CSS in a single line with about 10 classes)

    For interaction I can write CoffeeScript directly in the page [1] and have it compiled by plim.

    I run a Caddy static server [2] and use Syncthing [3] to have every file save deployed instantly to my Hetzner server.

    I use entr [4] and livereloadx [5] to rebuild the pages and do hot reload on file save. All the commands are managed in a simple Makefile [6]

    ———

    You can already see how the footnotes take up a large chunk of this comment, this is not my idea of simple. Sure, the end result is readable static HTML and I never have to fight obscure React errors, but it’s a high effort setup for starters.

    Simple for me would be: write markdown files for pages, a simple CSS for general styling (should be optional), click to deploy on my domain. Images should automatically be resized to multiple sizes and optimized, videos re-encoded for smaller filesize etc.

    I have mostly implemented that for myself (https://notes.alinpanaitiu.com/How%20I%20write%20this%20blog...) but it feels fragile. I’d rather pay for a professional solution.

    [0] https://plim.readthedocs.io/en/latest/

    [1] https://github.com/FuzzyIdeas/lowtechguys/blob/main/src/rcmd...

    [2] https://caddyserver.com/docs/command-line#caddy-file-server

    [3] https://syncthing.net

    [4] https://github.com/eradman/entr

    [5] https://nitoyon.github.io/livereloadx/

    [6] https://github.com/FuzzyIdeas/lowtechguys/blob/main/Makefile

  • entr

    Run arbitrary commands when files change

  • I use something very similar on https://lunar.fyi and https://lowtechguys.com but I wouldn’t call this “simple” anymore.

    They use Jinja templating, I prefer Slim (https://github.com/slim-template/slim#syntax-example) which has a more Pythonic syntax (there is plim [0] in Python for that)

    I use Tailwind as well for terse styling and fast experimentation (allows me to write a darkMode-aware and responsive 100 line CSS in a single line with about 10 classes)

    For interaction I can write CoffeeScript directly in the page [1] and have it compiled by plim.

    I run a Caddy static server [2] and use Syncthing [3] to have every file save deployed instantly to my Hetzner server.

    I use entr [4] and livereloadx [5] to rebuild the pages and do hot reload on file save. All the commands are managed in a simple Makefile [6]

    ———

    You can already see how the footnotes take up a large chunk of this comment, this is not my idea of simple. Sure, the end result is readable static HTML and I never have to fight obscure React errors, but it’s a high effort setup for starters.

    Simple for me would be: write markdown files for pages, a simple CSS for general styling (should be optional), click to deploy on my domain. Images should automatically be resized to multiple sizes and optimized, videos re-encoded for smaller filesize etc.

    I have mostly implemented that for myself (https://notes.alinpanaitiu.com/How%20I%20write%20this%20blog...) but it feels fragile. I’d rather pay for a professional solution.

    [0] https://plim.readthedocs.io/en/latest/

    [1] https://github.com/FuzzyIdeas/lowtechguys/blob/main/src/rcmd...

    [2] https://caddyserver.com/docs/command-line#caddy-file-server

    [3] https://syncthing.net

    [4] https://github.com/eradman/entr

    [5] https://nitoyon.github.io/livereloadx/

    [6] https://github.com/FuzzyIdeas/lowtechguys/blob/main/Makefile

  • Lunar

    Intelligent adaptive brightness for your external monitors

  • I use something very similar on https://lunar.fyi and https://lowtechguys.com but I wouldn’t call this “simple” anymore.

    They use Jinja templating, I prefer Slim (https://github.com/slim-template/slim#syntax-example) which has a more Pythonic syntax (there is plim [0] in Python for that)

    I use Tailwind as well for terse styling and fast experimentation (allows me to write a darkMode-aware and responsive 100 line CSS in a single line with about 10 classes)

    For interaction I can write CoffeeScript directly in the page [1] and have it compiled by plim.

    I run a Caddy static server [2] and use Syncthing [3] to have every file save deployed instantly to my Hetzner server.

    I use entr [4] and livereloadx [5] to rebuild the pages and do hot reload on file save. All the commands are managed in a simple Makefile [6]

    ———

    You can already see how the footnotes take up a large chunk of this comment, this is not my idea of simple. Sure, the end result is readable static HTML and I never have to fight obscure React errors, but it’s a high effort setup for starters.

    Simple for me would be: write markdown files for pages, a simple CSS for general styling (should be optional), click to deploy on my domain. Images should automatically be resized to multiple sizes and optimized, videos re-encoded for smaller filesize etc.

    I have mostly implemented that for myself (https://notes.alinpanaitiu.com/How%20I%20write%20this%20blog...) but it feels fragile. I’d rather pay for a professional solution.

    [0] https://plim.readthedocs.io/en/latest/

    [1] https://github.com/FuzzyIdeas/lowtechguys/blob/main/src/rcmd...

    [2] https://caddyserver.com/docs/command-line#caddy-file-server

    [3] https://syncthing.net

    [4] https://github.com/eradman/entr

    [5] https://nitoyon.github.io/livereloadx/

    [6] https://github.com/FuzzyIdeas/lowtechguys/blob/main/Makefile

  • org-mode-site-template

    A workflow for a complete site using the HTML publish option of Emacs Org-Mode

  • You can create a decente static website with templating, sitemaps, etc. with Emacs' built-in Org Mode. Here's my minimal setup:

    https://github.com/hcarvalhoalves/org-mode-site-template

  • eleventy 🕚⚡️

    A simpler site generator. Transforms a directory of templates (of varying types) into HTML.

  • "as simple as possible but no simpler" - (not Albert Einstein, probably)

    Pure HTML + CSS, with the CSS in the or inline in each html tag... this is a fine way to get something going. And then when you have two pages, you pull the CSS out to a separate file.

    But once you start making any site which has multiple pages of the same format, you want some kind of template system with includes and a (static page) generator.

    If your pages are data-driven, then you might want a programmable site generator which can ingest the data and spit out pages.

    But if your data is "live", you end up needing per-view page creation, which is at minimum PHP realm (and certainly leaning into modern web framework with running servers realm).

    I recently built a pro-bono website for a hobby of mine. The site is a dance promotion and event site, and the owner is a very non-technical dance teacher. It uses Eleventy (https://www.11ty.dev/) to generate a static site on Netlify (free tier), and it has some custom build code which pulls data from a Google Sheet which I have setup for the teacher to use to define upcoming events. It took a good dozen hours to build, but now it works like a charm while costing nothing to operate or manage. Now having built this, I have discovered a great and powerful sweet spot between absolute bare minimum and Rails/Phoenix/Django level.

  • render

    render github markdown to html (by nathants)

  • i make two kinds of websites:

    - static. markdown rendered to html using github’s api[1].

    - dynamic. a go binary and an html file with inlined js zipped together and shipped somewhere[2].

    it’s nice to never consider the machinery of either of these anymore. instead i think about building interesting things.

    1.

    https://github.com/nathants/render

    https://nathants.com/

    2.

    https://github.com/nathants/aws-gocljs

    https://gocljs.nathants.com/

  • aws-gocljs

    fullstack web should be easy

  • i make two kinds of websites:

    - static. markdown rendered to html using github’s api[1].

    - dynamic. a go binary and an html file with inlined js zipped together and shipped somewhere[2].

    it’s nice to never consider the machinery of either of these anymore. instead i think about building interesting things.

    1.

    https://github.com/nathants/render

    https://nathants.com/

    2.

    https://github.com/nathants/aws-gocljs

    https://gocljs.nathants.com/

  • caniuse

    Raw browser/feature support data from caniuse.com

  • - EB Garamond is a variable font, which is a bit of a questionable choice because OS+browser support is still relatively low. (Just browser-wise, it's only at ~95% global https://caniuse.com/?search=variable%20font so add on OS incompatibility... The text should still render, but it won't look like you expect it to. Example: https://share.obormot.net/screenshots/Arcturus_Screen%20Shot... Also shows the sentence-spacing problems & dropcap problems.)

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts