User:Qubyte.codes
Jump to navigation
Jump to search
I'm Mark S. Everitt, the author of https://qubyte.codes
My personal site uses a static site generator of my own design. It's written in node and uses a promise based directed-graph based build system with hot reloading.
My needs are fairly specific, and have led me to develop a dialect of markdown with special handling of language attributes and ruby annotations (amongst other things).
Static site generators aren't always a good match for IndieWeb associated technologies like Webmention and Micropub since builds are isolated (setups served from databases are easier to work with in this respect), but I've had a lot of fun engineering what I want within these constraints.
IndieWeb things I've implemented so far
- Micropub (including a media endpoint) using Netlify functions. Post content is essentially proxied to GitHub using the content API, so I don't need to work with the git tree API. The media endpoint function strips metadata from photos, but further processing into more formats and sizes is done with a GitHub Actions workflow.
- I use iOS/MacOS shortcuts to post links and notes with photos to my site. I also use h-event posts to send details/duration of study sessions quickly from my phone or Mac menubar. I slightly broke with the spec by allowing shared secret support in addition to IndieAuth for these. I use Omnibear compiled into a Mac app to get it working with Safari for posting from my laptop.
- Webmention receipt using a Netlify function. I don't have a good solution for dealing with these right now, so for the time being mentions are validated, and then each is turned into an issue in GitHub.
- Webmention dispatch using a Netlify build plugin. I compare the atom feed before and after each build to determine new/updated/deleted posts and scan the relevant posts (both before and after in the event of an update) for mentioned URLs to send mentions to.
- Note (including an optional photo) and bookmark syndication to Mastodon with GitHub Actions.
Good citizen of the web things
- Most pages don't require JS. There is a service worker as a progressive enhancement for caching.
- Where JS *is* required (experiments, art, etc.) I use unbundled, immutably cached JS modules with import maps and preloading as progressive enhancements: https://qubyte.codes/blog/progressively-enhanced-caching-of-javascript-modules-without-bundling-using-import-maps
- HTML pages have various security headers added.
- No cookies or tracking. My site is for me so I don't really care about visitor numbers, referrers, etc.
- Native font stacks (no need to download and cache a font).
- Immutably cached CSS. I use mostly classless CSS so some HTML bloat is avoided. (I have no sense of style though, so it might hurt your eyes.)
- Images processed into various sizes and available in AVIF and WebP as well as JPEG as a fallback.
- Lazy loaded images.
- A Node.js library for discovering rel-payment links: https://www.npmjs.com/package/rel-payment