Microfeatures I love in blogs and personal websites
The article explores microfeatures for blogs and websites inspired by programming concepts. It highlights sidenotes, navigation tools, progress indicators, and interactive elements to improve user experience subtly. Examples demonstrate practical implementations.
Read original articleThe article discusses various microfeatures that can enhance blogs and personal websites, inspired by Hillel Wayne's categorization of features in programming languages. These microfeatures include sidenotes for additional details, tables of contents for navigation, page progress indicators, easily linkable headings, grouping series of posts, dialogues for engaging content, and code blocks with origin details. The author emphasizes the importance of these features in improving the reader's experience without causing disruptions. Examples from different websites, such as Gwern's use of sidenotes and Chapel language blog's series navigation buttons, are provided to illustrate the implementation of these features. Additionally, the article suggests ways to make content more interactive and user-friendly, like creating clickable links within headings and providing context for code blocks. Overall, the article serves as a guide for website owners looking to enhance their platforms with these small yet impactful features.
Related
The demise of the mildly dynamic website (2022)
The evolution of websites from hand-crafted HTML to PHP enabled dynamic web apps with simple deployment. PHP's decline led to static site generators replacing mildly dynamic sites, shifting to JavaScript for features like comments.
Exposition of Front End Build Systems
Frontend build systems are crucial in web development, involving transpilation, bundling, and minification steps. Tools like Babel and Webpack optimize code for performance and developer experience. Various bundlers like Webpack, Rollup, Parcel, esbuild, and Turbopack are compared for features and performance.
The manager's unbearable lack of endorphins
The author explores satisfaction in swimming, coding, and managerial roles. Physical activities offer immediate feedback and endorphins, contrasting with managerial tasks lacking similar gratification. Transitioning to management poses challenges in finding fulfillment.
Software Engineering Practices (2022)
Gergely Orosz sparked a Twitter discussion on software engineering practices. Simon Willison elaborated on key practices in a blog post, emphasizing documentation, test data creation, database migrations, templates, code formatting, environment setup automation, and preview environments. Willison highlights the productivity and quality benefits of investing in these practices and recommends tools like Docker, Gitpod, and Codespaces for implementation.
My weekend project turned into a 3 years journey
Anthony's note-taking app journey spans 3 years, evolving from a secure Markdown tool to a complex Electron/React project with code execution capabilities. Facing challenges in store publishing, he prioritizes user feedback and simplicity, opting for a custom online deployment solution.
I really hate progress bars, they are incredibly distracting. One of the worst examples of front end programmers wasting their time reimplementing browser functions badly. I already have scroll bars! I do not need more scroll bars!
Also, link decoration: my browser already has a nice discreet indicator to tell me where a link goes, I don’t need or want mysterious dingbats in the running text. (It reminds me of websites that are so scared of hyperlinks that they send them via interstitial warning pages “YOU ARE LEAVING THE SITE!!!!1!1!”, or in a recent case via a $yber$ecurity box that broke the link completely.) And preview popups? Get in the sea, hostile obnoxious interruption.
Don't paginate this. I want to see at a glance the titles of all the posts the author wrote. I want to be able to ctrl-f to search these titles. Heck, even if you had 100k titles they could still easily be shown on one page, as it would compress to 1 or 2MB transmitted on the wire which is still more lightweight than the average web page size.
I've been working on a blogging service myself (here's my blog on it https://lmno.lol/alvaro), focusing on minimalism, hopefully enabling the content to shine on any kind of device (you can read from your favorite terminal too).
You drag and drop your entire blog from a markdown file https://indieweb.social/@xenodium/112265481282475542 (feels more like keeping notes, which you happen to export as a blog).
Service hasn't officially launched. You can play with https://lmno.lol (ephemeral posts) without signing up. Reach out if you'd like to register a blog (invite at lmno.lol).
ps. ASCII art is not displaying properly on Android (known issue). So far, I can only fix by including a monospace font. I'd love to know if this is still possible to fix using system fonts.
This is my set of "microfeatures", which are all available in the post I linked below [1].
- All posts must have title, summary, dates (published, updated), one tag at least, and hot link to top of post (it's always #main)
- Open graph metadata for all pages (title + summary)
- All first-party content must be accessible as plain HTML
- Typography and separator elements to establish structure and distinguish functionally different areas of content
- In-page navigation (especially jump links to and from footnotes)
- Table of contents when needed, in a disclosure element
- Custom navigation to group a series of posts
- Markers for external links
- Captions for images and embeds
- Disclosure elements for extra context
- Footnotes (with links back to the referring text)
- Index pages with summaries (the main blog index, and each tag's index)
- RSS feed (global)
So far I'm reasonably happy with things as they are. At some point I'd like to participate in a webring.
[1] https://www.evalapply.org/posts/emerging-from-dotemacs-bankr...
(edit: typo, and a point I forgot)
While I admire Gwern's work a lot, I often find his website is trying to do so much that my browser will really struggle. Especially on mobile. It's bad enough I usually avoid reading there, which is a shame.
I'm not sure exactly what causes it, but it might be a combination of page length with many layers of nested, richly formatted and embedded content.
Whether be it ChatGPT, medium articles, and recently even Google search!
UBlock Origin allows you to block JavaScript by default on all websites, and it's what I do. And Firefox has something called reader mode. Absolutely fantastic tools.
When I read articles with side notes, I often find myself constantly checking the side notes and then regret doing it because the info is unnecessary. I prefer the author to carefully think through and choose what info to present instead of just dumping info to the side notes.
On a slow and unreliable connection, it's also one more thing that I wish had a toggle to turn off.
Related to this, something I consider an anti-feature: any form of messing with a link to a different page that results in Control+Click not opening a new tab. Bonus negative points if you've scripted it to redirect the page in the current tab and there's no very good reason for it to be a single-page application (draw.io has a reason, the average blog does not).
Also, I'm confused about some points. For example, is progress meter really necessary? I mean, isn't the scrollbar a good indicator for the progress?
Nowadays I am going the other direction. For the most recent design on my personal site, I even have a “no footnotes” rule, on the theory that (for me at least) footnotes can be an indication of scattered thinking and/or insufficient editing.
Regarding the Table of Contents feature, however, I believe this makes a big difference in larger blogs, but for medium sized or smaller blogs, it can be a distractor. I use Hugo as well for compositing my site, and find that using ample first level headings (e.g., # Heading name) for major components alongside a solid flow that contains visual graphics placed shortly after the heading offers an attractive and easy-to-navigate browsing experience.
Here is a few additional things not on your list that I love and have implemented on my blog:
- Plain text versions of all posts. Change the file extension on any page on my site from ".html" to ".txt" to view it as plain text (https://breckyunits.com/intelligence.txt). Makes it easy to copy/paste a whole post into an email or Reddit submission
- View source links at the bottom of every page. Every post is 1 file tracked by git, and I put a "View source" link at the bottom of each page. Even the static pages are also one file, and also have a View Source link.
- Clientside full text search - https://breckyunits.com/search.html.
- CSV export. In addition to RSS, you can download my site as CSV (https://breckyunits.com/posts.csv).
- Keyboard nav. Use the left/right arrow keys to navigate through pages on my site.
- Helpful 404s. If you mistype a url, the 404 page compares it to working urls and shows you the closest match. All done using clientside JS (no web server needed). For example: https://breckyunits.com/pcr.html
- Download entire site and read offline. Everything is designed to work fine locally and you can download the whole thing as a zip. (The link is at the bottom of every page)
- Printable. Everything is designed to look decent printed. Nav elements are hidden via CSS when you go to print. I haven't added automatic generation of PDFS yet, but that is on my todo.
1. https://cassidyjames.com/blog/fediverse-blog-comments-mastod...
I think I saw it first on Julia Evans' blog (https://jvns.ca/categories/favorite/). I also added it to mine (https://thorstenball.com/blog/) and found the exercise of going through the posts and tagging them very enjoyable.
* Tastefully displays the most relevant citation at the bottom of the screen as you read, e.g. see https://redsails.org/really-existing-fascism/
* Uses system light/dark UI settings.
* Literally every article (with descriptions, author info, post date, etc) displayed on the homepage in chronological order with no pagination, great for ctrl-f, etc.
* Selected authors and category-based navigation available.
* Entire site is very fast and lightweight, text-focused, no superfluous javascript or CSS, good typography, works well on mobile, etc.
* First-class RSS feed support
It has a really interesting navigation where there's an article, links to related articles, and references etc.
Part of what I really like about it is the format of having the main text and then an "Advanced Discussion" accordion at the bottom that can be folded out for more detail. It's not uniformly used across all pages but I do like the format a lot. It's sort of an alternative to sidenotes but less disjoint where it treats the first part of a page as the intro and then expands in detail directions. It lets the intro be a higher-level and then "corrected" below.
Example (just one I found, there are better ones but not all pages have them):
https://mriquestions.com/how-to-reduce-sar.html
Anyway just chiming in that it's a microfeature that I like vs say wikipedia which can just be... massively overwhelming on some pages.
I don't necessarily think this feature is fully realized at mriquestions, but the MRI field suffers from multiple audiences (radiologists, technologists, engineers, etc) and its really difficult to pull content together that foster communication between these groups. mriquestions is by a radiologist so its a bit lacking on the engineering details side but its still pretty good but higher-level technologists use it well to get beyond the lies we tell them. It doesn't really get too far into the lies we tell radiologists though but sometimes it gets close (by lies I mean oversimplifications) and usually the references are good for the technical details.
I used openring-rs for my Astro [1] site, but eventually replaced it with a TypeScript-native solution [0]. You can see it on my blog, e.g. at the bottom of this link [2].
If you're looking for an easy way to pull RSS feeds from TypeScript and show the N most recent posts, take a look at my library.
PS: I'm currently unemployed, so if you have any feature requests I will quickly oblige :)
PPS: if you haven't heard of Astro [1], do yourself a favor and check it out. You write JSX syntax and get static HTML/CSS out, with the option for JS only as needed.
[0]: https://github.com/shepherdjerred/webring
[1]: https://astro.build/
<prism-remote src="https://github.com/Fingel/prism-remote/blob/main/prism-remot..." start="1" end="10" lang="javascript" > </prism-remote>
If I wanted it in a new tab, I'll bloody well open it in a new tab myself. The feature is right there. Don't overrule the user. That should be illegal.
Now instead i click, have to go back, close the old tab, and history is wiped. Thanks for nothing.
I try to make [mine](https://rednafi.com) center aligned on all clients.
I haven't found a nice way to do this on both desktop/mobile. What I want is for every heading to have an anchor link that can be copied, similar to a hyperlink. I see a lot of sites do this with a [unicode chain symbol] which is present on hover, but that's not an option on mobile. Alternate option is to have it next to every heading (ugly), turn every heading into a hyperlink without styling, or make them look like regular hyperlinks which I think is confusing.
Progress Bars seem like an eyesore to me, a distracting visual feature that's trying to goad me into finishing the article. As other commenters mentioned, the browser already has a scroll bar, which indicates the amount of content I have read. A progress bar just seems unnecessary.
As for dialogues - while they can be cute and interesting if done well, it usually just gets in the way of the content I'm trying to read. The problem that it solves - "ask[ing] questions from a less-experienced point of view" - can often be accomplished with regular prose instead eg. "But you might be asking..."
A feature that I'd like to see in more blogs is a 'Tech Stack' page[0]. I've often stumbled on websites that look very appealing, but have no description of how they were created. This page would describe the technologies and tools you use to write your website. Things like static site generators, CSS, JS framework (if any) could go in here.
I'd also like to add 'Site Maps'[1] to this, which I've implemented as a list of all articles on my website.
[0]: I have such a page at https://twomorecents.org/tech-stack.html
[1]: Looks like this has already been mentioned: https://news.ycombinator.com/item?id=40778888
It is explained here:
https://john.kozubik.com/pub/IcebergArticle/tip.html
“An Iceberg Article is a single page of writing which links to a larger collection of supporting documents, resources and services.”
I just look at the scroll bar.
And on top of that, how is it going to work on mobile?
One who does a lot of writing should work on avoiding sidenotes and footnotes altogether. If there's something related to the article that is important or noteworthy, incorporate it into the main piece.
- random post button
- most popular posts
- author's favorite posts
across reader experience, author experience, and developer experience (for self maintained blogging software)
https://zquestclassic.com/docs/2.55/
I should add a check for `prefers-reduced-motion` https://developer.mozilla.org/en-US/docs/Web/CSS/@media/pref...
I use them for my annual book review posts. No idea if anyone ever uses them, but damn are they pretty to look at.
- flash/highlight the fragment when clicking a link to it. Also, adding some padding for making sure the header is not covering part of the fragment
- an alternative to sidenotes is to use an initially collapsed details/summary element.
- inlining css, js, and svgs so it can be saved as a single html file
This post has some examples of those features:
On the link preview feature, both Wikipedia's and Gwern's implementations put the preview on top of the main content. I think this is much nicer to put to the side, where its less intrusive: https://www.jefftk.com/p/preview-on-hover
For example, when you're showing a before and after, and want to highlight what changed. For example, I use it in the docs for: https://www.neilvandyke.org/racket/progedit/
The is one of the many features supported by Racket's Scribble, which is used to generate the online and print books for the Racket ecosystem. https://docs.racket-lang.org/scribble/ (Which I also used for API docs embedded inline in the code of various Racket packages I wrote.)
I've created a Linkz.ai link preview script for blogs & websites - it adds fast (no iframes) summaries that appear on hover, and, optionally, on-click, it extracts linked articles, videos & embeds and shows them within the blog. When fewer people follow hyperlinks, it's a win-win situation; the website owner improves its retention and visitors are not overloaded with new tabs.
It's all based a static site and it relies on HTMX for this feature. I've also made sure the page works without JS. For now it is a bit rough and sometimes it may not be clear that it opened underneath but I want to explore this a bit more.
Sidenotes in particular are something I want to see basically everywhere, not just blogs. Modern screens have tons of horizontal space, text is most readable in pretty fairly narrow columns anyway, and scrolling to the bottom just to read a footnote (or, worse, having it pop up in some janky pop-over) is really unpleasant. Happy to see them catch on the blog world at least.
Not sure how to describe it but when I scroll down, the header disappears. But if I scroll back up even a tiny bit, the header comes down back into view.
It's annoying to me because I'm usually reading near the top of the page, and the appearing header is both distracting and often obscures what I'm trying to read.
This is unfortunately too often not the case, as people see fit to hide the default scrollbar and have something of their own that doesn't always show or is barely obvious.
Though I agree with ToCs and showing progress that way, for pages long enough to make it useful rather than just extra visual noise, though this page itself doesn't actually do that with either of the techniques shown (an extra bar showing just progress through the actual content, or using the contents list as such a display), unless my content sanitisers have blocked some JS that would be doing such work (I see no evidence of such a problem).
> Easily Linkable Headings
Again, these are sometimes very useful, and when not are easy to ignore completely.
But again, the page doesn't make use of the feature it is extolling the virtues of!
> Grouping Series of Posts
Yes, though I might argue that such links, or a link to a ToC page for the group, belong in a more general list of related links.
> Dialogues
I can't say I agree there, but I think that sort of style point is very subjective so I'll agree to disagree :-)
> Code Blocks with Origin
Yep, can be very useful where relevant.
> Markers for External Links
Definitely, including local links that open in a new tab should also be visually indicated.
I'd stay away from an icon per target site/type though - that could quickly get confusing as you essentially have many icons for the same thing (an external link), and every site will use its own preferred set of icons, so the difference won't help generally identify things at a glance.
> Link Preview
For me, yes, though I'd be very careful where to use such things. It might confuse many non-technical users.
> Anything else
I'd like all articles to carry an obvious date of publishing and/or last update. That can be very useful in judging if the content is likely to be entirely relevant or should be verified where it may go stale.
- A sidebar table of contents that highlights the current section
- Glossary links that open in a popup. It saves the trouble of redefining certain things
- Bottom line up front, or starting with the tl;dr
- Dark theme that follows system settings
- Content superseded by a calculator. Here's how you calculate your taxes, and here's a calculator widget that does it for you
- Larger, more readable font on desktop
- Narrower page margins on mobile to get longer lines
- Index pages without pagination, so that you can view all pages at once
- The /uses page where creators list the tools they use and the setup they have
- Non-chronological index pages for digital gardens. I love content that gradually improves, and best-of sections for the best bits
Honestly, I am baffled that anyone ever writes code blocks for multi-file projects without specifying the file name and path. Especially in a tutorial. I would just... never do that? If you have an actual repo to refer back to, fine, but saying "Write this code" without saying where to write it is just not good instruction.
There used to be a great feature available in every scrollable window which showed one’s position: the scrollbar. The bar itself was nice and wide, and there was an indicator right there which showed where one was in the document. They were useful, and they were consistent.
Then scrollbars got skinny, and then they disappeared. And so now each page which wants such a thing has to reinvent it. Also, it’s very difficult to actually scroll windows anymore.
Edit: yeah, he does mention that it’s nice to know position in the article versus in the comments. Point, and while separate windows/panes/frames/whatever would be one way to handle it, his suggestion is probably better.
I especially love the progress-oriented table of contents/nav highlighting which section(s) you're currently viewing using the Intersection Observer API.
i find it fascinating though in terms of how tech literate folks from outside this space is changing the way they consume written (web) content.
from the llm-chat paradigm shift, most people are less likely to read the source material, if this was not already the case thanks to tiktok and google search summarization. while i might feel that most people outside of hn were not reading personal blogs anyways, how many would truly appreciate these quality-of-life features.
All headings have anchor links. https://josh.works/jaywalking or https://josh.works/full-copy-of-1922-atlanta-zone-plan
[1] https://squidfunk.github.io/mkdocs-material/setup/setting-up...
For a long, long time it's appeared to me that I'm the last person on Earth still using Typepad, which since it started being bought and sold a decade or so ago has had gradual serious decrements in speed and functionality.
It takes on average 10 seconds to upload a photo, and usually 2-3 attempts because of broken links.
Many times a past post which was intact now appears with broken image links.
And yet, I'm still able to post even though I probably know as little about code as anyone who visits HN.
My technical deficiencies are why my blog looks almost identical today to its appearance at inception.
At 76, I'm too old to do anything but continue in the same fashion.
A question: Is there anyone else here who uses Typepad?
As best as I can tell, the standard name for these is 'scroll spy'. Gwern.nt mobile example: https://gwern.net/doc/design/2023-04-28-gwern-gwernnet-mobil...
They are becoming increasingly common as web browsers/OSes kill scroll bars and you are forced to implement your own: https://artemis.sh/2023/10/12/scrollbars.html
> I’ve seen this floating ToC done before, but could not find a site off the top of my head that implements the feature
Gwern.net has it! It's just that because we use both margins already, there is usually not enough horizontal space. But if you have a wide enough screen, you should see it, like https://gwern.net/doc/design/2023-08-07-gwern-gwernnet-deskt... You can also see this on LessWrong.com and https://80000hours.org/podcast/ podcasts.
> Relatively often I come across pages that have unique IDs for each header, but no clickable links! I end up having to use inspect element to find the anchor points.
Chrome has a 'link to text fragment' feature for this which got standardized and which Firefox is supposed to support at some point. So not so necessary as it used to be. (The unique IDs are often not so unique anyway or unstable.)
> I’ve found the link processing code on GitHub , and even the list of websites that get their own icons . I could not find a verbal description, though.
Links.js hasn't been used in years on Gwern.net. You actually want https://github.com/gwern/gwern.net/blob/959ba9c50d327a960e07... https://github.com/gwern/gwern.net/blob/959ba9c50d327a960e07... and for the history/overview, https://gwern.net/design-graveyard#link-icon-css-regexps , and to see all of the link-icons, https://gwern.net/lorem-link#link-icons
> Gwern’s website has no shortage of cool ideas. Among them showing link previews on hover. When hovering over a link, the site displays a popup window that contains a view into that page. I suspect that this view is also archived somehow, so that it retains a view into the page that matches it at the time of writing.
The archiving is complicated. Most of what you are seeing there is the use of iframes for 'live' links. (I manually check that websites do not break in an iframe before whitelisting them for popups like that.) But we do make extensive use of archives: https://gwern.net/archiving#preemptive-local-archiving
> Links to Other Sites
Gwern.net has a blogroll, incidentally. But I've always found the traditional 'big list in the sidebar' to be clunky. More fun is the 'site of the day' approach. So we went with an 'X of the Day' approach: in the footer of every page, there is a quote, a website, and an annotation of the day. (It's not really 'daily', but every few days after a full site sync.)
The worst is the sticky side button overlapping the main content. A few years ago, I sometimes saw "share on social media" buttons obscuring the article, and that was so annoying.
WordPress used to have a Links section in the sidebar by default. It was later criticised for the default links being to WP founders/devs. But it was there, and you could change it.
Links are the web for me. "If you like my site maybe you will like what I like".
Go look at https://diamondgeezer.blogspot.com/ - links!
Go look at other sites and if they are WP chances are no link list.
Am I blaming WP? Yes because I thought it was a terrible change. No because other site builders/SSG's appear to have followed.
Links make the web what it is.
We need more, not less.
Justified text on a screen is a feature that makes my eyes and brain hurt.
Ragged text is much easier to read. Uneven and beautiful, like a plant whose details you rest your eyes upon as you observe, rather than a uniform concrete structure where vision is lost.
(╯°□°)╯︵ ┻━┻
┬─┬ノ( º _ ºノ)
OK, table of contents, you're cool.
Recently, I added a dynamic chart that shows how frequently and how much I work on my website, similar to the GitHub contribution chart. Not the kind of features the author was mentioning, but fun regardless: https://navendu.me/about/#about-me
Related
The demise of the mildly dynamic website (2022)
The evolution of websites from hand-crafted HTML to PHP enabled dynamic web apps with simple deployment. PHP's decline led to static site generators replacing mildly dynamic sites, shifting to JavaScript for features like comments.
Exposition of Front End Build Systems
Frontend build systems are crucial in web development, involving transpilation, bundling, and minification steps. Tools like Babel and Webpack optimize code for performance and developer experience. Various bundlers like Webpack, Rollup, Parcel, esbuild, and Turbopack are compared for features and performance.
The manager's unbearable lack of endorphins
The author explores satisfaction in swimming, coding, and managerial roles. Physical activities offer immediate feedback and endorphins, contrasting with managerial tasks lacking similar gratification. Transitioning to management poses challenges in finding fulfillment.
Software Engineering Practices (2022)
Gergely Orosz sparked a Twitter discussion on software engineering practices. Simon Willison elaborated on key practices in a blog post, emphasizing documentation, test data creation, database migrations, templates, code formatting, environment setup automation, and preview environments. Willison highlights the productivity and quality benefits of investing in these practices and recommends tools like Docker, Gitpod, and Codespaces for implementation.
My weekend project turned into a 3 years journey
Anthony's note-taking app journey spans 3 years, evolving from a secure Markdown tool to a complex Electron/React project with code execution capabilities. Facing challenges in store publishing, he prioritizes user feedback and simplicity, opting for a custom online deployment solution.