feat: add bookmarks and share with saved tab

Stacked on !9

Summary

bookmarking and native sharing for tablets and highlights, plus the Saved tab

Changes

Bookmarks

  • Zustand store persisted to MMKV -> survives restarts, no backend or accounts needed
  • Two separate id lists (tablets, highlights) rather than one tagged list; highlight ids (185–214) fall inside the tablet range (29–782), so a single list would confuse tablet 187 with highlight 187
  • Header bookmark icon on both detail screens; Ionicons filled/outline pair for saved state
  • Saved tab - one FlashList over a flattened row union so section headings keep virtualisation; ids resolve against the cached feeds, nothing duplicated into storage. A heading only shows when that list has items

Share

  • Built-in RN Share API, no dependency
  • Tablets share title (theme) + https://cdli.earth/cdli-tablet/{id}
  • Highlights share title + https://cdli.earth/postings/{id}
  • URL goes inside message, not the separate url field -> url is iOS-only and Android drops it silently
  • "View on CDLI" now opens the same page the share link points to

Screenshots

WhatsApp_Image_2026-08-24_at_13.26.44 WhatsApp_Image_2026-08-24_at_13.26.43 WhatsApp_Image_2026-08-24_at_13.29.47

Merge request reports

Loading
Loading