title: Implement Feed Items View

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

status: closed


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: Implement Mocked-API UI Tests

description: Configure Playwright to intercept /api/ requests and return mock JSON. This decouples UI testing from the backend, reducing VM crash risk and enabling fast UI iteration.

type: task


title: last item behavior on mobile

description: I think there's a bug where if the last item on screen on mobile isn't "big" enough it won't trigger loading more items, but not sure. please verify the behavior.

type: bug


title: Create api/reader package and middleware


title: Implement Frontend Logout

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


title: v3: cut "FILTERS" text

description: there's no header needed above unread/read/starred, just cut that please

status: open


title: Implement Item Interactions

description: Add ability to toggle read/unread and star/unstar status for items. Use PUT /item/:id


title: check coverage again

description: check test coverage again and see if more tests are needed


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: 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: Add Local Git Hooks

description: Create a script/make target to install a pre-push hook that runs 'make check'. This enforces quality gates locally, keeping the CI clean.


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.


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: 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: change scroll mark-as-read criteria

description: Currently items are marked as read immediately when 50% visible. This might be annoying if users are scrolling fast. We change it 100% viewable, ie the bottom has scrolled into view.


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

type: epic


title: fix docker-compose

description:
bug when trying to build in docker -- we may want to add an automated test for this later (though it may be hard since we're building in a vm to nest these)

--> 668e2e2c4b44
[2/3] STEP 3/9: WORKDIR /app
--> b42c7c265b7f
[2/3] STEP 4/9: COPY go.mod go.sum ./
--> 093e4d9b623e
[2/3] STEP 5/9: RUN go mod download
--> 208c8aaac5eb
[2/3] STEP 6/9: COPY . .
--> 7c44260c3ac0
[2/3] STEP 7/9: COPY --from=frontend-builder /app/frontend/dist ./frontend/dist
--> 09749e6660e1
[2/3] STEP 8/9: RUN rice -i ./web embed-go
2026/02/14 17:34:13 no calls to rice.FindBox() found
--> cdc88c64da36
[2/3] STEP 9/9: RUN go build -o neko .
no Go files in /app
Error: building at STEP "RUN go build -o neko .": while running runtime: exit status 1


title: Implement Frontend Feed List

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


title: neko button always must be visible

description: once you hide the sidebar with the nekoo button, there's no way to unhide it in the v2 ui after the recent changes