<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>cdnV2, branch HEAD</title>
<subtitle>
</subtitle>
<entry>
<id>a955b63c439353efaf5df52dc2a8ac435b0bcae6</id>
<published>2026-10-14T03:22:18Z</published>
<updated>2026-10-14T03:22:18Z</updated>
<title>Merge pull request #43 from notamitgamer/ui-overhaul</title>
<link rel="alternate" type="text/html" href="commit/a955b63c439353efaf5df52dc2a8ac435b0bcae6.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit a955b63c439353efaf5df52dc2a8ac435b0bcae6
parent c3dd867870170f79124d75f0ca980d5dc5cf51eb
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Wed, 14 Oct 2026 08:52:18 +0530

Merge pull request #43 from notamitgamer/ui-overhaul

UI overhaul: design system, shared layout, file previews
</content>
</entry>
<entry>
<id>fa7d49b44274582f2c1b34bd5d6b946d7e84d98f</id>
<published>2026-10-14T03:17:43Z</published>
<updated>2026-10-14T03:17:43Z</updated>
<title>fix(ui): centre header icons and stop buttons looking stuck pressed on touch</title>
<link rel="alternate" type="text/html" href="commit/fa7d49b44274582f2c1b34bd5d6b946d7e84d98f.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit fa7d49b44274582f2c1b34bd5d6b946d7e84d98f
parent 2d37174d152c6a15eedcb65fd9c971adda503857
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Wed, 14 Oct 2026 03:17:43 +0000

fix(ui): centre header icons and stop buttons looking stuck pressed on touch

- The menu (hamburger) and moon icons sat ~4px above the centre of their buttons: two of the four icon wrappers were
  plain inline boxes resting on a text baseline while the others were flex boxes. All icon-button wrappers now
  centre the same way, so nothing shifts when the menu or theme toggles (measured 0px off in light/dark, open/closed).
- :hover sticks after a tap on touch screens, leaving the menu button looking pressed. Hover highlights on buttons,
  nav links and icon buttons now apply only under @media (hover: hover); icon buttons get a proper :active state.
- 7 new browser checks (96 total); repo tests and axe-core (0 violations) pass.

</content>
</entry>
<entry>
<id>2d37174d152c6a15eedcb65fd9c971adda503857</id>
<published>2026-10-14T03:09:16Z</published>
<updated>2026-10-14T03:09:16Z</updated>
<title>feat(ui): whole-page file skeleton, wrapping link boxes, file taps go through Turbo</title>
<link rel="alternate" type="text/html" href="commit/2d37174d152c6a15eedcb65fd9c971adda503857.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 2d37174d152c6a15eedcb65fd9c971adda503857
parent 613126629ab21280ab6087e3c5e36a5e3788ae2e
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Wed, 14 Oct 2026 03:09:16 +0000

feat(ui): whole-page file skeleton, wrapping link boxes, file taps go through Turbo

- Link boxes are plain wrapping text instead of read-only inputs: the full URL is always visible, nothing scrolls
  sideways (swiping inside an input scrolled the text and showed only a truncated &#39;https://raw.cdn...&#39;), a tap still
  selects the whole link, and Copy copies the same text. Embed snippet wraps too.
- File pages show a whole-page skeleton (title, actions, links, preview) and reveal everything at once when the preview
  is ready, capped at 0.7 s so a huge image can&#39;t hold the links back. Gated on html[data-js]; no-JS pages are untouched.
- Tapping a file in a list shows the same skeleton after 140 ms if the server is slow (never flashes on fast/prefetched
  visits) and it is never stored in Turbo&#39;s snapshot cache, so Back returns the real listing.
- Pre-existing issue fixed: Turbo refuses URLs that don&#39;t look like HTML, so every tap on a file with an extension
  (app.js, photo.png) was a full page reload. File-link taps now start a Turbo visit (with a plain-link fallback;
  modifier-clicks and new-tab clicks are left to the browser).
- PDF preview no longer uses loading=lazy (it never loaded while the page was hidden behind the skeleton).
- 15 new browser checks (89 total); repo tests and axe-core (0 violations) pass.

</content>
</entry>
<entry>
<id>613126629ab21280ab6087e3c5e36a5e3788ae2e</id>
<published>2026-10-13T08:39:17Z</published>
<updated>2026-10-13T08:39:17Z</updated>
<title>feat(ui): icon-only copy buttons on phones</title>
<link rel="alternate" type="text/html" href="commit/613126629ab21280ab6087e3c5e36a5e3788ae2e.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 613126629ab21280ab6087e3c5e36a5e3788ae2e
parent 69bb2df5e35b1862672886a267e87f0fc8a2c7b4
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 08:39:17 +0000

feat(ui): icon-only copy buttons on phones

The small &#39;Copy&#39; buttons (Links rows, preview &#39;Copy contents&#39;) show just the universal copy icon at &lt;=640px,
which gives the link boxes ~100px more room. They keep accessible names (aria-label) and a 42px tap target; the
main &#39;Copy link&#39; button keeps its label, and desktop is unchanged. 6 new browser checks (80 total).

</content>
</entry>
<entry>
<id>69bb2df5e35b1862672886a267e87f0fc8a2c7b4</id>
<published>2026-10-13T08:20:02Z</published>
<updated>2026-10-13T08:20:02Z</updated>
<title>feat(ui): preview toolbar on top and skeleton loading</title>
<link rel="alternate" type="text/html" href="commit/69bb2df5e35b1862672886a267e87f0fc8a2c7b4.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 69bb2df5e35b1862672886a267e87f0fc8a2c7b4
parent bccc3407f698280c42edf805591e41f727d7b226
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 08:20:02 +0000

feat(ui): preview toolbar on top and skeleton loading

- Text previews: the line count and &#39;Copy contents&#39; now sit in a bar above the code instead of below it.
- Previews load behind a skeleton and are swapped in all at once with a short fade: a bar-and-lines skeleton for
  text, a shimmer box for images and PDFs. Title, actions and Links render immediately; the skeleton only
  covers the preview. aria-busy is set while loading.
- Safety: no-JS pages never hide the preview (the loading state is gated on html[data-js]); a skeleton is never
  left up forever (8 s cap); a Turbo-cached half-finished load is retried.
- 9 new browser checks incl. delayed responses (74 total); axe-core still 0 violations.

</content>
</entry>
<entry>
<id>bccc3407f698280c42edf805591e41f727d7b226</id>
<published>2026-10-13T08:08:59Z</published>
<updated>2026-10-13T08:08:59Z</updated>
<title>feat(ui): file page shows links before the preview and drops the type badge</title>
<link rel="alternate" type="text/html" href="commit/bccc3407f698280c42edf805591e41f727d7b226.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit bccc3407f698280c42edf805591e41f727d7b226
parent 93f04e70f6967d1288db48a8e151f74dea46521d
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 08:08:59 +0000

feat(ui): file page shows links before the preview and drops the type badge

- Links (CDN page, raw, download, embed) now come right after the title/actions, so on a phone they are visible
  without scrolling past a long file; the preview follows.
- Removed the file-type badge from the file header: the extension pill already says the type.
- 3 new browser checks (65 total).

</content>
</entry>
<entry>
<id>93f04e70f6967d1288db48a8e151f74dea46521d</id>
<published>2026-10-13T07:25:00Z</published>
<updated>2026-10-13T07:25:00Z</updated>
<title>feat(ui): faster navigation - rearrange controls, no features removed</title>
<link rel="alternate" type="text/html" href="commit/93f04e70f6967d1288db48a8e151f74dea46521d.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 93f04e70f6967d1288db48a8e151f74dea46521d
parent 6cb17afc711cbede5453e1f053df275c9946cd3b
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 07:25:00 +0000

feat(ui): faster navigation - rearrange controls, no features removed

Placement only; everything that existed is still there. If this isn&#39;t an improvement, revert this one commit.

- Search box moved above the toolbar (filtering is the first thing people do)
- Toolbar is one compact row on phones; sort shows a sort icon + short labels; zip button shortens to &#39;.zip&#39;
- Find and Upload are one tap away in the phone header (no hamburger needed); not repeated in the menu panel
- Root: smaller heading and a compact, dismissible sync notice (remembered, applied before first paint)
- File page: primary &#39;Copy link&#39; (raw URL) above the preview; Download and Open raw stay beside it
- 22 new browser checks (62 total); axe-core still 0 violations

Phone, 390x780: first folder on / 558px -&gt; 403px, first file in a folder 366px -&gt; 277px, file-page copy button 615px -&gt; 215px.

</content>
</entry>
<entry>
<id>6cb17afc711cbede5453e1f053df275c9946cd3b</id>
<published>2026-10-13T02:24:57Z</published>
<updated>2026-10-13T02:24:57Z</updated>
<title>fix(ui): sorting in folder-only listings and doubled focus indicator</title>
<link rel="alternate" type="text/html" href="commit/6cb17afc711cbede5453e1f053df275c9946cd3b.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 6cb17afc711cbede5453e1f053df275c9946cd3b
parent db0113c7f95383d939a59321d0c15a75ba58f79b
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 02:24:57 +0000

fix(ui): sorting in folder-only listings and doubled focus indicator

- Folders have no size, so size sorting did nothing in a folder containing only sub-folders (and the dropdown
  showed a stale saved choice). Size options are now disabled there, the control shows &#39;Default order&#39; without
  overwriting the saved preference, and it is hidden when there is nothing to reorder.
- Search/filter inputs drew an underline AND the generic 2px outline (a double blue line), and the generic
  :focus-visible rule forced border-radius: 4px on any focused control. Controls that draw their own focus
  indicator no longer get the outline; the radius override is gone.
- 8 new browser checks cover both.

</content>
</entry>
<entry>
<id>db0113c7f95383d939a59321d0c15a75ba58f79b</id>
<published>2026-10-13T02:13:14Z</published>
<updated>2026-10-13T02:13:14Z</updated>
<title>fix(ui): keep the header row steady when the mobile menu opens</title>
<link rel="alternate" type="text/html" href="commit/db0113c7f95383d939a59321d0c15a75ba58f79b.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit db0113c7f95383d939a59321d0c15a75ba58f79b
parent 2165b7df88a348a05ff4092a9f0e2e91467b6c49
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 02:13:14 +0000

fix(ui): keep the header row steady when the mobile menu opens

The header used min-height + flex-wrap, so once the menu wrapped onto a second line the logo row lost its
vertical centring and jumped up ~10px (crowding the browser bar). The logo/tools row now owns the header
height. The open menu is also capped to the viewport and scrolls, so it can&#39;t run off short phones.

</content>
</entry>
<entry>
<id>2165b7df88a348a05ff4092a9f0e2e91467b6c49</id>
<published>2026-10-13T01:54:06Z</published>
<updated>2026-10-13T01:54:06Z</updated>
<title>fix(ui): accessibility, gzip for static bundle, manifest and docs</title>
<link rel="alternate" type="text/html" href="commit/2165b7df88a348a05ff4092a9f0e2e91467b6c49.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 2165b7df88a348a05ff4092a9f0e2e91467b6c49
parent 83e95065a896cf606f957c21fb52379c61e2e193
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Tue, 13 Oct 2026 01:54:06 +0000

fix(ui): accessibility, gzip for static bundle, manifest and docs

- axe-core clean on every page (light/dark, desktop/mobile): underline in-text links, focusable scroll regions,
  contrast fixes for badges, h1 for folder pages, docs &#39;Jump to&#39; no longer skips a heading level
- main.py: gzip app.css/app.js/prefetch.js/fasttree.js from a small in-memory cache (+ tests); sw.js stays untouched
- manifest theme/background colours match the page; README documents the new layout and UI conventions

</content>
</entry>
<entry>
<id>83e95065a896cf606f957c21fb52379c61e2e193</id>
<published>2026-10-12T18:12:43Z</published>
<updated>2026-10-12T18:12:43Z</updated>
<title>feat(ui): new design system, shared layout and file previews</title>
<link rel="alternate" type="text/html" href="commit/83e95065a896cf606f957c21fb52379c61e2e193.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit 83e95065a896cf606f957c21fb52379c61e2e193
parent d54fe467f70d22c6ede116cbd80f4e7eb1d6ecbd
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Mon, 12 Oct 2026 18:12:43 +0000

feat(ui): new design system, shared layout and file previews

- base.html layout shared by every page; index.html split into _page_*.html partials
- CSS and JS extracted from inline blocks to static/app.css and static/app.js (cache-busted via a content hash)
- one token set with light/dark/system theming (no flash), brand-blue accent, per-file-type colours
- navbar with a More menu and mobile menu; breadcrumb moved out of the sticky header
- listing: sort, tinted file-type icons, accessible filter; native &lt;dialog&gt; for zip confirm/errors; toasts
- file page: image/video/audio/PDF/text previews, labelled link rows with copy, embed snippets
- upload: real keyboard-accessible dropzone, paste-to-upload, per-file queue; names rendered as text, not HTML
- history: accessible tabs; search/shortener moved to delegated handlers (no listener leaks under Turbo)
- fixes: shared JS now loads on every page; stats palette no longer repeats a colour
- main.py: allow-list app.css/app.js and expose asset_v (content hash) to templates

</content>
</entry>
<entry>
<id>d54fe467f70d22c6ede116cbd80f4e7eb1d6ecbd</id>
<published>2026-10-12T04:45:14Z</published>
<updated>2026-10-12T04:45:14Z</updated>
<title>docs: add UI overhaul plan</title>
<link rel="alternate" type="text/html" href="commit/d54fe467f70d22c6ede116cbd80f4e7eb1d6ecbd.html" />
<author>
<name>claude-cdn-bot</name>
<email>claude-bot@users.noreply.github.com</email>
</author>
<content>commit d54fe467f70d22c6ede116cbd80f4e7eb1d6ecbd
parent c3dd867870170f79124d75f0ca980d5dc5cf51eb
Author: claude-cdn-bot &lt;claude-bot@users.noreply.github.com&gt;
Date:   Mon, 12 Oct 2026 04:45:14 +0000

docs: add UI overhaul plan

</content>
</entry>
<entry>
<id>c3dd867870170f79124d75f0ca980d5dc5cf51eb</id>
<published>2026-10-11T08:59:49Z</published>
<updated>2026-10-11T08:59:49Z</updated>
<title>Merge pull request #42 from notamitgamer/fast-tree</title>
<link rel="alternate" type="text/html" href="commit/c3dd867870170f79124d75f0ca980d5dc5cf51eb.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit c3dd867870170f79124d75f0ca980d5dc5cf51eb
parent 9cc01a2127afae7d1ef7ee7ae141341e3e61b566
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun, 11 Oct 2026 14:29:49 +0530

Merge pull request #42 from notamitgamer/fast-tree

Instant folder navigation from a locally cached file tree
</content>
</entry>
<entry>
<id>13c5b8df278fadb7ee1377520ce3f93bcb8cfd40</id>
<published>2026-10-11T08:57:34Z</published>
<updated>2026-10-11T08:57:34Z</updated>
<title>Instant folder navigation from a locally cached file tree</title>
<link rel="alternate" type="text/html" href="commit/13c5b8df278fadb7ee1377520ce3f93bcb8cfd40.html" />
<author>
<name>bot-for-notamitgamer[bot]</name>
<email>bot-for-notamitgamer[bot]@users.noreply.github.com</email>
</author>
<content>commit 13c5b8df278fadb7ee1377520ce3f93bcb8cfd40
parent 9cc01a2127afae7d1ef7ee7ae141341e3e61b566
Author: bot-for-notamitgamer[bot] &lt;bot-for-notamitgamer[bot]@users.noreply.github.com&gt;
Date:   Sun, 11 Oct 2026 08:57:34 +0000

Instant folder navigation from a locally cached file tree

Prefetching only helps if the user waits a moment; someone who knows where
they&#39;re going clicks straight away and still paid a network round trip.
Now the browser keeps the whole file tree and a page shell in localStorage
and builds a folder&#39;s page locally, so the click needs no request at all,
even on the first click after load and, for returning visitors, before the
network answers.

How it works
- GET /api/tree: every non-hidden file as [path, size] (ETag, gzip, 304;
  503 on an empty/failed listing; off above FAST_TREE_MAX_FILES).
- GET /api/shell: the folder page skeleton with slots, plus each page
  fragment (rows, toolbar, breadcrumb, ...) with @@placeholders@@.
- static/fasttree.js intercepts plain clicks on folder links, fills the
  fragments from the tree and calls Turbo.visit(url, {response}), so Turbo
  owns history, scroll, Back/Forward and script re-execution. Anything
  unusual falls through to the normal request.
- The tree is revalidated in the background (page load, every 15 s, on
  focus, after an upload). A page built from an older tree is rebuilt.

One source of truth for markup
- Page fragments move into Jinja macros (templates/_listing.html) used by
  both the server render and /api/shell. The refactor was verified against
  17 pre-refactor pages: output identical except the new script tag and the
  upload refresh hook.
- tests/test_fast_tree.py asserts a locally built page equals the server&#39;s
  for deep/collapsed breadcrumbs, &amp;&#39;&lt;&quot; and emoji names, size rounding ties.

Also
- prefetch.js skips folder links the local path handles.
- Tests: JS unit + jsdom glue tests, an end-to-end test with the real Turbo
  8.0.4 and real server pages, and Python endpoint/parity tests, all in CI.
  jsdom/Turbo are installed with --no-save in CI only.
- README, CONTRIBUTING, .env.example updated; the README no longer claims
  uploads leave the server cache stale (they clear it).

</content>
</entry>
<entry>
<id>9cc01a2127afae7d1ef7ee7ae141341e3e61b566</id>
<published>2026-10-10T15:03:32Z</published>
<updated>2026-10-10T15:03:32Z</updated>
<title>Merge pull request #41 from notamitgamer/link-prefetch</title>
<link rel="alternate" type="text/html" href="commit/9cc01a2127afae7d1ef7ee7ae141341e3e61b566.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 9cc01a2127afae7d1ef7ee7ae141341e3e61b566
parent f7a75b7f26583b457f2d518f662d5aec66daea5d
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 20:33:32 +0530

Merge pull request #41 from notamitgamer/link-prefetch

Make navigation fast: link prefetching, cached + gzipped pages, fewer storage calls
</content>
</entry>
<entry>
<id>18e6f713c28a3ea5b602ea75f82e12d320076d8a</id>
<published>2026-10-10T14:02:45Z</published>
<updated>2026-10-10T14:02:45Z</updated>
<title>Make navigation feel instant: cached + gzipped pages, fewer storage calls</title>
<link rel="alternate" type="text/html" href="commit/18e6f713c28a3ea5b602ea75f82e12d320076d8a.html" />
<author>
<name>bot-for-notamitgamer[bot]</name>
<email>bot-for-notamitgamer[bot]@users.noreply.github.com</email>
</author>
<content>commit 18e6f713c28a3ea5b602ea75f82e12d320076d8a
parent 0a8d2e1dfebbf7172ff0300fa153bc742a3279b1
Author: bot-for-notamitgamer[bot] &lt;bot-for-notamitgamer[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 14:02:45 +0000

Make navigation feel instant: cached + gzipped pages, fewer storage calls

Prefetching only warmed the server, so every click still paid a full
round trip plus an uncompressed 60-90 KB page. Now a prefetched page is
actually reusable by the browser.

- fast_html.py: rendered pages (identical for everyone) get
  Cache-Control: private, max-age=30 and gzip (~5x smaller). Only 200 GET
  TemplateResponses are touched; downloads, API, redirects, errors and the
  admin dashboard are not.
- storage: opening a folder no longer makes a wasted HEAD request when the
  parent folder&#39;s listing is cached (get_path_info), and concurrent
  requests for one folder share a single Hugging Face call.
- prefetch.js: start once the document is parsed instead of waiting for
  &#39;load&#39;; 3 at a time; TTL below the page cache lifetime; a click no longer
  cancels the in-flight request for the page being opened.
- tests: offline server fast-path checks (fake bucket) run in CI; extra
  prefetcher tests.
- docs: README &quot;Fast navigation&quot; section, including the freshness trade-off.

</content>
</entry>
<entry>
<id>0a8d2e1dfebbf7172ff0300fa153bc742a3279b1</id>
<published>2026-10-10T05:55:08Z</published>
<updated>2026-10-10T05:55:08Z</updated>
<title>Add background link prefetching</title>
<link rel="alternate" type="text/html" href="commit/0a8d2e1dfebbf7172ff0300fa153bc742a3279b1.html" />
<author>
<name>bot-for-notamitgamer[bot]</name>
<email>bot-for-notamitgamer[bot]@users.noreply.github.com</email>
</author>
<content>commit 0a8d2e1dfebbf7172ff0300fa153bc742a3279b1
parent f228efdf93625a133dab093dfb7fa53fe012a4c4
Author: bot-for-notamitgamer[bot] &lt;bot-for-notamitgamer[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:55:08 +0000

Add background link prefetching

Once a page is idle, fetch the pages it links to so the server&#39;s 60 s
listing cache is already warm when the user clicks. The slow part of
opening a folder is the cold Hugging Face lookup behind it.

- app/static/prefetch.js: conservative prefetcher. Same-origin links
  only; never /api, /admin, /mask, /pack, /static, /raw, downloads,
  target/download links or data-turbo=&quot;false&quot; content. Max 16 pages per
  page view, 2 at a time, page content before navbar links, on-screen
  links first, only while the tab is visible, cancelled on navigation.
  Skipped on Save-Data, 2g and prefers-reduced-data (reduced on 3g).
  Works with Turbo (re-runs on turbo:load) and without it. Opt out with
  &lt;meta name=&quot;cdn-prefetch&quot; content=&quot;off&quot;&gt; or data-no-prefetch.
- Serve it from /static/ (allowlisted, short max-age) and load it from
  the head of the public page templates.
- tests/prefetch.test.js: 13 dependency-free unit tests (node --test),
  run in CI; CI smoke test also checks /static/prefetch.js.
- Document it in README and CONTRIBUTING.

</content>
</entry>
<entry>
<id>f7a75b7f26583b457f2d518f662d5aec66daea5d</id>
<published>2026-10-10T05:53:06Z</published>
<updated>2026-10-10T05:53:06Z</updated>
<title>Merge pull request #40 from notamitgamer/dependabot/pip/huggingface-hub-gte-2.1.1</title>
<link rel="alternate" type="text/html" href="commit/f7a75b7f26583b457f2d518f662d5aec66daea5d.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit f7a75b7f26583b457f2d518f662d5aec66daea5d
parent 90ad8470a35bd5ad03d0745afba13f338e2c9970
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 11:23:06 +0530

Merge pull request #40 from notamitgamer/dependabot/pip/huggingface-hub-gte-2.1.1

Update huggingface-hub requirement from &gt;=1.5 to &gt;=2.1.1
</content>
</entry>
<entry>
<id>90ad8470a35bd5ad03d0745afba13f338e2c9970</id>
<published>2026-10-10T05:52:50Z</published>
<updated>2026-10-10T05:52:50Z</updated>
<title>Merge pull request #39 from notamitgamer/dependabot/github_actions/actions/checkout-7</title>
<link rel="alternate" type="text/html" href="commit/90ad8470a35bd5ad03d0745afba13f338e2c9970.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 90ad8470a35bd5ad03d0745afba13f338e2c9970
parent 102fc4d7072a5fad0156ec61181a385ee24d443e
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 11:22:50 +0530

Merge pull request #39 from notamitgamer/dependabot/github_actions/actions/checkout-7

Bump actions/checkout from 4 to 7
</content>
</entry>
<entry>
<id>4713bbc4ee6c4f577b7ac4cbfa2d6457d3d5c604</id>
<published>2026-10-10T05:52:43Z</published>
<updated>2026-10-10T05:52:43Z</updated>
<title>Bump actions/checkout from 4 to 7</title>
<link rel="alternate" type="text/html" href="commit/4713bbc4ee6c4f577b7ac4cbfa2d6457d3d5c604.html" />
<author>
<name>dependabot[bot]</name>
<email>49699333+dependabot[bot]@users.noreply.github.com</email>
</author>
<content>commit 4713bbc4ee6c4f577b7ac4cbfa2d6457d3d5c604
parent 102fc4d7072a5fad0156ec61181a385ee24d443e
Author: dependabot[bot] &lt;49699333+dependabot[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:52:43 +0000

Bump actions/checkout from 4 to 7

Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: &#39;7&#39;
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] &lt;support@github.com&gt;
</content>
</entry>
<entry>
<id>102fc4d7072a5fad0156ec61181a385ee24d443e</id>
<published>2026-10-10T05:52:23Z</published>
<updated>2026-10-10T05:52:23Z</updated>
<title>Merge pull request #38 from notamitgamer/dependabot/docker/python-3.14-slim-bookworm</title>
<link rel="alternate" type="text/html" href="commit/102fc4d7072a5fad0156ec61181a385ee24d443e.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 102fc4d7072a5fad0156ec61181a385ee24d443e
parent f228efdf93625a133dab093dfb7fa53fe012a4c4
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 11:22:23 +0530

Merge pull request #38 from notamitgamer/dependabot/docker/python-3.14-slim-bookworm

Bump python from 3.12-slim-bookworm to 3.14-slim-bookworm
</content>
</entry>
<entry>
<id>f228efdf93625a133dab093dfb7fa53fe012a4c4</id>
<published>2026-10-10T05:50:36Z</published>
<updated>2026-10-10T05:50:36Z</updated>
<title>Merge pull request #37 from notamitgamer/dependabot/github_actions/actions/setup-python-7</title>
<link rel="alternate" type="text/html" href="commit/f228efdf93625a133dab093dfb7fa53fe012a4c4.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit f228efdf93625a133dab093dfb7fa53fe012a4c4
parent 4e18fe388a6e17692c87f857ac6cefe312ca94a7
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 11:20:36 +0530

Merge pull request #37 from notamitgamer/dependabot/github_actions/actions/setup-python-7

Bump actions/setup-python from 5 to 7
</content>
</entry>
<entry>
<id>bdcf9b5b0b0d69451c0c25d1d5ea7c802018cf0f</id>
<published>2026-10-10T05:46:44Z</published>
<updated>2026-10-10T05:46:44Z</updated>
<title>Update huggingface-hub requirement from &gt;=1.5 to &gt;=2.1.1</title>
<link rel="alternate" type="text/html" href="commit/bdcf9b5b0b0d69451c0c25d1d5ea7c802018cf0f.html" />
<author>
<name>dependabot[bot]</name>
<email>49699333+dependabot[bot]@users.noreply.github.com</email>
</author>
<content>commit bdcf9b5b0b0d69451c0c25d1d5ea7c802018cf0f
parent 4e18fe388a6e17692c87f857ac6cefe312ca94a7
Author: dependabot[bot] &lt;49699333+dependabot[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:46:44 +0000

Update huggingface-hub requirement from &gt;=1.5 to &gt;=2.1.1

Updates the requirements on [huggingface-hub](https://github.com/huggingface/huggingface_hub) to permit the latest version.
- [Release notes](https://github.com/huggingface/huggingface_hub/releases)
- [Commits](https://github.com/huggingface/huggingface_hub/compare/v1.5.0...v2.1.1)

---
updated-dependencies:
- dependency-name: huggingface-hub
  dependency-version: 2.1.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] &lt;support@github.com&gt;
</content>
</entry>
<entry>
<id>6339739915323b91f20ebcbc1f08a6d1224573cc</id>
<published>2026-10-10T05:46:25Z</published>
<updated>2026-10-10T05:46:25Z</updated>
<title>Bump python from 3.12-slim-bookworm to 3.14-slim-bookworm</title>
<link rel="alternate" type="text/html" href="commit/6339739915323b91f20ebcbc1f08a6d1224573cc.html" />
<author>
<name>dependabot[bot]</name>
<email>49699333+dependabot[bot]@users.noreply.github.com</email>
</author>
<content>commit 6339739915323b91f20ebcbc1f08a6d1224573cc
parent 4e18fe388a6e17692c87f857ac6cefe312ca94a7
Author: dependabot[bot] &lt;49699333+dependabot[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:46:25 +0000

Bump python from 3.12-slim-bookworm to 3.14-slim-bookworm

Bumps python from 3.12-slim-bookworm to 3.14-slim-bookworm.

---
updated-dependencies:
- dependency-name: python
  dependency-version: 3.14-slim-bookworm
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] &lt;support@github.com&gt;
</content>
</entry>
<entry>
<id>c3a43fbc30ef358f37b6a2e7192303dedc2e839e</id>
<published>2026-10-10T05:46:22Z</published>
<updated>2026-10-10T05:46:22Z</updated>
<title>Bump actions/setup-python from 5 to 7</title>
<link rel="alternate" type="text/html" href="commit/c3a43fbc30ef358f37b6a2e7192303dedc2e839e.html" />
<author>
<name>dependabot[bot]</name>
<email>49699333+dependabot[bot]@users.noreply.github.com</email>
</author>
<content>commit c3a43fbc30ef358f37b6a2e7192303dedc2e839e
parent 4e18fe388a6e17692c87f857ac6cefe312ca94a7
Author: dependabot[bot] &lt;49699333+dependabot[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:46:22 +0000

Bump actions/setup-python from 5 to 7

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 7.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v7)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: &#39;7&#39;
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] &lt;support@github.com&gt;
</content>
</entry>
<entry>
<id>4e18fe388a6e17692c87f857ac6cefe312ca94a7</id>
<published>2026-10-10T05:45:37Z</published>
<updated>2026-10-10T05:45:37Z</updated>
<title>Merge pull request #36 from notamitgamer/open-source-readiness</title>
<link rel="alternate" type="text/html" href="commit/4e18fe388a6e17692c87f857ac6cefe312ca94a7.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 4e18fe388a6e17692c87f857ac6cefe312ca94a7
parent 26ba6ecb5502b0c3459147f692c85aa8de94c174
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 11:15:37 +0530

Merge pull request #36 from notamitgamer/open-source-readiness

Prepare the project for open source (README, community files, CI)
</content>
</entry>
<entry>
<id>ba385f206b244f36610ababea313e53a2f41a420</id>
<published>2026-10-10T05:28:30Z</published>
<updated>2026-10-10T05:28:30Z</updated>
<title>Prepare the project for open source</title>
<link rel="alternate" type="text/html" href="commit/ba385f206b244f36610ababea313e53a2f41a420.html" />
<author>
<name>bot-for-notamitgamer[bot]</name>
<email>bot-for-notamitgamer[bot]@users.noreply.github.com</email>
</author>
<content>commit ba385f206b244f36610ababea313e53a2f41a420
parent 26ba6ecb5502b0c3459147f692c85aa8de94c174
Author: bot-for-notamitgamer[bot] &lt;bot-for-notamitgamer[bot]@users.noreply.github.com&gt;
Date:   Sat, 10 Oct 2026 05:28:30 +0000

Prepare the project for open source

The repository was already MIT-licensed and all runtime dependencies are
permissive (MIT / BSD / Apache-2.0 / Unlicense), so the license stays MIT.
This adds the documentation and community files a public project needs.

Added:
- README with features, architecture, quick start, Docker/Render
  deployment, full configuration table, HTTP API and a self-hosting checklist
- .env.example documenting every environment variable
- CONTRIBUTING, CODE_OF_CONDUCT (Contributor Covenant 2.1), SECURITY
- Issue forms, pull request template and Dependabot config
- CI workflow: lint (syntax/undefined names), byte-compile, smoke test,
  Docker build
- .dockerignore; .gitignore now covers .env.* and editor/tool files

Changed:
- OIDC audience for /api/gh-sync is now configurable via OIDC_AUDIENCE so
  self-hosters can use their own hostname. The default is unchanged
  (cdn.amit.is-a.dev), so existing deployments behave exactly as before.

</content>
</entry>
<entry>
<id>26ba6ecb5502b0c3459147f692c85aa8de94c174</id>
<published>2026-10-10T00:29:03Z</published>
<updated>2026-10-10T00:29:03Z</updated>
<title>Delete test.html</title>
<link rel="alternate" type="text/html" href="commit/26ba6ecb5502b0c3459147f692c85aa8de94c174.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 26ba6ecb5502b0c3459147f692c85aa8de94c174
parent 85c0941eab48dd9389ca0e4e4f68f9e43e0630bb
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:59:03 +0530

Delete test.html
</content>
</entry>
<entry>
<id>85c0941eab48dd9389ca0e4e4f68f9e43e0630bb</id>
<published>2026-10-10T00:28:33Z</published>
<updated>2026-10-10T00:28:33Z</updated>
<title>Merge pull request #35 from notamitgamer/nav-admin-button</title>
<link rel="alternate" type="text/html" href="commit/85c0941eab48dd9389ca0e4e4f68f9e43e0630bb.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 85c0941eab48dd9389ca0e4e4f68f9e43e0630bb
parent a7a34d8fbf7199736f3eb4d55a851c9385ff3ff1
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:58:33 +0530

Merge pull request #35 from notamitgamer/nav-admin-button

Navbar: add an Admin button, redesinged the admin page
</content>
</entry>
<entry>
<id>de8161997357124e81fe618ad8a3008f61199ce1</id>
<published>2026-10-10T00:25:51Z</published>
<updated>2026-10-10T00:25:51Z</updated>
<title>Update CSS styles in admin.py</title>
<link rel="alternate" type="text/html" href="commit/de8161997357124e81fe618ad8a3008f61199ce1.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit de8161997357124e81fe618ad8a3008f61199ce1
parent 5365efb93500a0b6b087a05b8739fb9066184396
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:55:51 +0530

Update CSS styles in admin.py
</content>
</entry>
<entry>
<id>5365efb93500a0b6b087a05b8739fb9066184396</id>
<published>2026-10-10T00:23:48Z</published>
<updated>2026-10-10T00:23:48Z</updated>
<title>Refactor admin interface styles and structure</title>
<link rel="alternate" type="text/html" href="commit/5365efb93500a0b6b087a05b8739fb9066184396.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 5365efb93500a0b6b087a05b8739fb9066184396
parent ad8134a41238bcdaa4459177116f8a2c396daabe
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:53:48 +0530

Refactor admin interface styles and structure

Updated styles and HTML structure for admin interface, including adjustments for mobile responsiveness and improved element visibility.
</content>
</entry>
<entry>
<id>ad8134a41238bcdaa4459177116f8a2c396daabe</id>
<published>2026-10-10T00:20:37Z</published>
<updated>2026-10-10T00:20:37Z</updated>
<title>Refactor admin page styles and layout</title>
<link rel="alternate" type="text/html" href="commit/ad8134a41238bcdaa4459177116f8a2c396daabe.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit ad8134a41238bcdaa4459177116f8a2c396daabe
parent ede846d1eeb83ae03b626412e3c50c884958a80b
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:50:37 +0530

Refactor admin page styles and layout

Updated styles and HTML structure for better layout and responsiveness.
</content>
</entry>
<entry>
<id>ede846d1eeb83ae03b626412e3c50c884958a80b</id>
<published>2026-10-10T00:17:48Z</published>
<updated>2026-10-10T00:17:48Z</updated>
<title>Refactor admin interface styles and layout</title>
<link rel="alternate" type="text/html" href="commit/ede846d1eeb83ae03b626412e3c50c884958a80b.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit ede846d1eeb83ae03b626412e3c50c884958a80b
parent d7bd96f9b06330edcbeabadf68e28afc70251df3
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:47:48 +0530

Refactor admin interface styles and layout

Updated styles and layout for admin interface, including adjustments to buttons, tables, and mobile responsiveness.
</content>
</entry>
<entry>
<id>a7a34d8fbf7199736f3eb4d55a851c9385ff3ff1</id>
<published>2026-10-10T00:11:23Z</published>
<updated>2026-10-10T00:11:23Z</updated>
<title>Merge pull request #34 from notamitgamer/sync-archive-limit</title>
<link rel="alternate" type="text/html" href="commit/a7a34d8fbf7199736f3eb4d55a851c9385ff3ff1.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit a7a34d8fbf7199736f3eb4d55a851c9385ff3ff1
parent e1e7c17a8e9887ac86bba414f2194fd34e4bca76
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sat, 10 Oct 2026 05:41:23 +0530

Merge pull request #34 from notamitgamer/sync-archive-limit

GitHub sync: limit the compressed archive to 200 MB
</content>
</entry>
<entry>
<id>d7bd96f9b06330edcbeabadf68e28afc70251df3</id>
<published>2026-10-10T00:10:58Z</published>
<updated>2026-10-10T00:10:58Z</updated>
<title>Navbar: add an Admin shield button linking to /admin (icon-only on desktop, labelled in the phone menu)</title>
<link rel="alternate" type="text/html" href="commit/d7bd96f9b06330edcbeabadf68e28afc70251df3.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit d7bd96f9b06330edcbeabadf68e28afc70251df3
parent e1e7c17a8e9887ac86bba414f2194fd34e4bca76
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Sat, 10 Oct 2026 00:10:58 +0000

Navbar: add an Admin shield button linking to /admin (icon-only on desktop, labelled in the phone menu)

</content>
</entry>
<entry>
<id>782b87f8ce4188344dfaaa3ef0b343321e659d76</id>
<published>2026-10-10T00:07:40Z</published>
<updated>2026-10-10T00:07:40Z</updated>
<title>GitHub sync: cap the compressed archive at 200 MB and stream it to disk instead of loading it into memory</title>
<link rel="alternate" type="text/html" href="commit/782b87f8ce4188344dfaaa3ef0b343321e659d76.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 782b87f8ce4188344dfaaa3ef0b343321e659d76
parent e1e7c17a8e9887ac86bba414f2194fd34e4bca76
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Sat, 10 Oct 2026 00:07:40 +0000

GitHub sync: cap the compressed archive at 200 MB and stream it to disk instead of loading it into memory

The size is checked first and larger archives get 413 before anything is read. Docs and sync page updated.

</content>
</entry>
<entry>
<id>e1e7c17a8e9887ac86bba414f2194fd34e4bca76</id>
<published>2026-10-09T01:10:36Z</published>
<updated>2026-10-09T01:10:36Z</updated>
<title>Merge pull request #33 from notamitgamer/rate-limit-200mb</title>
<link rel="alternate" type="text/html" href="commit/e1e7c17a8e9887ac86bba414f2194fd34e4bca76.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit e1e7c17a8e9887ac86bba414f2194fd34e4bca76
parent 36b3d0ff05af28e3238803be7310506298247986
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Fri,  9 Oct 2026 06:40:36 +0530

Merge pull request #33 from notamitgamer/rate-limit-200mb

Lower the file upload limit to 200 MB per hour
</content>
</entry>
<entry>
<id>945bef7551e07dca3acd6acaac177fa8ff1232d7</id>
<published>2026-10-09T01:08:58Z</published>
<updated>2026-10-09T01:08:58Z</updated>
<title>Lower the file upload limit from 500 MB to 200 MB per hour (code, docs and upload page notice)</title>
<link rel="alternate" type="text/html" href="commit/945bef7551e07dca3acd6acaac177fa8ff1232d7.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 945bef7551e07dca3acd6acaac177fa8ff1232d7
parent 36b3d0ff05af28e3238803be7310506298247986
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Fri,  9 Oct 2026 01:08:58 +0000

Lower the file upload limit from 500 MB to 200 MB per hour (code, docs and upload page notice)

</content>
</entry>
<entry>
<id>36b3d0ff05af28e3238803be7310506298247986</id>
<published>2026-10-09T01:04:55Z</published>
<updated>2026-10-09T01:04:55Z</updated>
<title>Merge pull request #32 from notamitgamer/docs-update-sync</title>
<link rel="alternate" type="text/html" href="commit/36b3d0ff05af28e3238803be7310506298247986.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 36b3d0ff05af28e3238803be7310506298247986
parent e93ad33e1df77d90d69ecbad41d345d8148b4bc1
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Fri,  9 Oct 2026 06:34:55 +0530

Merge pull request #32 from notamitgamer/docs-update-sync

Rate limits: new limits, a dedicated docs section and page notices; docs and sync page refresh
</content>
</entry>
<entry>
<id>906b76b34c9b7ed86657b546d732b275de8f1685</id>
<published>2026-10-09T01:02:25Z</published>
<updated>2026-10-09T01:02:25Z</updated>
<title>Docs: remove the Cloudflare request-size notes (measured: no proxy cap up to 520 MB)</title>
<link rel="alternate" type="text/html" href="commit/906b76b34c9b7ed86657b546d732b275de8f1685.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 906b76b34c9b7ed86657b546d732b275de8f1685
parent 7ea2763de3f13d1d01856d0eac15c635c9d02d3d
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Fri,  9 Oct 2026 01:02:25 +0000

Docs: remove the Cloudflare request-size notes (measured: no proxy cap up to 520 MB)

A 105 MB and a 520 MB streamed request were both accepted by cdn.amit.is-a.dev and reached the app,
so the 100 MB Cloudflare example was wrong for this deployment. The app&#39;s own limits are the effective ones.

</content>
</entry>
<entry>
<id>7ea2763de3f13d1d01856d0eac15c635c9d02d3d</id>
<published>2026-10-09T00:47:19Z</published>
<updated>2026-10-09T00:47:19Z</updated>
<title>Dashboard: show banned IPs right after the approval list, above the upload log</title>
<link rel="alternate" type="text/html" href="commit/7ea2763de3f13d1d01856d0eac15c635c9d02d3d.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 7ea2763de3f13d1d01856d0eac15c635c9d02d3d
parent bd928fe801c584c66b1125379b3207cc603595df
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Fri,  9 Oct 2026 00:47:19 +0000

Dashboard: show banned IPs right after the approval list, above the upload log

The banned IPs list used to be at the bottom of the page. It is now the section directly under
&#39;Waiting for approval&#39; and above &#39;Recent uploads&#39;, so a ban or unban is visible next to the log.
The &#39;banned IPs&#39; tile still jumps to it.

</content>
</entry>
<entry>
<id>bd928fe801c584c66b1125379b3207cc603595df</id>
<published>2026-10-08T10:39:13Z</published>
<updated>2026-10-08T10:39:13Z</updated>
<title>New rate limits: uploads 500 MB/h, links 50 MB/h, shortener 10/min + 50/h, no limit on GitHub sync</title>
<link rel="alternate" type="text/html" href="commit/bd928fe801c584c66b1125379b3207cc603595df.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit bd928fe801c584c66b1125379b3207cc603595df
parent 56de16893e084bb15fa42f875fdca2c87b4fa81b
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Thu,  8 Oct 2026 10:39:13 +0000

New rate limits: uploads 500 MB/h, links 50 MB/h, shortener 10/min + 50/h, no limit on GitHub sync

- file uploads (/api/put): 500 MB per hour per IP, no per-minute limit; a single file over 500 MB gets 413
- uploads from a link (/api/put-url): own allowance of 50 MB per hour per IP; fetches stop at 50 MB
- shortener: 10 per minute (unchanged) and 50 per hour (was 60)
- GitHub sync: rate limiter removed (it was silently the 50 MB/300 MB upload limiter); the unused 2 GB constant is gone
- limiter is now one hourly byte window with a name, so the error says which allowance was hit
- docs: Rate limits section rewritten, sync/upload/shortener sections and both page notices updated;
  notes that a network in front of the CDN (e.g. Cloudflare free plan, 100 MB per request) can cap one request

</content>
</entry>
<entry>
<id>56de16893e084bb15fa42f875fdca2c87b4fa81b</id>
<published>2026-10-07T09:43:15Z</published>
<updated>2026-10-07T09:43:15Z</updated>
<title>Rate limits: dedicated docs section, notices on the upload and shorten pages, correct the sync figure</title>
<link rel="alternate" type="text/html" href="commit/56de16893e084bb15fa42f875fdca2c87b4fa81b.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 56de16893e084bb15fa42f875fdca2c87b4fa81b
parent 1ddc23d4bac179421810c3c958009ed5dbfc0857
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Wed,  7 Oct 2026 09:43:15 +0000

Rate limits: dedicated docs section, notices on the upload and shorten pages, correct the sync figure

- documentation: new &#39;Rate limits&#39; section (#rate-limits) with a summary table, how the sliding window works,
  the 50 MB single-file ceiling, batch behaviour, what does not count, the exact 429 messages, and tips
- upload page (/new) and shorten page: visible rate-limit note linking to /documentation#rate-limits
- fix: the docs said GitHub sync allows 2 GB/hour, but the sync limiter reuses the upload limiter class and
  actually enforces 50 MB/minute and 300 MB/hour per repo+IP (the 2 GB constant is never used). The docs and the
  sync page now state what the code does; the other 429 entries link to the new section

</content>
</entry>
<entry>
<id>1ddc23d4bac179421810c3c958009ed5dbfc0857</id>
<published>2026-10-07T08:54:13Z</published>
<updated>2026-10-07T08:54:13Z</updated>
<title>Docs: bring the documentation and sync pages up to date</title>
<link rel="alternate" type="text/html" href="commit/1ddc23d4bac179421810c3c958009ed5dbfc0857.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 1ddc23d4bac179421810c3c958009ed5dbfc0857
parent e93ad33e1df77d90d69ecbad41d345d8148b4bc1
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Wed,  7 Oct 2026 08:54:13 +0000

Docs: bring the documentation and sync pages up to date

documentation page:
- GitHub sync: approval rule (first sync free, later need approval), banned accounts/IPs, video rejection,
  numeric owner id, permanent deletes; new 403/415 errors; limits text
- Uploading: order of checks (ban, VPN/proxy, video, rate limit), any filename accepted + how it is sanitised,
  temp files never use the client filename; new 403/415 errors on /api/put and /api/put-url
- New sections: URL shortener (/shorten, /api/shorten, /mask/{id}) and Stats (/stats, /api/stats)
- Storage section rewritten for HF Storage Buckets (no version history, hidden internal folders)
- Removed leftover &#39;dataset repo&#39; / resolve/main wording

sync page:
- workflow uses curl -sS --fail-with-body so the server&#39;s refusal reason shows in the Actions log
- explains identity by numeric account id, the approval rule and the no-video rule
- new &#39;If a sync is refused&#39; guide (403 / 415 / 401 / 429)

</content>
</entry>
<entry>
<id>e93ad33e1df77d90d69ecbad41d345d8148b4bc1</id>
<published>2026-10-06T11:50:10Z</published>
<updated>2026-10-06T11:50:10Z</updated>
<title>Merge pull request #31 from YOCRRZ224/patch-1</title>
<link rel="alternate" type="text/html" href="commit/e93ad33e1df77d90d69ecbad41d345d8148b4bc1.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit e93ad33e1df77d90d69ecbad41d345d8148b4bc1
parent f5afc3459d8f26fe2a23df9421fb1229f25af35a
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Tue,  6 Oct 2026 17:20:10 +0530

Merge pull request #31 from YOCRRZ224/patch-1

Update test.html
</content>
</entry>
<entry>
<id>9d66f33ba1ca3a5c7f1e77b8379e1848755131ee</id>
<published>2026-10-06T11:47:25Z</published>
<updated>2026-10-06T11:47:25Z</updated>
<title>Update test.html</title>
<link rel="alternate" type="text/html" href="commit/9d66f33ba1ca3a5c7f1e77b8379e1848755131ee.html" />
<author>
<name>yocrrz</name>
<email>137055000+YOCRRZ224@users.noreply.github.com</email>
</author>
<content>commit 9d66f33ba1ca3a5c7f1e77b8379e1848755131ee
parent f5afc3459d8f26fe2a23df9421fb1229f25af35a
Author: yocrrz &lt;137055000+YOCRRZ224@users.noreply.github.com&gt;
Date:   Tue,  6 Oct 2026 17:17:25 +0530

Update test.html

i just wanted to be shown in contributors
</content>
</entry>
<entry>
<id>f5afc3459d8f26fe2a23df9421fb1229f25af35a</id>
<published>2026-10-06T08:17:59Z</published>
<updated>2026-10-06T08:17:59Z</updated>
<title>Merge pull request #29 from notamitgamer/migration</title>
<link rel="alternate" type="text/html" href="commit/f5afc3459d8f26fe2a23df9421fb1229f25af35a.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit f5afc3459d8f26fe2a23df9421fb1229f25af35a
parent 68c61e717bdb6ae057a8bf1078dd68b7b8c2089e
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Tue,  6 Oct 2026 13:47:59 +0530

Merge pull request #29 from notamitgamer/migration

Migrate to HF Storage Buckets; add admin dashboard, GitHub sync allowlist, stats page and upload hardening
</content>
</entry>
<entry>
<id>3e8924cb71968cf5010a7c61d4dfd6e57dbf82f9</id>
<published>2026-10-06T08:10:53Z</published>
<updated>2026-10-06T08:10:53Z</updated>
<title>Dashboard: make the &#39;awaiting approval&#39; and &#39;banned IPs&#39; tiles always work</title>
<link rel="alternate" type="text/html" href="commit/3e8924cb71968cf5010a7c61d4dfd6e57dbf82f9.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 3e8924cb71968cf5010a7c61d4dfd6e57dbf82f9
parent b4e8efa1f4b1e581e19c46fc71502a5330536f34
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 08:10:53 +0000

Dashboard: make the &#39;awaiting approval&#39; and &#39;banned IPs&#39; tiles always work

The approval section is now always drawn (it said nothing when empty, so the tile went nowhere) and
tapping a tile smoothly scrolls the section to the top and flashes it. The approval section gets an
amber edge when accounts are waiting.

</content>
</entry>
<entry>
<id>b4e8efa1f4b1e581e19c46fc71502a5330536f34</id>
<published>2026-10-06T08:02:56Z</published>
<updated>2026-10-06T08:02:56Z</updated>
<title>Add public /stats page; make the admin dashboard mobile-friendly</title>
<link rel="alternate" type="text/html" href="commit/b4e8efa1f4b1e581e19c46fc71502a5330536f34.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit b4e8efa1f4b1e581e19c46fc71502a5330536f34
parent 3629e72df62e74ecb240eaf1032f027d3025365d
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 08:02:56 +0000

Add public /stats page; make the admin dashboard mobile-friendly

Stats (/stats, /api/stats): file types, sizes, biggest folders, files added per month, largest files.
Computed from the already-cached bucket listing, cached 10 min, drawn with CSS/inline SVG
(no chart library). Only aggregates are public. Adds a Stats link to the navbar.

Admin dashboard: on phones tables become cards with the file name as title and large
Ban IP / Delete buttons (previously those columns were off-screen); summary tiles, short dates,
collapsible IP panel (auto-opens if the detected IP looks wrong), Stats link and Log out.

</content>
</entry>
<entry>
<id>3629e72df62e74ecb240eaf1032f027d3025365d</id>
<published>2026-10-06T03:19:16Z</published>
<updated>2026-10-06T03:19:16Z</updated>
<title>Dashboard: search the upload log</title>
<link rel="alternate" type="text/html" href="commit/3629e72df62e74ecb240eaf1032f027d3025365d.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 3629e72df62e74ecb240eaf1032f027d3025365d
parent d92e3316ba459ff523be0b29cd204591cc0849ba
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 03:19:16 +0000

Dashboard: search the upload log

Server-side search over the whole saved log (up to 2000 rows): file name, CDN path, IP, GitHub
repo/actor, method and status. All words must match; a pasted CDN link works. The search box
sits outside the auto-refreshed area so typing/focus survive the 20s refresh.

</content>
</entry>
<entry>
<id>d92e3316ba459ff523be0b29cd204591cc0849ba</id>
<published>2026-10-06T03:16:44Z</published>
<updated>2026-10-06T03:16:44Z</updated>
<title>Detect visitor IP via CF-Connecting-IP when the request arrived from Cloudflare</title>
<link rel="alternate" type="text/html" href="commit/d92e3316ba459ff523be0b29cd204591cc0849ba.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit d92e3316ba459ff523be0b29cd204591cc0849ba
parent 4d790339f8335ff76c955ac36dfba254ec7fd1ee
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 03:16:44 +0000

Detect visitor IP via CF-Connecting-IP when the request arrived from Cloudflare

Behind Render the chain is &#39;client, Cloudflare edge, Render internal&#39;. The edge address changes
per request, so bans never matched. Now CF-Connecting-IP is used only when the connecting peer
(appended by the platform, unforgeable) is in Cloudflare&#39;s published ranges. Refuse to ban
Cloudflare or internal addresses; the dashboard flags a detected IP that looks wrong.

</content>
</entry>
<entry>
<id>4d790339f8335ff76c955ac36dfba254ec7fd1ee</id>
<published>2026-10-06T03:12:12Z</published>
<updated>2026-10-06T03:12:12Z</updated>
<title>Fix client IP detection behind Render; add &#39;How the server sees you&#39; panel</title>
<link rel="alternate" type="text/html" href="commit/4d790339f8335ff76c955ac36dfba254ec7fd1ee.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 4d790339f8335ff76c955ac36dfba254ec7fd1ee
parent 3e4353cd7d6d37b1febd80feccef627da7e72ca4
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 03:12:12 +0000

Fix client IP detection behind Render; add &#39;How the server sees you&#39; panel

- get_client_ip ignores internal (10.x etc.) hops at the right end of X-Forwarded-For before counting
  proxy hops, so the visitor IP is used instead of Render&#39;s changing internal proxy address
- Refuse to ban non-public addresses (would never match a real visitor)
- Dashboard shows detected IP, raw forwarding headers and the proxy settings

</content>
</entry>
<entry>
<id>3e4353cd7d6d37b1febd80feccef627da7e72ca4</id>
<published>2026-10-06T02:23:04Z</published>
<updated>2026-10-06T02:23:04Z</updated>
<title>Dashboard: no &#39;Ban IP&#39; on GitHub sync rows (shared runner IPs); ban the account instead</title>
<link rel="alternate" type="text/html" href="commit/3e4353cd7d6d37b1febd80feccef627da7e72ca4.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 3e4353cd7d6d37b1febd80feccef627da7e72ca4
parent 90ac61ced0dcd96c1ae9c993d551526126575239
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 02:23:04 +0000

Dashboard: no &#39;Ban IP&#39; on GitHub sync rows (shared runner IPs); ban the account instead

</content>
</entry>
<entry>
<id>90ac61ced0dcd96c1ae9c993d551526126575239</id>
<published>2026-10-06T02:22:39Z</published>
<updated>2026-10-06T02:22:39Z</updated>
<title>Add admin dashboard: upload log, one-click IP ban, GitHub sync allowlist</title>
<link rel="alternate" type="text/html" href="commit/90ac61ced0dcd96c1ae9c993d551526126575239.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 90ac61ced0dcd96c1ae9c993d551526126575239
parent 17a2395097ea0b903fb6e399831ea7ebb9ea4d50
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Tue,  6 Oct 2026 02:22:39 +0000

Add admin dashboard: upload log, one-click IP ban, GitHub sync allowlist

- /admin dashboard (token login): who uploaded what, Ban IP / Unban, Delete file
- State saved as one Fernet-encrypted blob in the bucket (_admin/state.enc), survives restarts;
  refuses to overwrite saved data if it can&#39;t read or decrypt it
- GitHub sync: a new account&#39;s first sync is accepted, later syncs need approval from the
  dashboard (Allow / Revoke / Ban). Keyed by GitHub&#39;s numeric owner id. GH_ALWAYS_ALLOW (default notamitgamer)
- Banned IPs are refused on upload, URL upload, shortener and sync
- Syncs containing video files are rejected
- Whole feature is off unless ADMIN_TOKEN is set

</content>
</entry>
<entry>
<id>17a2395097ea0b903fb6e399831ea7ebb9ea4d50</id>
<published>2026-10-05T14:19:44Z</published>
<updated>2026-10-05T14:19:44Z</updated>
<title>Remove upload logging (public log, admin endpoints, remote log sync)</title>
<link rel="alternate" type="text/html" href="commit/17a2395097ea0b903fb6e399831ea7ebb9ea4d50.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 17a2395097ea0b903fb6e399831ea7ebb9ea4d50
parent 5a845c01fc0d0405e11fd20dbbcfeaa7240c843e
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Mon,  5 Oct 2026 14:19:44 +0000

Remove upload logging (public log, admin endpoints, remote log sync)

Keeps the VPN and video checks in inspect_upload. Removes /api/uploads, /api/admin/*, /admin,
the Fernet-encrypted log push to the bucket, and the record_upload() calls.

</content>
</entry>
<entry>
<id>5a845c01fc0d0405e11fd20dbbcfeaa7240c843e</id>
<published>2026-10-05T14:19:17Z</published>
<updated>2026-10-05T14:19:17Z</updated>
<title>Rate-limit /api/shorten (10/min, 60/hour per IP) and cap URL length</title>
<link rel="alternate" type="text/html" href="commit/5a845c01fc0d0405e11fd20dbbcfeaa7240c843e.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 5a845c01fc0d0405e11fd20dbbcfeaa7240c843e
parent a780d21a926a1f2bf7d0e47680ee5ff5f3d9d616
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Mon,  5 Oct 2026 14:19:17 +0000

Rate-limit /api/shorten (10/min, 60/hour per IP) and cap URL length

</content>
</entry>
<entry>
<id>a780d21a926a1f2bf7d0e47680ee5ff5f3d9d616</id>
<published>2026-10-05T14:19:11Z</published>
<updated>2026-10-05T14:19:11Z</updated>
<title>Accept any filename on upload: sanitize server-side, stop using filename in temp path</title>
<link rel="alternate" type="text/html" href="commit/a780d21a926a1f2bf7d0e47680ee5ff5f3d9d616.html" />
<author>
<name>claude-bot</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit a780d21a926a1f2bf7d0e47680ee5ff5f3d9d616
parent 62321f14a3aade5cb5fbb73a417b753296b9a918
Author: claude-bot &lt;noreply@anthropic.com&gt;
Date:   Mon,  5 Oct 2026 14:19:11 +0000

Accept any filename on upload: sanitize server-side, stop using filename in temp path

- Add sanitize_filename(): drops directory parts, folds accents, replaces unsafe chars with _
- /api/put and /api/put-url use /tmp/&lt;uuid&gt; only (fixes path traversal via filename / Content-Disposition)
- Remove frontend filename rejection and update docs

</content>
</entry>
<entry>
<id>62321f14a3aade5cb5fbb73a417b753296b9a918</id>
<published>2026-10-05T13:52:19Z</published>
<updated>2026-10-05T13:52:19Z</updated>
<title>Update upload guard to use bucket URL and auth headers</title>
<link rel="alternate" type="text/html" href="commit/62321f14a3aade5cb5fbb73a417b753296b9a918.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 62321f14a3aade5cb5fbb73a417b753296b9a918
parent 030954f698e256154339e2c4629261103cc06aa5
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:22:19 +0530

Update upload guard to use bucket URL and auth headers
</content>
</entry>
<entry>
<id>030954f698e256154339e2c4629261103cc06aa5</id>
<published>2026-10-05T13:51:42Z</published>
<updated>2026-10-05T13:51:42Z</updated>
<title>Refactor URL shortening to use new storage methods</title>
<link rel="alternate" type="text/html" href="commit/030954f698e256154339e2c4629261103cc06aa5.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 030954f698e256154339e2c4629261103cc06aa5
parent 7fa82dbd011a4379673c2795b4052239cd5945fd
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:21:42 +0530

Refactor URL shortening to use new storage methods
</content>
</entry>
<entry>
<id>7fa82dbd011a4379673c2795b4052239cd5945fd</id>
<published>2026-10-05T13:50:29Z</published>
<updated>2026-10-05T13:50:29Z</updated>
<title>Refactor Hugging Face URL handling and auth headers</title>
<link rel="alternate" type="text/html" href="commit/7fa82dbd011a4379673c2795b4052239cd5945fd.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 7fa82dbd011a4379673c2795b4052239cd5945fd
parent 20281f9863e01bbf87659e5aa2025e85cc305ab9
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:20:29 +0530

Refactor Hugging Face URL handling and auth headers
</content>
</entry>
<entry>
<id>20281f9863e01bbf87659e5aa2025e85cc305ab9</id>
<published>2026-10-05T13:35:18Z</published>
<updated>2026-10-05T13:35:18Z</updated>
<title>Refactor storage to use Hugging Face Storage Bucket</title>
<link rel="alternate" type="text/html" href="commit/20281f9863e01bbf87659e5aa2025e85cc305ab9.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 20281f9863e01bbf87659e5aa2025e85cc305ab9
parent 5d7172a90ebfdb6f28b7b5161659916b2b949c83
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:05:18 +0530

Refactor storage to use Hugging Face Storage Bucket

Updated storage logic to use Hugging Face Storage Bucket instead of dataset repo. Added new functions for bucket URL generation and authentication headers.
</content>
</entry>
<entry>
<id>5d7172a90ebfdb6f28b7b5161659916b2b949c83</id>
<published>2026-10-05T13:33:59Z</published>
<updated>2026-10-05T13:33:59Z</updated>
<title>Update huggingface_hub version constraint</title>
<link rel="alternate" type="text/html" href="commit/5d7172a90ebfdb6f28b7b5161659916b2b949c83.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 5d7172a90ebfdb6f28b7b5161659916b2b949c83
parent ba6f71b656138330f8266398243730a532e94419
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:03:59 +0530

Update huggingface_hub version constraint
</content>
</entry>
<entry>
<id>ba6f71b656138330f8266398243730a532e94419</id>
<published>2026-10-05T13:33:35Z</published>
<updated>2026-10-05T13:33:35Z</updated>
<title>Replace HF_REPO_ID with HF_BUCKET_ID in render.yaml</title>
<link rel="alternate" type="text/html" href="commit/ba6f71b656138330f8266398243730a532e94419.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit ba6f71b656138330f8266398243730a532e94419
parent 68c61e717bdb6ae057a8bf1078dd68b7b8c2089e
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Mon,  5 Oct 2026 19:03:35 +0530

Replace HF_REPO_ID with HF_BUCKET_ID in render.yaml
</content>
</entry>
<entry>
<id>68c61e717bdb6ae057a8bf1078dd68b7b8c2089e</id>
<published>2026-10-04T09:10:57Z</published>
<updated>2026-10-04T09:10:57Z</updated>
<title>Fix TRUST_CF_CONNECTING_IP default value and add IP debug endpoint</title>
<link rel="alternate" type="text/html" href="commit/68c61e717bdb6ae057a8bf1078dd68b7b8c2089e.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 68c61e717bdb6ae057a8bf1078dd68b7b8c2089e
parent fc9998758fce550a552748a4f6f83ea52a875936
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 14:40:57 +0530

Fix TRUST_CF_CONNECTING_IP default value and add IP debug endpoint
</content>
</entry>
<entry>
<id>fc9998758fce550a552748a4f6f83ea52a875936</id>
<published>2026-10-04T09:04:53Z</published>
<updated>2026-10-04T09:04:53Z</updated>
<title>Implement remote logging with encryption for uploads</title>
<link rel="alternate" type="text/html" href="commit/fc9998758fce550a552748a4f6f83ea52a875936.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit fc9998758fce550a552748a4f6f83ea52a875936
parent 1b7d770ef28d5df5f7b6cee299b4a174a456fc9d
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 14:34:53 +0530

Implement remote logging with encryption for uploads

Added remote logging functionality and Fernet encryption for IP addresses.
</content>
</entry>
<entry>
<id>1b7d770ef28d5df5f7b6cee299b4a174a456fc9d</id>
<published>2026-10-04T09:04:29Z</published>
<updated>2026-10-04T09:04:29Z</updated>
<title>Update hidden prefixes to include &#39;_logs&#39;</title>
<link rel="alternate" type="text/html" href="commit/1b7d770ef28d5df5f7b6cee299b4a174a456fc9d.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 1b7d770ef28d5df5f7b6cee299b4a174a456fc9d
parent 33b36d631c6b7af13939fc4c768f2d7c247401fa
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 14:34:29 +0530

Update hidden prefixes to include &#39;_logs&#39;

Added &#39;_logs&#39; to the list of hidden prefixes in storage.py.
</content>
</entry>
<entry>
<id>33b36d631c6b7af13939fc4c768f2d7c247401fa</id>
<published>2026-10-04T09:00:19Z</published>
<updated>2026-10-04T09:00:19Z</updated>
<title>Implement admin UI for upload log management</title>
<link rel="alternate" type="text/html" href="commit/33b36d631c6b7af13939fc4c768f2d7c247401fa.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 33b36d631c6b7af13939fc4c768f2d7c247401fa
parent 274c04e7c089d869bd3566e3b21aeb9cf4ed1a4c
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 14:30:19 +0530

Implement admin UI for upload log management

Added an HTML admin page for upload logs with a token input and filtering options.
</content>
</entry>
<entry>
<id>274c04e7c089d869bd3566e3b21aeb9cf4ed1a4c</id>
<published>2026-10-04T08:52:57Z</published>
<updated>2026-10-04T08:52:57Z</updated>
<title>Enhance upload guard with VPN and logging features</title>
<link rel="alternate" type="text/html" href="commit/274c04e7c089d869bd3566e3b21aeb9cf4ed1a4c.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 274c04e7c089d869bd3566e3b21aeb9cf4ed1a4c
parent c8ce8fc0851ed441edbcabb8a4674bd44e869142
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 14:22:57 +0530

Enhance upload guard with VPN and logging features
</content>
</entry>
<entry>
<id>c8ce8fc0851ed441edbcabb8a4674bd44e869142</id>
<published>2026-10-04T05:14:26Z</published>
<updated>2026-10-04T05:14:26Z</updated>
<title>Merge pull request #28 from notamitgamer/Fix</title>
<link rel="alternate" type="text/html" href="commit/c8ce8fc0851ed441edbcabb8a4674bd44e869142.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit c8ce8fc0851ed441edbcabb8a4674bd44e869142
parent 9afeb3f01d277d39ec93ff167f99150eaedb5e1b
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 10:44:26 +0530

Merge pull request #28 from notamitgamer/Fix

Fix
</content>
</entry>
<entry>
<id>95cc907ed6255cbf1981d301a946869ccc3962b7</id>
<published>2026-10-04T05:07:30Z</published>
<updated>2026-10-04T05:07:30Z</updated>
<title>Integrate upload guard functionality into main.py</title>
<link rel="alternate" type="text/html" href="commit/95cc907ed6255cbf1981d301a946869ccc3962b7.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 95cc907ed6255cbf1981d301a946869ccc3962b7
parent c80b1a977651b7eaef243acf6a48974ec596e4ef
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 10:37:30 +0530

Integrate upload guard functionality into main.py
</content>
</entry>
<entry>
<id>c80b1a977651b7eaef243acf6a48974ec596e4ef</id>
<published>2026-10-04T05:06:48Z</published>
<updated>2026-10-04T05:06:48Z</updated>
<title>Implement upload safety checks in upload_guard.py</title>
<link rel="alternate" type="text/html" href="commit/c80b1a977651b7eaef243acf6a48974ec596e4ef.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit c80b1a977651b7eaef243acf6a48974ec596e4ef
parent 9afeb3f01d277d39ec93ff167f99150eaedb5e1b
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Sun,  4 Oct 2026 10:36:48 +0530

Implement upload safety checks in upload_guard.py

This module handles upload safety checks, including IP validation and video file detection.
</content>
</entry>
<entry>
<id>9afeb3f01d277d39ec93ff167f99150eaedb5e1b</id>
<published>2026-10-01T01:32:05Z</published>
<updated>2026-10-01T01:32:05Z</updated>
<title>Merge pull request #27 from notamitgamer/design/new-logo</title>
<link rel="alternate" type="text/html" href="commit/9afeb3f01d277d39ec93ff167f99150eaedb5e1b.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 9afeb3f01d277d39ec93ff167f99150eaedb5e1b
parent 4bcfcc2fa99ea0ef92e30b9a2b4a54259522a41d
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu,  1 Oct 2026 07:02:05 +0530

Merge pull request #27 from notamitgamer/design/new-logo

Redesign logo: the sliced slash
</content>
</entry>
<entry>
<id>599d82812d797b55f553a00bcf282256b53c8ae9</id>
<published>2026-10-01T01:29:59Z</published>
<updated>2026-10-01T01:29:59Z</updated>
<title>Redesign logo: the sliced slash</title>
<link rel="alternate" type="text/html" href="commit/599d82812d797b55f553a00bcf282256b53c8ae9.html" />
<author>
<name>claude-bot[bot]</name>
<email>154650115+claude-bot[bot]@users.noreply.github.com</email>
</author>
<content>commit 599d82812d797b55f553a00bcf282256b53c8ae9
parent 4bcfcc2fa99ea0ef92e30b9a2b4a54259522a41d
Author: claude-bot[bot] &lt;154650115+claude-bot[bot]@users.noreply.github.com&gt;
Date:   Thu,  1 Oct 2026 01:29:59 +0000

Redesign logo: the sliced slash

</content>
</entry>
<entry>
<id>4bcfcc2fa99ea0ef92e30b9a2b4a54259522a41d</id>
<published>2026-09-30T14:38:28Z</published>
<updated>2026-09-30T14:38:28Z</updated>
<title>Merge pull request #26 from notamitgamer/ui/corporate-simple-frontend</title>
<link rel="alternate" type="text/html" href="commit/4bcfcc2fa99ea0ef92e30b9a2b4a54259522a41d.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 4bcfcc2fa99ea0ef92e30b9a2b4a54259522a41d
parent 62ea0bb343510a8c5cd635bb27c7fb1f98fe3b76
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Wed, 30 Sep 2026 20:08:28 +0530

Merge pull request #26 from notamitgamer/ui/corporate-simple-frontend

WIP: Corporate-simple frontend redesign
</content>
</entry>
<entry>
<id>9d98ba0fbe57b0429d2a91e3cd09f235e44e145e</id>
<published>2026-09-30T14:33:15Z</published>
<updated>2026-09-30T14:33:15Z</updated>
<title>feat(ui): &#39;Copy Download Link&#39; button on file page; reorder nav</title>
<link rel="alternate" type="text/html" href="commit/9d98ba0fbe57b0429d2a91e3cd09f235e44e145e.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit 9d98ba0fbe57b0429d2a91e3cd09f235e44e145e
parent a6e94fabed26a51152697f646706daa6b903004b
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 14:33:15 +0000

feat(ui): &#39;Copy Download Link&#39; button on file page; reorder nav

- new button copies &lt;cdn&gt;/api/get/&lt;path&gt;, which already serves the file as an attachment, so opening it downloads directly
- nav order: Find, Upload, Shorten, History, Sync, Docs

</content>
</entry>
<entry>
<id>a6e94fabed26a51152697f646706daa6b903004b</id>
<published>2026-09-30T09:49:03Z</published>
<updated>2026-09-30T09:49:03Z</updated>
<title>ui: shared polish pass</title>
<link rel="alternate" type="text/html" href="commit/a6e94fabed26a51152697f646706daa6b903004b.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit a6e94fabed26a51152697f646706daa6b903004b
parent 16d15f72bdfd79ffc0ee47cdf20017cfa92db157
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:49:03 +0000

ui: shared polish pass

- smaller, calmer headings
- sans-serif for inputs/buttons/chips/footer (mono kept for paths and code)
- neutral info banners, segmented destination picker, quiet list hover
- honour prefers-reduced-motion

</content>
</entry>
<entry>
<id>16d15f72bdfd79ffc0ee47cdf20017cfa92db157</id>
<published>2026-09-30T09:47:23Z</published>
<updated>2026-09-30T09:47:23Z</updated>
<title>fix(ui): contrast on filled buttons/badges in dark mode, darker GET badge green in light</title>
<link rel="alternate" type="text/html" href="commit/16d15f72bdfd79ffc0ee47cdf20017cfa92db157.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit 16d15f72bdfd79ffc0ee47cdf20017cfa92db157
parent df69d870f290d615e2aeb4c049b9db0c9d6f2bd5
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:47:23 +0000

fix(ui): contrast on filled buttons/badges in dark mode, darker GET badge green in light

- add --ui-accent-solid for white-on-blue surfaces (was 3.2:1 in dark mode, now above 4.5:1)
- darken light-mode success green for badge text

</content>
</entry>
<entry>
<id>df69d870f290d615e2aeb4c049b9db0c9d6f2bd5</id>
<published>2026-09-30T09:42:35Z</published>
<updated>2026-09-30T09:42:35Z</updated>
<title>fix(ui): zip modal file count/size were hardcoded white (invisible in light mode)</title>
<link rel="alternate" type="text/html" href="commit/df69d870f290d615e2aeb4c049b9db0c9d6f2bd5.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit df69d870f290d615e2aeb4c049b9db0c9d6f2bd5
parent a4be7966a3c81347c575e9ef86896ef0095ef8a3
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:42:35 +0000

fix(ui): zip modal file count/size were hardcoded white (invisible in light mode)

The JS-built modal text used inline color:#fff; now uses the text token.

</content>
</entry>
<entry>
<id>a4be7966a3c81347c575e9ef86896ef0095ef8a3</id>
<published>2026-09-30T09:40:14Z</published>
<updated>2026-09-30T09:40:14Z</updated>
<title>fix(ui): headings were hardcoded white and invisible in light mode</title>
<link rel="alternate" type="text/html" href="commit/a4be7966a3c81347c575e9ef86896ef0095ef8a3.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit a4be7966a3c81347c575e9ef86896ef0095ef8a3
parent 9a6db96aeaa11ae65aa7728b48371ff07fd1b266
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:40:14 +0000

fix(ui): headings were hardcoded white and invisible in light mode

h1, file name, modal title, history title and shortener headings now use the text token.

</content>
</entry>
<entry>
<id>9a6db96aeaa11ae65aa7728b48371ff07fd1b266</id>
<published>2026-09-30T09:39:01Z</published>
<updated>2026-09-30T09:39:01Z</updated>
<title>ui: icon + hamburger navbar; restyle shortener, docs and gh-sync pages</title>
<link rel="alternate" type="text/html" href="commit/9a6db96aeaa11ae65aa7728b48371ff07fd1b266.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit 9a6db96aeaa11ae65aa7728b48371ff07fd1b266
parent e8aef7b350583e05b03a72fd9a70e49db3d2c84e
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:39:01 +0000

ui: icon + hamburger navbar; restyle shortener, docs and gh-sync pages

- navbar: SVG icons with labels, collapses to a hamburger menu under 720px (no more sideways scrolling)
- url_shortener, documentation, gh_sync_docs: shared tokens, system fonts, no Google Fonts, no shadows, light/dark
- color-scheme meta now &#39;light dark&#39; on all pages

</content>
</entry>
<entry>
<id>e8aef7b350583e05b03a72fd9a70e49db3d2c84e</id>
<published>2026-09-30T09:35:32Z</published>
<updated>2026-09-30T09:35:32Z</updated>
<title>ui: restyle index.html with shared light/dark tokens</title>
<link rel="alternate" type="text/html" href="commit/e8aef7b350583e05b03a72fd9a70e49db3d2c84e.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit e8aef7b350583e05b03a72fd9a70e49db3d2c84e
parent f7cb01ac54810d214228c639874c7326c88809f2
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:35:32 +0000

ui: restyle index.html with shared light/dark tokens

- map legacy CSS variables onto --ui- tokens
- drop Google Fonts (system font stack), gradients, shadows, blur
- add light/dark theme-color meta

</content>
</entry>
<entry>
<id>f7cb01ac54810d214228c639874c7326c88809f2</id>
<published>2026-09-30T09:35:06Z</published>
<updated>2026-09-30T09:35:06Z</updated>
<title>remove: &#39;Recently modified&#39; block from the home page</title>
<link rel="alternate" type="text/html" href="commit/f7cb01ac54810d214228c639874c7326c88809f2.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit f7cb01ac54810d214228c639874c7326c88809f2
parent 3206cafb941f4342674d1abc9d7292e504e84a02
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:35:06 +0000

remove: &#39;Recently modified&#39; block from the home page

Drops the template block, its CSS/JS, the get_recent_activity() helper and the extra Hugging Face list_repo_commits call it made.

</content>
</entry>
<entry>
<id>3206cafb941f4342674d1abc9d7292e504e84a02</id>
<published>2026-09-30T09:34:04Z</published>
<updated>2026-09-30T09:34:04Z</updated>
<title>ui: shared light/dark tokens and plain text navbar</title>
<link rel="alternate" type="text/html" href="commit/3206cafb941f4342674d1abc9d7292e504e84a02.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit 3206cafb941f4342674d1abc9d7292e504e84a02
parent 5b61476518e2efbc784ffe516447e9c9f9b88a5f
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:34:04 +0000

ui: shared light/dark tokens and plain text navbar

- add templates/_styles.html (--ui-* tokens, prefers-color-scheme dark)
- rewrite _navbar.html: system fonts, text links, no gradients/shadows
- included via _navbar.html so every page gets the tokens (static route only serves manifest/sw, so a partial is used instead of style.css)

</content>
</entry>
<entry>
<id>5b61476518e2efbc784ffe516447e9c9f9b88a5f</id>
<published>2026-09-30T09:31:20Z</published>
<updated>2026-09-30T09:31:20Z</updated>
<title>chore: start corporate-simple frontend redesign (placeholder)</title>
<link rel="alternate" type="text/html" href="commit/5b61476518e2efbc784ffe516447e9c9f9b88a5f.html" />
<author>
<name>notamitgamer-bot</name>
<email>noreply@github.com</email>
</author>
<content>commit 5b61476518e2efbc784ffe516447e9c9f9b88a5f
parent 62ea0bb343510a8c5cd635bb27c7fb1f98fe3b76
Author: notamitgamer-bot &lt;noreply@github.com&gt;
Date:   Wed, 30 Sep 2026 09:31:20 +0000

chore: start corporate-simple frontend redesign (placeholder)

</content>
</entry>
<entry>
<id>62ea0bb343510a8c5cd635bb27c7fb1f98fe3b76</id>
<published>2026-09-20T02:02:08Z</published>
<updated>2026-09-20T02:02:08Z</updated>
<title>fix: Dockerfile was building from a Node.js base image for a pure-Python app</title>
<link rel="alternate" type="text/html" href="commit/62ea0bb343510a8c5cd635bb27c7fb1f98fe3b76.html" />
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 62ea0bb343510a8c5cd635bb27c7fb1f98fe3b76
parent 4831894ad9db36fd3761cb388465c14cf48bb5e2
Author: Claude &lt;noreply@anthropic.com&gt;
Date:   Sun, 20 Sep 2026 02:02:08 +0000

fix: Dockerfile was building from a Node.js base image for a pure-Python app

FROM node:24-bookworm-slim, with Python installed on top via apt-get.
Nothing in this app uses Node - no package.json, no build step; the
only &#39;npm&#39; reference anywhere is a client-side &lt;script&gt; tag loading a
library from jsDelivr in the browser template, unrelated to the
server. On a 512MB/0.1CPU host this was pure dead weight: extra image
size (slower cold starts) and baseline overhead for a runtime that
never runs.

Switched to python:3.12-slim-bookworm directly - it already ships
pip, so the separate apt-get install of python3/python3-pip is gone
too. No functional change; uvicorn already runs with its default
single worker (no --workers N was set), so that part was already
correctly sized for this host.

</content>
</entry>
<entry>
<id>4831894ad9db36fd3761cb388465c14cf48bb5e2</id>
<published>2026-09-19T20:07:13Z</published>
<updated>2026-09-19T20:07:13Z</updated>
<title>fix: correct Content-Type for CSS/JS/JSON/SVG/fonts on raw domain and downloads</title>
<link rel="alternate" type="text/html" href="commit/4831894ad9db36fd3761cb388465c14cf48bb5e2.html" />
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<content>commit 4831894ad9db36fd3761cb388465c14cf48bb5e2
parent 6c85c78992e4aa083cbc205e9d4ac5cd349b37a4
Author: Claude &lt;noreply@anthropic.com&gt;
Date:   Sat, 19 Sep 2026 20:07:13 +0000

fix: correct Content-Type for CSS/JS/JSON/SVG/fonts on raw domain and downloads

Hugging Face&#39;s resolve/ endpoint (which raw.cdn.amit.is-a.dev proxies)
often serves files it doesn&#39;t specially recognize as text/plain or
application/octet-stream. Combined with the X-Content-Type-Options:
nosniff header already being sent, browsers refuse to apply a .css
file as a stylesheet or run a .js file as a script when the
Content-Type doesn&#39;t match, exactly like the same well-known problem
with raw.githubusercontent.com.

Added _resolve_content_type(): overrides the Content-Type from the
file extension for the asset types this actually breaks (css, js,
mjs, json, svg, xml, woff/woff2/ttf/otf, wasm, webmanifest, map),
rather than trusting whatever upstream sent - only for these known
types, everything else still passes through HF&#39;s own Content-Type
unchanged. Folded the existing .md/.txt -&gt; text/plain special case
into the same function. Applied to both stream_raw() (the raw domain)
and download_file() (/api/get, force-download) for consistency.

</content>
</entry>
<entry>
<id>6c85c78992e4aa083cbc205e9d4ac5cd349b37a4</id>
<published>2026-09-17T09:14:24Z</published>
<updated>2026-09-17T09:14:24Z</updated>
<title>Add &#39;_shortened&#39; to hidden prefixes</title>
<link rel="alternate" type="text/html" href="commit/6c85c78992e4aa083cbc205e9d4ac5cd349b37a4.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 6c85c78992e4aa083cbc205e9d4ac5cd349b37a4
parent a5fce16f2b9d347c3f5afad050ab302bc56bc29b
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 14:44:24 +0530

Add &#39;_shortened&#39; to hidden prefixes
</content>
</entry>
<entry>
<id>a5fce16f2b9d347c3f5afad050ab302bc56bc29b</id>
<published>2026-09-17T09:05:09Z</published>
<updated>2026-09-17T09:05:09Z</updated>
<title>Wrap 404 header in center tag for alignment</title>
<link rel="alternate" type="text/html" href="commit/a5fce16f2b9d347c3f5afad050ab302bc56bc29b.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit a5fce16f2b9d347c3f5afad050ab302bc56bc29b
parent eccdbfa4441d26d71d4745c8c1af8997e2a0ec09
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 14:35:09 +0530

Wrap 404 header in center tag for alignment
</content>
</entry>
<entry>
<id>eccdbfa4441d26d71d4745c8c1af8997e2a0ec09</id>
<published>2026-09-17T09:02:38Z</published>
<updated>2026-09-17T09:02:38Z</updated>
<title>Merge pull request #24 from notamitgamer/revert-23-restore-cobalt-fixed</title>
<link rel="alternate" type="text/html" href="commit/eccdbfa4441d26d71d4745c8c1af8997e2a0ec09.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit eccdbfa4441d26d71d4745c8c1af8997e2a0ec09
parent 7a55b9af09b95b79e86397b37bce997e3fed673a
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 14:32:38 +0530

Merge pull request #24 from notamitgamer/revert-23-restore-cobalt-fixed

Revert &quot;Restore YouTube/Cobalt mp3 download (fixed startup check)&quot;
</content>
</entry>
<entry>
<id>8e6ab1c9229e52cf8fb2f25e182513c2b8fb4edf</id>
<published>2026-09-17T09:02:26Z</published>
<updated>2026-09-17T09:02:26Z</updated>
<title>Revert &quot;Restore YouTube/Cobalt mp3 download (fixed startup check)&quot;</title>
<link rel="alternate" type="text/html" href="commit/8e6ab1c9229e52cf8fb2f25e182513c2b8fb4edf.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 8e6ab1c9229e52cf8fb2f25e182513c2b8fb4edf
parent 7a55b9af09b95b79e86397b37bce997e3fed673a
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 14:32:26 +0530

Revert &quot;Restore YouTube/Cobalt mp3 download (fixed startup check)&quot;

</content>
</entry>
<entry>
<id>7a55b9af09b95b79e86397b37bce997e3fed673a</id>
<published>2026-09-17T08:25:36Z</published>
<updated>2026-09-17T08:25:36Z</updated>
<title>Merge pull request #23 from notamitgamer/restore-cobalt-fixed</title>
<link rel="alternate" type="text/html" href="commit/7a55b9af09b95b79e86397b37bce997e3fed673a.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit 7a55b9af09b95b79e86397b37bce997e3fed673a
parent dc913441637fe302bdb2932c506b3b93cd339acd
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 13:55:36 +0530

Merge pull request #23 from notamitgamer/restore-cobalt-fixed

Restore YouTube/Cobalt mp3 download (fixed startup check)
</content>
</entry>
<entry>
<id>b29971148dcb34ca9ff5ce2bdfc2ff455916b796</id>
<published>2026-09-17T05:04:33Z</published>
<updated>2026-09-17T05:04:33Z</updated>
<title>Wire up optional YOUTUBE_COOKIE_HEADER for authenticated Cobalt/YouTube</title>
<link rel="alternate" type="text/html" href="commit/b29971148dcb34ca9ff5ce2bdfc2ff455916b796.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit b29971148dcb34ca9ff5ce2bdfc2ff455916b796
parent 67e5827098f0fe726e24424e8eb8c9eeaf867ab2
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 05:04:33 +0000

Wire up optional YOUTUBE_COOKIE_HEADER for authenticated Cobalt/YouTube

Adds support for the COOKIE_PATH mechanism Cobalt already has, without
ever committing cookies to the repo:

- start.sh: if YOUTUBE_COOKIE_HEADER is set, writes a cookies.json
  compatible with Cobalt&#39;s expected format
  ({&quot;youtube&quot;: [&quot;name=value; name2=value2&quot;]}) to /tmp at boot and
  passes COOKIE_PATH to the cobalt process. If unset, behavior is
  unchanged (no cookies, same error.api.youtube.login as now).
- render.yaml: documents the YOUTUBE_COOKIE_HEADER env var
  (sync: false, so it must be set manually in the Render dashboard,
  never committed).

To use: export cookies for youtube.com via the Cookie-Editor browser
extension&#39;s &#39;Header String&#39; format (name=value; name2=value2 - NOT
Netscape/JSON-array format) while logged into the account to use, and
paste that string as YOUTUBE_COOKIE_HEADER in Render&#39;s dashboard.

</content>
</entry>
<entry>
<id>67e5827098f0fe726e24424e8eb8c9eeaf867ab2</id>
<published>2026-09-17T04:56:30Z</published>
<updated>2026-09-17T04:56:30Z</updated>
<title>Fix start.sh: use bash instead of sh (wait -n is bash-only)</title>
<link rel="alternate" type="text/html" href="commit/67e5827098f0fe726e24424e8eb8c9eeaf867ab2.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit 67e5827098f0fe726e24424e8eb8c9eeaf867ab2
parent 485c7d4b57bb704a1a1c5dc839793fb3db8accf2
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 04:56:30 +0000

Fix start.sh: use bash instead of sh (wait -n is bash-only)

Preview deploy on PR #23 confirmed Cobalt itself now starts correctly
(&#39;Cobalt is ready.&#39;), but hit a second pre-existing bug right after:
&#39;wait -n&#39; is a bash builtin flag, not supported by dash (which is
what /bin/sh runs on Debian). This was always broken - it just never
got reached before because the old cobalt-file check exited first.

</content>
</entry>
<entry>
<id>485c7d4b57bb704a1a1c5dc839793fb3db8accf2</id>
<published>2026-09-17T04:54:50Z</published>
<updated>2026-09-17T04:54:50Z</updated>
<title>Restore YouTube/Cobalt mp3 download routes, template, nav link, env vars</title>
<link rel="alternate" type="text/html" href="commit/485c7d4b57bb704a1a1c5dc839793fb3db8accf2.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit 485c7d4b57bb704a1a1c5dc839793fb3db8accf2
parent 6493c4781f2c1213f911561eb9ee000aadd40e64
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 04:54:50 +0000

Restore YouTube/Cobalt mp3 download routes, template, nav link, env vars

Reinstates /ytmusic page, /api/yt/download, /api/yt/debug, and the
/cobalt/* tunnel proxy in app/main.py, the ytmusic.html template, the
nav/breadcrumb entries in _navbar.html, and the COBALT_API_URL /
COBALT_PORT render.yaml env vars - all unchanged from before removal.
The fix is entirely in the Dockerfile/start.sh startup-check bug from
the previous commit; the app-level code itself was never the problem.

</content>
</entry>
<entry>
<id>6493c4781f2c1213f911561eb9ee000aadd40e64</id>
<published>2026-09-17T04:54:21Z</published>
<updated>2026-09-17T04:54:21Z</updated>
<title>Restore Cobalt build stage; fix broken startup existence check</title>
<link rel="alternate" type="text/html" href="commit/6493c4781f2c1213f911561eb9ee000aadd40e64.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit 6493c4781f2c1213f911561eb9ee000aadd40e64
parent f39ad1e1bc9c9b91f35eba017c9e73b13fd90eb7
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 04:54:21 +0000

Restore Cobalt build stage; fix broken startup existence check

The old check looked for a literal file /opt/cobalt-api/src/cobalt,
but Cobalt&#39;s own CMD (node src/cobalt) resolves that path through
Node&#39;s module resolution (cobalt.js / cobalt/index.js), not a
filename with no extension - so the check could never pass and it
crashed the whole container regardless of whether Cobalt built fine.
Replaced with the existing readiness-polling loop as the real
success signal. Also re-pinned the base image to the &#39;:11&#39; tag
instead of a specific commit-suffixed tag for stability.

</content>
</entry>
<entry>
<id>f39ad1e1bc9c9b91f35eba017c9e73b13fd90eb7</id>
<published>2026-09-17T04:53:12Z</published>
<updated>2026-09-17T04:53:12Z</updated>
<title>WIP: restore YouTube/Cobalt download with startup-check fix</title>
<link rel="alternate" type="text/html" href="commit/f39ad1e1bc9c9b91f35eba017c9e73b13fd90eb7.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit f39ad1e1bc9c9b91f35eba017c9e73b13fd90eb7
parent dc913441637fe302bdb2932c506b3b93cd339acd
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 04:53:12 +0000

WIP: restore YouTube/Cobalt download with startup-check fix

</content>
</entry>
<entry>
<id>dc913441637fe302bdb2932c506b3b93cd339acd</id>
<published>2026-09-17T04:51:06Z</published>
<updated>2026-09-17T04:51:06Z</updated>
<title>Merge pull request #22 from notamitgamer/remove-broken-cobalt-ytmusic</title>
<link rel="alternate" type="text/html" href="commit/dc913441637fe302bdb2932c506b3b93cd339acd.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit dc913441637fe302bdb2932c506b3b93cd339acd
parent e0d4085636eca17b389b865506703c126b5e925e
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Thu, 17 Sep 2026 10:21:06 +0530

Merge pull request #22 from notamitgamer/remove-broken-cobalt-ytmusic

Remove broken YouTube/Cobalt mp3 download feature
</content>
</entry>
<entry>
<id>75298acb456ee769b4cf6ec7bf822ed061ee27f6</id>
<published>2026-09-17T04:45:09Z</published>
<updated>2026-09-17T04:45:09Z</updated>
<title>Remove broken YouTube/Cobalt mp3 download feature</title>
<link rel="alternate" type="text/html" href="commit/75298acb456ee769b4cf6ec7bf822ed061ee27f6.html" />
<author>
<name>notamitgamer2</name>
<email>notamitgamer2@users.noreply.github.com</email>
</author>
<content>commit 75298acb456ee769b4cf6ec7bf822ed061ee27f6
parent e0d4085636eca17b389b865506703c126b5e925e
Author: notamitgamer2 &lt;notamitgamer2@users.noreply.github.com&gt;
Date:   Thu, 17 Sep 2026 04:45:09 +0000

Remove broken YouTube/Cobalt mp3 download feature

Cobalt was never actually functional in production: the Dockerfile
copies the Cobalt build into /opt/cobalt-api, but start.sh fails at
boot with &#39;Cobalt executable not found: /opt/cobalt-api/src/cobalt&#39;,
crashing the whole container (exit status 1) per the latest deploy
logs. Since the feature has never worked in deployment, this removes
the /ytmusic page, the /api/yt/download and /api/yt/debug endpoints,
the /cobalt/* tunnel proxy, the Cobalt build stage in the Dockerfile,
the Cobalt startup logic in start.sh, the nav link, and the related
render.yaml env vars.

</content>
</entry>
<entry>
<id>e0d4085636eca17b389b865506703c126b5e925e</id>
<published>2026-09-16T17:52:41Z</published>
<updated>2026-09-16T17:52:41Z</updated>
<title>Update start.sh for Cobalt installation checks</title>
<link rel="alternate" type="text/html" href="commit/e0d4085636eca17b389b865506703c126b5e925e.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit e0d4085636eca17b389b865506703c126b5e925e
parent c5564d5bee4401c1005ad485a0d9f10597b910e0
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Wed, 16 Sep 2026 23:22:41 +0530

Update start.sh for Cobalt installation checks
</content>
</entry>
<entry>
<id>c5564d5bee4401c1005ad485a0d9f10597b910e0</id>
<published>2026-09-16T17:52:18Z</published>
<updated>2026-09-16T17:52:18Z</updated>
<title>Update Dockerfile</title>
<link rel="alternate" type="text/html" href="commit/c5564d5bee4401c1005ad485a0d9f10597b910e0.html" />
<author>
<name>Amit Dutta</name>
<email>mail@amit.is-a.dev</email>
</author>
<content>commit c5564d5bee4401c1005ad485a0d9f10597b910e0
parent 21824f4f0bc04aaf44b03f4d10ed3febc39a4791
Author: Amit Dutta &lt;mail@amit.is-a.dev&gt;
Date:   Wed, 16 Sep 2026 23:22:18 +0530

Update Dockerfile
</content>
</entry>
</feed>
