Surface a bit of the page content in the list without fetching/parsing pages
ourselves — linkding already returns the scraped metadata in the bookmark
payload. Add Bookmark.contentExcerpt (website_description, falling back to the
user's note) and render it under the title: AI summary takes priority and stays
italic, otherwise the scraped excerpt shows. Rows with neither degrade to the
existing favicon + title layout.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Apply WWDC26 design-brief fixes to the bookmark list reading surface:
- Dynamic Type: replace fixed .system(size:) points with text styles
(title .headline, domain/date .footnote, summary .subheadline, tags
.caption, podcast glyph .title3). Rows now scale and wrap with the
user's text-size setting instead of staying fixed.
- Perf: podcastCached was a FileManager.fileExists stat evaluated inside
body — i.e. per row, per scroll frame. Move it to @State populated by a
.task(id:) that stats off the main actor, once per appearance.
- Forgiveness: destructive trailing swipe is now allowsFullSwipe: false so
a single fling can't permanently delete; requires tapping the button.
Adds docs/design-wwdc26.md (consolidated brief + codebase audit).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-16 00:47:31 -05:00
4 changed files with 200 additions and 11 deletions
so a single fling no longer deletes instantly; requires tapping the revealed button.
### Still open (optional)
- Favicon `URLCache` sizing via `.asyncImageURLSession(_:)` (iOS 26 already caches by default).
- True **undo** for delete (snackbar + soft-delete) — current fix only removes the accidental
full-swipe; an explicit tap still deletes immediately.
- Widget fonts still use fixed sizes (left as-is — widgets clamp Dynamic Type; lower value).
- Search scope bar (`.searchScopes`) for All / Unread / tag.
- Widget `AppIntentConfiguration`, more families incl. `.systemExtraLargePortrait`, interactive
"mark read" `AppIntent`.
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.