Skip to content
Isaac Nemzer edited this page Oct 13, 2023 · 18 revisions

The "3.0" release of MetroDreamin' will be the most significant update to the site so far. The objectives of the release touch all aspects of the site and can be grouped into the following categories which are outlined below: Social, Stack, System, and GTFS. The code for this release is in the 3.0/* branches.

Social

3.0 is the "social" update for MetroDreamin', building on the Explore Page and starring functionality of the 2.0 release last year. This time, we go much further!

Features

  • new design! ✅
    • take inspiration from YouTube ✅
    • view page will look more like the video player page ✅
    • add drawer on left hand side ✅
    • home page will have a banner featured map and other sections of features ✅
    • home page will have expanding list of recently updated maps ✅
    • feature maps near user's IP geolocation ✅
  • branch a map ✅
    • duplicate another user's map as the basis for a new map ✅
    • display a lineage for map, not unlike TikTok, to also give credit to earlier creators ✅
  • commenting on maps ✅
    • support deleting comments ✅
    • make embedded links clickable ✅
    • replace map urls with map title
    • associate comment with geolocation/station?
  • user profiles ✅
    • display maps made by user ✅
    • show banner map of most popular map ✅
    • show maps starred by user ✅
  • smarter search and feature behavior ✅
  • implement a map counter ✅
    • display total maps created on Explore page ✅
    • probably will use a firebase function triggered when a System document is created ✅

Stack

These full stack improvements will facilitate new features not currently possible with a create-react-app front end and will keep the project modern and robust.

Improvements

  • server side rendering ✅
    • use Next.js ✅
    • allows maps to be crawlable by search engines ✅
    • set meta information for different pages ✅
    • backend firebase auth?
      • doesn't make sense as per Fireship
  • Firestore restructuring ✅
    • maps are getting too large for firestore to store in one document ✅
    • switch to storing all stations and lines as individual documents within collections under system document ✅
  • generate image on map save ✅
    • use as meta image for system ✅
    • use instead of ResultMap for large performance improvements when displaying non-featured maps ✅
    • probably use a geojson to image package ✅
    • store publicly in firebase filestore ✅
    • can be thought of like a thumbnail for a video ✅
  • start incorporating typescript?
  • migrate firebase integration to version 9 ✅
    • this includes migrating all database queries and updates site wide ✅
  • resolve firestore query complexity limitations ✔️
    • may need to migrate the views to a relational database?
    • another option is to use complex string/array queries for different use cases
    • use geohashes to query for related maps ✅

Performance

  • improve history/undo behavior ✅
    • limit history length to finite number of changes (easy) ✅
    • only store delta, not full system state (hard)
  • look into if JSON.parse(JSON.stringify(system)) is causing a bottleneck for large maps ✅
    • it is! ✅
    • rebuild entire system editing components to improve performance dramatically ✅
    • switch to a functional react component that listens for changes to the system ✅
  • use firestore onSnapshot as the source of truth for the system instead of a large object
    • would work well alongside autosave
    • this will probably be a later release

System

These features are to add additional functionality to the map editing/viewing process. Many have been suggested by users!

Features

  • drag to reorder stations in line view
  • delete a map ✅
  • more colors ✅
  • hybrid station/waypoints - not all lines stop ✅
    • add waypointOverrides to station data ✅
    • add waypoint indicator on station view line buttons ✅
  • interchanges - separate stations connected together ✅
    • visually connect separate stations where an in-system transfer is possible but the coordinates are distinct ✅
    • render all interchange transfers on station view and in line view ✅
    • add a subview to Station focus to facilitate finding stations to link into an interchange ✅
    • render dashed line connecting the stations on top of the interlineSegments layer ✅
  • implement autosave
    • every minute if there are unsaved changes
    • prompt to turn on autosave
    • add saved indicator ✅

GTFS Integration (stretch goal, ended up not being included)

Use GTFS data to vastly expand the default map options.

Requirements

  • query Transitland apis
    • transform the data into an MD-friendly format
    • handle the different timetables and variations of lines
  • update new map ui