Mobile app for uploading files to a self-hosted Chibisafe instance via share sheet integration.
- Expo SDK 54 with Expo Router (file-based routing)
- TypeScript — strict mode
- Bun — package manager
- react-native-mmkv — fast local persistence (albums cache, upload history)
- expo-secure-store — API key storage
- expo-share-intent — share sheet integration (Android intents + iOS share extension)
- expo-file-system — file uploads
- expo-notifications — upload progress notifications
- expo-image — efficient image rendering
app/ Expo Router screens
(tabs)/ Bottom tab navigation
index.tsx Upload history (home)
gallery.tsx Albums & files browser
settings.tsx Server configuration
upload.tsx Upload modal (share intent target)
_layout.tsx Root layout with share intent listener
src/
api/client.ts Chibisafe API client
components/ Reusable UI components
services/upload.ts Background upload + notifications
store/storage.ts MMKV + SecureStore persistence
theme/index.ts Brand colors, spacing, typography
types/index.ts Shared TypeScript interfaces
bun install # Install dependencies
bun run start # Start Expo dev server
bun run android # Launch on Android
bun run ios # Launch on iOS
bunx expo prebuild # Generate native projects
bunx expo run:android # Build & run Android- Auth:
x-api-keyheader - Upload:
POST /api/upload(multipart, optionalalbumuuidheader) - Albums:
GET /api/albums - Settings:
GET /api/settings - Album files:
GET /api/album/:uuid
Dark-first design matching Chibisafe's aesthetic. Colors defined in src/theme/index.ts.