0%

September 2026

  • One collection of quotations, not two. The 365 daily quotations and the hand-picked selection had been separate sets that barely overlapped — exactly one of the twenty curated lines appeared in the year, and sixteen were absent from it entirely. A line you found on /quotes/ did not exist in the calendar, and a line you liked in the calendar had no permalink to keep. They are now one corpus of 384 quotations: every one has its own page, linked to the paragraph it was drawn from, and /daily/ is the same collection taken a day at a time.
  • A corrected attribution. “The time to be happy is now. The place to be happy is here. The way to be happy is to make others so.” had been filed under What Must We Do to Be Saved? (1882). The line is not in that lecture — it is in Spain and the Spaniards (1898), paragraph 12. Ingersoll also used it in The Limitations of Toleration, which is precisely why attribution cannot be inferred from the words alone. The site now refuses to build a quotation that cites one work while linking into another.
  • Revision-history pages named the wrong work. All 177 /works/<slug>/history/ pages showed the breadcrumb trail of a single work no matter which transcription you were looking at — in the visible trail and in the structured data served to search engines. Twelve of them also rendered a double-escaped apostrophe in the page title. Both fixed.
  • Accessibility: quotation pages had no heading. Every page under /quotes/ shipped without an h1, so assistive technology had nothing to announce the page as. Fixed, without changing the visible design.
  • Reading on a phone. The title block on a work page occupied 558 px of the 780 px above the first line of prose — on a screen with roughly 660 px of usable height, a reader met no Ingersoll before scrolling. The description now folds behind a disclosure below 641 px and the header is 438 px. The breadcrumb trail was also redesigned for small screens: the ancestor path reads as context, the page title gets a line of its own, and both are centred.
  • Quality gates that were reporting success without measuring anything. Three independent review passes found, and this release fixes: a site-health audit that gave a clean bill of health to a server whose every page was a 404; a breadcrumb checker with no exit code whose one assertion compared a value to itself; an audit that could screenshot a different project entirely and report “0 failed”; and a 177-page fix that no test covered. The browser audit suite grew from 778 to 826 checks and now runs on every push, alongside a static sweep over all ~1,500 built pages.

August 2026

  • A Year of Ingersoll. A 365-day calendar of quotations, one for every day of the year, each one checked verbatim against the Dresden text it comes from and linked to its exact paragraph. Browse the whole year at /daily/, read a single day at /daily/<MM-DD>/, subscribe in any calendar app via the iCalendar feed, or consume it as JSON at /api/daily.json.
  • Sticky breadcrumb navigation. A centred trail under the masthead on every page, with browser back and forward controls. The arrows name where they go rather than saying “back”, and a menu beside them lists the pages you have read in this tab so you can jump back further than one step. On a phone in landscape the trail stays pinned and the brand block scrolls away, which returns about a fifth of the screen to the text.
  • The table of contents folds away on small screens. A 28-section contents list was pushing the first line of prose almost 1,000 px down a phone screen. It now collapses to a single row, with a cue when the open list continues below the fold.
  • The reader panel no longer covers what you are reading. On work pages the contents sidebar and the reader panel were being laid over the article itself — between 410 and 840 px of the reading column, invisible and unselectable.
  • Print output. A folded contents list is no longer clipped when printing, and the works jump-navigation sits below the sticky chrome rather than underneath it.

May 2026

  • World-class structured data overhaul. Single JSON-LD @graph spine (WebSite, Organization, Person, Book, plus a per-page WebPage entity) emitted on every page; works enriched with accessMode, accessibilityFeature, speakable, encoding[] for all five exports; Quotation graph isBasedOn linking to source works; Event graph for /timeline/ with Place + GeoCoordinates; Person graph for /connections/; CollectionPage / DataCatalog / LearningResource / ImageGallery / VideoGallery on the corresponding hub pages. 1,797 JSON-LD blocks across 806 pages, all parse cleanly.
  • Open Graph + Twitter card sizing fix. og:title now lands inside Facebook's 50–60-char sweet spot (Title (year) — Robert G. Ingersoll for works); og:description auto-truncated at 155 chars at word boundary; per-work excerpt mapped to description so cards never inherit the generic site description. Added og:image:type, og:image:secure_url, twitter:creator. Hub pages no longer emit broken per-work card URLs.
  • Favicon overhaul. Cleaner single-mark design (path-based bold serif "I", no font dependency) with Victorian-editorial flair (navy gradient ground, warm gold radial halo, thin gold inner frame, cream-on-paper letter gradient). Full set shipped: SVG, 16 / 32 / 192 / 512 PNGs, /favicon.ico for legacy probes, /site.webmanifest for Android home-screen + PWA. All icon URLs cache-busted with ?v={{ cssVersion }}.
  • Native HTML <dialog> share & export modal. Replaced the custom fixed-position panel with a native <dialog>; browser handles top-layer rendering, ::backdrop scrim, escape, and focus management. Five independent close paths (form method=dialog, inline onclick, addEventListener, capture-phase Escape, geometric backdrop). Mobile-first 100vw + 100dvh; centered card via margin: auto at ≥768 px.
  • WCAG-friendly type scale. Body 18 px (up from a silently-broken cascade that pinned it to 16 px), floor 14 px, "large text" threshold at 24 px (--text-lg). Reset after a token-override bug in the panel CSS was found masking three earlier scale bumps.
  • Per-quote permalinks and a full-screen showcase. Every quotation in the selection got its own shareable page, plus /quotes/showcase/ — the collection full-screen, one line every ten seconds.
  • Chaptered book layout. Long works render as a book rather than one continuous scroll.
  • Five-format exports. Added RIS export (Research Information Systems format for Zotero, EndNote, Mendeley) alongside the existing TXT / JSON / BibTeX / print exports.
  • Editorial pages. /research/, /classroom/, /manuscripts/, /bibliography/ shipped — researcher portal, lesson-plan / fair-use guide, eleven holding institutions, twelve curated modern scholarly entries.
  • This-day daily feed. Promoted /this-day/ to a first-class JSON Feed 1.1 + Atom + page surface so RSS readers and the home page rotator share a source of truth.
  • Reader UX polish: removed marginal-notes feature in favor of a single notes pane; highlight color locked to yellow (the picker was unreliable on mobile); tippy.js tooltips work on mobile tap; saved-bookmark contrast fixed (was invisible on the dark toolbar).
  • Quality gates: GitHub Actions workflow (Lighthouse-CI + lychee link-check + cspell) gating every PR.

April–May 2026

  • Full Dresden Edition. All 12 volumes ingested via scripts/ingest-dresden.mjs; 177 works transcribed with footnotes preserved.
  • OAI-PMH 2.0 endpoint at /api/oai-pmh/identify.xml — Identify, ListRecords, GetRecord, ListIdentifiers, ListMetadataFormats with Dublin Core. Suitable for DPLA / Internet Archive / university harvesters.
  • Concept graph + concordance. Chord diagram of category co-occurrence; phrase-level entity index across the corpus; per-work feeds at /api/concordance/<slug>.json.
  • Wikidata / VIAF / LCNAF identifiers added to the Person (Ingersoll) graph for library-grade disambiguation.
  • Per-work history. /works/<slug>/history/ surfaces the git revision history of each transcription.
  • Performance: homepage map deferred behind IntersectionObserver; instant.page prefetch scoped; Lighthouse budgets enforced per route class.

April 21, 2026

  • World-class rebuild. Migrated to ESM Eleventy v3 with build-time CSS concatenation via lightningcss, 50+ partials, full light + dark themes.
  • New layout system with slide-in panel navigation, parent-navigable dropdowns, always-visible hamburger, theme toggle, skip link.
  • Pagefind full-text search (self-hosted, no third-party queries) with per-element facet spans.
  • @11ty/eleventy-img image pipeline (AVIF + WebP + JPEG responsive); instant.page-style link prefetch.
  • Server-rendered heading anchors via markdown-it-anchor; click-to-copy heading link.
  • Blog post layout: sticky TOC with scroll-spy, reading progress bar, social share, drop cap, author card, related posts, prev/next.
  • Pages: FAQ, Privacy, Terms, Thank You, 404, Search, Resources, Style Guide, Editorial Standards, Contribute, Archive, Changelog.
  • Security headers via Cloudflare _headers; humans.txt; .well-known/security.txt.
  • Bunny Fonts (GDPR-compliant) replacing Google Fonts.

March 2026

  • Initial site scaffold, biography, 25-event timeline, 13 connections, 16 works transcribed from the Dresden Edition, 3 inaugural blog essays.
Link copied