AI training data collection platform. Contributors earn money by capturing dashcam video, home environment images, and voice recordings that feed into autonomous vehicle, robotics, and voice AI training pipelines.
| Workspace | Path | Stack | Port |
|---|---|---|---|
| Backend API | apps/api |
Next.js 15 + React 19 | 3000 |
| Admin Workbench | apps/admin |
Next.js 15 + React 19 | 3001 |
| Contributor App | apps/mobile |
Expo 55 + RN 0.83 | Metro |
| BullMQ Worker | apps/worker |
Node.js + BullMQ | — |
| Annotation Service | apps/annotation |
FastAPI + Python | 8000 |
| Marketing | apps/web |
Static HTML | 4173 |
| Static Pages | apps/landing |
Static HTML | — |
| Database | packages/db |
Prisma 6 + PostgreSQL | — |
| Queue Contracts | packages/queue |
BullMQ type defs | — |
| Shared Types | packages/types |
TypeScript | — |
| Shared Utils | packages/utils |
TypeScript | — |
| Shared Config | packages/config |
tsconfig + tailwind | — |
- Node.js ≥ 20 (
node -v) - pnpm ≥ 9 (
npm i -g pnpm) - Docker Desktop (PostgreSQL + Redis + MinIO)
- Expo CLI (
npm i -g @expo/cli) - EAS CLI (
npm i -g eas-cli)
git clone https://github.com/loxerxxxx/AV && cd AV
pnpm install
npx prisma generate --schema=prisma/schema.prisma # Required after install — see Prisma note below
cp .env.example .env.local
# Fill: DATABASE_URL, REDIS_URL, SUPABASE_*, S3/MINIO_*, CLERK_*, RAZORPAY_*
docker-compose up -d # Start Postgres + Redis + MinIO
npx prisma migrate deploy --schema=prisma/schema.prisma
npx prisma db seed --schema=prisma/schema.prisma # Seed 15 tasks
pnpm dev # Start all apps in parallel| Command | Description |
|---|---|
pnpm dev |
Start all apps in parallel via Turborepo |
pnpm build |
Build all apps (respects dep order) |
pnpm turbo typecheck |
tsc --noEmit across all 11 workspaces |
pnpm db:generate |
Regenerate Prisma client after schema changes |
pnpm db:seed |
Re-seed 15 task definitions |
pnpm --filter @birha/api dev |
Start only Next.js API (port 3000) |
pnpm --filter @birha/admin dev |
Start only Admin Workbench (port 3001) |
pnpm --filter @birha/worker dev |
Start only BullMQ worker |
pnpm --filter @birha/mobile dev |
Start only Expo Metro |
pnpm --filter @birha/annotation dev |
Start only FastAPI (port 8000) |
apps/api → enqueue job → Redis → apps/worker → process
Queue names (from packages/queue/src/index.ts):
| Queue | Purpose |
|---|---|
birha-process-upload |
Post-upload pipeline (validation, S3, metadata) |
birha-run-qc |
Automated quality control (pHash, GPS, frame analysis) |
birha-auto-label |
Send batches to FastAPI / Label Studio |
fraud-signals |
pHash dedup, velocity spike, GPS anomaly checks |
payout-processor |
Trigger Razorpay payouts |
birha-send-notification |
Push notifications to contributors |
The root .npmrc sets shamefully-hoist=true. The root prisma/schema.prisma has an explicit
output = "../node_modules/@prisma/client/.prisma/client" so TypeScript resolves
Prisma generated types correctly.
Required after every pnpm install:
npx prisma generate --schema=prisma/schema.prismaGET /api/health— platform health (DB, Redis, queues, auth env, S3, Label Studio)bash scripts/smoke-test-e2e.ts— E2E smoke tests- See
docs/AUTH_RUNBOOK.mdfor auth setup
-
EXPO_PUBLIC_API_URL→ production Vercel URL inapps/mobile/eas.json -
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_live_*in all EAS production profiles -
prisma migrate deployagainst production DB -
prisma db seedagainst production DB - Enroll 12 closed testers for Play Store 14-day review period
-
GET /api/healthreturns 200 on production with all checks green - Google Play service account key at
apps/mobile/google-play-service-account.json
| Code | Domain | Media Type | Typical Task |
|---|---|---|---|
| AV | Autonomous Vehicles | video/mp4, video/quicktime | 10-min dashcam loop |
| ROBOTICS | Home Robotics | image/jpeg, image/png | Object images |
| VOICE | Voice AI | audio/wav, audio/m4a | Hindi phrase recordings |