Skip to content

feat(journals): pin entries - #91

Merged
fullynocturnal merged 3 commits into
mainfrom
feat/journal-pinning
Sep 23, 2026
Merged

fullynocturnal merged 3 commits into
mainfrom
feat/journal-pinning

Conversation

@fullynocturnal

@fullynocturnal fullynocturnal commented Sep 23, 2026 •

Copy link
Copy Markdown
Collaborator

Adds journal entry pinning, matching the backend change that lets entries be pinned.

  • Pin or unpin an entry from the top bar of its page.
  • Pinned entries get their own section above the list, fetched with pinned=true (up to 200) while the paged list uses pinned=false, the same split as the web app. Cards and the entry page show a pin marker.
  • With the Journal entries safety category on and a grace period set, unpinning asks for password and/or authenticator code and queues a journal_unpin action. The entry shows when the unpin finalizes until then. Otherwise the unpin is immediate.
  • System Safety: the Journal entries row now says it covers unpinning, and journal_unpin has a label in pending actions.
  • Offline, the cached list is split back into pinned and unpinned.

Against a server without pinning, the pinned filter is ignored and both requests return everything, so only entries with pinned_at set go in the pinned section and the list looks as it did before. The pin button still shows there and errors if tapped, since the app has no server feature detection.

Also fixes journal paging: the list endpoint reads cursor, but the app sent before, so loading more fetched the first page again.

An entry can be pinned or unpinned from the top bar of its page. Pinned
entries are listed in their own section above the rest, loaded in one
request with pinned=true while the paged list asks for pinned=false, the
same split the web app uses.

With the Journal entries safety category on and a grace period set,
unpinning asks for re-auth and queues a journal_unpin action instead. The
entry then shows when the unpin will finalize, and the pending action has
a label on the System Safety page.

A server without pinning ignores the filter and returns everything in both
requests, so only entries that actually carry pinned_at go in the pinned
section.
The list endpoint reads the cursor from `cursor`, so loading more entries
asked for the first page again.
@fullynocturnal
fullynocturnal merged commit 8f6b625 into main Sep 23, 2026
1 check passed
@fullynocturnal
fullynocturnal deleted the feat/journal-pinning branch September 23, 2026 01:10
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.

1 participant