MCI Telemetry
Research data platform
Scroll down
Overview
The cloud ingestion API and dashboard behind Project MCI. It stores game sessions and lets researchers browse telemetry and linked questionnaire data.
Role & Stack
Full-stack developer
Next.js, PostgreSQL, Cloudflare R2, Jest, Vercel
The data platform
MCI Telemetry is the 2026 cloud ingestion API and web dashboard paired with the Project MCI virtual reality study. It receives behavioral session logs from the game, stores them and gives researchers a controlled interface for reviewing sessions and questionnaire data.
I built the platform as a full-stack system with Next.js, PostgreSQL on Neon, private object storage in Cloudflare R2 and deployment on Vercel. The application is still a work in progress and its workflow is designed around the pilot research process.

Ingestion and access
I implemented API-key-authenticated ingestion separately from browser authentication, so a game client can upload a session without receiving dashboard privileges. Session retries reuse a canonical session identifier and stable object key, then reconcile the PostgreSQL metadata with the stored NDJSON on the next successful upsert.
A storage abstraction writes local files in development and private Cloudflare R2 objects in production. Filtered CSV and JSON exports stream sessions in deterministic order instead of loading the full dataset into memory, and production migrations use a separate non-pooled Neon connection with bounded retries.
The dashboard has a bootstrap administrator plus database-backed uploader accounts. Administrators can browse, filter and export sessions or manage users, while uploaders are restricted to the questionnaire upload workflow; password resets and account disabling invalidate active sessions through credential versioning.

Questionnaire linking
The upload service accepts two REDCap CSV layouts, detects them from their headers and removes names and phone numbers before saving records. It derives a time window from pre-game and post-game activity, or from the record timestamp when only a data export is available, then links exactly one eligible game session automatically.
No match remains unlinked and multiple matches are stored as an ambiguity for an administrator to resolve. Manual links survive later uploads and automatic relinking, while the session view combines raw answers, dictionary labels and calculated SBSOD, SUS, VRSQ, VIMSSQ-short, EVA and IPQ scores.

A session can move from the game to durable storage and into a researcher's review workflow.
Drag to explore









