Skip to content

feat: add tags and shelves to the web interface - #8

Merged
nkboedecker merged 1 commit into
mainfrom
feat/phase-3-cont
Nov 3, 2026
Merged

nkboedecker merged 1 commit into
mainfrom
feat/phase-3-cont

Conversation

@nkboedecker

@nkboedecker nkboedecker commented Nov 2, 2026 •

Copy link
Copy Markdown
Owner

Summary

Add tags and shelves to the web interface. This builds on #9, which closed two places where a hidden copy's details could leak through tags and shelves.

Feature

  • A tags form on the copy page (a comma-separated list of up to 50 tags), and a list of each library's tags.
  • Pages to create, view, rename, and delete shelves, to put a copy on a shelf, and to take it off.
  • A new API operation, GET /api/v1/copies/{copy_id}/shelves, that lists the shelves holding a copy. Only members of the copy's library see them.
  • Tried in Chrome as the library owner, a viewer and an editor on a local build.

Not in this PR

  • DELETE /api/v1/tags/{id} lets an editor delete a tag that only hidden copies use.
  • Creating a tag returns a conflict for a name that already exists, which confirms a hidden name.
  • Neither has a page yet. Fix both when tag management gets one.
  • The 50-tag limit exists only in the page. The API accepts any number.

Checklist

  • The PR title is a Conventional Commit.
  • Tests are added, including an authorization-denied test for each endpoint.
  • Docs are updated.
  • CHANGELOG.md has a line under Unreleased, or this change isn't user-visible.
  • Commits are signed and have a Signed-off-by line.

Breaking changes

None. The new operation is additive.

Security-sensitive areas

  • Authorization: the new endpoint and the role checks on each new page.

AI assistance

Claude Code wrote the code and its tests. An advisor review ran before the change was presented, and it found two authorization gaps in the first version, which are fixed in #9. The maintainer reviewed and made the commits.

Let people tag copies and organize them on shelves from the browser, as
thin layers over the existing service functions.

- Add a tags form to the copy page, and list a library's tags.
- Add pages to create, view, rename, and delete shelves, and to put
  copies on shelves and take them off.
- Add an API operation that lists the shelves holding a copy.

Assisted-by: Claude Code
Signed-off-by: Natalie Boedecker <git@boedecker.dev>
@nkboedecker
nkboedecker merged commit 3b080c8 into main Nov 3, 2026
11 checks passed
@nkboedecker
nkboedecker deleted the feat/phase-3-cont branch November 3, 2026 00:19
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