<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cgithub.git/views/repo.eta, branch main</title>
<subtitle>GitHub alternative frontend</subtitle>
<id>http://git.mou.fo/2026/cgithub.git/atom/views/repo.eta?h=main</id>
<link rel='self' href='http://git.mou.fo/2026/cgithub.git/atom/views/repo.eta?h=main'/>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/'/>
<updated>2026-09-05T01:49:59Z</updated>
<entry>
<title>Split the page shell out of the repository layout</title>
<updated>2026-09-05T01:49:59Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-05T01:26:21Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=3fd91017f05714fb5c049d662ae00dc31203485b'/>
<id>urn:sha1:3fd91017f05714fb5c049d662ae00dc31203485b</id>
<content type='text'>
layout.eta was two things at once: the HTML shell every page needs and
the repository chrome around it. owner.eta, being the one page that is
not about a repository, could use neither and carried its own copy of
the shell, which had drifted -- its footer named no build commit and
did not link to the original page on GitHub.

The shell moves to views/layouts/base.eta, taking its title and any
deferred scripts as layout data, and the chrome to views/layouts/repo.eta,
a layout over it that adds the clone commands, nav, search box, and the
"/" shortcut that focuses it. Repository pages point at repo.eta and
render as before; owner.eta uses base.eta directly and so gains the
footer it was missing.

Templates now live in more than one directory, so scripts/build.ts walks
views/ recursively and keys each template by its path underneath it.
Names crossing a directory are written from the views root
("/layouts/base.eta"), the one form both Eta's filesystem resolver and
the precompiled resolver in worker.ts agree on; siblings stay relative.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Ba5p88cWtCq42vf3uweweL
</content>
</entry>
<entry>
<title>Read the About box and latest release from JSON</title>
<updated>2026-08-11T22:25:26Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-08-11T21:41:01Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=950d7e430b833f3e428f1af100f6fb74bdd76a2d'/>
<id>urn:sha1:950d7e430b833f3e428f1af100f6fb74bdd76a2d</id>
<content type='text'>
GitHub rebuilt the repository sidebar, so the selectors parseRepoInfo used
matched nothing and the About box rendered empty. Everything but the latest
release is in the page's embedded payload as sidebarAbout; the latest release
is only in the _sidebar JSON already fetched for languages, so it arrives with
that fragment and is moved beside the release count.
</content>
</entry>
<entry>
<title>Mitigate placeholder layout shift</title>
<updated>2026-08-11T17:04:49Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-08-11T16:54:27Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=d2c94ae32ff8d88f438d0e3348ca4f4a81f7bdd7'/>
<id>urn:sha1:d2c94ae32ff8d88f438d0e3348ca4f4a81f7bdd7</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add language percentages to repo pages</title>
<updated>2026-08-11T12:13:58Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-08-11T12:09:47Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=b43ce92c7b16bdefedb7c4c2aef41f9417f1ddf6'/>
<id>urn:sha1:b43ce92c7b16bdefedb7c4c2aef41f9417f1ddf6</id>
<content type='text'>
GitHub no longer server-renders the repository sidebar; its React UI
lazily fetches /:owner/:repo/_sidebar as JSON, which carries the
language breakdown (name, percentage, color). getGitHubLanguages() uses
that endpoint, and a new /api/:owner/:repo/languages fragment route
renders the bar and legend the same way refs and latest-commit already
work, so repo page loads still cost a single scrape.

The latest-commit placeholder loader in refs.js is generalized over
.placeholder[data-src] so both placeholders share it.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Remove watchers, no longer rendered by GitHub</title>
<updated>2026-07-15T04:43:33Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-07-15T04:21:11Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=18db9dae971a0681c8537d94092cd68fe8f65fa5'/>
<id>urn:sha1:18db9dae971a0681c8537d94092cd68fe8f65fa5</id>
<content type='text'>
Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add latest release details</title>
<updated>2026-02-21T08:02:05Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-02-21T08:01:55Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=1707f6555a193aeb40021b8b874686ca665a4fb2'/>
<id>urn:sha1:1707f6555a193aeb40021b8b874686ca665a4fb2</id>
<content type='text'>
By Gemini
</content>
</entry>
<entry>
<title>Better formatting for long URLs</title>
<updated>2026-02-04T03:16:29Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-29T13:40:31Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=031347a2bcb9846881eddb858d1157a71c21c66d'/>
<id>urn:sha1:031347a2bcb9846881eddb858d1157a71c21c66d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>List issues</title>
<updated>2026-01-27T22:21:45Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-27T20:05:36Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=200defaa5c769b4603f9256e943821344cadbe82'/>
<id>urn:sha1:200defaa5c769b4603f9256e943821344cadbe82</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Split branch and path bread crumbs into separate section</title>
<updated>2026-01-27T22:21:42Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-27T21:58:56Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=8fec0b99fbe193326d25fc107e0c625dcf05fd12'/>
<id>urn:sha1:8fec0b99fbe193326d25fc107e0c625dcf05fd12</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Show releases</title>
<updated>2026-01-26T22:23:43Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-26T18:27:28Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=a0927f2ccdfe65a89eb65006e1fb3b95ca0c52dd'/>
<id>urn:sha1:a0927f2ccdfe65a89eb65006e1fb3b95ca0c52dd</id>
<content type='text'>
</content>
</entry>
</feed>
