Hello

Bonjour

स्वागत हे

Ciao

Olá

おい

Hallå

Guten tag

Hallo

MCI Telemetry

Menu

MCI Telemetry

Research data platform

2026
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.

Runs list grouping the five phases of each participant
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.

Trajectory and position heatmap of a session
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.

Timeline of phases, grabs and errors
A session can move from the game to durable storage and into a researcher's review workflow.