Skip to content

Add notifications, bookmarks, and better UI - #32

Merged
melqtx merged 2 commits into
mainfrom
feat/notifications-bookmarks-ui
Aug 4, 2026
Merged

Add notifications, bookmarks, and better UI#32
melqtx merged 2 commits into
mainfrom
feat/notifications-bookmarks-ui

Conversation

@melqtx

@melqtx melqtx commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

  • add reply and mention notifications with unread state and actionable popups
  • improve bookmarks and feed navigation
  • improve timeline, thread, and notification UI
  • add efficient adaptive polling and safe notification persistence

Testing

  • go test ./...
  • go test -race ./internal/timeline ./pkg/api ./pkg/config
  • go vet ./...

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends Xeet’s TUI with reply/mention notifications (polling, unread state, popups + panel) and improves navigation/UI (feed tabs, bookmarks switching), while adding persistence safeguards for notification metadata and shared transaction-id signing state.

Changes:

  • Add an authenticated NotificationsTimeline API client + parsing/tests, including query-id discovery/refresh.
  • Add a notifications panel + popup UX in the timeline model with adaptive polling and persisted unread/delivered state.
  • Improve feed navigation/UI (tab/shift+tab cycling, header indicator updates) and update docs/help text accordingly.

Reviewed changes

Copilot reviewed 22 out of 22 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
TODO.md Adds planned item describing in-app reply/mention notifications.
README.md Documents new navigation keys (tab cycling, notifications panel/popup actions) and polling behavior.
pkg/config/config.go Persists notification metadata (account/delivered/read IDs), adds locked writes and a partial-save path for notification state.
pkg/config/config_test.go Adds coverage for concurrent notification state persistence and keyring-skip behavior.
pkg/config/config_lock_windows.go Adds Windows file-lock implementation for config writes.
pkg/config/config_lock_unix.go Adds Unix file-lock implementation for config writes.
pkg/config/config_lock_other.go Adds no-op lock for unsupported OSes.
pkg/api/web.go Extends operation QIDs to include NotificationsTimeline; reuses transaction-id state per session; tweaks query-id refresh detection.
pkg/api/transaction_id.go Adds per-session transaction-id generator cache to reuse signing state across short-lived clients.
pkg/api/transaction_id_test.go Tests that transaction-id cache is scoped per session.
pkg/api/notifications.go Implements NotificationsTimeline fetch + parsing to keep actionable replies/mentions.
pkg/api/notifications_test.go Unit tests for parsing, request shape, query-id refresh flows, and auth error mapping.
pkg/api/notifications_live_test.go Adds opt-in live test for notifications against a real session.
pkg/api/discover.go Updates discovery hints to support NotificationsTimeline bundles.
pkg/api/discover_test.go Tests new NotificationsTimeline discovery hint selection.
internal/timeline/view.go Adds notifications mode rendering, header feed tabs + unread indicator, and popup overlay rendering.
internal/timeline/view_test.go Tests header feed tabs + notification indicator rendering constraints.
internal/timeline/thread.go Refactors thread entry/exit for notification integration; supports jumping into notifications from thread.
internal/timeline/reply.go Ensures thread results can be applied correctly when reply editor is opened from notifications flows.
internal/timeline/notifications.go Adds polling, notification queue/popup logic, unread tracking, persistence calls, and panel UI behavior.
internal/timeline/model.go Wires notifications into the global update loop, adds feed cycling keys, and integrates notifications into post actions/viewport sync.
internal/timeline/model_test.go Adds extensive tests for notification baseline, popups, panel navigation, polling backoff, and nested thread interactions.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread pkg/api/web.go
Comment on lines 164 to 166
// needsQueryIDRefresh reports whether a response indicates the persisted-query
// id rotated: a plain 404, or a 400 that names the persisted query problem.
func needsQueryIDRefresh(res *httpResult) bool {
Comment on lines +64 to +66
if client.ApplyRefreshedQueryIDs(cfg) {
_ = mgr.Save(cfg)
}
@melqtx
melqtx merged commit 9bc26fe into main Aug 4, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants