diff --git a/docs/roadmaps/04_MOBILE_ROADMAP.md b/docs/roadmaps/04_MOBILE_ROADMAP.md index b94e00d..2d34ade 100644 --- a/docs/roadmaps/04_MOBILE_ROADMAP.md +++ b/docs/roadmaps/04_MOBILE_ROADMAP.md @@ -75,6 +75,7 @@ Stack: React Native + Expo + TypeScript - Home/search/capture now use active workspace context for more useful mobile browsing. - Note detail now supports lightweight local editing plus basic artifact metadata viewing. - Inbox now supports simple approval/reject flows and a lightweight activity feed. +- Capture now surfaces offline queue readiness details for the current mobile scaffold. - Mobile currently uses provisional product config and fallback note/workspace data until product identity and backend contract details are finalized. # Open Questions diff --git a/mobile/src/app/(tabs)/capture.tsx b/mobile/src/app/(tabs)/capture.tsx index 825e427..f0f1c82 100644 --- a/mobile/src/app/(tabs)/capture.tsx +++ b/mobile/src/app/(tabs)/capture.tsx @@ -3,6 +3,7 @@ import { Pressable, StyleSheet, Text, TextInput, View } from 'react-native'; import type { MobileWorkspace } from '../../api/workspaces'; import { useNotesStore, type NotesState } from '../../store/notes-store'; import { useWorkspaceStore, type WorkspaceState } from '../../store/workspace-store'; +import { OFFLINE_QUEUE_MAX_RETRIES, OFFLINE_QUEUE_MAX_SIZE } from '../../lib/offline-queue'; import { colors } from '../../theme'; export default function CaptureScreen() { @@ -55,6 +56,11 @@ export default function CaptureScreen() { Save draft {saved ? Draft saved locally in this scaffold step. : null} + + Offline queue readiness + Queue capacity: {OFFLINE_QUEUE_MAX_SIZE} items + Retry policy: {OFFLINE_QUEUE_MAX_RETRIES} attempts + ); } @@ -103,4 +109,21 @@ const styles = StyleSheet.create({ fontSize: 14, fontWeight: '600', }, + card: { + backgroundColor: colors.surfaceCard, + borderRadius: 14, + borderWidth: 1, + borderColor: colors.borderDefault, + padding: 14, + gap: 6, + }, + cardTitle: { + color: colors.textPrimary, + fontSize: 16, + fontWeight: '700', + }, + cardBody: { + color: colors.textSecondary, + fontSize: 14, + }, }); diff --git a/mobile/src/lib/offline-queue.ts b/mobile/src/lib/offline-queue.ts index bcf851b..adf5660 100644 --- a/mobile/src/lib/offline-queue.ts +++ b/mobile/src/lib/offline-queue.ts @@ -1,12 +1,15 @@ import { createOfflineQueue } from '@bytelyst/offline-queue'; import { mmkvStorage } from '../store/mmkv-storage'; +export const OFFLINE_QUEUE_MAX_RETRIES = 5; +export const OFFLINE_QUEUE_MAX_SIZE = 50; + export const noteOfflineQueue = createOfflineQueue({ storageKey: 'bytelyst-notes-offline-queue', storage: { getItem: (key: string) => mmkvStorage.getItem(key), setItem: (key: string, value: string) => mmkvStorage.setItem(key, value), }, - maxRetries: 5, - maxQueueSize: 50, + maxRetries: OFFLINE_QUEUE_MAX_RETRIES, + maxQueueSize: OFFLINE_QUEUE_MAX_SIZE, });