feat(native): add iOS home screen widgets for continue watching and upcoming

- Add `ContinueWatching` (systemSmall) and `Upcoming` (systemSmall) SwiftUI widgets via `expo-widgets`, registered in `app.json` under the `group.com.jakejarvis.sofa` app group
- Add `widget-images` local Expo module with a Swift `WidgetImagesModule` that downloads and resizes remote poster images into the shared app group container for use by widgets; also copies bundled assets (sofa icon fallback)
- Add `src/lib/widgets.ts` to fetch dashboard data, cache poster images, and write a JSON timeline to the shared container via `expo-widgets`
- Add `ContinueWatching` and `Upcoming` SwiftUI widget views in `src/widgets/`
- Add `useWidgetRefresh` hook that refreshes widgets on foreground (throttled to once per minute) and on session ready
- Debounce widget refresh in `invalidateTitleQueries` so rapid mutations (e.g. marking multiple episodes watched) batch into a single refresh
- Expose `titles.upcoming` from the dashboard procedure and add `upcomingTitles` field to the dashboard schema
- Bump iOS deployment target to 16.2 (required by WidgetKit timeline APIs)
This commit is contained in:
2026-03-21 21:03:58 -04:00
parent 61013ee41f
commit fd4a8119ce
26 changed files with 784 additions and 56 deletions
+3 -3
View File
@@ -16,12 +16,12 @@
"dependencies": {
"@takumi-rs/image-response": "^0.73.1",
"@vercel/analytics": "^2.0.1",
"fumadocs-core": "^16.7.2",
"fumadocs-core": "^16.7.4",
"fumadocs-mdx": "^14.2.11",
"fumadocs-openapi": "^10.4.1",
"fumadocs-ui": "^16.7.2",
"fumadocs-ui": "^16.7.4",
"lucide-react": "^0.577.0",
"next": "16.2.0",
"next": "16.2.1",
"react": "19.2.4",
"react-dom": "19.2.4",
"shiki": "^4.0.2",