<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cgithub.git/views, branch main</title>
<subtitle>GitHub alternative frontend</subtitle>
<id>http://git.mou.fo/2026/cgithub.git/atom/views?h=main</id>
<link rel='self' href='http://git.mou.fo/2026/cgithub.git/atom/views?h=main'/>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/'/>
<updated>2026-09-25T06:15:02Z</updated>
<entry>
<title>Show each repo nav item only if the GitHub page includes it</title>
<updated>2026-09-25T06:15:02Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-25T05:48:21Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=226984ad63b063c362e18260a591a3f9a035a8d3'/>
<id>urn:sha1:226984ad63b063c362e18260a591a3f9a035a8d3</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Show issue and pull request status and labels in their lists</title>
<updated>2026-09-25T05:43:53Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-22T02:15:24Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=1514865ec8911c26612e68048f84c6c8be92449d'/>
<id>urn:sha1:1514865ec8911c26612e68048f84c6c8be92449d</id>
<content type='text'>
Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add issue details</title>
<updated>2026-09-25T05:43:53Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-21T22:08:48Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=fd1c054c3c10dceb1a8a355c74a0d9e9077aae19'/>
<id>urn:sha1:fd1c054c3c10dceb1a8a355c74a0d9e9077aae19</id>
<content type='text'>
Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add discussions</title>
<updated>2026-09-25T05:43:53Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-21T21:55:06Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=499bba129c842c00c1a28d85bc044ab609aee44e'/>
<id>urn:sha1:499bba129c842c00c1a28d85bc044ab609aee44e</id>
<content type='text'>
Discussions are served from GitHub's older server-rendered HTML, with no
embeddedData JSON to read, so the scraper walks the DOM the way the pull
request and wiki code does. A discussion's timeline opens with its own
post and continues with its comments, each carrying its replies nested
inside it, which is where the recursion in _discussionComment.eta comes
from. Categories, upvotes, and the answer a Q&amp;A discussion is marked with
all come along.

Only what GitHub renders up front is shown: neither the next page of
discussions nor the replies it hides behind a "Show N previous replies"
button are fetched, so a comment says how many replies it is missing.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add favicon</title>
<updated>2026-09-22T17:24:31Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-22T16:50:37Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=3204ecf1c48e730f02fb83d7c09d2c778a6f6bdd'/>
<id>urn:sha1:3204ecf1c48e730f02fb83d7c09d2c778a6f6bdd</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Easier clone command selection</title>
<updated>2026-09-21T21:40:15Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-21T20:11:31Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=16b4bc953f9822121b3257fc5f19df9dcfbdba27'/>
<id>urn:sha1:16b4bc953f9822121b3257fc5f19df9dcfbdba27</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Use base layout for home page</title>
<updated>2026-09-21T16:16:34Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-21T16:12:42Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=4a689592a67bad939c4fb2b217bdc812939ff542'/>
<id>urn:sha1:4a689592a67bad939c4fb2b217bdc812939ff542</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Rearrange search dropdown</title>
<updated>2026-09-20T13:39:37Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-20T13:39:10Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=258ae3a4ad6b4660e356b58f6b3937bfe3b2917d'/>
<id>urn:sha1:258ae3a4ad6b4660e356b58f6b3937bfe3b2917d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Render the error page in the shared page shell</title>
<updated>2026-09-10T18:58:18Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-10T18:57:44Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=8d6898a36e2879bc3e1aef95db2a44c10187169e'/>
<id>urn:sha1:8d6898a36e2879bc3e1aef95db2a44c10187169e</id>
<content type='text'>
error.eta carried its own copy of the HTML shell, so error pages missed the
viewport meta tag, the build-commit footer, and the link to the original
GitHub page. The renderer already passes githubUrl and buildCommit to every
template, so the layout needs nothing new from app.ts.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01JZAT3YzYP85DihSvQbDKB6
</content>
</entry>
<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>
</feed>
