<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cgithub.git/README.md, branch main</title>
<subtitle>GitHub alternative frontend</subtitle>
<id>http://git.mou.fo/2026/cgithub.git/atom/README.md?h=main</id>
<link rel='self' href='http://git.mou.fo/2026/cgithub.git/atom/README.md?h=main'/>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/'/>
<updated>2026-09-25T05:43:53Z</updated>
<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>Redirect /notifications instead of scraping it as an owner</title>
<updated>2026-09-10T05:01:04Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-10T04:53:48Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=ca0291062362b3036077cb14bd8d13aca1cde62d'/>
<id>urn:sha1:ca0291062362b3036077cb14bd8d13aca1cde62d</id>
<content type='text'>
A signed-out request for github.com/notifications is bounced to a login
page, so the owner route followed that redirect and left the visitor on
/login. Hand the path over to GitHub before it reaches the route.
</content>
</entry>
<entry>
<title>Add feature list to README.md</title>
<updated>2026-09-09T19:21:44Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-09T18:47:12Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=84ac17c0c2cc694dd481dac25f5cc898cdaf0f3d'/>
<id>urn:sha1:84ac17c0c2cc694dd481dac25f5cc898cdaf0f3d</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Add screenshot</title>
<updated>2026-09-05T21:32:01Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-09-05T21:31:53Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=2e18169bdb622317980fb3c5ac35b247987c67c8'/>
<id>urn:sha1:2e18169bdb622317980fb3c5ac35b247987c67c8</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Redirect to GitHub with a meta refresh</title>
<updated>2026-08-11T15:57:29Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-08-11T15:39:01Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=0a39a7a981f619ac64fdeb26294c7cfd4f110a1a'/>
<id>urn:sha1:0a39a7a981f619ac64fdeb26294c7cfd4f110a1a</id>
<content type='text'>
A browser extension redirects github.com to cgithub with declarative net
requests. Its rules match our HTTP redirects back to github.com too, so
those bounce straight back here and loop forever. A meta refresh makes
cgithub the initiator origin instead, which the extension's rules can
exclude, and its delay leaves a page the user can stop on.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Deploy only to Cloudflare Workers</title>
<updated>2026-08-11T12:30:10Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-08-11T12:27:26Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=de557ad66466261ae578ea9342f32d78a139fbc9'/>
<id>urn:sha1:de557ad66466261ae578ea9342f32d78a139fbc9</id>
<content type='text'>
The Node server entry, esbuild bundle, and Makefile rsync/systemd deploy
are gone; wrangler dev and wrangler deploy are the only paths now, so the
dev:cf/deploy:cf scripts take over the plain dev/deploy names. @hono/
node-server and esbuild drop out with src/index.ts, and the README's
systemd socket and nginx snippets go with them.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Rewrite README</title>
<updated>2026-01-27T16:57:00Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-27T14:30:28Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=737770b900a6a063d83e384faf09dfa4f2a15ebd'/>
<id>urn:sha1:737770b900a6a063d83e384faf09dfa4f2a15ebd</id>
<content type='text'>
</content>
</entry>
<entry>
<title>GitHub directory scraper</title>
<updated>2026-01-22T17:13:26Z</updated>
<author>
<name>Joe Mou</name>
<email>dev@mou.fo</email>
</author>
<published>2026-01-22T17:10:36Z</published>
<link rel='alternate' type='text/html' href='http://git.mou.fo/2026/cgithub.git/commit/?id=2baf478f8781374e753002639365766c5783c33a'/>
<id>urn:sha1:2baf478f8781374e753002639365766c5783c33a</id>
<content type='text'>
Extracts directory listings from GitHub's server-rendered HTML. Avoids
using the rate-limited API. Parses JSON embedded within script tags.

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
