title: fix font theming

description: The font selector should adjust more than just the titles/ui, the font stack should include the "normal" article text too, right now it's palatino in every stack, it should really just be the first one I think.

type: bug

status: closed


title: Implement Feed Items View

description: Create a component to display items for a selected feed. Fetch items from /api/stream?feed_id=...


title: v2 ui - collapsible feed list

description: In the left side navigation list of feeds, the feeds should be hidden by default. The word "feeds" should be a toggle to show/hide the list, with a triangle that indicates state.

type: feature


title: Create api/reader package and middleware

type: task


title: Implement Frontend Logout

description: Add logout button to dashboard header. Call /api/logout (need to create this potentially?). Redirect to /login


title: Infinite scroll

description: a key feature of the original version that when you scroll to the bottom, it catches that and loads more (based on the current filters, etc)


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: font styles

description: Switch the default font stack and size to match the legacy UI


title: coverage status

description:
check coverage status -- are we still close to 80%
it's ok to ignore the old static legacy javascript or vanilla js prototype
if it's low file a ticket to get coverage back up


title: update Makefile

description:
Ensure the Makefile builds things and works
Test it by running it regularly before checking in!


title: drop "mark read" button

description: there's no mark read/unread buttons, it's just by scrolling!


title: clean up root directory of project

description: There are some scripts in the root directory like run_e2e.sh that probably should be in a subdirectory -- look into it and make things a little tidier where approopriate.


title: terminal UI

description: once there is good test coverage and a clean backend API, work on a nice efficient TUI with https://github.com/charmbracelet/bubbletea


title: Vanilla JS: Add Feed UI

description: Add UI to add a new feed by URL in vanilla JS prototype.


title: reach parity between vanilla js and react v2 ui

description: Continue implementing the vanilla js one with minimal overhad/depdnencies to be fast and lean. Make sure there are tests and rely on the v2 ui and legacy version as references.

type: epic


title: setup github ci

description: Maybe it'd be nice to have github run the tests. Is that a thing we can try to setup


title: UI: Improve accessibility for star icon

description: The new star button should have proper aria-labels and potentially better focus states for screen readers.


title: UI Styling: Dark Mode Support


title: v2 ui - title styling

description: The title of the article stays blue and bold regardless of read state.


title: github CI fails

description:
Both the backend and frontend failed the CI jobs failed the lint checks.

are we running those properly locally before submitting

also the frontent consistency check failed


title: Style Settings page to match Glass sidebar

description: The settings page currently uses the old retro aesthetic. It should be updated to match the new minimalist 'glass' sidebar style for visual consistency. This should include updating form elements, backgrounds, and typography.


title: Improve mobile responsiveness of React UI

description: The React UI should be fully responsive and work well on small screens. Now that the vanilla JS prototype is removed, we should ensure the main interface is a great experience for mobile users.


title: TUI is terrible and needs fixing

description: The TUI doesn't really work and doesn't make sense. Think very hard and look at the v2 HTML UI implementation and make something cool like that. Probably needs tests too.


title: [security] Implement CSRF Protection for API

description: Add CSRF protection to all state-changing API endpoints. 1. Implement a middleware that generates a CSRF token and sets it in a cookie (readable by JS) or header. 2. Update the AuthWrap middleware to validate the presence of this token in the X-CSRF-Token header for all unsafe methods (POST, PUT, DELETE). 3. Update the React frontend to read the token and include it in all API requests.


title: FEEDS in sidebar needs to be more clearly a collapsible thing

description: FEEDS in the sidebar needs a caret (> that turns to V) or something similar to make it clear it's a toggle collapsible list thing


title: Feed list collapsed by default

description: The list of feeds on the left side should be collapsed by default, with a little control to extend it.


title: Remaining test coverage gaps

description: Cross-package test coverage is at 81.2%. The remaining untested functions are: GetFullContent (goose HTTP extraction), indexHandler/serveBoxedFile (rice.MustFindBox), Serve (starts HTTP server), main, util.init. To reach 90%, consider: (1) refactoring GetFullContent to accept an interface for HTTP fetching, (2) refactoring Serve to extract route setup into a testable function, (3) mocking rice.MustFindBox, (4) using feeds from https://trenchant.org/feeds.txt as static test fixtures for integration tests.

type: cleanup


title: Investigate E2E Tag View flakiness

description: The E2E test for /v2/tag/Tech was temporarily disabled because it was timing out/failing. Investigate if it's a race condition or a routing issue.

status: open


title: Vanilla JS: Implement Test Infrastructure

description: Setup testing infrastructure for vanilla JS prototype to ensure 80% coverage. Refactor app.js for testability and add unit tests.


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.


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.


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: adding feed in v2 ui shows error

description: added https://trenchant.org/rss.xml as a feed in the UI but it gave some weird message inline like unexpected character, but it did eventually add it. what happened there


title: add neko cat back to hide left navivation

description: Change the "neko reader" to the cat emoji like in the legacy and have it toggle visibility of the left nav


title: Fix Playwright E2E Tests

description: The e2e tests in tests/e2e.spec.ts are failing when run with vitest. They should be run with playwright test runner, or configured correctly. Currently excluded from vitest.


title: [feature] light/dark/black toggle

description: Add in a simple [light | dark | black] theme toggler like in the legacy version.


title: docker support

description: add support so people can self-host this in docker and (maybe) test it yourself. maybe keep it in a docker directory with separate docs etc.


title: enhance github ci/cq

description: Make sure we have the right CI/CQ things in the github workflow. Can it test our docker compose for us too maybe


title: UI Styling: Global Typography & Layout (Fixed Width)


title: Fix and Re-enable Playwright E2E Tests

description: E2E tests were crashing the VM and timing out. Disabled them in package.json. Need to investigate resource usage and re-enable.


title: v2 ui bug - panel open by default

description: Panel is closed by default, it should be open by default on desktop.


title: serve "legacy" version UI at /v1/ instead of /

description: Let's "softly" start to deprecated the legacy version by moving it to /v1/ -- ideally this won't require any changes but there may be some relative/absolute URLs to adjust in the static files there or in rouoting


title: fix github ci

description: seems to be broken, are the right things still in there given all the refactorings


title: [security] Run Docker Container as Non-Root User

description: Update the Dockerfile to create and use a non-privileged user. 1. Create a user (e.g., neko) in the final stage. 2. Ensure the /app/data directory is owned by this user. 3. Switch to this user using USER neko before the CMD.


title: UI: Add skeleton loaders for feed item loading

description: The currently 'Loading more...' text is basic. We should add skeleton loaders for a smoother infinite scroll experience.


title: Ensure 80% Frontend Test Coverage

description: Configure coverage reporting in vitest and ensure the frontend codebase maintains at least 80% test coverage.


title: make new v2 UI the default and serve at /

description:
After we move the old UI to be served at v1, serve the new UI at /

We can keep serving it at v2/ as well if we want.


title: Implement ClientLogin and Token endpoints


title: Implement Stream Contents endpoint


title: Implement Subscription List and UserInfo endpoints


title: username + password

description:
it's too weird to have just a password -- in the old UI i had a username but it was just ignored. but password managers get confused by this new no username thing.

let's make it so you can enter a username and password. to start, just let that be a no-op (it ignores the username and just pays attention to the password.)

we can consider later on if we want to make the username real and definable too.


title: import/export

description: Import/Export has only ever been partially implemented. Let's finish it up across OPML (de facto standard) but also simple txt line oriented input/output. We may need to file a ticket to deal with the async crawling as part of this.


title: Add end-to-end integration test for complete crawl cycle

description: Create an integration test that verifies the complete crawl workflow: start server with background crawling enabled, add a feed via API, wait for background crawl to execute, verify items are fetched and stored. This would require mocking or using a test RSS feed and potentially adjusting timing for faster test execution.


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.


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: 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


title: add "star" back in

description: rather than the word "star" it should just have a star that changes colors right next to the title


title: slow scrolling in v2 ui compared to v1

description: When using j/k to go to the next feed, they appeared instantly, now it feels like a slow scroll. Make it speedy again.


title: UI Styling: Sidebar (Fixed, Gray Background)


title: Implement Frontend Feed List

description: Create feed list view in new frontend. Fetch feeds from API.