Rydvue is an India-focused in-cab advertising platform. It manages Android signage devices installed behind vehicle front seats, advertising campaigns, fleet operations, driver support, and proof-of-play reporting.
| Surface | URL |
|---|---|
| Control panel (ops dashboard) | https://nexora-ops-production.up.railway.app |
| Player preview (web stand-in for the Android kiosk) | https://nexora-player-production.up.railway.app |
| Driver / fleet support | https://nexora-driver-production.up.railway.app |
| Backend (Convex, dev deployment) | dapper-dodo-699 — https://dashboard.convex.dev/d/dapper-dodo-699 |
The root site combines every working surface in one navigation shell: Admin dashboard, Driver dashboard, Advertiser dashboard, and Player preview. Serve the repository root and open /:
npx serve . -l 4173Then visit http://localhost:4173. The four role views remain available as embedded routes below apps/.
To demo video end to end: open the control panel, use the Quick test box (video file only, no scheduling) or the full Schedule campaign form to upload a video, then open the player preview — it's subscribed to the same demo device and starts looping the new creative within moments. The real Android player (apps/player-android) does the same thing over HTTP, polling every 60s.
convex: backend — database, queries/mutations, HTTP actions for device enroll/heartbeat/playlist, campaigns, incidents, and file storage for uploaded creatives. Replaces the earlier in-memory Fastify API.apps/ops: operations control panel. Static HTML/JS using the Convex browser client for real-time device/campaign/incident data (no polling) and direct video upload to Convex file storage.apps/player-web: browser stand-in for the Android kiosk screen — subscribes to a device's live playlist and plays/loops the active creative full-screen. Useful for demoing without an Android device.apps/driver: mobile-friendly driver and fleet issue-reporting web app, also on the Convex browser client.apps/player-android: native Android kiosk player for rear-seat displays. Calls the Convex deployment's HTTP actions directly and plays the resolved creative URL in a loopingVideoView.packages/contracts: shared TypeScript types documenting the data model.docs: architecture and delivery plan.
All three web apps are deployed on Railway as static services (Node + serve), and the backend runs on Convex (hosted database + functions with built-in real-time subscriptions, plus file storage for uploaded video creatives — no S3/CDN needed for the demo).
npm install
npx convex devnpx convex dev pushes convex/ functions to your dev deployment and watches for changes. Then open apps/ops/index.html or apps/driver/index.html directly in a browser — both default to the deployed demo Convex URL, or point them at your own deployment by running, in the browser console:
localStorage.setItem('nexora-convex-url', 'https://<your-deployment>.convex.cloud');Backend (Convex):
npx convex deployFrontends (Railway), from the repo root — each app is deployed with its own directory as the build root:
railway up apps/ops --path-as-root -s nexora-ops
railway up apps/player-web --path-as-root -s nexora-player
railway up apps/driver --path-as-root -s nexora-driverThe API currently has no authentication beyond a per-device token, and Convex's dev deployment is used for the demo. Production auth, a promoted Convex prod deployment, object storage, billing, and a production MDM workflow are planned next and documented in docs/.