Zvessa docs

Device features

Zvessa draws real native screens (Expo, React Native), so blocks, kits and mini-apps can use the phone itself: icons, haptics, sensors, camera, push and more. Each feature is one shared piece used by many blocks, never wired into one screen, and each asks for permission only when first needed, in words from the blueprint. Package choices and versions: the "myaibio packages and dependencies" plan in the project.

When column: Ready is in the app today. Next is in the first install list (Expo SDK 58, npx expo install). Later is added when the block or kit that needs it starts, so the app stays small until then.

Icons #

Icons are named by meaning, never by an SF Symbol or Material name: send, delete, ai, coin, game and about 120 more in src/icons/icons.json. A blueprint stores the name as a string (an icon prop), so it works the same on every platform.

import { Icon, ICON_NAMES, isIconName, type IconName } from "src/icons";

<Icon name="send" color="accent" size={20} label="Send" />

More in docs/PERFORMANCE.md (Icons).

Look and feel #

FeatureUsed forPackageWhen
HapticsTaps, approve and undo, game feedback; follows the style's motion.hapticsexpo-hapticsNext
AnimationSmooth motion on the UI thread; follows the style's motion.speedreact-native-reanimatedNext
GesturesSwipes, drags, reorder, pinch-zoomreact-native-gesture-handlerNext
Frosted glassGlass panes, sheets and tab bars (style treatment: glass)expo-blur, expo-glass-effectNext
GradientsGradient backdrops and buttonsexpo-linear-gradient, expo-mesh-gradientNext
Native controlsReal switches, pickers, sliders, date fields, sheets@expo/ui, community pickersNext
Native tabsThe real iOS tab bar and Android's bar; scrollable top tabsexpo-router native tabsNext
Fast listsLong chats, versions, collections@shopify/flash-listNext
Fast imagesCached images with placeholdersexpo-imageNext
Animated stickersLottie celebrations and loaderslottie-react-nativeNext
Charts and shapesChart, progress and vector blocksreact-native-svgNext

Sensors #

expo-sensors (Next): accelerometer, gyroscope, device motion, magnetometer (compass), barometer and pedometer. Used for tilt and shake games, step trackers and motion effects, and passed to mini-apps through the bridge (Mini-apps).

Rules, because sensors drain the battery fastest:

Media #

FeaturePackageWhen
Pick or take photos and video (HEIC converted on the phone)expo-image-pickerReady
Resize and compress before uploadexpo-image-manipulatorNext
Background uploadexpo-file-systemNext
Native video player, picture-in-pictureexpo-videoReady
Play and record audio, voice notesexpo-audioReady
Camera and QR scanningexpo-cameraLater
Save to the photo libraryexpo-media-libraryLater

Photos and small files go to Convex file storage; video and large files to Cloudflare R2 through the Convex R2 component, so the app never holds storage keys.

Calls and live #

Ready: LiveKit (@livekit/react-native, livekit-client on the web) for voice and video calls, group rooms, stages, screen share (iPhone through a broadcast extension) and recording, self-hosted next to Convex. Needs a development build. Setup: docs/LIVE.md.

Notifications #

Ready: expo-notifications on the phone, Expo's push service from Convex (convex/push.ts). Calls ring a closed phone with Answer and Decline buttons. People are asked to allow notifications the first time they need them, not at sign-in. People choose on, digest or off per kind and per space, quiet hours and pause, and a tap opens the exact page (Notifications).

Everything else #

FeaturePackageWhen
Keep the sign-in token in the Keychain / Keystoreexpo-secure-storeReady
Sandboxed mini-appsreact-native-webviewReady
Copy and pasteexpo-clipboardNext
Language and date formatexpo-localizationNext
Random ids and hashesexpo-cryptoNext
Pick filesexpo-document-pickerReady
Share a page or exportexpo-sharingLater
In-app browser and OAuthexpo-web-browserLater
Face ID / fingerprint to unlock or approveexpo-local-authenticationLater
Maps with pinsexpo-mapsLater
Add to calendar, invite from contactsexpo-calendar, expo-contactsLater
Read aloudexpo-speechLater
Keep the screen on (games, recipes, timers)expo-keep-awakeLater
Landscape for games and videoexpo-screen-orientationLater
Print or save as PDF; a page as an imageexpo-print, react-native-view-shotLater
Home-screen widgets; Siri and Shortcutsexpo-widgets, expo-app-intentsLater
Offline pages and draftsexpo-sqliteLater

Permissions #

One hook asks for camera, microphone, photos, location, motion and push only when first needed, explains why in words from the blueprint, and handles "no" without breaking the screen. A mini-app gets a device permission only after the person allows it for that app.

Limits #

Links that open the app use zvessa:// (for example an invite link when no web address is set). Older myaibio:// links still open the app.