Roosevelt Island: Actor Network

Developed by Anna Cao. Dataset built and populated by Anna Cao, Victoria Li, and Audrey Lau.

ARCH 5115 / Designing the Urban Commons / Garine Boghossian and Kobi Ruthenberg

Cornell University, Fall 2026

Roosevelt Networks is an interactive model of the actors that shape Roosevelt Island (agencies, organizations, institutions, buildings and people) and the relationships between them. This documentation explains how to use the app, how the model is constructed, and how to load your own dataset.

Open the app →

1. Overview

Roosevelt Networks reads its data from a Google Spreadsheet published to the web, so any network with the same structure can be loaded. The app's source code is on GitHub.

The process takes three steps: prepare a spreadsheet in the expected format, publish it, and point a copy of the app at it. See Methodology for a detailed description of how each column is read.

Your network doesn't need to be about Roosevelt Island. The Relationships and Timeline modes work for any network. Map mode is optional: you can turn it off, or supply your own site (see Map data).

2. Prepare the spreadsheet

Make a copy of the project dataset and replace its contents with your own, keeping the column headers. Two tabs are required:

Actors (actor_working), one row per actor:

ColumnContents
actorFull name. Must be unique, and must match the names used in the adjacency tab.
abbrevShort name (optional), also searchable.
topicCategory or categories, comma-separated.
typeSector.
scaleScale, for example 0 - MICRO, 1 - MESO, 2 - MACRO.
year_start, year_endActive years (optional).
public sentimentSentiment rating (optional, kept for reference). The Public sentiment colour mode and the Public interest halo read public/data/actor database - actor_working - with news hits.csv instead, with columns actor, hits (0–100) and sentiment (−1 to +1). Both are optional: actors without values are drawn grey and with the smallest halo. To generate them for your own actors, follow the news headline method in the methodology, changing the search context from “Roosevelt Island” to your site.

Relationships (adjacency), one row per connection:

ColumnContents
source-target relationshipOne of the relationship types, for example COLLABORATION or OWNER-TENANT.
source, targetActor names, exactly as written in the actors tab.
parameter 0–parameter 2 Optional details: parcel area in sq ft (Owner–Tenant, parameter 0); one-time and a whole-number closeness (Collaboration, parameters 0 and 1); upfront investment and yearly funds in dollars (Financial, parameters 0 and 1); elected, succession or appointment (Position–Incumbent, parameter 0).

Blank cells are fine. Rows whose actors can't be found are skipped and reported in the browser console.

3. Publish it

In Google Sheets, choose File → Share → Publish to web and publish the entire document. Note the published URL and the gid of each tab (the number after gid= in the tab's address).

4. Point the app at it

  1. Fork or download the repository.
  2. In src/config.js, replace publishedUrl, actorGid and adjacencyGid with your own values.
  3. Run npm install, then npm run dev, and click Relink data to load your sheet.
  4. Optionally, save CSV snapshots of your tabs over public/data/actors.csv and public/data/edges/adjacency.csv so the app opens with your data before relinking.
  5. Decide how to handle Map mode (next section). If your network isn't on Roosevelt Island, set mapEnabled: false or replace the map data.
  6. The page title ("Roosevelt Island: Actor Network") is set in index.html. Edit it to match your project.

5. Map data (optional)

Map mode places actors over a site plan: actors linked to buildings sit on those buildings' footprints, and actors with a specific location are pinned to a point. You can use the app in one of three ways.

OptionWhat you getWhat you need
No mapRelationships and Timeline modes; the Map tab is hidden.Set mapEnabled: false in src/config.js.
Your own siteAll three modes, with actors placed on your geography.A boundary, building footprints, a buildings tab, and optionally point SVGs (below).
Roosevelt IslandAll three modes, using the included island data.Nothing; this is the default.

Without spatial data

In src/config.js, set mapEnabled: false. The Map tab is removed and everything else works as normal. Centrality, filtering, selection, pinning and exporting don't depend on geography. If you leave Map mode on but the map files are missing or can't be read, the app disables the Map tab ("Map data unavailable for this dataset") instead of failing.

With your own geography

  1. Boundary. Save your site outline as a GeoJSON file in WGS84 longitude/latitude (EPSG:4326) in public/data/buildings/. Only the first feature is used. To convert from a shapefile, DXF or another CRS, use QGIS (Export → Save Features As → GeoJSON, CRS EPSG:4326) or ogr2ogr -f GeoJSON -t_srs EPSG:4326 boundary.geojson input.shp.
  2. Building footprints. Save each footprint as public/data/buildings/bin-<id>.geojson, also in WGS84. The id can be any unique value: a NYC BIN, a parcel number, or a number you assign.
  3. Buildings tab. Add a tab to your spreadsheet with the columns BIN (the footprint id), Name and Actor (the actor's name, matching the actors tab), with one row per building–actor link. Publish it as CSV (Publish to web → select the tab → Comma-separated values).
  4. Points (optional). For actors that need an exact location rather than a building, add a row with BIN left blank, Name set to point - "<name>" and the actor in Actor. Then save public/data/buildings/point-<name>.svg. Each SVG must contain your boundary drawn as a path inside <g id="boundary"> and exactly one circle or ellipse outside it. The circle is placed by its relative position within the boundary's extents. In Rhino, draw the circle over the boundary curve and select both. Then use Export Selected → SVG, and make sure the boundary ends up in a group with id="boundary".
  5. Build the overlay. Run npm run sync:buildings -- --sheet=<buildings CSV URL> --boundary=<boundary file name>. This downloads the buildings tab and writes public/data/buildings/map-overlay.svg and map-points.json. Rows without a matching footprint file are skipped with a warning.
  6. Label. Set mapLabel in src/config.js to your site's name, which is shown in the corner of Map mode.

Footprints don't have to be buildings. Any polygon, such as a park, block or district, can be used. See Methodology for how positions are projected and combined.

6. Extending the model

New relationship types

To add a new relationship type, add its label to public/data/edges/manifest.json and map the spreadsheet's name for it in SHEET_ADJACENCY_TYPES in src/config.js.