CI / quality (push) Waiting to run
- Add src/core/ (config, errors, events, http, observability, storage, query) - Add src/Spreadsheet/ engine with native POI backend and Excel bridge - Add Envelope C spreadsheet flow and tender bidding envelope modules - Consolidate components into src/components/, remove legacy Component/ and Hooks/ - Add registration state/validation, auth session guard, profile edit modules - Add unit tests across axios, redux, bidding, registration, encryption, core - Add CI workflow, docs (architecture, audit, DSC API spec), keystore example - Remove tracked keystore binary; ignore scripts.zip Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
150 lines
5.3 KiB
Markdown
150 lines
5.3 KiB
Markdown
# ProcureLinc — Mobile App
|
||
|
||
ProcureLinc is a React Native mobile application for an **e-procurement platform** that lets registered contractors take part in **e-auctions** and **e-tenders** from their phone. It covers the full journey: contractor onboarding with eKYC, browsing live auctions/tenders, purchasing/EMD payments, document submission, and secure bidding.
|
||
|
||
- **Platform:** Android & iOS (React Native 0.79, React 19)
|
||
- **App ID:** `com.procure`
|
||
- **Backend:** REST + WebSocket APIs (base URL configured in [src/Services/ApiCall/ApiUrls.tsx](src/Services/ApiCall/ApiUrls.tsx))
|
||
|
||
---
|
||
|
||
## Features
|
||
|
||
- **Contractor registration** — multi-stage onboarding (Stage 1–3) including partnership details.
|
||
- **eKYC verification** — Organization PAN, Aadhaar (OTP), and GST verification flows; KYC web view.
|
||
- **Authentication & security** — login, reset password, two-factor auth, **device binding**, **DSC (Digital Signature Certificate) binding**, and request/response encryption.
|
||
- **e-Auctions** — live auction listings, forward & reverse auctions, item-wise & auction-wise EMD documents, technical document templates, purchase + transaction status.
|
||
- **e-Tenders** — live tender listings, tender details, proceed-to-bid, and **Envelope A / B / C** plus **QCBS / LCS** submission with file uploads.
|
||
- **Real-time bidding** — STOMP over SockJS WebSocket updates.
|
||
- **Dashboard & profile** — auction/tender dashboard counts, contractor profile view/edit, purchased tenders & auctions.
|
||
- **Smooth UX** — native-stack screen transitions, animated custom bottom tab bar, Lottie animations, and theming (light/dark via `useTheme`).
|
||
|
||
---
|
||
|
||
## Tech Stack
|
||
|
||
| Area | Library |
|
||
|------|---------|
|
||
| Framework | React Native 0.79, React 19 |
|
||
| Navigation | `@react-navigation/native`, `native-stack`, `bottom-tabs`, `drawer` |
|
||
| State | Redux Toolkit, `react-redux`, `redux-persist` |
|
||
| Data fetching | TanStack React Query, Axios |
|
||
| Forms & validation | Formik, Yup |
|
||
| Real-time | `@stomp/stompjs`, `sockjs-client` |
|
||
| Animation / UI | Reanimated, Gesture Handler, Lottie, Lucide icons, SVG, Linear Gradient |
|
||
| Security | `crypto-js`, `jsencrypt`, `react-native-device-info` |
|
||
| Documents | `exceljs`, `xlsx`, `react-native-blob-util`, `react-native-fs`, document picker |
|
||
| Device | Permissions, Geolocation, Haptic Feedback, WebView |
|
||
|
||
---
|
||
|
||
## Project Structure
|
||
|
||
```
|
||
src/
|
||
├── Axios/ # Axios instance & interceptors
|
||
├── Component/ # Shared components
|
||
├── components/ # App-level components (e.g. AppStatusBar)
|
||
├── Constant/ # Colors, NavigationString, static config
|
||
├── Helper/ # Helper utilities
|
||
├── Hooks/ # Custom hooks (e.g. useTheme)
|
||
├── Images/ # Image assets
|
||
├── Navigation/ # MainStack, Bottom tabs, Drawer, NavigationService
|
||
├── Permission/ # Runtime permission handling
|
||
├── Redux/ # Store, slices, persistence
|
||
├── Screens/ # Feature screens (Auction, Tender, Bidding, Login, etc.)
|
||
├── Services/ # API calls & endpoint URLs
|
||
├── Styles/ # Shared styles
|
||
├── Utils/ # Utilities (encryption, formatting, etc.)
|
||
├── api/ # API helpers
|
||
├── lottie/ # Lottie animation files
|
||
├── socket/ # WebSocket (STOMP/SockJS) setup
|
||
└── theme/ # Typography & theme tokens
|
||
```
|
||
|
||
Navigation entry points:
|
||
- [App.tsx](App.tsx) → [src/Navigation/Routes.jsx](src/Navigation/Routes.jsx) → [src/Navigation/MainStack.jsx](src/Navigation/MainStack.jsx)
|
||
- Bottom tabs (Home / Auction / Tender / Profile): [src/Navigation/Bottom.tsx](src/Navigation/Bottom.tsx)
|
||
|
||
---
|
||
|
||
## Getting Started
|
||
|
||
> **Note:** Complete the [React Native environment setup](https://reactnative.dev/docs/set-up-your-environment) first.
|
||
|
||
### Prerequisites
|
||
|
||
- Node.js **>= 18**
|
||
- JDK 17, Android SDK / Android Studio (for Android)
|
||
- Xcode + CocoaPods (for iOS, macOS only)
|
||
|
||
### 1. Install dependencies
|
||
|
||
```sh
|
||
npm install
|
||
```
|
||
|
||
### 2. Configure the backend URL
|
||
|
||
Set the active `BASE_URL` in [src/Services/ApiCall/ApiUrls.tsx](src/Services/ApiCall/ApiUrls.tsx). The default points to the demo environment:
|
||
|
||
```ts
|
||
const BASE_URL = `https://eproc.godemo.in/`;
|
||
```
|
||
|
||
### 3. Start Metro
|
||
|
||
```sh
|
||
npm start
|
||
```
|
||
|
||
### 4. Run the app
|
||
|
||
**Android**
|
||
|
||
```sh
|
||
npm run android
|
||
```
|
||
|
||
**iOS** (first run / after native dependency changes, install pods):
|
||
|
||
```sh
|
||
bundle install # first time only
|
||
bundle exec pod install
|
||
npm run ios
|
||
```
|
||
|
||
---
|
||
|
||
## Available Scripts
|
||
|
||
| Script | Description |
|
||
|--------|-------------|
|
||
| `npm start` | Start the Metro dev server |
|
||
| `npm run android` | Build & run on Android |
|
||
| `npm run ios` | Build & run on iOS |
|
||
| `npm run lint` | Run ESLint |
|
||
| `npm test` | Run Jest tests |
|
||
| `npm run create:users` | Run the user-seeding script (`scripts/create-users.js`) |
|
||
|
||
> If a transition or native change doesn't appear, restart Metro with a clean cache: `npx react-native start --reset-cache`.
|
||
|
||
---
|
||
|
||
## Repository
|
||
|
||
This project is hosted on the internal Git server:
|
||
|
||
```
|
||
http://git.lincpay/EProcurement/ProcureLinc-Mobile-App.git
|
||
```
|
||
|
||
---
|
||
|
||
## Troubleshooting
|
||
|
||
- **Metro stale cache** — `npx react-native start --reset-cache`.
|
||
- **Android build issues** — `cd android && ./gradlew clean`, then rebuild.
|
||
- **iOS pods out of date** — re-run `bundle exec pod install`.
|
||
- General help: [React Native Troubleshooting](https://reactnative.dev/docs/troubleshooting).
|