Skip to Content

isA Frame (EmoFrame)

AI-driven smart photo frame system with display, mobile control, and shared SDK.

Overview

EmoFrame is a family-oriented smart display system built with React Native and Expo, consisting of three coordinated applications:

AppPurposePlatform
emoframe-displaySmart photo frame UI with interactive bubblesReact Native + Expo
emoframe-mobileRemote control app for device managementReact Native + Expo
emoframe-sharedShared SDK with 12 services and communication layerTypeScript

Quick Start

# Install and build shared library npm install npm run build:shared # Run display app cd emoframe-display npm install && npm start # Run mobile app (separate terminal) cd emoframe-mobile npm install && npm start

Architecture

┌───────────────────────┐ ┌───────────────────────┐ │ emoframe-display │ │ emoframe-mobile │ │ (Smart Frame UI) │ │ (Control App) │ └───────────┬───────────┘ └───────────┬───────────┘ │ │ └──────────┬───────────────┘ ┌─────────────────────────────────────────────────┐ │ emoframe-shared SDK │ │ ┌─────────────────────────────────────────┐ │ │ │ 12 Services (Auth, Device, Chat, ...) │ │ │ ├─────────────────────────────────────────┤ │ │ │ HTTP • MQTT (real-time) • Images │ │ │ └─────────────────────────────────────────┘ │ └──────────────────────┬──────────────────────────┘ ┌─────────────────────────────────────────────────┐ │ isA Platform Gateway │ │ Agent • User • Device • Storage APIs │ └─────────────────────────────────────────────────┘

Display Features

The display app provides a 3-page swipeable interface:

ViewFeatures
MainViewTime, weather, interactive message bubbles
CalendarViewEvents and scheduling
GalleryViewFamily photo albums and memory timeline

Key components:

  • Interactive Bubbles — draggable message bubbles with physics simulation
  • Photo Gallery — family albums with full-screen viewer and metadata
  • Memory Calendar — timeline-based photo memory browsing
  • Weather Widget — glassmorphism weather display
  • Notification System — toast alerts and managers

Device Pairing

QR-code-based pairing flow:

Device generates QR → Mobile scans → Auth validates token → Device paired to family
EMOFRAME:deviceId:pairingToken

The pairing process registers the device with the auth service, links it to the user’s family organization, and stores configuration in AsyncStorage.

Shared Services

ServicePurpose
AuthServiceToken management and user authentication
DeviceServiceDevice registration, pairing, status
ChatServiceAgent chat integration
StorageServiceFile and photo asset storage
WeatherServiceWeather data and widget formatting
NotificationServiceMessage delivery
OTAServiceFirmware over-the-air updates
TelemetryServiceUsage analytics
OrganizationServiceFamily/group management
TaskServiceTask and reminder management
UserServiceUser profiles
ImageProcessingServicePhoto resizing and filtering

Communication

ProtocolUse Case
HTTPREST APIs via @isa/transport
MQTTReal-time messages and device status
Image ClientOptimized photo fetching

Tech Stack

ToolVersion
React Native0.81
Expo~54.0
TypeScript~5.9
React19.1
@isa/coreLinked (monorepo)
@isa/ui-nativeLinked (monorepo)

Build & Deploy

# Development npm start # Expo dev server npm run android # Android native npm run ios # iOS (macOS only) npm run web # Web preview # Production (EAS) npm run build:android:production npm run build:ios:production # Verify before merge npm run verify # build + typecheck + test + production check