Skip to content

Sensible-Analytics/CardScannerApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

119 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

CardSnap

CI Android Build License: MIT Kotlin Min SDK

Scan business cards instantly. Extract contacts automatically. Save to your phone in seconds.

CardSnap is a professional business card scanner built with native Kotlin and Jetpack Compose. It uses Google's ML Kit for OCR to extract contact details from business card photos, then intelligently parses and saves them to your device contacts.


πŸ“± Screenshots

Scan Screen Review Contact Contacts List Settings
Scan Screen Review Contacts Settings

✨ Features

  • πŸ“Έ Instant Scanning β€” Point your camera at any business card and capture with a single tap
  • πŸ€– Smart OCR β€” Google ML Kit Text Recognition extracts all text with high accuracy
  • 🧠 Intelligent Parsing β€” Automatically identifies names, emails, phones, companies, and websites
  • πŸ’Ύ Auto-Save β€” Optionally save contacts automatically after each scan
  • πŸ“€ Export & Share β€” Export contacts as vCard or CSV, share via any app
  • 🌐 Multi-Language OCR β€” Support for English, Chinese, German, French, Spanish, and more
  • πŸ“± Native Android β€” Built with Jetpack Compose, CameraX, and Material 3 design
  • πŸ”’ Privacy-First β€” All processing happens on-device. No data sent to servers

πŸ—οΈ Architecture

CardSnap follows the MVVM architecture with clean separation of concerns:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  UI Layer                        β”‚
β”‚  ScanScreen β†’ ContactsScreen β†’ EditContactScreen β”‚
β”‚  SettingsScreen (Jetpack Compose)                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                ViewModel Layer                   β”‚
β”‚  ScanViewModel, ContactsViewModel, etc.          β”‚
β”‚  (StateFlow + Coroutines)                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                Domain Layer                      β”‚
β”‚  ContactParser, OcrEngine, ImageCropper          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                 Data Layer                       β”‚
β”‚  Room Database ←→ ContactRepository             β”‚
β”‚  DataStore Preferences ←→ SettingsRepository     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tech Stack

Component Technology
Language Kotlin 1.9.22
UI Jetpack Compose + Material 3
Camera CameraX
OCR Google ML Kit Text Recognition
Database Room
Settings DataStore Preferences
Async Kotlin Coroutines + Flow
Image Loading Coil
Architecture MVVM + Repository Pattern

πŸ“₯ Download

Version Type Link
Latest Debug APK Debug Download from Releases
Latest Release APK Release Download from Releases

πŸš€ How It Works

1. Point & Capture

Open the app and point your camera at a business card. The card guide frame helps you align the card properly.

2. Automatic OCR

When you tap capture, the image is cropped, rotated (if needed), and processed by ML Kit's Text Recognition engine.

3. Smart Parsing

The extracted text is analyzed by our contact parser, which uses regex patterns to identify:

  • Names β€” First line without digits or @ symbols
  • Emails β€” Standard email format detection
  • Phone numbers β€” US/international format recognition
  • Companies β€” Detection of business suffixes (Inc, LLC, Corp, etc.)
  • Job titles β€” Keyword-based title identification
  • Websites β€” URL pattern detection

4. Review & Save

Review the extracted contact details, edit any fields if needed, then save to your device database or export as vCard.


🎯 Use Cases

Use Case Description
Networking Events Quickly scan dozens of business cards at conferences and meetups
Sales Teams Capture prospect contact info during field visits
Recruiters Save candidate contact details from career fairs
Real Estate Collect agent and client contact information efficiently
Personal Use Digitize your stack of physical business cards at home

πŸ› οΈ Build from Source

Prerequisites

  • Java 17 (Temurin recommended)
  • Android SDK (compileSdk 35, minSdk 26)
  • Gradle 8.8

Commands

# Clone the repository
git clone https://github.com/Sensible-Analytics/CardSnap.git
cd CardSnap

# Build debug APK
cd android
./gradlew assembleDebug

# Build release APK
./gradlew assembleRelease

# Run unit tests
./gradlew testDebugUnitTest

# Run E2E tests (requires emulator)
./gradlew connectedAndroidTest

Output

  • Debug APK: android/app/build/outputs/apk/debug/app-debug.apk
  • Release APK: android/app/build/outputs/apk/release/app-release-unsigned.apk

πŸ“‹ Requirements

Requirement Value
Minimum Android 8.0 (API 26)
Target Android 14.0 (API 34)
Compile SDK 35
Camera Required
Permissions Camera, Contacts, Internet, Vibrate

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


🀝 Contributing

We welcome contributions! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.


πŸ“ž Support


Made with ❀️ by Sensible Analytics