← Back to Projects

MIT CAVE Lab “Visited Places” App

Extension of CAVE Lab Framework for Session-Based Data

Visited Places app interface

A cross-platform mobile app built on MIT’s CAVE Lab framework that lets users mark states and countries as “Visited” or “Lived In,” then instantly see aggregate scores and a live leaderboard.

Key Features

  • Session-scoped data sharing across multiple users
  • Interactive GeoJSON maps of U.S. states & world countries
  • Real-time score calculation & global leaderboard
  • Offline-first design with WebSocket sync
  • Intuitive modal for name entry & score submission

Technologies Used

React Native TypeScript Firebase CAVE_app (Python 3.9) WebSocket

Project Overview

MIT’s CAVE Lab framework provides modular building blocks for immersive data visualization. The “Visited Places” app extends this by introducing session-focused data management so that visitors can record and share geospatial “Visited”/“Lived In” statuses in real time. :contentReference

Objective

Demonstrate how the CAVE Lab’s core framework can be modularly extended to support user-driven, session-aware data interactions that have real-world applicability (e.g., disaster response tracking). :contentReference

Methodology

  • Environment: Python 3.9 backend using MIT CAVE_app framework; React Native frontend; local WebSocket server for sync. :contentReference[oaicite:3]{index=3}
  • Session Data Model: Central function execute_command(session_data, socket, command="init") builds nested JSON dict with sections for settings, appBar, maps, mapFeatures, globalOutputs, groupedOutputs. :contentReference
  • Map Sources: GeoJSON for U.S. states (https://geojsons.mitcave.com/world/world-states-provinces-md.json) and world countries (https://geojsons.mitcave.com/world/countries-sm.json). :contentReference
  • Score Calculation:
    1. Count “Visited”/“Lived In” states via vstepperItemState.
    2. Map country codes to statuses (excluding USA) and count similarly.
    3. Compute weighted sum: visited-states × state-visit-weight + … + lived-countries × country-lived-weight.
    4. Return raw counts + total score for real-time display.
    :contentReference[oaicite:6]{index=6}
  • Leaderboard Flow: User clicks region → backend recalculates score → “Submit Score” opens modal for name → “Save to leaderboard” appends to JSON file → groupedOutputs renders sorted table. :contentReference

Results & Impact

The app successfully engages users in hands-on geospatial exploration, validates the CAVE Lab’s extension capabilities, and delivers immediate feedback through dynamic scoring and a global leaderboard—transforming static maps into collaborative datasets. :contentReference

Future Work

  • Scale to support thousands of concurrent sessions with cloud storage.
  • Implement cross-session global state for persistent leaderboards.
  • Add user authentication to tie scores to real profiles.
  • Conduct structured user studies for UI/UX and accessibility improvements.