DRAFTFIG. HOSHCARE-CLT
ACTIVE, PRE-PILOTReact NativeExpo SDK 56TypeScript
React Navigation v7

HOSHCARE CLIENT - Frontend Vault

1. the problem

HOSHCARE stores medical documents - prescriptions, lab reports, discharge summaries - and turns them into structured, searchable records. A photo of a prescription becomes doctor, date, diagnosis and medications: fields a user reviews before anything saves. Once saved, a record locks permanently. Health records that can be silently edited after the fact aren't records.

INTERACTIVE PIPELINEClick any box to inspect architecture
photodoctor ------date ------diagnosis ------medications ------structured fieldsyou review it(nothing saves yet)locked.
STAGE 01 // Document Scan Capture

ROLE: Camera capture pipeline with native auto-cropping, uncompressed memory buffer allocation, and secure sandboxed disk cache.

const photo = await cameraRef.current.takePictureAsync({ quality: 0.88, skipProcessing: false, base64: false }); // Resolution: 1080x1920 raw JPEG · Buffer: 1.14MB // Sandbox path: file:///data/user/0/host.exp.exponent/cache/scan_09a.jpg
INVARIANT: Photos never write to unencrypted public camera roll; sandboxed directly to app memory.
FAILURE GUARD: Eliminates memory heap fragmentation by recycling native bitmap allocations.

2. what i built

Roughly 19 screens, plus full dark mode and a shared design system carried over from the marketing site:

onboarding
phone + Google auth
family member profiles
document capture
extraction review flow
records timeline
detail views
settings

3. problems i had to crack

Click card to view root cause & code diff
Agoogle sign-in went silent
▼ DIFF

After a dependency update, sign-in failed with no error. The library had moved idToken one level deeper, to response.data.idToken. The old path returned undefined, the auth call accepted it, and the server rejected it. Found by logging the raw response instead of the field I expected.

Buploads sent empty bodies
▼ DIFF

After an Expo upgrade, uploads failed silently. Expo 52+ ships a WinterCG-compliant fetch polyfill that handles React Native FormData differently, so requests left with an empty body. Fix: a dedicated apiUpload() on XMLHttpRequest, which skips the polyfill and reports real upload progress as a bonus.

Cbuild died with no stack trace
▼ DIFF

A local dev build failed with nothing to read. npx expo config --json showed expo-secure-store declared as a config plugin but never installed. Plugin resolution failed before it could print a useful error.

Dtab bar kept overlapping
▼ DIFF

The overlap kept coming back because each screen was patched on its own. Fix: audit every screen with useSafeAreaInsets() at once instead of patching one at a time.

PRIVATE REPO. Happy to walk through the code and architecture in an interview.

PROJECTHOSHCARE CLIENT (FRONTEND)
DRAWN BYBIDYA B. NANDA
STATUSACTIVE, PRE-PILOT