Skip to content

Latest commit

 

History

241 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CestApp Logo

CestApp

Receipt scanner for Spanish supermarkets that respects your privacy.

Scan receipts from Mercadona, Carrefour, Lidl, and more. Track spending. Keep your data local.

License: MIT PRs Welcome Platform: iOS | Android Expo SDK 57 React Native 0.86.2 TypeScript Privacy: 100% Local


Dashboard    Analytics    Scan Preview


Why CestApp?

  • 100% on-device: ML Kit OCR runs locally. No cloud uploads.
  • Any format: Document scanner, gallery, or PDF.
  • Smart categories: Auto-sorts items. Learns from your corrections.
  • Spanish supermarkets: Pre-trained templates for Mercadona, Carrefour, Lidl, and more.
  • Multi-language: English & Spanish UI.

Features

Capture: Document scanner (auto-crop & enhance), gallery import, PDF parsing via ML Kit OCR.

Smart Parsing: Chain-specific templates detect Mercadona, Carrefour, Lidl, Eroski, Dia, Consum, Alcampo, Aldi, HiperDino by NIF/name patterns.

Organize: 11 built-in categories, auto-categorization, user learning, store detection.

Analyze: Monthly trends, category breakdowns, store comparisons, top items.

Privacy: Offline-first, local SQLite, no tracking, no ads. Full policy: jbgsoft.com/cestapp/privacy.

Details: Dark mode, Spanish regional formats (EUR, DD/MM/YYYY, decimal comma), animations that respect Reduce Motion.

Installation

git clone https://github.com/jaimebg/CestApp.git
cd CestApp
npm install

# Dev build required (ML Kit needs native code)
npx expo run:ios     # or
npx expo run:android

Expo Go won't work. You need a development build.

Tech Stack

Category Technology
Framework React Native 0.86.2 + Expo SDK 57
Navigation Expo Router
Styling NativeWind v4
Database Drizzle ORM + expo-sqlite
State Zustand v5
OCR ML Kit (@infinitered)
PDF Custom parser + pako
i18n i18next
Animations Reanimated v4
Charts react-native-gifted-charts

Project Structure

app/           # Screens (Expo Router)
src/
  components/  # UI components
  db/          # Schema & queries
  services/    # OCR, PDF, capture, storage
  store/       # Zustand state
  i18n/        # Translations

How It Works

  1. Detect Chain: Identifies supermarket by NIF (tax ID), store name patterns, or fingerprints (brand names like "Hacendado" for Mercadona)
  2. Apply Template: Uses chain-specific parsing rules (layout, item patterns, OCR corrections)
  3. Extract: ML Kit OCR for images, custom parser for PDFs
  4. Categorize: User corrections → keyword matching → default

Learning is store-aware: same item can have different categories at different stores.

Supported Chains: Mercadona, Carrefour, Lidl, Eroski, Dia, Consum, Alcampo, Aldi, HiperDino (with IGIC tax for Canarias).

Contributing

  1. Fork → branch → commit → PR
  2. TypeScript strict mode
  3. NativeWind for styling
  4. useTranslation() for all text
  5. Test iOS + Android + dark mode

License

MIT. See LICENSE.


Made with care by JBGSoft - Jaime Barreto 🧡

About

Privacy-first receipt scanner for Spanish supermarkets: on-device ML Kit OCR, offline SQLite storage and spending analytics. React Native + Expo, iOS & Android.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages