AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Real, isolated Android Emulator instances streamed to your browser.
Translation pending
Developer toolsTypeScript · DockerfileGitHub @annirdev-devOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Self-hosted SaaS platform for testing Android apps on real, isolated Android Emulator instances streamed to the browser.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A self-hosted SaaS platform for testing Android applications on real,
fully isolated Android Emulator instances, streamed to the browser. Think
BrowserStack / AWS Device Farm, but running emulators you control.
Every session gets its own emulator process, its own AVD (own userdata,
sdcard, settings), and its own console/adb port pair - two users on the same
device profile never share state. See docs/ARCHITECTURE.md
for the full design.Read the full README ↗A self-hosted SaaS platform for testing Android applications on real, fully isolated Android Emulator instances, streamed to the browser. Think BrowserStack / AWS Device Farm, but running emulators you control.
Every session gets its own emulator process, its own AVD (own userdata, sdcard, settings), and its own console/adb port pair - two users on the same device profile never share state. See docs/ARCHITECTURE.md for the full design.
Both, on purpose. EMULATOR_PROVIDER=mock (the default everywhere except a
provisioned Linux+KVM host) runs MockEmulatorProvider, a dependency-free
stand-in that renders a synthetic device frame and simulates boot/install/
input, so the entire product - upload, device lab, scheduling, sessions,
streaming, logs, billing, admin - works end-to-end on a laptop with no
Android SDK installed. EMULATOR_PROVIDER=real runs RealAndroidEmulatorProvider,
which spawns the actual emulator/adb/avdmanager binaries from the
Android SDK. The worker refuses to boot with EMULATOR_PROVIDER=mock in
NODE_ENV=production - see services/emulator-worker/src/providers/index.ts.
apps/
web/ Next.js frontend (dashboard, device lab, sessions, admin)
api/ REST API - auth, orgs/projects/apps, sessions, billing, admin
services/
device-orchestrator/ Runs the 12-step "Start Device" workflow as BullMQ jobs
scheduler/ Pure host-selection logic, called in-process by the orchestrator
emulator-worker/ Drives real/mock Android Emulator instances on a compute host
streaming-gateway/ Proxies the browser <-> worker video/control WebSocket
packages/
database/ Prisma schema + client (single source of truth for the DB)
shared/ Cross-service types, zod schemas, queue names, plan definitions
device-types/ Provider-agnostic types (DeviceProfileSpec, EmulatorLaunchSpec, ...)
storage/ S3-compatible object storage client (MinIO locally)
config/ Typed env loader shared by every backend service
infrastructure/
docker/ Per-service Dockerfiles
kubernetes/ Reference manifests (not wired into a real cluster yet)
monitoring/ Prometheus + Grafana provisioning
docs/
ARCHITECTURE.md, SETUP.md, EMULATOR_HOST_SETUP.md, ROADMAP.md
corepack enable
cp .env.example .env # fill in JWT_SECRET at minimum
cp apps/web/.env.example apps/web/.env.local
docker compose up -d postgres redis object-storage
pnpm install
pnpm db:generate
pnpm db:migrate
pnpm db:seed # demo org + user ([email protected] / password123) + device profiles
pnpm dev # runs every app/service in parallel via turbo
Then open http://localhost:3000, sign in with the seeded demo account, upload
an APK, and click Start Device. With EMULATOR_PROVIDER=mock you'll see a
synthetic device frame reacting to taps/swipes/typed text in real time - the
full orchestration pipeline (scheduler, DB state machine, progress events,
streaming socket) is real; only the "device" itself is simulated.
See docs/EMULATOR_HOST_SETUP.md. Short version:
install the Android SDK cmdline-tools + emulator + platform-tools +
system images, confirm /dev/kvm is accessible, set EMULATOR_PROVIDER=real,
and register the host from the Admin Dashboard (or POST /api/admin/compute-hosts).
docker compose updocker-compose.yml builds and runs every service, plus Prometheus+Grafana.
The bundled emulator-worker image still runs in mock mode by default - swap
EMULATOR_PROVIDER: real and add devices: ["/dev/kvm:/dev/kvm"] +
privileged: true only once you're building that image on an actual
Linux+KVM machine.
This is a working MVP foundation, not a finished commercial product. What's real: the full request path from "Start Device" to a running (mock or real) emulator, tenant-isolated multi-org auth, APK upload + metadata extraction, device scheduling, live streaming + input, logs, screenshots, recordings, usage tracking, and an admin dashboard. What's intentionally stubbed with a clear TODO rather than faked: Kubernetes/Cloud compute providers, Stripe billing, email delivery, and WebRTC (the stream transport today is a WebSocket frame-polling channel - see docs/ROADMAP.md).