Nexybox
Work

Case 02 · 2024 to now

220+ commits, a release every week, on both stores

A family food inventory app: scan a label or receipt, and expiry dates, ingredients and allergens land in a shared list. On both stores since 2024, with a release most weeks.

Home screen: three expiry counters over a list of items tagged fridge or pantry, each with a D-day badge
Item detail with a red notice naming which family member reacts to an ingredient in this product
Item detail showing the parsed ingredient text, including the shared-facility line that lists shrimp and crab
Family screen listing the household members and the ingredients the household avoids
Member screen where a child's profile records a birth date and the ingredients to avoid

Results

  • 220+Commits since launch
  • 1–2Releases a week
  • 2Stores, iOS and Android
  • 2024Live since

What I did

  • React Native (Expo) app
  • Admin dashboard in React and Vite
  • Fastify API on a single VM
  • MariaDB with an offline SQLite mirror
  • CLOVA OCR and ML Kit scanning
  • Crash reporting, ads and subscriptions

Overview

Point the camera at a food label or a receipt. OCR reads it, a language model normalises the product name, category and ingredients, and the item joins the household's list with an expiry reminder. The list syncs across every family member's phone.

I built and run the whole thing alone: app, admin, server and releases. Since launch in 2024 the repository has passed 220 commits and ships to the App Store and Google Play once or twice a week.

Product and client names are withheld under NDA. The stack, the architecture and the figures shown are accurate.

Stack

  • React Native (Expo)
  • Fastify
  • MariaDB
  • SQLite
  • CLOVA OCR
  • ML Kit
  • Firebase
  • Sentry
  • AdMob
  • RevenueCat
  • Oracle Cloud

Architecture

Client
  • React Native (Expo)
  • Admin (React + Vite)
API
  • Fastify
Data
  • MariaDB
  • SQLite (offline)
Integrations
  • CLOVA OCR · ML Kit
  • Firebase · Sentry
  • AdMob · RevenueCat

Decisions that mattered

  1. 01

    OCR first, model second

    CLOVA OCR extracts the raw text; Claude only normalises names and categories. Keeping the model out of the reading step made results predictable and cheap.

  2. 02

    Ingredients read against the people eating them

    Each household member carries a list of ingredients to avoid. The scanned ingredient text is matched against it, including shared-facility lines, so the warning names the person rather than the allergen.

  3. 03

    Offline is the default

    Every write goes to SQLite on the phone first and syncs in the background, so scanning in a basement supermarket works.

  4. 04

    Ads and subscriptions in one flow

    Free households see AdMob; paid ones go through RevenueCat. Refunds and restores are handled server-side so the two never disagree.

  5. 05

    A release most weeks

    EAS builds, a generated changelog and Crashlytics on every release keep a one-person cadence sustainable.

More work

Have something to build?

Send me two paragraphs about it. I reply within 24 hours, Seoul time, with a price and a date.

Email me