- Not started
- Complete
- [~] In progress
-
src/types/capture.tsβ CaptureRequest, CapturedFrame, CaptureResponse, CaptureState -
src/types/navigation.tsβ Navigation param types for React Navigation -
src/services/requestValidator.tsβ Zod schemas, validateRequest() -
src/services/qrDecoder.tsβ parseQRPayload(), validateBase64(), opaque data handling
-
src/constants/config.tsβ Timeouts, thresholds, FOUNTAIN_OVERHEAD, GIF detection params -
src/constants/theme.tsβ Colors, fonts, cat-themed palette -
src/utils/base64.tsβ isValidBase64(), estimateDecodedBytes() β no actual decode -
src/utils/formatters.tsβ formatElapsed(), formatPercent(), formatFileSize()
-
src/services/frameCollector.tsβ FrameCollector class, dedup, size tracking -
src/services/jsonExporter.tsβ exportResponse(), chunked export at 5MB boundary
-
src/hooks/useCapture.tsβ Full state machine reducer (IDLEβCAPTURINGβCOMPLETE) -
src/hooks/useQRScanner.tsβ Vision Camera frame processor, GIF auto-detection -
src/hooks/useStabilityMonitor.tsβ Accelerometer shake detection -
src/hooks/useSessionManager.tsβ Progress calculations, recoverability metrics
-
src/components/CameraPreview.tsxβ Vision Camera wrapper with frame processor -
src/components/ProgressHUD.tsxβ Progress bar, frame count, recoverability labels -
src/components/FrameOverlay.tsxβ QR bounding box, status badges -
src/components/StabilityIndicator.tsxβ Shake/blur warning overlay -
src/components/CatToast.tsxβ Themed notification toasts with cat sounds
-
src/screens/SplashScreen.tsxβ Animated cat logo, version display -
src/screens/OnboardingScreen.tsxβ First-run: air-gap explanation, camera permission -
src/screens/HomeScreen.tsxβ Load capture request or manual session entry -
src/screens/CaptureScreen.tsxβ Camera preview + overlay + progress HUD -
src/screens/ExportScreen.tsxβ Review results, save JSON, QR fallback display
-
src/App.tsxβ Navigation container, theme provider, AppState lifecycle -
src/navigation/AppNavigator.tsxβ Stack navigator wiring all screens
-
package.jsonβ All dependencies per spec (vision-camera, zod, reanimated, etc.) -
tsconfig.jsonβ Strict TypeScript config with node/jest types for mocks -
.eslintrc.jsβ ESLint + Prettier rules -
babel.config.jsβ Reanimated plugin, worklets support
-
__tests__/captureReducer.test.tsβ All state transition tests -
__tests__/requestValidator.test.tsβ Zod validation edge cases -
__tests__/frameCollector.test.tsβ Dedup and accumulation tests -
__tests__/jsonExporter.test.tsβ Export and chunking tests -
__tests__/formatters.test.tsβ Utility formatter tests -
__tests__/base64.test.tsβ Base64 validation tests -
__tests__/qrDecoder.test.tsβ QR payload parsing tests -
__tests__/webDemoIntegration.test.tsβ Web demo wire format integration
-
android/app/src/main/AndroidManifest.xmlβ Camera-only permissions -
ios/MeowCapture/Info.plistβ NSCameraUsageDescription -
README.mdβ Full updated README per spec
-
tsconfig.jsonβ Add node/jest to types for mock files and Buffer in tests -
src/constants/config.tsβ Fixas conston arithmetic expression (not a literal) -
src/hooks/useQRScanner.tsβ Replace deprecatedWorklets.createRunInJsFn(typednever) withuseRunOnJShook -
src/hooks/useStabilityMonitor.tsβ FixAccelerometerclass (doesn't exist) βaccelerometerObservable + typed SensorData -
src/hooks/useSessionManager.tsβ FixexactOptionalPropertyTypesviolation on sessionId -
src/components/CameraPreview.tsxβ FixFrameProcessor(not exported) βReadonlyFrameProcessor -
src/components/ProgressHUD.tsxβ FixstrokeDashoffset(SVG-only, not in DefaultStyle) β RN-native animated width bar -
src/services/jsonExporter.tsβ FixTextEncoder(not in ES2022 lib) βBuffer.byteLength -
src/services/qrDecoder.tsβ FixexactOptionalPropertyTypesviolation on session_id return -
src/screens/CaptureScreen.tsxβ Remove unusedsetQrActive,qrActiveTimer -
src/screens/ExportScreen.tsxβ Remove unusedprogressColorimport -
src/screens/HomeScreen.tsxβ Remove unusedAlert; fixresultpossibly-undefined -
src/screens/SplashScreen.tsxβ Remove unusedrunOnJS,FIRST_LAUNCH_KEY -
__tests__/jsonExporter.test.tsβ Removetotal_frames(not in CaptureResponse type) -
__tests__/requestValidator.test.tsβ Remove unusedCaptureRequestSchemaimport
- No network permissions in any manifest (AndroidManifest β no INTERNET; Info.plist β NSAppTransportSecurity blocks all; network_security_config.xml β all cleartext blocked)
- No frame data written to disk except during explicit export (state lives in React useReducer; AppState listener dispatches RESET on background)
- No crypto keys or passwords ever referenced in app code (app is capture-only; decryption happens on desktop)
- All incoming JSON validated with Zod before processing (CaptureRequestSchema.strict() in requestValidator.ts)
- AppState background handler clears frame data from memory (useCapture.ts AppState addEventListener dispatches RESET)
- No
anytype escapes in TypeScript (tsconfig strict + @typescript-eslint/no-explicit-any as ESLint error) - No
console.log(frameData)or similar data leaks in production paths (no-console as ESLint error in .eslintrc.js)