Changelog

What has been built, when, and why. This publication is an ongoing project, readers who care about it deserve to see it develop.

  • Article and library reader toolbars now render from a single shared partial (partials/annotation-toolbar.njk). Library chapters and short works gained the buttons they were missing — back-to-top, percent-through pill, like, mark-read, pdf basket, comments slot, feedback slot — and the article toolbar no longer drifts independently of the library variant.
  • Library readers don't see Info or Comments — the compact- header pattern those buttons control doesn't apply to public- domain texts and library pages don't host article comments. Both are suppressed at template time, not hidden by JS.
  • Highlight button commits a yellow highlight on the first click instead of opening a colour picker. The earlier picker added a modal step every time and most readers stuck with yellow anyway. Existing non-yellow highlights still render in their original colour — only new highlights default to yellow.
  • Scroll-triggered article reading header retired. Articles keep the masthead visible on scroll instead of fading it for a duplicate section + title bar. Library chapters keep their sticky reading header — the work title is the primary anchor for long-form public-domain texts.
  • Hovering or focusing the in-text bookmark button now reveals a thin accent rule at the exact Y coordinate where the bookmark will land, with a pin glyph anchored in the gutter to the left of the prose. Touch users get a brief flash on touchstart so the landing point is visible before the click commits. The preview and the saved bookmark always agree on position because both call the same anchor calculation.
  • Duplicate bookmarks at the same scroll position are now suppressed. Articles dedupe within ±2 percentage points OR ±60 px of body offset. Library chapters dedupe within ±2 percentage points in the same chapter. Double-taps and thumb-jitter no longer stack identical pins.
  • Library chapter and short layouts were rendering as a blank page on direct load. A truncated focus-mode inline script opened a <script> tag that never closed, so every byte after it parsed as JavaScript and the DOM never rendered. Removing the dead script restored 95 chapters to the search index (251 → 346 indexed pages).
  • Republish modal now opens fullscreen as intended. It previously rendered inside the article header's stacking context (z-index 10), so the masthead and bottom toolbar painted over its top and bottom halves and the close button was unreachable. Moved the panel to the document top level so its z-index resolves against the viewport.
  • Republish modal pins its header at the top while the body scrolls, so the close button stays reachable regardless of where the reader has scrolled inside the modal. The grab-code textarea also expanded from 10 rows to 30 so the full embed snippet is visible without manual resize.
  • Highlight wash opacities bumped from 0.15-0.20 to 0.38-0.40 on dark backgrounds — the previous values disappeared into the surrounding paragraph. Hover variants added for every colour. The note-attached dotted underline tracks brighter palette hues at 0.85-0.95 alpha so the dot pattern reads through the saturated highlight.
  • Date format unified site-wide. Five client-side renderers (annotations, library notes, revision history, archives timeline, notes page) were using month:'short'. All now use month:'long' to match the canonical Month DD, YYYY format the readableDate / shortDate filters produce server-side.
  • Breadcrumb path collapses the trailing crumb when its label duplicates the previous one — so /library/common-sense/ full-text/ now reads "Home / Library / Common Sense" instead of the duplicated "Home / Library / Common Sense / Common Sense" that occurred when chapter and work titles matched.
  • Explore mega menu expanded to surface every hub on the site — Read (13), Tools (13), Community (11), About (16) — without the per-link descriptions that crowded the dropdown. Each link is now a single line so the full inventory fits without scrolling.
  • Five inline ad-hoc breakpoints in template <style> blocks (700, 600, 900, 520, 600) snapped to the canonical seven-band scale (360 / 480 / 640 / 768 / 1024 / 1180 / 1280) documented in tokens.css.
  • Drawer + global-settings panel + editorial flyout hardened with min-width: 0 and overflow-x: hidden so descendant content that overflows horizontally can't push the panel sideways.
  • Front-page section strips collapse to single-column at 1024 px (was 640 px), removing the 768-px tablet-portrait dead zone where a 220-px label column starved the inner cards row.
  • Author hero photo scales with clamp(120px, 40vw, 184px) so the avatar shrinks gracefully under 360-px viewports.
  • article-action-btn floored at 44 × 44 (was 32 × 32) for WCAG 2.2 AA touch-target compliance on layouts where the buttons render inline rather than migrate to the bottom toolbar.
  • The site now receives and displays Webmentions via webmention.io. Replies, likes, reposts, and bare mentions are grouped beneath every article and author page, with avatar + name + excerpt cards for replies and a facepile for likes / reposts.
  • Build-time fetch via @11ty/eleventy-fetch with a 24-hour cache. The site falls back to a silent empty state when a page has no mentions, so fresh articles don't carry dead space.
  • "IndieWeb identity wired: <link rel=\"me\"> pointing at github.com/jonajinga in <head>, with the reciprocal Website field set on the GitHub profile. Enables IndieAuth sign-in against the domain."
  • Preview mode (`WEBMENTIONS_DEMO=1 npm run dev`) injects a synthesised bundle of replies and likes so the block can be previewed locally without waiting for real mentions.
  • Token contrast tightened — --color-ink-muted darkened to #3D3B39, --color-ink-faint to #4F4A48. Every meta / caption / dateline now clears WCAG AA 4.5:1 against every background variant.
  • Global `prefers-reduced-motion` — any transition or animation collapses to a single frame when the reader prefers reduced motion.
  • Display-settings panel gained a proper focus trap — Tab wraps at edges, first control autofocuses on open, focus returns to the trigger on close.
  • Reading-floats wrapper no longer uses aria-hidden with a focusable descendant. The back-to-top button uses visibility:hidden until scroll exposes it, removing it from both tab order and a11y tree.
  • Rebuilt the per-article share card. Author name now resolves correctly from the authors data map (was previously falling back to an empty string), publish date appears on the byline bar, and the layout centres title + deck in a proper editorial frame.
  • Render path switched from SVG foreignObject to native <text> + <tspan> because the resvg-js rasteriser silently skips foreignObject — that was the cause of the big blank tan void in the middle of cards.
  • Header + byline typography sized up and brightened to pure white so the masthead and credits stay legible at thumbnail scale.
  • New .page-header component (kicker + title + lede) replaces the inline-styled headers on About, Accessibility, Contact, Cookies, Editorial Ethics, Privacy, Stack, and Terms.
  • New .btn--primary / .btn--secondary variants, three .divider weights, a unified .empty-state pattern, and breadcrumb active- state styling.
  • Newsletter hero copy tightened — "The newsletter. Direct to your inbox." → "One email, one article." Support headline → "Reader- funded, always." Subscribe button label reduced to plain "Subscribe".
  • Reader panel desktop width widened from 460 → 678 px (+47% across two passes) for long titles and crowded sidebars.
  • Reading-settings merged into the global display-settings panel. Reading ruler, paragraph numbers, and auto-scroll controls only surface on pages with an .article-body element.
  • Auto-scroll now yields instantly to any reader input — wheel, touchmove, arrow keys, PageUp / PageDown, Home / End, Space — so readers never get trapped scrolling the wrong direction.
  • Unified /archives/showcase/ and /archives/timeline/ — one pair of pages driven by URL parameters (?author, ?section, ?subsection, ?topic, ?year, ?month). Buttons on the archives page, author hero, section index, and topic pages link to the appropriately filtered view.
  • Archive page filters now persist in the URL so filtered views are shareable and survive reloads, with popstate re-syncing on back / forward.
  • "From the archive" surface on the newsletter page surfaces older pieces beneath the signup form as a rediscovery counterpart to the forward-looking feed.
  • Articles are now SPA-navigable — the background music iframe survives navigation between articles, sections, library chapters, glossary entries, and utility pages. The list of forced-reload paths (dashboard, notes, search, events, library chapter) has been removed.
  • Music bar centred across both the annotation-toolbar dock and the standalone fixed bar.
  • Text-to-speech removed entirely — the integration had chronic cross-browser issues on Android offline voices and desktop highlight sync. ~800 lines gone from progress.js, CSS, and templates.
  • Sticky scroll-spy table of contents sidebar added to all long-form reference pages: Features, How It's Built, Privacy Policy, Accessibility, Terms of Use, Editorial Ethics, Cookies Policy, About, Community Guidelines, Language, Costs, Open Source, Your Data, Contribute, and all four Resources sub-pages
  • Uses the same .sg-layout / .sg-nav / scroll-spy JS pattern as the style guide — 13rem sidebar column, active link highlighted with accent border-left
  • Fixed sticky top offset from 5rem to 7rem so nav clears the full masthead height (nameplate + nav bar)
  • Added scroll-margin-top: 7rem to .sg-layout h2[id] so anchor jumps land below the masthead
  • Full audit of all .njk templates — every non-standard breadcrumb converted to the canonical .breadcrumbs BEM component
  • 33 files updated: all submission forms, project index pages (music, gallery, timeline, videos, quotes, glossary, games), resource sub-pages, and miscellaneous pages
  • Standard: accent-coloured .breadcrumbs__link, / separator via CSS ::before, current page in ink-faint with aria-current
  • Reading-header back links (← section) intentionally left as-is — those are in-article navigation, not page breadcrumbs
  • New .hub-card and .hub-card-grid CSS component extracted from repeated inline styles
  • Applied across Transparency, Legal, Reader Tools, and Resources (On This Site) hub pages
  • Cards: background alt, 3px accent top border on hover, font-headline title, muted description, full hover state
  • Staff publication entry excluded from the 'Support a Contributor' tipping section — only individual contributors with Ko-fi/BMac/Patreon links appear
  • Support block cards restyled: accent top border, improved spacing between badges and divider lines
  • Masthead updated: Jon Ajinga entry expanded with full bio, role, and location; funding statement updated to reader-funded; Letters and Contributors sections improved; Transparency link added
  • How It's Built (stack): Project Broadsheet section added at top; page count corrected to 500+; font loading described accurately (on-demand, not pre-loaded)
  • Features: Project Broadsheet GitHub URL corrected to jonajinga/project-broadsheet; projectbroadsheet.com link added
  • Privacy policy: last-updated date corrected to April 18, 2026
  • Site map: details elements left an empty bordered ghost when collapsed in CSS grid — fixed with align-self: start on .sitemap-section
  • Author hero: photo was touching the name/byline — gap increased from space-6 to space-10
  • Footer: 'Powered by Project Broadsheet' moved to its own line
  • Pages load without full page refresh — music and global state persist across navigation
  • Article and reader pages use full reload so reader tools initialize properly
  • Fetched pages cached in memory for instant revisits
  • Closes drawer, search, and settings panels on navigation
  • Persistent background YouTube player at /music/
  • Dark mini bar at bottom with transport controls (play/pause/prev/next/volume)
  • Music continues playing across page navigation via localStorage state
  • Custom playlist URL input accepts YouTube and YouTube Music URLs
  • Song suggestion form at /music/submit/
  • Gallery page at /gallery/ with responsive grid and category/licence/source filters
  • Lightbox viewer with zoom in/out, keyboard controls (+/- arrows Escape), and download
  • Photo submission form at /gallery/submit/ accepting hosted image links
  • New editorial section at /reviews/ for book, film, podcast, and documentary reviews
  • Star ratings, media type badges, creator and year metadata
  • Added to nav bar, Pagefind search, and CMS config
  • Merged Explore into Projects — everything is now a Food Project
  • Split Submit into Get Involved + Suggest Content
  • Merged Transparency + Legal into one section
  • Every link has a title tooltip describing the destination
  • Sitemap rewritten to match footer structure with all pages listed
  • Dark mode ink-faint contrast raised from 3.7:1 to 5.0:1 (WCAG AA compliant)
  • Replaced 5 hardcoded 11px font sizes with var(--text-xs) token
  • Mobile calendar touch targets increased from 36px to 44px
  • Privacy policy updated with YouTube API, Tippy.js, instant.page, SPA, music player disclosures
  • Cookies policy updated with YouTube music player cookies
  • Nav bar reduced to 7 editorial sections + More mega-dropdown
  • More mega-dropdown: 5-column layout (Explore, Projects, Community, About, Reader Tools) with title + subtitle descriptions
  • Hamburger menu redesigned: no uppercase links, visual hierarchy via font weight, toolbar pinned to bottom, language toggle inline
  • Footer restructured: brand + newsletter combined, 8 columns (brand, Sections, Explore, Community, Contact & Submit, Reader Tools, About, Transparency)
  • Dropdown timing: 150ms hide delay prevents accidental close when moving mouse to dropdown
  • Sidebar removed — article body now single-column, centered
  • Table of contents moved to reader panel as Contents tab
  • Related articles moved to reader panel as Related tab
  • New meta row under byline: word count, read time, listen time (~1.3x read), topic tags
  • Suggest a correction button added to article action bar
  • Author bio card removed from article footer (redundant with byline link)
  • Subscribe block removed from article pages
  • Comments section padding and height reduced
  • Site Map at /site-map/ — visual directory of every page, Economist-style grid layout
  • Terms of Use at /terms/ — plain-language terms covering content ownership, submissions, data
  • Cookies Policy at /cookies/ — documents zero first-party cookies, localStorage approach, third-party cookies
  • Accessibility at /accessibility/ — WCAG 2.2 AA commitment with detailed feature documentation
  • How It's Built at /stack/ — plain-language explanation of the entire tech stack
  • Explore hub at /more/ — landing page for all non-article content with card grids
  • Pagefind: added section filters for Glossary, Bookshelf, and Timeline (were indexed but not filterable)
  • Added Videos and Timeline filter buttons to search modal
  • Fixed empty-query filter-only search (null instead of empty string)
  • Improved no-results message for filter-only searches
  • Listen button now shows controls without auto-playing — user clicks Play to start
  • Network voices sorted above offline voices in voice selector
  • Chrome silent bug fix: cancel + 50ms delay before speak()
  • Speech stops automatically when navigating away
  • YouTube embeds switched to youtube-nocookie.com (enhanced privacy mode — no cookies until play)
  • Privacy policy updated with Videos/YouTube section
  • Cookies policy updated with YouTube disclosure
  • All page headers standardized: clamp(1.8rem, 5vw, 3.815rem), padding-bottom space-6, margin-bottom space-10
  • Container padding normalized: space-10 top, space-20 bottom on all standard pages
  • Dark mode fix: video embed background changed from #000 to var(--color-ink)
  • Form submit button contrast fixed in dark mode (color: var(--color-bg))
  • Form field background changed to --color-bg-alt for visibility in both modes
  • Videos page title changed from 'Video Library' to 'Videos'
  • RSS feeds: switched to @11ty/eleventy-fetch with 1-hour disk cache
  • Service worker: precache expanded to include reading-list, reading-settings, download, calendar, dictation JS
  • Language selector: navbar globe icon opens dropdown, drawer selector enlarged
  • Broken link audit: 0 broken internal links across 322 pages
  • eleventy-plugin-broken-links installed (disabled in config due to Eleventy v3 incompatibility)
  • Global display settings panel in masthead: font (27 options across system serif, sans, mono, and Bunny web fonts loaded on demand), font size, line spacing, word spacing, and unified theme selector (Auto / Light / Sepia / Cream / Dark)
  • Article reading settings expanded to match: 27 fonts (dropdown with optgroups), line spacing (tight/normal/relaxed/loose), text width (narrow/normal/wide), word spacing, background presets, reading ruler, paragraph numbers, auto-scroll with speed control, and reset to defaults
  • Reading ruler now constrained to article body width instead of spanning the full screen; updates on window resize
  • Background selector active state (is-active) now correctly highlights the selected background button
  • Reader panel no longer auto-opens on mobile (screens <= 768px)
  • Full reading settings panel added to library chapter and short layouts — identical to article settings (27 fonts, spacing, width, background, ruler, paragraph numbers, auto-scroll)
  • Fixed duplicate reading-settings IDs that prevented the settings panel from opening on library pages
  • Reading settings panel placed in the action toolbar for immediate visibility (not in the hidden sticky header)
  • Daily quote bar below the masthead header — shows a quote from the collection, rotating every 10 seconds with a fade transition; links to the showcase page
  • Quotes Showcase at /quotes/showcase/ — full-screen screensaver-style page cycling through all quotes with crossfade transitions, auto-advance (10s), Fisher-Yates shuffle, prev/next buttons, keyboard navigation (arrow keys, space, P to pause, Escape to exit), progress bar, and pause/play toggle
  • Showcase respects current theme — uses --color-bg and --color-ink custom properties so dark mode, sepia, and cream all work
  • Action button icons shrink on small screens (<=480px) to fit on a single row without wrapping
  • Reader panel auto-open disabled on mobile to avoid covering the article
  • Expanded from 11 to 52 terms covering philosophy, arguments for/against God, ethics, science, legal, and religious concepts
  • Restructured as A-Z index with vertical sticky letter nav on right side
  • Individual term pages use simplified layout (title + definition only)
  • Real-time search filters terms and definitions
  • Self-hosted Tippy.js + Popper.js (~12 KB gzipped) for inline glossary tooltips
  • Glossary terms automatically detected in article and library body text
  • First occurrence of each term gets a dotted underline; hover shows definition
  • Works on all article pages and all library reading pages
  • Words highlight in yellow as they are spoken aloud via text-to-speech
  • Uses Web Speech API onboundary event (Chrome, Edge); graceful fallback on Firefox/Safari
  • Auto-scrolls to keep the current word visible
  • Community suggestion form at /community/submit/
  • Style guide at /style-guide/ — brand identity, typography, colour palette, UI patterns
  • Removed Beyond the Articles section from homepage
  • Author pages now indexed by Pagefind with Authors section filter
  • Library catalogue author names link to author pages
  • Project section h1 uses clamp() sizing to prevent title clipping on mobile
  • TTS: removed setTimeout that broke Chrome user gesture requirement
  • Food Timeline rebuilt as vertical alternating CSS timeline with era markers, scroll-reveal animation, and era filter
  • Timeline Showcase at /timeline/showcase/ — full-screen screensaver cycling through events with auto-advance (12s)
  • Quotes Timeline at /quotes/timeline/ — quotes arranged chronologically with years extracted from source citations
  • Bookshelf Timeline at /bookshelf/timeline/ — annotated bookshelf entries in chronological order
  • Trials of Thought Timeline at /trials/timeline/ — landmark trials from 399 BCE to 1989
  • Trials Showcase at /trials/showcase/ — full-screen screensaver cycling through trial events (15s)
  • Shared timeline CSS partial for consistent styling across all timeline pages
  • 6 highlight colours: yellow, pink, blue, green, orange, purple — colour picker popup on highlight button
  • Highlight colours adapt to all themes (light, dark, sepia, cream) with per-theme CSS
  • WYSIWYG note editor replaces prompt() dialog — formatting toolbar (bold, italic, lists, quotes, links)
  • Notes render as rich text in the reader panel (was plain text)
  • Reading ruler: customisable thickness (1–8px), 7 colours, 4 styles (solid, dashed, dotted, glow)
  • Ruler fixed at 40% viewport on mobile (was following finger on scroll)
  • Ruler hides during text selection, reappears when deselected
  • Highlight and note features enabled on library pages (was article-only)
  • 6 new submission forms: timeline entry, book recommendation, public domain text, glossary term, trial, thought experiment
  • Submit hub page at /submit/ — card grid linking to all 10 submission forms
  • Submit links added to all section index pages (timeline, glossary, bookshelf, library, trials, thought experiments)
  • Explore hub at /explore/ — links to Library, Quotes, Videos, Timeline, Games, Resources
  • Transparency hub at /transparency/ — links to Features, Stack, Changelog, Corrections, Open Source
  • Legal hub at /legal/ — links to Privacy, Terms, Cookies, Accessibility, Guidelines, Site Map
  • Reader Tools hub at /reader-tools/ — links to Search, Notes, Reading List, Archives, etc.
  • Community Guidelines at /community-guidelines/ — comment standards with link from article comments
  • Footer restructured: brand row + 5-column grid (two rows), all 9 sections separate
  • Footer section headings link to their hub pages
  • instant.page added for near-instant navigation via hover prefetch
  • Base font sizes increased: --text-xs 10px→12px, --text-sm 13px→14px
  • 8 contact forms: Contact Us, Submit a Piece, Report a Correction, Submit an Event, Submit a Tip, Send Feedback, Write a Letter, Submit a Quote — all with hCaptcha spam protection
  • Forms accessible from contact page card grid, article 'Suggest a correction' links, Letters section header, Quotes page header, and Events page footer
  • Shared /thank-you/ page with newsletter CTA
  • Form CSS: accent top border, font-ui throughout, required field indicators, disabled submit state, auto-fill referrer on correction and feedback forms
  • Submit button disables on click to prevent double submissions; textarea maxlength on all forms; print styles hide forms
  • Voice search: microphone button in search modal — speak to search, real-time transcription, pulsing animation while listening (Chrome, Edge, Safari)
  • Glossary pronunciation: speaker icon next to every glossary term title — click to hear the term spoken aloud
  • Form dictation: 'Dictate' button on tip line, letter, and feedback textareas — speak to type with continuous recognition
  • TTS voice selector fixed on mobile — was hidden at ≤640px, now shows full-width below speed buttons with retry logic for Chrome async voice loading
  • Full rewrite of calendar.js, calendar.css, and events.njk for editorial aesthetic
  • Recurrence engine: weekly, monthly, and annual events now generate concrete instances across a 1-year horizon
  • Compact month grid (48px cells) with colored dots instead of text labels; hover tooltips showing event names
  • Editorial event cards with kicker/headline/dek pattern matching article cards
  • Slide-in detail panel (right on desktop, bottom sheet on mobile) replaces modal popup
  • Sidebar on all views: Next Up (5 events), This Month (counts by type), Organizations
  • URL hash state: view, date, and filters persist across page refresh; back button navigates between views
  • Keyboard navigation: arrow keys in month grid, Enter to open events, Escape to close detail panel
  • Touch swipe on mobile month grid to navigate months; compact mobile month with dots
  • Filters now work across all views (type, region, upcoming/past)
  • Hamburger drawer reorganized into 5 labeled groups: Sections, Explore, Community & Events, Resources & Tools, About
  • Footer reorganized from 4 mixed columns to 5 semantic columns with responsive 5→3→2→1 grid
  • Letters section header links to letter form + email; wrong email address fixed
  • Quotes page links to quote submission form
  • About page contact section links to all forms
  • Support page links to letter and tip forms; submit page updated with no-payment disclosure
  • Drawer width uses min(280px, 85vw); nav dropdown uses min(560px, 90vw)
  • Touch targets increased to 44px on drawer actions and calendar controls
  • Horizontal article cards stack on mobile (≤480px)
  • search.js changed from type=module to defer; service worker precache expanded
  • Calendar popup capped at min(480px, 92vw); calendar controls responsive on mobile
  • Quotes page at /quotes/ — 30 curated Food quotes with save, share, copy buttons and author filter
  • Food Resources at /resources/ — organizations, publications, communities, archives, podcasts
  • RSS Reader at /reader/ — feeds fetched at build time, tab filtering by source
  • Contact page at /contact/ — replaces all mailto: links with structured contact info
  • Language page at /language/ — translation how-to, supported languages, privacy info
  • Your Data page at /your-data/ — explains localStorage, export/import, device transfer
  • Notes page: search by title, filter by source (Articles/Library/Quotes), per-page print/export/share
  • Reading list: search filter, icon buttons for import/export/print/clear, export dropdown (txt/md/json/PDF)
  • Quotes searchable via Pagefind with Quotes filter button in search
  • Social share panels with icons (X, Facebook, LinkedIn, Reddit, Email, Copy) on quotes and notes pages
  • Quotes added to nav with dropdown showing 3 preview quotes
  • Library dropdown: Browse by Subject/Author moved to footer links
  • Mobile search icon in header (phones only)
  • Email icon links to /contact/ instead of mailto:
  • Language and Your Data combined into single card with red divider
  • Newsletter signup form in drawer
  • Consistent card styling (sidebar-widget + accent border)
  • Newsletter description shortened
  • CSS concatenated at build time — no @import waterfall in production
  • Removed 3 failing RSS feeds (FFRF 404, CFI 403, Friendly Atheist broken XML)
  • Resources page (/resources/) rewritten as a hub page with 5 category cards
  • New sub-page: /resources/education/ — critical thinking curricula, science education, debate guides
  • New sub-page: /resources/legal/ — full guide on First Amendment, workplace rights, school prayer, reporting violations
  • New sub-page: /resources/support/ — deconversion support, secular therapy, grief resources, coming-out guidance
  • New sub-page: /resources/tools/ — logical fallacy guides, counter-apologetics, debate prep, fact-checking, podcasts
  • New sub-page: /resources/on-this-site/ — grid of all site features with descriptions and dynamic counts
  • Events page (/events/) rebuilt with full interactive calendar component
  • Month, week, day, and list views with view switcher
  • Event popup with full details on click (name, date range, location, region, type, description, website link)
  • Type and region filters — conference, convention, meetup, online, observance
  • Upcoming/past toggle for filtering by time
  • Previous/next navigation and Today button
  • Color-coded event types with legend
  • Responsive: falls back to list view on mobile
  • Events data expanded from 5 to 20 events with type, region, and multi-day support
  • Hamburger drawer reorganized into 5 labeled groups: Sections, Explore, Community & Events, Resources & Tools, About
  • Footer reorganized from 4 mixed columns to 5 semantic columns: Sections, Explore, Community, Reader Tools, About
  • Footer grid now responsive at 5 → 3 → 2 → 1 columns
  • Editorial sections (News–Letters) separated from content collections (Library, Quotes, Videos, etc.) in all navigation
  • The Highlight / Note / Bookmark / Share toolbar is now always visible at the bottom of article and library pages — no longer requires text selection to appear
  • Highlight and Note buttons are dimmed when no text is selected; they light up when text is highlighted in the article body
  • Bookmark button works anytime — saves your current scroll position with a text excerpt
  • Share button works when text is selected — shares via Web Share API or copies to clipboard
  • Added The Works of Robert G. Ingersoll, Vol. 1 (Dresden Edition, 1909) — nine lectures totaling ~98,580 words, including The Gods, Humboldt, Thomas Paine, Individuality, Heretics and Heresies, The Ghosts, The Liberty of Man Woman and Child, About Farming in Illinois, and What Must We Do to Be Saved?
  • Added Robert G. Ingersoll author biography
  • Notes & Highlights page (/notes/) now supports JSON export and import for transferring data between devices
  • Reading List page (/reading-list/) now supports JSON export and import
  • Notes page titles are now clickable links to the source article or library page
  • Masthead icon buttons and section nav hidden at 1180px to cover landscape tablets
  • Hamburger drawer icons rebuilt as a 4-column CSS grid (36px buttons, 16px icons) for proper centering
  • Notes icon added to hamburger drawer quick actions
  • Footer bottom bar centers vertically on portrait mobile
  • Footer site title uses clamp() to prevent wrapping on tablets
  • progress.js (32KB) now deferred on all layouts — was render-blocking
  • search.js added to service worker pre-cache
  • Search adds a retry with 2-second delay for pagefind index loading
  • Bookmark indicators render after window.load for accurate positioning
  • Bookmark jump subtracts 60px for fixed header offset
  • Mobile highlights work without page refresh (cloned Range preserved)
  • Annotation toolbar fallback to text-search when Range.surroundContents fails
  • Highlight and annotate selected text on any article page — select text and choose Highlight or Add Note from the toolbar that appears
  • Position bookmarks on articles — save your scroll position to return to later
  • Notes panel on articles — slide-out panel listing all highlights, annotations, and bookmarks for the current article
  • All annotation data persists in localStorage, keyed per article
  • New /open-source/ page describing the site's availability as an open-source template
  • All brand-specific values (analytics, comments, newsletter, fonts, localStorage prefix, section definitions) moved from hardcoded templates to site.json data file
  • Sections in .eleventy.js now read dynamically from site.json instead of a hardcoded array
  • Search filter buttons generated from site.json section definitions instead of hardcoded HTML
  • GTranslate and analytics scripts now conditional — only render when configured in site.json
  • robots.txt converted from static file to Nunjucks template using site.url
  • Service worker cache name uses configurable prefix from site.json
  • Newsletter subscribe URL injected via data attribute from site.json instead of hardcoded in JS
  • Cusdis comments configuration read from site.json with conditional rendering
  • Nav drawer action buttons (hamburger menu icons) now properly centered — changed from inline-flex to flex, added display:block on SVGs, increased touch target to 2rem
  • humans.txt corrected: fixed misspelled contact email, updated font attribution from Google Fonts to Bunny Fonts
  • Three hardcoded email addresses in templates replaced with {{ site.email }} data reference
  • Edition pages are now printable — Print / Save PDF button added to edition header
  • Printed editions include a table-of-contents listing followed by each article in full, one article per page, with eyebrow, title, dek, byline, and complete body text
  • Print header shows publication name, edition number, date, and article count; print footer shows the canonical URL
  • The Age of Reason and Common Sense added to Featured Works — all five library works are now featured
  • Library catalogue alphabetised A–Z by title (ignoring leading articles): The Age of Reason, Common Sense, An Enquiry Concerning Human Understanding, On Liberty, Why I Am Not a Christian
  • Word count and reading time now displayed on library chapter and short-text reading pages, between the title and the reader tools bar
  • Back-to-top button now works on library reading pages — progress.js previously gated floats visibility on the article progress bar, which is absent from library layouts
  • Reading percentage (% through) now shown on library reading pages alongside the back-to-top button
  • Floating within-chapter TOC max-height reduced to prevent it overlapping the back-to-top button at the bottom-right of the screen
  • Features page added at /features/ — complete inventory of every site feature organised by category
  • New /newsletter/ page — full landing page with signup form, what to expect, past issues link, and alternative follow options
  • /newsletter/welcome/ — redirect destination after form submission; confirms subscription and sets expectations
  • /newsletter/confirmed/ — redirect destination after clicking Buttondown's confirmation link; links to Start Here, Library, and Reading List
  • subscribe.js now redirects to /newsletter/welcome/ on successful form submission instead of showing an inline message
  • New .subscribe-form--stacked CSS modifier for the vertical form layout on the newsletter page — restores right border and adjusts border-radius correctly
  • Privacy policy updated: Buttondown section now accurately states open tracking and click tracking are disabled; UTM parameter use explained
  • Public Umami analytics dashboard linked from the privacy policy Analytics section
  • Analytics link added to footer bottom bar alongside Privacy, Corrections, Changelog, Sitemap, RSS — reordered with transparency items first
  • All contact email addresses unified to hello@theumamipost.com — corrected misspelled domain (freetimingtimes) in about.njk, submit.njk, and support.njk
  • Privacy policy short-version subtitle updated
  • Text selection highlight colour changed from red accent to pansy purple (#6A1B9A light / #B87ACC dark) — new --color-selection and --color-selection-ink design tokens
  • Pullquote share tooltip character limit raised from 400 to 600 — allows longer meaningful quotes to trigger the share button
  • Hamburger nav drawer: added Newsletter and Start Here, removed duplicate Games entry (already present in primary nav above divider)
  • Sitemap updated to include /library/, /library/subjects/, /library/authors/, all library work landing pages (collections.libraryWorks), and all library chapters (collections.libraryChapters)
  • New /library/ section launched — curated public domain texts from the Food tradition
  • Five works published at launch: Common Sense (Paine), Why I Am Not a Christian (Russell), On Liberty (Mill), The Age of Reason (Paine), An Enquiry Concerning Human Understanding (Hume)
  • Work landing pages with chapter list, reading progress indicators, and Continue Reading detection
  • Browse by Subject at /library/subjects/ — tag cloud and per-subject work listings
  • Browse by Author at /library/authors/ — author biographies and collected works
  • Library column added to site footer
  • Library navbar dropdown — featured works, Browse by Subject, Browse by Author links
  • All eight article reader tools available on library reading pages: Save, Share, Listen (TTS), Focus, Reading settings, Download, Print, Cite
  • Within-chapter floating table of contents on wide screens (≥1200px) — auto-populated from headings with scroll-spy highlighting
  • Focus mode on library pages hides the site masthead, leaving the reading header as sole navigation chrome
  • Sticky reading header with back link, chapter title, Bookmark and Panel toggle
  • Reading panel with Contents (chapter list), Bookmarks, and Notes tabs
  • Annotation toolbar for highlighting and note-taking on selected text
  • Reading progress bar and back-to-top button
  • Print CSS hides all reading chrome and renders clean text for PDF saving
  • Mobile reading overrides: reduced padding, fixed annotation toolbar positioning
  • JSON-LD Book and Chapter structured data on all library pages for schema.org compatibility
  • Pagefind search indexing for library content with work title and author metadata
  • scripts/split-gutenberg.js — CLI tool to strip Gutenberg boilerplate and split a plain-text source into numbered chapter Markdown files with frontmatter
  • libraryChapters, libraryByWork, libraryWorks, and libraryFeatured Eleventy collections
  • Computed data file (src/_data/library/subjects.js) for unique sorted subject list
  • Library index.md files were appearing in chapter lists — Eleventy sets fileSlug to empty string for index files, defeating the prior regex filter; fixed by filtering on inputPath instead
  • Enquiry section TOC showed duplicate numbers (chapterNumber + 'Section N:' in title) — stripped numeric prefix from all 12 section titles
  • Library navbar dropdown appeared at far left — drawer.js keys array was missing 'library', so positionDropdown() was never called for it
  • Library within-chapter TOC appeared even with no headings — CSS display:block overrides the browser's [hidden] attribute; fixed with :not([hidden]) selector
  • Switched from Google Fonts to Bunny Fonts — same typefaces, privacy-friendly CDN, no tracking; moved from @import in CSS to <link> in <head>
  • Four new project sections launched: The Food Glossary (/glossary/), The Thought Experiment Library (/thought-experiments/), The Cook's Bookshelf (/bookshelf/), The Trials of Thought (/trials/)
  • 34 content files written: 11 glossary terms, 5 thought experiment essays, 11 annotated bookshelf entries, 7 trial essays
  • Glossary terms include etymology, key figures, related terms, and A–Z browse sidebar
  • Bookshelf entries include category, difficulty, best-for metadata, and annotated prose
  • Trials timeline spans 399 BCE to present — integer year field (negative for BCE) drives chronological ordering
  • Word count displayed next to reading time in the article byline
  • Download button — exports article as plain text (.txt) or Markdown (.md)
  • Reading settings panel — font size slider (14–24 px) and font choice (Serif / Sans / OpenDyslexic); preferences persisted in localStorage
  • OpenDyslexic font loaded on demand from CDN when selected
  • Surprise Me button in masthead — redirects to a random article
  • Article action buttons reorganised by purpose: Save → Share → Listen → Focus → Reading settings → Download → Print → Cite
  • Reading time on every article, calculated from word count at build time; displayed on all article cards
  • Reading time filter on section pages: All / Short reads (<5 min) / Long reads (>15 min)
  • Reading progress bar on article pages; stops at end of article body
  • Back to top button appears after scrolling 400 px
  • Table of contents auto-generated from h2/h3 headings with scroll-spy highlighting
  • Heading anchor links on h2/h3 — link icon on hover for deep-linking to any section
  • Focus / reading mode — wider margins, larger type, sidebar hidden, persisted in localStorage
  • Read aloud (Web Speech API): play/pause/stop, speed presets (0.75×–2×), voice selector
  • Pullquote sharing — select any text in an article body, share via Web Share API or clipboard
  • Related articles ranked by shared tags with section fallback
  • Article series support with numbered parts and previous/next navigation
  • Share panel: X/Twitter, Facebook, LinkedIn, Reddit, Bluesky, Mastodon, copy link, email
  • Cite this source modal — APA, MLA, and Chicago formats with one-click copy
  • Reading list — browser-based bookmarking, no account required; accessible at /reading-list/
  • Corrections log — articles carry corrections in front matter; aggregate view at /corrections/
  • Annotation footnotes via shortcode — inline tooltip, no jump to page bottom
  • Argument map — structured Claim → Evidence → Conclusion box for opinion pieces
  • Inter-article response system — responseTo front matter links articles with banners on both
  • Edition format — articles belong to numbered editions, browsable at /editions/
  • Dates on articles and cards link to /archives/#YYYY-MM-DD
  • Suggest a correction — mailto link on every article
  • /start-here/ page — curated entry point for new readers
  • /editorial/ handbook — public standards covering accuracy, sourcing, corrections, AI use, and complaints
  • /documents/ section — primary source library for FOIA responses and public records
  • Contributors / authors index at /contributors/ with bio cards and article links
  • Per-author RSS feeds at /feeds/[author-slug].xml with link autodiscovery
  • Site changelog at /changelog/, backed by src/_data/changelog.json
  • Full-site search via Pagefind with section filter bar
  • Progressive Web App: web manifest, cache-first service worker, offline fallback at /offline.html
  • JSON-LD NewsArticle structured data in every article — improves Google Top Stories eligibility
  • Open Graph social card images auto-generated per article at build time
  • Umami privacy-first analytics installed
  • Pansy favicon: SVG at 16 px; pansy icon in footer and masthead page
  • GTranslate floating widget — nine languages, dark mode corrected, publication nameplate protected
  • Comments section (Cusdis) — dark mode synced, card-style layout
  • Games section at /games/ — Fifteen Puzzle, Umami Trivia, Word Scramble, Crossy Road variant
  • Footer restructured into four columns: Sections, About, Transparency, Reader Tools
  • Print CSS suppresses nav, sidebar, interactive elements, and all non-essential chrome
  • Header and footer span full viewport width; masthead converted from absolute to flex layout
  • Mobile navigation: section nav collapses on small screens, subscribe form stacks correctly
  • Site URL corrected to https://theumamipost.com — fixes canonical links, OG images, RSS
  • XML sitemap at /sitemap.xml — all articles and key static pages with lastmod dates
  • Google News sitemap at /news-sitemap.xml — news:news namespace with publication, language, date, title
  • robots.txt — allows all crawlers including Googlebot-News; declares both sitemaps
  • OG article meta tags: article:published_time, article:modified_time, article:author, article:section, article:tag
  • news_keywords meta tag on article pages — comma-separated tags
  • Sitemap link added to footer Reader Tools column
  • Backlinks — each article shows other articles that link to it, discovered at build time
  • Header scroll stutter resolved — dual watermark hysteresis: 10 px down to compact, 30 px up to restore
  • slugify filter hardened against undefined input — resolves build crash on tag pages
  • Article header given stacking context so dropdown panels float above article body
  • All article action buttons given explicit background and appearance: none to eliminate cross-browser rendering differences
  • All dropdown panels harmonised to the same background token
  • Section badge links fixed — Science & Technology and Arts & Culture now resolve correctly
  • Cooks Map removed; Submit button removed from masthead
  • Published first articles across News, Opinion, Analysis, History, Arts & Culture, Science & Technology, and Letters
  • Full-site search powered by Pagefind — built at deploy time, no backend required
  • Dark mode with system preference detection, manual toggle, and localStorage persistence
  • RSS feed at /feed.xml covering all sections
  • Print-optimised CSS for long-form reading and PDF saving
  • Per-section article collections with lead story and article list layouts
  • Author pages with bio and article history
  • Tag / topic index pages
  • Breaking news banner (conditional)
  • Nav drawer for mobile with full site navigation