Skip to content

Repository files navigation

CardSnap Logo

CardSnap

Scan a card. Save a contact. Done.

CIAndroid BuildLicense: MITKotlinMin 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.

🌐 Try CardSnap | Download APK | Report Bug


📱 Screenshots

Scan ScreenReview ContactContacts ListSettings
Scan ScreenReviewContactsSettings

✨ 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

ComponentTechnology
LanguageKotlin 1.9.22
UIJetpack Compose + Material 3
CameraCameraX
OCRGoogle ML Kit Text Recognition
DatabaseRoom
SettingsDataStore Preferences
AsyncKotlin Coroutines + Flow
Image LoadingCoil
ArchitectureMVVM + Repository Pattern

📥 Download

VersionTypeLink
Latest Debug APKDebugDownload from Releases
Latest Release APKReleaseDownload 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 CaseDescription
Networking EventsQuickly scan dozens of business cards at conferences and meetups
Sales TeamsCapture prospect contact info during field visits
RecruitersSave candidate contact details from career fairs
Real EstateCollect agent and client contact information efficiently
Personal UseDigitize 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/crewcircle/CardScannerApp.git
cd CardScannerApp
# Build debug APKcd 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

RequirementValue
Minimum Android8.0 (API 26)
Target Android14.0 (API 34)
Compile SDK35
CameraRequired
PermissionsCamera, 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 CrewCircle

Releases

Packages

Contributors

Languages