Curation + navigation: design system + spec #6

Merged
arne merged 2 commits from curation-design into main 2026-04-11 21:47:25 +02:00
Owner

Summary

Sets up everything for the next implementation pass — library curation (delete + upload) and the navigation redesign — but stops short of touching any real handlers or store methods. Two commits:

  1. Design system update (0307ac2) — reverses the earlier "there is no header, just a dropdown in the corner" decision. The new .site-header is a thin strip with three italic nav links on the left (shelf · library · errata, library as the default / route) and a + upload action on the right. Active-state is inked ink colour plus a thin stamp rule under the word. Mocks the inline delete-confirm button with both resting and armed states. Deletes the drag-and-drop dropzone concept we iterated on and then explicitly cut. Also fixes a small input bug: italic f was getting left-clipped in search inputs because the content box had zero inline padding — added 0.12em of inline-start padding across all text inputs. All changes live in design/ and are visible by opening design/index.html or design/preview/index.html in a browser. No backend code changes.

  2. Design spec (13ad7be) — docs/superpowers/specs/2026-04-11-curation-and-nav-design.md. Covers the three features landing in the next PR: delete books (soft delete, row kept, files moved to <data dir>/archived-books/<hash>.<ext>, auto-unshelve on delete, inline 2-click confirm UI on the book detail page), upload books (+ upload button in the site header triggers a file picker, new file runs through the same importer pipeline as the inbox watcher, re-uploading an archived book restores it), and the site header itself. Also covers an incidental internal/kobo fix: buildRemovedEntitlement currently synthesizes a fake UUID via uuidFromInt, which delete-of-a-shelved-book would silently trip over — the spec resolves it via a new GetBookByIDIncludingDeleted store method so the removal envelope carries the book's real UUID.

The spec has a full self-review done; the open questions section is non-blocking.

What's in this PR

  • Visual design for the three features, iterable in the browser at design/index.html and design/preview/*.html
  • Written design spec at docs/superpowers/specs/2026-04-11-curation-and-nav-design.md
  • No backend / store / importer / web handler changes — those come in the follow-up implementation PR

Test plan

  • design/preview/index.html opens in a browser, shows the new thin site header with + upload on the right, no dropzone wrapper
  • design/preview/book.html shows the delete button in resting and armed states
  • design/index.html component doc reflects the new header and no dropzone
  • Search input in the library preview no longer clips the italic f
  • Spec review — read the spec and push back on anything that feels wrong before we write the implementation plan. Particularly worth a second look: the internal/kobo scope addition, the importer split of Import vs ImportFile, the flash cookie design, and the testing list

Intended to be squash-merged; the two commits are a breadcrumb trail, not a curated history.

🤖 Generated with Claude Code

## Summary Sets up everything for the next implementation pass — library curation (delete + upload) and the navigation redesign — but stops short of touching any real handlers or store methods. Two commits: 1. **Design system update** (`0307ac2`) — reverses the earlier "there is no header, just a dropdown in the corner" decision. The new `.site-header` is a thin strip with three italic nav links on the left (shelf · library · errata, library as the default `/` route) and a `+ upload` action on the right. Active-state is inked ink colour plus a thin stamp rule under the word. Mocks the inline `delete-confirm` button with both resting and armed states. Deletes the drag-and-drop dropzone concept we iterated on and then explicitly cut. Also fixes a small input bug: italic `f` was getting left-clipped in search inputs because the content box had zero inline padding — added 0.12em of inline-start padding across all text inputs. All changes live in `design/` and are visible by opening `design/index.html` or `design/preview/index.html` in a browser. No backend code changes. 2. **Design spec** (`13ad7be`) — `docs/superpowers/specs/2026-04-11-curation-and-nav-design.md`. Covers the three features landing in the next PR: delete books (soft delete, row kept, files moved to `<data dir>/archived-books/<hash>.<ext>`, auto-unshelve on delete, inline 2-click confirm UI on the book detail page), upload books (`+ upload` button in the site header triggers a file picker, new file runs through the same importer pipeline as the inbox watcher, re-uploading an archived book restores it), and the site header itself. Also covers an incidental `internal/kobo` fix: `buildRemovedEntitlement` currently synthesizes a fake UUID via `uuidFromInt`, which delete-of-a-shelved-book would silently trip over — the spec resolves it via a new `GetBookByIDIncludingDeleted` store method so the removal envelope carries the book's real UUID. The spec has a full self-review done; the open questions section is non-blocking. ## What's in this PR - Visual design for the three features, iterable in the browser at `design/index.html` and `design/preview/*.html` - Written design spec at `docs/superpowers/specs/2026-04-11-curation-and-nav-design.md` - No backend / store / importer / web handler changes — those come in the follow-up implementation PR ## Test plan - [x] `design/preview/index.html` opens in a browser, shows the new thin site header with `+ upload` on the right, no dropzone wrapper - [x] `design/preview/book.html` shows the delete button in resting and armed states - [x] `design/index.html` component doc reflects the new header and no dropzone - [x] Search input in the library preview no longer clips the italic `f` - [ ] **Spec review** — read the spec and push back on anything that feels wrong before we write the implementation plan. Particularly worth a second look: the `internal/kobo` scope addition, the importer split of `Import` vs `ImportFile`, the flash cookie design, and the testing list Intended to be **squash-merged**; the two commits are a breadcrumb trail, not a curated history. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Reverses the earlier "no header, just a dropdown in the corner"
decision. The header was too easy to miss and the page-nav dropdown
never really earned its place in the Reading Room voice.

The new site header is a thin strip at the top of every page:
three italic nav links on the left (shelf · library · errata,
library as the default `/` route), and an `+ upload` action on
the right. No wordmark, no background, no hamburger — just the
words, a paper-soft rule under them, and breathing room before
the content starts. Active nav link is inked (vs. ink-soft) with
a thin stamp rule directly under the word.

Upload lives in the header, not as a drag-and-drop dropzone on
the library page. The drop-target state machine felt like more
surface area than a personal book server needed; a plain file
picker in a quiet corner of the chrome is enough.

Also mocks the inline delete-confirm component for the book
detail page: an italic "delete book" button that arms itself on
first click (stamp colour, "really?" prefix) and commits on the
second. No modal, no dialog, reverts after five seconds of no
second click. The Reading Room avoids modal chrome everywhere.

Fixes a small input bug: italic letters with left-side overhang
(notably `f`) were getting clipped at the left edge of search
and text inputs because the content box had zero inline padding.
Added 0.12em of inline-start padding across all text inputs.

The design-system prototype pages (design/index.html and the
two under design/preview/) are updated to show the new header
in place, with both resting and armed states for delete. The
library preview no longer has the page-nav dropdown, the `+
upload` actions row, or the dropzone overlay — those are all
gone.

No backend code changes in this commit. The actual delete and
upload handlers still need to be designed and implemented; this
is just the visual language those features will land in.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Covers the three features landing in the next PR — delete books
from the UI, upload books through the web, and the thin site
header that replaced the corner dropdown — plus the incidental
internal/kobo fix for the latent uuidFromInt bug in
buildRemovedEntitlement that the delete flow would otherwise
trip.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
arne merged commit 1357f1ccb2 into main 2026-04-11 21:47:25 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
arne/books!6
No description provided.