VeloDev
arrow_backBack to Portfolio
Case Study

ERIS Mobile App

Easy Recipe Intelligent System

ERIS is a cross-platform mobile application that helps household members plan and manage their food inventory. It integrates meal calendar schedules, barcode grocery scans, automatic stock tracking, and ingredient-based recipes recommendation.

RoleLead Mobile Engineer
Timeline7 Months
CategoryExpo Mobile Application
Storage EngineMongoDB / Local SQLite
Technology Stack
React NativeExpo SDKRedux ToolkitMongoDBExpressSocket.ioPrismaexpo-cameranative-basei18nextPlaywright
ERIS Expo Go Native Workspace
NATIVE SCREENS
Select tabs to view app pages. Click inside mobile viewport to zoom.
Authentication Welcome
zoom_inZoom View

infoAuthentication Welcome

The authentication landing portal for ERIS supporting direct email log-in, registration, and guest mode authorization. Also features internationalization dropdown supporting 22 languages.


Engineering snapshot

Challenge, ownership, decisions, result

Challenge

A household needs one app to plan meals, track what food it actually has, and turn that into a shopping list — for both people and pets — across a group of family members editing the same data from different phones.

What I owned
  • The React Native / Expo app end-to-end, plus the Express + Prisma API it talks to.
  • The barcode-scanning inventory flow (expo-camera + local SQLite lookups) and the meal-calendar-to-shopping-list logic.
  • Real-time multi-user sync across household members via Socket.io, and the RO/EN i18next localization (22 UI languages).
Result
  • check_smallA working cross-platform app covering the full loop: plan a meal, scan groceries into inventory, get a generated shopping list, and see stock update automatically.
  • check_smallMultiple household members stay in sync on shared inventory and calendars in real time, with pets and people tracked on separate calendars.
  • check_smallThe UI ships in 22 languages from day one, on top of a bilingual RO/EN data model.
Key engineering decisions
01

Local SQLite lookup before a network round-trip

A scanned barcode resolves against a localized SQLite table on-device first, so adding an item to inventory feels instant instead of waiting on a server round-trip for every scan.

02

Socket.io for household state, not polling

Multiple household members can edit the same inventory or calendar concurrently; a WebSocket channel pushes changes to every connected member's device instead of each client polling the API on an interval.

03

Redux Persist for offline-first state

Local stores are hydrated from AsyncStorage on launch, so the calendar and inventory remain usable without a live connection and reconcile once the app is back online.

04

Denormalize bilingual names instead of a translation table

Product and recipe names store RO/EN fields directly on the document rather than joining a separate translation table, keeping the Prisma models and lookup queries simple for the size of the catalog.


System Features

ERIS integrates client-side barcode scanning, automated shopping checklists, and multi-user calendars.

barcode_scanner

Barcode Scanning

Real-time shopping scan engine using expo-camera, looking up barcodes in localized SQLite and adding items instantly into inventory models.

sync

Multi-User Sync

Shared household structures with real-time push synchronization using Socket.io, allowing multiple family members to edit inventories concurrently.

notifications

Meal Notifications

Background scheduling notifications matching preparation times, reminding users to start cooking at selected hours.

translate

i18n Translation

Bilingual database models supporting RO/EN name structures, alongside client i18next localizations covering 22 UI languages.

System Architecture Diagram

Hybrid Native App Architecture

The application is built on top of Expo SDK, coordinating Redux local stores with background synchronization workers, linked to MongoDB database layers.

phone_androidFrontend Framework

  • Expo & React Native: Dev client builds supporting native modules on iOS and Android.
  • Redux Toolkit & Persist: Hydrated AsyncStorage memory layers maintaining local offline caching.
  • native-base components: Consistent layout styling sheets with custom compatibility shims.

dnsAPI & Real-time Services

  • Express & Prisma: Structured server REST routes running Prisma ORM data bindings.
  • Socket.io Streams: WebSockets channels enabling instant household sync on grocery actions.
  • VAPID Push Alerts: Scheduled background service workers triggering push notifications.

databaseDatabase Models

  • Prisma Schema: Models indexing users, tokens, households, products, recipes, and lookup keys.
  • Denormalized JSON: Storing nested objects as documents to manage RO/EN name structures.
  • Prisma sqlite integration: Local server integrations supporting mock sqlite seeding.