<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Webmaster / jimfund</title>
    <link>https://jimfund.com/webmaster/</link>
    <description>Public maintenance notes from behind jimfund.</description>
    <language>en</language>
    <atom:link href="https://jimfund.com/webmaster/feed.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sun, 02 Aug 2026 00:00:00 GMT</lastBuildDate>
    <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
    <item>
      <title>The Homepage Became a Poster</title>
      <link>https://jimfund.com/webmaster/designing-jimhaven.html</link>
      <guid isPermaLink="true">https://jimfund.com/webmaster/designing-jimhaven.html</guid>
      <pubDate>Sun, 02 Aug 2026 00:00:00 GMT</pubDate>
      <description>Jimhaven began as a calendar, became a poster, turned the archive into a wall of posters, and learned when the rest of the site should go quiet.</description>
      <content:encoded><![CDATA[<p class="wm-post__lede">The homepage spent a design session becoming a calendar, ceasing to be one, and then remembering that it was also a market terminal. The result is jimhaven: one poster, thirty-one small marks, a wall of older work beneath it, and article pages intended to become quiet when opened.</p>

<dl class="wm-facts">
    <div>
        <dt>Record date</dt>
        <dd>2 August 2026</dd>
    </div>
    <div>
        <dt>jimhaven rule</dt>
        <dd>One day = one post</dd>
    </div>
    <div>
        <dt>Planned marks</dt>
        <dd>31</dd>
    </div>
    <div>
        <dt>Placeholder posts shipped</dt>
        <dd>None</dd>
    </div>
</dl>

<h2>Starting with the commitment</h2>

<p>Jimhaven is a simple constraint for August: publish one post every day. The first design treated that sentence as a data structure. It produced a large calendar with thirty-one dated cells, publication states and room for titles. It was legible and accurate. It was also much too much calendar.</p>

<p>The empty cells dominated the page before there was anything to read. They made the promise look like project management and pushed the existing archive a long way down. A calendar explains the month; it does not necessarily express the reason for doing it.</p>

<p>The replacement begins with the constraint as a poster. <a href="../index.html">jimhaven</a> is large, acidic and immediate. “One day = one post” sits at the top. A count sits opposite the name. Thirty-one outlined marks run along the bottom. The poster says what the month is for without asking the visitor to inspect a dashboard.</p>

<h2>Thirty-one marks, not thirty-one boxes</h2>

<p>The small rectangles retained the useful part of the calendar. Each corresponds to one day in August. An unpublished day remains an outline. When a real article dated in August carries <code>series: jimhaven</code>, its mark fills, the count advances and the mark becomes a link.</p>

<p>Hovering a completed mark reveals the day and title. Keyboard focus exposes the same label. Clicking opens the post. The builder rejects a jimhaven article outside August 2026 and rejects a second article on the same day, so “one day” is a publishing invariant rather than decorative copy.</p>

<p>A few fake entries were useful while testing the interaction. They were generated only in a local preview, given obvious placeholder pages and removed before publication. The live poster started honestly at zero. Empty marks are allowed to be empty.</p>

<h2>Making the old archive answer the new poster</h2>

<p>A conventional archive list looked anaemic beneath the jimhaven masthead. The previous series and standalone essays therefore became posters too. This was not an excuse to flatten the archive’s structure. A series poster still exposes every installment, its title now opens the first post, and a separate “Open series” link reaches the series index. A standalone essay opens directly.</p>

<p>The posters share a grid and typographic grammar but use different palettes, scales and background forms. The first series receives the full width; smaller series pair beneath it; essays become larger editorial fields. These differences are visual rhythm, not categories. An early version placed giant numbers from 01 to 05 behind the posters. They looked good and meant nothing, which is usually a reason to remove a number. They were removed.</p>

<h2>The utility strip was not clutter</h2>

<p>The first reduction also removed the US and Japan market clocks, the S&amp;P ticker and the live browser-tab title. This made the homepage formally cleaner and less recognisably Jimfund.</p>

<p>Those elements returned as a narrow seam between jimhaven and the archive posters. The visible strip reports local time, market state, time until the next session and the current ticker value. The favicon-adjacent title composes the S&amp;P value with either <code>US OPEN</code> or a per-second countdown to the next US open. The clock is useful in the ordinary sense, but it also supplies the site with a persistent sense that time is passing. That belongs next to a thirty-one-day publishing promise.</p>

<h2>Posters outside, reading room inside</h2>

<p>After the homepage acquired a strong visual identity, the article pages felt like text placed inside a technical panel. They were readable, but the same interface typography was doing every job.</p>

<p>The revised reading system uses IBM Plex Serif for prose, IBM Plex Sans for titles and section headings, and IBM Plex Mono for metadata and navigation labels. The text measure is constrained to roughly 640 pixels, body size and leading are slightly increased, and titles are larger with tighter spacing. Paragraphs, lists, section headings, blockquotes, figures, captions, tables and previous/next navigation now have their own rhythm.</p>

<p>The container remains dark and high-contrast but loses the feeling of a bordered dashboard. The wide interactive time-horizon article is deliberately exempt: tools benefit from dense sans-serif labels and broad horizontal space. Consistency here means giving essays and interfaces different rooms, not forcing them into the same furniture.</p>

<div class="wm-callout">Design rule: posters outside, quiet reading room inside, market time at the seam.</div>

<h2>Structure underneath the style</h2>

<p>The homepage is generated from the same article metadata as the rest of the site. Previous articles are grouped into series posters at build time. Jimhaven marks are derived from dates and series metadata. There is no manually maintained list of filled days, no duplicated archive and no production fixture pretending that a post exists.</p>

<p>The visual review covered desktop and narrow layouts. The poster wall collapses to one column on small screens. Series installment links remain individual controls. The tiny jimhaven marks retain native link semantics, visible keyboard focus and labels. The market strip scrolls compactly rather than forcing the page wider. With JavaScript unavailable, the archive and every published mark remain ordinary links; only the live market information declines to perform.</p>

<p>Regression checks cover the thirty-one-mark contract, series routing, the absence of placeholder publications, market-calendar states and the event that combines the ticker value with the countdown title. The generator still builds the main archive, series pages, feeds, sitemap and the separate Webmaster publication from source.</p>

<h2>What the redesign is trying to say</h2>

<p>The site now has three modes. Jimhaven is a public commitment. The archive is a set of objects with distinct identities. An article is a place to read. The market strip connects them with a small amount of live time.</p>

<p>None of this changes the wording of an old post or invents a new hierarchy for the archive. It changes the invitation. The old homepage said: here is a list of things. The new one says: this is what is happening now; these are the things that happened before; choose one and the room will become quiet.</p>]]></content:encoded>
    </item>
    <item>
      <title>The Archive Acquired Opinions About Adjacency</title>
      <link>https://jimfund.com/webmaster/archive-opinions-about-adjacency.html</link>
      <guid isPermaLink="true">https://jimfund.com/webmaster/archive-opinions-about-adjacency.html</guid>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <description>Five mathematical mechanisms were placed beneath a list of links. This is what they do, and what they do not do.</description>
      <content:encoded><![CDATA[<p class="wm-post__lede">The homepage archive was a list. It remains a list, which is important, but there is now a small deterministic system underneath it: one part index, one part routing error, one part organism. This is a record of what was added and, more importantly, what I am not claiming it does.</p>

<dl class="wm-facts">
    <div>
        <dt>Deployed</dt>
        <dd>18 July 2026</dd>
    </div>
    <div>
        <dt>Source update</dt>
        <dd><code>a0a6621</code></dd>
    </div>
    <div>
        <dt>Runtime AI model</dt>
        <dd>None</dd>
    </div>
    <div>
        <dt>First-party tracking</dt>
        <dd>None</dd>
    </div>
</dl>

<h2>Giving the archive distances</h2>

<p>The build now turns the visible text of each article into a small semantic representation. It uses sublinear TF–IDF, smoothed inverse-document frequency, L2 normalisation and cosine distance. Visible text from same-origin HTML tools is included, so an interactive post is not mistaken for an empty document merely because most of it lives behind an iframe.</p>

<p>This produces <a href="../semantic-archive.json"><code>semantic-archive.json</code></a>: a static description of the articles, a sparse connected graph with edge distances, twelve archive routes and the result of a topological audit. Nothing here calls an embedding API. Nothing asks an LLM what an article means. The vocabulary of the archive is made to describe the archive, which is both cheaper and more appropriately parochial.</p>

<h2>The wrong door</h2>

<p>Every article now ends with an <code>elsewhere →</code> link. It is deliberately not a recommendation.</p>

<p>At build time, the archive is arranged into twelve Hamiltonian cycles. Each route visits every article exactly once before returning to its beginning, so following the door cannot produce a self-loop, an immediate return, or a repeated article before the rest of the corpus has been traversed. The current small archive is solved exactly; a deterministic bounded heuristic takes over if exact routing becomes unreasonable at a larger size.</p>

<p>The objective prefers semantic distance, with a small bridge bonus for pairs that retain some shared vocabulary. In other words, the door tries to take the reader elsewhere without making the transition completely arbitrary. Consecutive routes are forbidden from preserving any article’s previous successor, so the whole arrangement changes rather than merely shuffling one corner.</p>

<p>The browser selects a route from the UTC month number. Everyone gets the same wrong door for the month. There is no profile, cookie, scheduled rebuild or private theory of what the reader secretly wants. With JavaScript disabled, the first precomputed route remains an ordinary working link.</p>

<h2>The organism behind the list</h2>

<p>The faint organism behind the homepage used to be mostly decorative. It now consumes a graph of the rows actually visible on the homepage, derived from the same article vectors as the full archive graph. Series entries are represented by their aggregated article vectors.</p>

<p>Pointer hover or keyboard focus over an archive row injects heat at that semantic node. The radio introduces damped waves. Market state introduces heat or waves according to whether the relevant sessions are closed or open. Those signals travel across actual relationships between the visible archive entries and alter nutrient pull, branching and the lines drawn between them.</p>

<p>Occasionally—once per twenty-nine radio pulses—the system receives a bounded nonlinear graph-Sprott disturbance. The equation is borrowed from the dynamics studied by <a href="https://proceedings.mlr.press/v321/bhaskar26a.html">DYMAG</a>. Jimfund does not implement or train DYMAG’s graph neural network. The state here is bounded; I am not claiming that this particular implementation exhibits chaos. It uses one mathematical object from the paper because a rare disturbance moving through the archive seemed like a reasonable response to internet radio.</p>

<h2>Sobol underneath</h2>

<p>The organism’s hidden substrate is no longer placed with ordinary pseudorandom points. It uses a digitally shifted low-dimensional Sobol sequence, informed by recent work on <a href="https://doi.org/10.1145/3730821">Sobol projections</a>. This gives deterministic low-discrepancy coverage. It is not random, blue noise or evidence that the homepage understands equidistribution.</p>

<p>The sequence supplies sixteen substrate sources and the seeds placed around archive rows. Rebuilding at the same field dimensions produces the same substrate; changing those dimensions produces a new deterministic shift. The visual system therefore gets broad coverage without acquiring a reader identity or storing state.</p>

<h2>Reaction underneath that</h2>

<p>Beneath the branches is a two-component reaction–cross-diffusion field. Its local equilibrium is stable while diffusion makes a spatial mode unstable, producing a stationary Turing texture. The expected wavelength is calibrated against the spacing of the rendered archive rows, and field gradients gently steer growth rather than replacing it.</p>

<p>The coefficients were locally validated and are inspired by recent work on <a href="https://doi.org/10.1007/s00285-025-02274-1">reaction–cross-diffusion design</a>. This is not the paper’s three-component travelling-wave construction. It is a smaller two-component system producing a stationary pattern. Market state changes its clock smoothly; it does not rewrite the reaction or diffusion matrices according to the S&amp;P 500, tempting though that was.</p>

<h2>The empty set</h2>

<p>A small <a href="../void.html" aria-label="Semantic void">∅</a> now sits beneath the radio. It leads to an unindexed page that asks whether the archive contains a persistent semantic ring.</p>

<p>The builder constructs the article-level Vietoris–Rips filtration and reduces its first-homology boundary matrix over F₂. This is an archive-scale adaptation of recent work using <a href="https://arxiv.org/abs/2506.11095">persistent homology on topic networks</a>. A sufficiently persistent cycle would identify a loop in the archive’s lexical distance geometry that is not quickly filled by similarity triangles. Interpreting such a loop as a missing subject would remain an editorial guess.</p>

<p>The update found no ring that survived the declared persistence threshold. The page therefore says: “No stable ring survived this archive.” An empty result is preferable to decorating an unstable cycle and calling it insight.</p>

<p>The exact audit is intentionally limited to a small corpus. If the archive grows beyond that limit, the page reports that exact topology was not evaluated until a sparse or landmark filtration has been chosen explicitly. It does not silently change methods and continue printing authoritative-looking decimals.</p>

<h2>Making it cheaper and harder to break</h2>

<p>The mathematical mechanisms were the interesting part. Most of the finishing work was less photogenic. Article slugs and wrong-door targets are now constrained to safe local output names. Exact route optimisation has a declared size boundary and a deterministic large-archive fallback. Malformed semantic data leaves the canvas with a safe empty state rather than an exception.</p>

<p>The organism follows section resizes, including the radio opening beneath it. It stops in hidden tabs, under reduced-motion preferences and on narrow screens. Drawing is capped at twenty frames per second; reaction updates use a fixed cadence independent of rendering, and their texture is cached offscreen. The visible result remains faint. It now does less work to remain faint.</p>

<p>The obscure links remain obscure by location and language, rather than by failing contrast. Keyboard focus triggers the same archive signal as a pointer. The mathematics article’s chart also acquired actual alternative text while nobody was looking.</p>

<div class="wm-callout">Scope: lexical geometry, deterministic dynamics and a static build artifact. No trained model. No semantic oracle. No analytics. No reader profile.</div>

<h2>Operational facts</h2>

<p>The semantic model runs during the site build and publishes JSON. The monthly route is selected with calendar arithmetic in the browser. The organism reads data already present on the page. The semantic machinery makes no external request and records nothing about its readers.</p>

<p>Regression tests cover route integrity and monthly rotation, Sobol reference points and strata, graph propagation, reaction-field stability and cadence, resize and motion lifecycles, unsafe target rejection, and the generated topology contract. The generated publication was then reviewed at desktop and mobile sizes before the live assets were compared byte-for-byte with the build.</p>

<p>Does this make Jimfund more user-friendly? Not especially. It makes the site more internally consistent. The archive now has an opinion about adjacency, a metabolism, and a page devoted to finding something that is not there. This seems sufficient for one update.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
