title: v2 frontend: when selected, don't change style of feed items

description: Just leave them the same when j/k "selects" an item. No blue side thing, no change in background, it's distracting. Just scroll it to the right place.

type: bug

status: closed


title: page size and performance

description: Do some analysis of page size (css/html/javascript) on the legacy version vs. new version and give me a report. We want it to be small and fast! If the new version is much worse file some tickets to investigate further.

type: task


title: Add configurable username support

description: Currently login accepts a username field but ignores it. We should allow configuring a username (defaulting to 'neko') and validate it during login.


title: Implement Frontend Login

description: Create login page and auth logic in the new React frontend. Port functionality from legacy login.html.


title: v2 ui - font size 18px

description: Compare your font sizes with the legacy version -- I think they're a little too small (16 vs 18 baseline)


title: v3 login

description: Login still doesn't work right -- i'm assuming the CSRF stuff is still wrong


title: URLs in UI are api/feed output, not loadable HTML

description: After clicking in the sidebar, you get to a URL like http://localhost:9001/feed/38?filter=all but if you hit "reload" in the browser that retuns a blob of JSON to the browser! Oops. Maybe just don't change the user visible URL at all. If we do change the URLs, maybe just use #/feed/38/filter=all or something similar that is just client side for the JS.


title: [ui] when a left menu item is "active" make it bold

description: The "default" is UNREAD - this should be in the "bold" state when you're seeing that. When you filter out to "ALL" that should instead be bold. Same with the individual feeds if one is selected. And Starred.

type: epic


title: infinite scroll on ipad/mobile

description: On a mobile device, the infinite scrooll didn't seem to be working properly and triggering as I scrolled to the bottom. Are the right triggers set up for mobile browsers as well as desktop -- this was on an ipad.


title: Improve scraper heuristics

description: The scraper currently uses a simple fallback between CleanedText and TopNode. It could be improved to better handle different article layouts.

type: feature


title: v3: sidebar behavior

description:
1. Remember sidebar open/close status via cookie
2. On tablet+mobile, default to closed.

status: open


title: 600px width by default, closer to left panel

description: On desktop the feed items are too narrow (~500px) compared to legacy version which is ~600px.


title: Migrate frontend to /api/ endpoints

description: The backend now provides a clean REST API at /api/. Update the frontend UI to use these new endpoints instead of the legacy backward-compatibility routes (/stream/, /feed/, etc.). This will allow for cleaner separation and better utilization of proper REST patterns.

type: cleanup


title: font themes

description:
in the v2 ui, let's offer a few different font stacks the user can switch through. primarily this should just change font-face, maybe size, but don't worry about colors or anything right now.

the current default (helvetica neue, palatino)
a fancy all serif stack
a no-nonsense modern san-serif stack
a terminal inspired fixed width stack


title: titles changing on read state and hover

description:
Titles are changing on read state from blue to grey. They should just stay blue all the time.

Titles are getting underlined on hover. They should have no underline regardless of hover state.


title: v3: close settings

description:
when settings page is shown, clicking settings again should close it and go back to the "unread items" state

similarly, clicking "unread" or "all" or "starred" should close settings and take you to those.


title: update documentation based on all the recent changes

description: update README.md based on what's been changed given all the CLs and tickets recently


title: add search to new ui


title: https://computer.rip/rss.xml fails to importa

description: running neko -a https://computer.rip/rss.xml gave an error. debug it and add test case to catch.


title: consistency in sidebar

description: With the new sidebar styling, SETTINGS and LOGOUT and the light/dark look really different than the rest. Let's make them more consistent from a style perspective.


title: update README.md

description:
Ensure the build, configuration, etc are up too date.
Note the git change when we started to vibe-code this in the history (with dates etc.)


title: v3 ui: takes 3 presses of 'j' to move to next item

description: Is there some weird timer before it's scrolling it -- after that it's fine. Or a delay to setup the listener or something


title: Vanilla JS: Test Infrastructure & Coverage

description: Setup testing framework (likely vitest or simple runner) for vanilla JS. Refactor code for testability. Aim for 80% coverage on vanilla/app.js logic.


title: test coverage

description:
assume the code works properly (it mostly does)
get to 90% test coverage on the go code