Skip to content

Eldoraaa/Eldora-Mobile

Repository files navigation

πŸ“± Eldora-Mobile β€” ELDORA Caregiver App

Protect. Respond. Recover.

Platform Framework Language Auth License Hackathon


The caregiver-facing mobile app for the ELDORA ecosystem β€” handling multi-home management, DoraBot pairing and Wi-Fi provisioning, real-time fall and safety alerts, scene automation, voice configuration, and elder analytics.

🌐 ELDORA Ecosystem Β· πŸ€– DoraBot Β· πŸ›‘οΈ DoraShield Β· ☁️ Backend


πŸ“Œ Overview

Eldora-Mobile is the caregiver's command center in the ELDORA eldercare ecosystem. Built with Expo and React Native, it lets family members and professional caregivers monitor elderly safety in real time, onboard and configure DoraBot devices, manage multi-home environments, set up scene automations, and receive instant push notifications β€” including critical fall alerts with vibration override.

Eldora-Mobile's role in the ELDORA ecosystem: "The caregiver's window β€” always connected, always informed, always one tap away from responding."

Platform Android (primary), iOS
Framework Expo SDK 55 + React Native 0.83.4
Language TypeScript
Auth Firebase Auth β€” email/password + Google Sign-In
Push Notifications Firebase Cloud Messaging (FCM) + Expo Notifications
State Management Zustand + AsyncStorage
Data Fetching TanStack Query v5
Styling NativeWind v4 (Tailwind-style utility classes)

🌐 ELDORA Ecosystem

Eldora-Mobile is the Recover layer of ELDORA's three-phase safety framework:

ELDORA Ecosystem
β”œβ”€β”€ πŸ›‘οΈ  DoraShield     β€” Fall detection wearable (ESP32)
β”œβ”€β”€ πŸ€–  DoraBot         β€” AI voice companion (ESP32-S3)
β”œβ”€β”€ ☁️   ELDORA Backend  β€” AI processing, device orchestration, API
└── πŸ“±  Eldora-Mobile   β€” Caregiver dashboard (this repo)


✨ App Features

  • πŸ” Firebase Authentication β€” email/password login, Google Sign-In, and new account registration
  • 🏠 Multi-Home Management β€” create and switch between multiple elder homes from a unified selector
  • πŸ€– DoraBot Local Discovery & Pairing β€” scans the local Wi-Fi network to find DoraBot, pairs it to a caregiver account, and manages pairing approval requests
  • πŸ“Ά DoraBot Wi-Fi Provisioning β€” pushes home Wi-Fi credentials directly to an unpaired DoraBot over its local provisioning endpoint
  • πŸ“Š Device Dashboard β€” lists all paired ELDORA devices (DoraBot + DoraShield) with online/offline status and room-based filtering
  • πŸ”” Real-Time Alerts & Notifications β€” receives fall, home, and device alerts via FCM; supports critical alert modals with continuous vibration until dismissed
  • 🎬 Scene Automation β€” build, manage, and run tap-to-run automation scenes grouped by device and room
  • πŸ“ˆ Elder Analytics β€” time-series activity and emotion analytics with configurable periods (1 day, 7 days, 30 days, 90 days)
  • πŸŽ™οΈ DoraBot Voice Configuration β€” select TTS voice, accent, and speech rate per device; play a test audio clip before saving
  • 🏑 Home Administration β€” manage home name, location, members, and join an existing home via invite
  • πŸ”• Notification Preferences β€” per-category notification settings, with FCM token registration and automatic token refresh
  • πŸ“± Guided Onboarding β€” multi-screen onboarding flow for first-time caregiver setup

πŸ› οΈ Tech Stack

Layer Technology Purpose
Framework Expo SDK 55 + React Native 0.83.4 Cross-platform mobile app
Language TypeScript 5.9 Type-safe development throughout
Navigation Expo Router (file-based) Screen routing with protected route guards
State Management Zustand + AsyncStorage Global auth and home state with persistence
Data Fetching TanStack Query v5 Server state, caching, and background refetch
Authentication Firebase Auth + @react-native-firebase/auth Email/password and Google Sign-In
Push Notifications Firebase Cloud Messaging + Expo Notifications Real-time alerts, critical alert channels
HTTP Client Axios REST API communication with ELDORA backend
Forms & Validation React Hook Form + Zod Sign-in, sign-up, Wi-Fi config forms
Styling NativeWind v4 + Tailwind CSS Utility-class styling
Icons Lucide React Native Consistent icon set throughout the UI
Audio expo-audio TTS voice test playback in voice settings
Animations React Native Reanimated Smooth UI transitions
Networking (local) expo-network Wi-Fi state detection for DoraBot discovery

πŸ“ Project Structure

Eldora-Mobile/
β”‚
β”œβ”€β”€ πŸ“ app/                         # Expo Router screen files (file-based routing)
β”‚   β”œβ”€β”€ _layout.tsx                 # Root layout β€” auth guard, FCM setup, critical alert modal
β”‚   β”œβ”€β”€ index.tsx                   # Entry redirect (auth β†’ home or onboarding)
β”‚   β”œβ”€β”€ onboarding.tsx / welcome.tsx / signin.tsx / signup.tsx
β”‚   β”œβ”€β”€ home.tsx                    # Device dashboard β€” DoraBot status, pairing, device list
β”‚   β”œβ”€β”€ alerts.tsx / alert-detail.tsx
β”‚   β”œβ”€β”€ scene.tsx / scene-builder.tsx / create-scene.tsx / scene-detail.tsx
β”‚   β”œβ”€β”€ analytics.tsx
β”‚   β”œβ”€β”€ settings.tsx / account.tsx / personal-information.tsx / account-security.tsx
β”‚   β”œβ”€β”€ notification-settings.tsx / voice-settings.tsx
β”‚   β”œβ”€β”€ home-management.tsx / home-settings.tsx / home-member.tsx / home-location.tsx / join-home.tsx
β”‚   β”œβ”€β”€ device-management.tsx / device-detail.tsx / device-setup.tsx / add-device.tsx
β”‚   └── room-management.tsx
β”‚
β”œβ”€β”€ πŸ“ src/
β”‚   β”œβ”€β”€ πŸ“ api/                     # API query function modules (analyticsApi, devicesApi, …)
β”‚   β”œβ”€β”€ πŸ“ components/              # Reusable UI components grouped by domain
β”‚   β”‚   β”œβ”€β”€ auth/                   # AuthField
β”‚   β”‚   β”œβ”€β”€ cards/                  # AlertCard, DiscoveredHubCard
β”‚   β”‚   β”œβ”€β”€ devices/                # AddDeviceMenu, WifiConfigModal, ScanningRadar, …
β”‚   β”‚   β”œβ”€β”€ home/                   # HomeSelectorMenu, PairingRequestCard, DeviceStatusCard, …
β”‚   β”‚   β”œβ”€β”€ navigation/             # BottomNav, MainTabScreen, ScreenHeader
β”‚   β”‚   β”œβ”€β”€ scene/                  # SceneListRow, SceneFilterPill, SceneEmptyState, …
β”‚   β”‚   β”œβ”€β”€ settings/               # MeMenuRow, SettingsRow, NotificationPreferenceRow, …
β”‚   β”‚   └── ui/                     # Button, Card, Input, LoadingSpinner
β”‚   β”œβ”€β”€ πŸ“ constants/               # api.ts (endpoints), theme.ts, sceneTemplates.ts
β”‚   β”œβ”€β”€ πŸ“ hooks/                   # TanStack Query hooks per domain (useDeviceQueries, …)
β”‚   β”œβ”€β”€ πŸ“ lib/                     # queryClient.ts
β”‚   β”œβ”€β”€ πŸ“ services/                # API service layer (authService, deviceService, …)
β”‚   β”œβ”€β”€ πŸ“ stores/                  # Zustand stores (authStore, homeStore, voiceSettingsStore)
β”‚   β”œβ”€β”€ πŸ“ types/                   # TypeScript type definitions per domain
β”‚   └── πŸ“ utils/                   # Formatters, device/home/scene utility functions
β”‚
β”œβ”€β”€ πŸ“„ app.json                     # Expo app configuration (bundle IDs, permissions, plugins)
β”œβ”€β”€ πŸ“„ .env.example                 # Required environment variables
β”œβ”€β”€ πŸ“„ eas.json                     # EAS Build configuration
└── πŸ“„ .github/workflows/android-build.yml   # CI: Android APK + AAB release build
What each layer does
Layer Role
app/ Screens. Each file is a route. _layout.tsx wires up Firebase FCM, the critical alert modal, and Expo Router auth guards.
src/api/ Query functions. Raw API call functions passed to TanStack Query hooks β€” one file per domain.
src/hooks/ TanStack Query hooks. useDeviceQueries, useSceneQueries, etc. β€” each exports useXxxQuery and useXxxMutation hooks consumed by screens.
src/services/ Service layer. Thin wrappers over apiClient (Axios) that handle request/response shaping per domain. authService also drives Firebase Auth calls.
src/stores/ Global state. authStore holds the JWT token and hydration flag. homeStore tracks the selected home ID across sessions.
src/components/ UI building blocks. Organized by domain so screens stay lean.

βš™οΈ How the App Works

In plain English:

App launches β†’ checks auth token (Zustand + AsyncStorage)
    β†’ if unauthenticated: onboarding β†’ sign in β†’ Firebase + backend login
    β†’ if authenticated: home dashboard
        loads homes list from backend
        scans local network for DoraBot (LAN discovery)
        if DoraBot found β†’ pair it to the selected home
        if DoraBot needs Wi-Fi β†’ push credentials over local provisioning endpoint
    β†’ main loop:
        FCM push β†’ toast or critical alert modal (with vibration)
        pull-to-refresh β†’ reload devices, re-run LAN discovery
        navigate to Alerts β†’ full notification history
        navigate to Scenes β†’ automation management
        navigate to Settings β†’ voice config, account, home admin

βš™οΈ Configuration

Create a .env file in the project root (use .env.example as the template):

# ELDORA Backend
EXPO_PUBLIC_API_URL=https://your-backend-url.com

# Google OAuth (for Google Sign-In)
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=your-google-web-client-id
EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=your-google-android-client-id

# Firebase (Authentication + FCM)
EXPO_PUBLIC_FIREBASE_API_KEY=your-firebase-api-key
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your-firebase-project-id
EXPO_PUBLIC_FIREBASE_APP_ID=your-firebase-app-id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your-messaging-sender-id

⚠️ Never commit .env to version control. All variables prefixed EXPO_PUBLIC_ are bundled into the app binary β€” treat them accordingly.


πŸš€ Build & Run

Prerequisites

  • Node.js 20+
  • Expo CLI (npm install -g expo-cli)
  • Android Studio (for Android emulator) or a physical Android/iOS device with Expo Go

Install & Start

# 1. Clone the repository
git clone https://github.com/Eldoraaa/eldora-mobile.git
cd eldora-mobile

# 2. Install dependencies
npm install

# 3. Copy and fill in environment variables
cp .env.example .env
# Edit .env with your backend URL and Firebase/Google credentials

# 4. Start the Expo dev server
npm run start

# 5. Scan the QR code with Expo Go (Android/iOS)
#    or press 'a' to open on an Android emulator
#    or press 'i' to open on an iOS simulator

TypeScript Check

npx tsc --noEmit

Platform-Specific Runs

npm run android   # Run directly on Android emulator / connected device
npm run ios       # Run on iOS simulator (macOS only)
npm run web       # Run in browser (limited functionality)
Running on a physical Android device
  1. Enable Developer Options and USB Debugging on the device
  2. Connect via USB and confirm the ADB prompt on the device
  3. Run npm run android β€” Expo will install the dev build automatically
  4. For FCM push notifications to work, the app must be built with expo-dev-client (not plain Expo Go)

πŸ”„ CI/CD

The repository includes a GitHub Actions workflow (.github/workflows/android-build.yml) for producing signed release builds.

Step What it does
Trigger Manual (workflow_dispatch)
Environment Ubuntu latest, Node 20, Java 17
Prebuild expo prebuild --platform android generates the native Android project
Signing Decodes a base64-encoded keystore from GitHub Secrets and injects signing config into build.gradle
Build ./gradlew assembleRelease bundleRelease β€” produces both APK and AAB
Artifacts APK and AAB uploaded as GitHub Actions artifacts
Release Creates a versioned GitHub Release (v1.0.0-build.<run_number>) with both artifacts attached

Required GitHub Secrets

Secret Description
EXPO_PUBLIC_API_URL Backend API URL
EXPO_PUBLIC_GOOGLE_*_CLIENT_ID Google OAuth client IDs
EXPO_PUBLIC_FIREBASE_* Firebase configuration values
GOOGLE_SERVICES_JSON Base64-encoded google-services.json
ANDROID_KEYSTORE_BASE64 Base64-encoded release keystore
ANDROID_KEYSTORE_PASSWORD Keystore password
ANDROID_KEY_ALIAS Key alias
ANDROID_KEY_PASSWORD Key password

πŸ‘₯ Team

ELDORA β€” BINUS BM Team Passage to ASEAN Hackathon 2026

Name Role
Stanley Nathanael Wijaya Team Lead
Lutfi Alvaro Pratama IoT Engineer
Andrian Pratama Mobile Developer
Khalisa Amanda Sifa Ghaizani Backend Developer
Devon Nicholas AI Engineer

πŸ“§ Contact

Have questions, want to collaborate, or interested in ELDORA?

Channel Details
πŸ“§ Email stanley.n.wijaya7@gmail.com
✈️ Telegram @xstynwx
πŸ’¬ Discord stynw7

Hackathon BINUS


Made with 🀍 by BINUS BM Team πŸ”₯

About

Mobile Apps Eldora πŸ“±

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages