Tradz Card Scanner — Expo 55 Full Stack
Domain target: https://tradz.nationnine.com
Security: do not put Tradz vendor API key inside React Native, npm package, GitHub, or public files. Keep it only in backend
.env.1. Upload to Dewaweb subdomain root
Upload all files from UPLOAD_TO_TRADZ_SUBDOMAIN_ROOT/ directly into the document root of tradz.nationnine.com.
tradz.nationnine.com/ ├─ index.html ├─ app/ ├─ npm/ ├─ api/ ├─ docs/ ├─ private_tradz/ ├─ scanner-package/ └─ backend-fastapi/
2. Test website
https://tradz.nationnine.com/ https://tradz.nationnine.com/api/health https://tradz.nationnine.com/npm/
3. Configure npm install in Tradz Mobile
Inside your Expo app folder, create .npmrc:
@tradz:registry=https://tradz.nationnine.com/npm/
//tradz.nationnine.com/npm/:_authToken=${TRADZ_NPM_TOKEN}
always-auth=trueSet token from private_tradz/npm/INSTALL_TOKEN.txt:
export TRADZ_NPM_TOKEN="PASTE_TOKEN_HERE" npm install @tradz/card-scanner@^1.2.2
4. React Native usage
import { TradzCardScannerView } from '@tradz/card-scanner';
export default function ScanScreen() {
return (
<TradzCardScannerView
apiBaseUrl="https://tradz.nationnine.com/api"
authTokenProvider={async () => 'USER_BACKEND_TOKEN'}
onResult={(result) => console.log(result)}
/>
);
}5. Expo Router patch
Copy the example from:
scanner-package/examples/expo-router/app/(tabs)/scan.tsx
to your app:
app/(tabs)/scan.tsx
6. Backend AI mode
Shared hosting cannot run long-lived Python AI workers reliably. The included PHP /api gateway returns demo scan data by default. For production:
1. Deploy backend-fastapi/ to VPS / Railway / Render / Cloud Run 2. Set TRADZ_API_KEY in backend .env 3. Sync and build index 4. Edit private_tradz/api/config.php: 'upstream_url' => 'https://your-fastapi-backend.com', 'demo_mode' => false,
7. Troubleshooting
npm 404 registry.npmjs.org: your .npmrc is missing or not read.
401/403: TRADZ_NPM_TOKEN is missing/wrong.
API demo only: configure private_tradz/api/config.php upstream.
Camera permission denied: user blocked camera permission on device.