diff --git a/README.md b/README.md index 12470c3..0d69ef8 100644 --- a/README.md +++ b/README.md @@ -1,79 +1,92 @@ -This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). +# LensApp -# Getting Started +A small React Native document scanner. Point it at a page, it crops the edges, lets you review, and saves a PDF you can share. ->**Note**: Make sure you have completed the [React Native - Environment Setup](https://reactnative.dev/docs/environment-setup) instructions till "Creating a new application" step, before proceeding. +Built on top of [`react-native-document-scanner-plugin`](https://github.com/websitebeaver/react-native-document-scanner-plugin), with `react-native-html-to-pdf` for export and `react-native-share` for sending things out. -## Step 1: Start the Metro Server +## What's in it -First, you will need to start **Metro**, the JavaScript _bundler_ that ships _with_ React Native. +- Scan multi-page documents with automatic edge detection +- Review pages before saving (reorder, retake, apply a filter) +- Persist scans locally, rename them, view them later +- Export as PDF and share -To start Metro, run the following command from the _root_ of your React Native project: +Screens live in `src/screens/` — `Home`, `Scan`, `Review`, `Viewer`. Navigation is plain state in `App.tsx`; there's no router dependency. Document storage is a simple hook (`src/hooks/useDocumentStore.ts`). -```bash -# using npm +## Requirements + +- Node 18+ +- JDK 17, Android SDK (for Android) +- Xcode + CocoaPods (for iOS) + +The usual React Native 0.73 setup. If you haven't done this before, the [RN environment guide](https://reactnative.dev/docs/environment-setup) is the canonical reference. + +## Running it + +Install: + +``` +npm install +``` + +iOS only — install pods: + +``` +cd ios && pod install && cd .. +``` + +Start Metro in one terminal: + +``` npm start - -# OR using Yarn -yarn start ``` -## Step 2: Start your Application +Then in another: -Let Metro Bundler run in its _own_ terminal. Open a _new_ terminal from the _root_ of your React Native project. Run the following command to start your _Android_ or _iOS_ app: - -### For Android - -```bash -# using npm +``` npm run android - -# OR using Yarn -yarn android -``` - -### For iOS - -```bash -# using npm +# or npm run ios - -# OR using Yarn -yarn ios ``` -If everything is set up _correctly_, you should see your new app running in your _Android Emulator_ or _iOS Simulator_ shortly provided you have set up your emulator/simulator correctly. +## Tests -This is one way to run your app — you can also run it directly from within Android Studio and Xcode respectively. +Unit tests (Jest + React Native Testing Library): -## Step 3: Modifying your App +``` +npm test +``` -Now that you have successfully run the app, let's modify it. +E2E (Detox, Android emulator): -1. Open `App.tsx` in your text editor of choice and edit some lines. -2. For **Android**: Press the R key twice or select **"Reload"** from the **Developer Menu** (Ctrl + M (on Window and Linux) or Cmd ⌘ + M (on macOS)) to see your changes! +``` +npm run test:e2e:build +npm run test:e2e +``` - For **iOS**: Hit Cmd ⌘ + R in your iOS Simulator to reload the app and see your changes! +The E2E build currently targets `android.emu.debug`. There's a launch-arg seed path (`detoxSeedDocument=1`) in `App.tsx` for preloading a fake document, but the bridge that wires it through to the native side isn't hooked up yet — so the viewer E2E is disabled for now. -## Congratulations! :tada: +## Builds -You've successfully run and modified your React Native App. :partying_face: +Android release APKs are split per-ABI (armeabi-v7a, arm64-v8a, x86_64) — see `android/app/build.gradle`. Per-arch APKs are smaller than a universal one. -### Now what? +CI builds live in `.github/workflows/`. -- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). -- If you're curious to learn more about React Native, check out the [Introduction to React Native](https://reactnative.dev/docs/getting-started). +## Project layout -# Troubleshooting +``` +App.tsx # screen switcher + top-level state +src/ + screens/ # Home, Scan, Review, Viewer + components/ # DocumentCard, EdgeOverlay, FilterPicker + hooks/ # useDocumentStore + utils/ # generatePdf, imageProcessing + types/ # shared types +e2e/ # Detox specs +patches/ # patch-package patches applied postinstall +``` -If you can't get this to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. +## Notes -# Learn More - -To learn more about React Native, take a look at the following resources: - -- [React Native Website](https://reactnative.dev) - learn more about React Native. -- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. -- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. -- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. -- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. +- `Alert.prompt` is iOS-only; the rename flow falls back to a modal on Android (see `App.tsx`). +- `postinstall` runs `patch-package` — if a patch fails to apply after a dependency bump, check `patches/`.