System

Changelog

Everything built into this blog. All vanilla JS. No frameworks. No build step.

40+ modules 153 posts 200,000 words 0 dependencies

Navigation & Discovery

8 modules
posts-data.js
Single source of truth for all 153 posts. Title, slug, date, category, tags, word count, and reading time in one file.
Navigation
post-nav.js
Previous and next post navigation. Appears at the bottom of every post with category-coloured accents.
Navigation
series-nav.js
Multi-part series navigation. Groups related posts into numbered series with progress tracking.
Navigation
related-posts.js
Weighted algorithm recommending related posts. Scores by category match, shared tags, and date proximity.
Navigation
command-palette.js
Cmd+K search overlay. Fuzzy-matches across all post titles, filters by category, keyboard-navigable results.
Navigation
keyboard-shortcuts.js
j/k to move between posts, / to open search, Escape to close overlays. Vim-style blog navigation.
Navigation
journeys.js
Curated reading paths. Hand-picked sequences that guide readers through topics like a curriculum.
Navigation
toc.js
Auto-generated table of contents. Scans headings, builds a sticky sidebar, highlights the active section as you scroll.
Navigation

Reading Experience

7 modules
read-position.js
Remembers your scroll position across visits. Come back to a post and pick up exactly where you left off.
Reading
read-time.js
Calculated reading time from word count. Displayed in the post header so you know what you are committing to.
Reading
reading-mode.js
Distraction-free reading toggle. Hides navigation, sidebar, and everything except the words.
Reading
reading-list.js
Save posts for later using localStorage. Your personal reading queue, no account required.
Reading
highlights.js
Text highlighting and annotation. Select any passage, save it, and revisit your highlights later.
Reading
footnotes.js
Click-to-expand footnote system. Inline references that open without leaving the page.
Reading
back-to-top.js
Smooth scroll to top. Appears after scrolling down, with a subtle fade-in animation.
Reading

Visual & Ambient

8 modules
generative-hero.js
Algorithmic cover art per post using Canvas. Each post gets a unique, deterministic visual based on its title and category.
Visual
scroll-colors.js
Background colour shifts as you scroll through a post. Subtle ambient transitions tied to reading progress.
Visual
magazine-layout.js
Editorial pull quotes and layouts. Automatically styles blockquotes as magazine-style breakout elements.
Visual
glow-cards.js
Category-coloured hover glow on blog index cards. Each card radiates its category colour on mouseover.
Visual
parallax-cards.js
3D tilt effect on blog index cards. Cards respond to mouse position with a perspective transform.
Visual
dynamic-favicon.js
Tab icon changes per category. The browser favicon updates to match the colour of whichever post you are reading.
Visual
seasonal-palette.js
Colours shift with the seasons. Accent hues subtly change based on the time of year — warmer in summer, cooler in winter.
Visual
wavy-underline.js
Hand-drawn SVG link underlines per category. Each category gets its own wavy line style instead of a flat underline.
Visual

Personal Touches

8 modules
greeting.js
The blog remembers your name. First visit asks who you are, then greets you personally on every return.
Personal
typing-effect.js
First-visit typing animation. The blog intro types itself out letter by letter, then settles into static text.
Personal
ps-notes.js
Hand-written postscripts on select posts. Casual, personal notes that appear after the main content.
Personal
folio.js
"No. 47 of 153" edition numbering. Every post gets a print-style folio number based on publication order.
Personal
visit-tracker.js
Tracks which posts you have read. Adds visual indicators so you can see what is new versus revisited.
Personal
hover-preview.js
Wikipedia-style link previews. Hover over internal links to see a preview card with title and excerpt.
Personal
page-curl.js
Swipe to next post on mobile. A page-curl gesture moves you forward and backward through posts.
Personal
magnetic.js
Elements drift toward the cursor. Buttons and interactive elements pull slightly toward your mouse position.
Personal

Engagement

4 modules
share.js
Web Share API with social sharing fallbacks. Share to Twitter/X, LinkedIn, or copy the link with one click.
Engagement
mid-subscribe.js
Subscribe prompt that appears mid-article. Timed to show after you have read enough to be interested.
Engagement
plausible-events.js
Privacy-first analytics events. Custom event tracking via Plausible — no cookies, no personal data.
Engagement
offline-save.js
PWA offline reading support. Save any post for offline reading via the service worker cache.
Engagement

Interactive Pages

10 pages
Blog Dashboard
Stats, charts, writing calendar
Connections Map
Force-directed tag visualisation
Bookshelf
Visual book spine archive
Editor's Picks
Hand-curated top 10
Moods
Browse by feeling
Taste Fingerprint
Interactive taste profiler
Contact Sheet
All 153 posts as tiny frames
Reading Journeys
Guided reading paths
Archive
Chronological post archive
You
Personalised reading profile

Built with Claude Code. Zero frameworks. Zero dependencies.

← Back to Blog