Inspiration

What it does## About the project

Tindai started from a simple observation: many sari-sari store owners still track inventory in notebooks or memory, while their real work happens fast, in spoken Tagalog/Taglish, often with unstable internet. We wanted to build a tool that matches that reality instead of forcing spreadsheet-style workflows.

### What inspired us

We were inspired by the day-to-day rhythm of neighborhood stores: quick transactions, frequent small restocks, and constant context switching. The goal became clear: let a store owner say or type what happened, update inventory immediately even offline, and sync safely when connectivity returns.

### How we built it

We designed Tindai around a local-first architecture:

  • React Native mobile client (Android-first) for voice/ typed inputs.
  • Offline command parsing and local SQLite updates for reliability.
  • A pending sync queue that sends verified mutations to the backend.
  • Node.js + TypeScript API for authentication, validation, and sync orchestration.
  • Supabase for Auth, Postgres, row-level security, and ledger-style records.
  • AI (Gemini) for online verification and read-only business Q&A, not core mutation logic.

To keep balances trustworthy, we modeled inventory and utang as ledger-driven updates. Conceptually, balance is always derived, not manually overwritten:

[ \text{Current Balance} = \sum \text{Credits} - \sum \text{Debits} ]

### Challenges we faced

  • Building robust offline-first behavior without sacrificing data integrity.
  • Handling natural mixed-language commands (Tagalog, Taglish, shorthand) consistently.
  • Preventing duplicate writes during retries and flaky connectivity.
  • Keeping cloud writes store-scoped and secure with strict RLS boundaries.
  • Preserving raw user input while still producing structured, auditable records.
  • Making assistant responses useful while keeping / assistant/query read-only.

### What we learned

  • Reliability beats feature count in real-world MVPs.
  • Local-first UX dramatically improves trust for frontline users.
  • Ledger-based design simplifies reconciliation and debugging under sync conflicts.
  • Clear security boundaries (client vs. server responsibilities) are non-negotiable.
  • The best voice UX is less about “AI magic” and more about predictable behavior under poor network conditions.

How we built it

We built Tindai as an offline-first mobile app using Expo React Native and a local SQLite database, with an Express and Supabase backend for authentication, sync, and AI verification. We combined voice and typed Taglish command parsing, inventory updates, utang tracking, and simple analytics into one practical workflow for sari-sari stores.

Challenges we ran into

One of the biggest challenges was receipt and product scanning. Converting camera input into accurate item detection and structured inventory data was difficult because receipt formats, image quality, and product names were inconsistent, so the scanner was not reliable enough yet for the MVP.

Accomplishments that we're proud of

We built the core Tindai loop end to end: store owners can log sales or restocks through voice or text, update inventory instantly even while offline, and sync transactions later when internet becomes available. We also added low-stock alerts, basic analytics, and utang support to reflect real sari-sari store operations.

What we learned

We learned that reliability matters more than feature count for our users. Building local-first workflows first, then layering cloud sync and AI verification on top, gave us a more practical and demo-ready product.

What's next for Tindai

Next, we want to improve receipt scanning, expand Taglish and product recognition, add a clearer utang ledger and richer analytics, and keep refining sync so Tindai is ready for real store pilots.

Share this project:

Updates