Merge train 2026-10-14b: #279 #281 #278 #282

Closed
kayg wants to merge 0 commits from train/2026-10-14b into dev
Owner

Merge train b (2026-10-14). It lands:

  • #279: phone list screens' Safari bars, round 2. One glass sheet at a time; the backdrop fades to a single edge colour; Settings counts as paper to the edges; the tint-parser fix; a 240-case pixel spec.
  • #281: Unsplash backgrounds (#102):
    • a quiet corner credit that steps aside for open sheets;
    • no upload size or count caps, only the 40-megapixel guard;
    • a Settings switch that works;
    • the key read from an EnvironmentFile.
  • #278: the attachment mockup round 3, and one shared context menu in packages/ui used by the app and the mockup, with shortcut chips shown only when a keyboard is present.

Checks:

  • svelte-check reports 0 errors; the mockup builds; fmt passes.
  • The calternal and backdrops tests pass, except one run of notes_crash_typing (file ≠ note after a save) at load. It passed 3 of 3 alone. That code is already on dev (#264) and isn't touched by this train; it's being investigated separately.

🤖 Generated with Claude Code

https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T

Merge train b (2026-10-14). It lands: - **#279:** phone list screens' Safari bars, round 2. One glass sheet at a time; the backdrop fades to a single edge colour; Settings counts as paper to the edges; the tint-parser fix; a 240-case pixel spec. - **#281:** Unsplash backgrounds (#102): - a quiet corner credit that steps aside for open sheets; - no upload size or count caps, only the 40-megapixel guard; - a Settings switch that works; - the key read from an EnvironmentFile. - **#278:** the attachment mockup round 3, and **one shared context menu in packages/ui** used by the app and the mockup, with shortcut chips shown only when a keyboard is present. **Checks:** - svelte-check reports 0 errors; the mockup builds; fmt passes. - The calternal and backdrops tests pass, except one run of notes_crash_typing (file ≠ note after a save) at load. It passed 3 of 3 alone. That code is already on dev (#264) and isn't touched by this train; it's being investigated separately. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Every embed is a floating card with layered depth that lifts and grows a
touch on a spring under the pointer (kayg.org's card feel), and focuses with
a ring and no motion from the keyboard. Each kind gets its own context menu
(layouts as an icon row, the kind's actions, then the shared tail: copy
link to block, copy as, duplicate, move, delete) and a mini toolbar with the
layouts and the one or two actions people reach for most.

Fixture note "Autumn trip": Large and Card photos, a gallery made from
adjacent photos (carousel or grid), HEIC, GIF, video, a recording,
PDF, CSV, code, a plain file, an embedded note, a link card and pill, and a
place from a geo: link. Stacked on #176 (#133's mockup refresh).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Mockup round 2 for attachments: kayg's review (#245)
Some checks failed
CI / server (pull_request) Successful in 28s
CI / rust (pull_request) Failing after 2m4s
CI / web (pull_request) Failing after 15s
f8c3632c59
- The card whose menu is open stays grown with its toolbar showing (1).
- Pressing the toolbar never presses the picture (2).
- Hover is scale only: no lift, no photo drifting inside (5).
- Pictures carry their name on a soft blurred strip with size and
  dimensions (6).
- Copy as drops Deeplink; Copy link to block is the one link (7).
- Double-click opens the original at full resolution, click for 1:1 (8).
- Recordings play for real and draw their waveform from the sound (9).
- Layout changes grow from the old shape; text below glides (10).
- Code blocks and code files find their language, say Plain text
  otherwise, and get syntax colours (11).
- Embedded notes are drawn by the editor's own block renderer
  (BlockContent), no side bar, Open in the toolbar, and the note scales up
  out of its card when opened (12).
- Galleries: several images on one line. They bounce in as a fanned
  stack when scrolled into view (our own take on bounce-cards); pointing
  brings a print forward, arrow keys do it at once. A quiet + beside a
  single image adds a picture to its line, dropping one image on another
  joins them, and Take out of gallery moves one to its own line.
- Fixture note "Weekend by the lake" shows both ways to write pictures.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Note backgrounds: Unsplash through our server, plus uploads (#102)
Some checks failed
CI / server (pull_request) Successful in 44s
CI / web (pull_request) Failing after 22s
CI / rust (pull_request) Successful in 2m12s
b1f24486ba
Key on the server only (CALTERNAL_UNSPLASH_KEY, read from the optional
calternal-secrets.env). Pictures come from our own address, so the CSP stays
at 'self'. Picker in the style inspector; the choice is saved per note. A quiet
photographer credit sits in the corner of the screen. Uploads are guarded only
by the 40-megapixel limit. The Settings switch for Unsplash photos now works.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Bounce cards match the original; grid fills the line; one shared menu (#245)
Some checks failed
CI / server (pull_request) Successful in 27s
CI / web (pull_request) Failing after 27s
CI / rust (pull_request) Successful in 1m59s
5521b92a85
- Galleries: the stack now plays exactly like sveltebits' bounce-cards:
  the same five places, elastic.out(1, 0.8) over 0.5 s, 0.06 s apart
  after 0.5 s, and the hover push (straighten, others 160 px along their
  tilt, back.out(1.4), 0.4 s, 0.05 s per step). GSAP's curves are written
  as CSS linear() easings and its transforms as move-then-turn, so frame
  by frame the numbers match the original's. No border on the cards.
- Grid: square pictures filling the line in even rows with the cards'
  corners; an odd count lets the first one span the row. (The cells had
  picked up the file row's 40 px tile style.)
- Menus: the app's #155 context menu moves to packages/ui and both the
  web app and the mockup use it; the mockup's copy is gone. It gains the
  icon row (layouts) and shortcut chips in the warm tooltip's style,
  right-aligned, shown only with a keyboard (fine hover pointer, or a
  real key pressed this session).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Phone bars, round 2 part 2: one glass sheet at a time, edge model fixed, wider spec (#226)
Some checks failed
CI / server (pull_request) Successful in 28s
CI / web (pull_request) Failing after 28s
CI / rust (pull_request) Failing after 1m26s
e1b356bdfd
- A screen under another one is hidden once the top one has slid in: two stacked glass
  sheets tinted the backdrop twice (and the part past the top one's edge once).
- glass-edge.ts: tints are straight channels from getImageData; they were un-premultiplied twice.
- Spec: Settings, 393x852 / 430x932 / 390x844, a faked collapsed toolbar (strip below the app
  must be page colour), and a no-flat-band check a little way in from each edge.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Corner credit steps aside while a sheet is open and clears the bar (#102)
Some checks failed
CI / server (pull_request) Successful in 21s
CI / web (pull_request) Failing after 20s
CI / rust (pull_request) Successful in 1m41s
dc17fda40b
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018Yyy8fQGxPLkLa8v8NXz7T
Merge remote-tracking branch 'origin/issue/172-attachment-cards-3' into train/2026-10-14b
Some checks failed
CI / server (pull_request) Successful in 21s
CI / web (pull_request) Failing after 20s
CI / rust (pull_request) Successful in 1m43s
e6c2675ad5
Author
Owner

Closing: this branch is already fully contained in dev (it landed through a merge train). Branch cleanup, 2026-10-15.

Closing: this branch is already fully contained in `dev` (it landed through a merge train). Branch cleanup, 2026-10-15.
kayg closed this pull request 2026-10-15 08:34:31 +00:00
Some checks failed
CI / server (pull_request) Successful in 21s
CI / web (pull_request) Failing after 20s
CI / rust (pull_request) Successful in 1m43s

Pull request closed

Sign in to join this conversation.
No reviewers
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
kayg/calternal!282
No description provided.