{
  "schema_version": 1,
  "generated_on": "2026-09-20",
  "note": "When the first and last trains run. Recorded per line, because the operators publish it per line and it differs by more than an hour between them. Nothing here is inferred: where an operator does not publish a figure it is null, and the app says nothing rather than guessing. The app previously carried a single network-wide claim of 05:00 to 22:00, which was wrong for LRT-2 in the direction that strands people.",
  "lines": {
    "lrt1": {
      "source_url": "https://lrmc.ph/2025/03/25/lrt-1-to-extend-operating-hours-starting-26-march-2025/",
      "source_name": "Light Rail Manila Corporation",
      "verified_on": "2026-09-20",
      "effective_from": "2025-03-26",
      "note": "LRMC publishes terminal departures only, not a per-station table, so the last train from an intermediate station is not known and is not guessed at. The weekend last trip was not stated in the release that extended weekday hours, so it is null here even though secondary sites quote 21:30 and 21:45.",
      "opens": {
        "weekday": "04:30",
        "weekend": "05:00"
      },
      "last_departures": [
        {
          "station_id": "lrt1_dr_santos",
          "toward_station_id": "lrt1_fernando_poe_jr",
          "weekday": "22:30",
          "weekend": null
        },
        {
          "station_id": "lrt1_fernando_poe_jr",
          "toward_station_id": "lrt1_dr_santos",
          "weekday": "22:45",
          "weekend": null
        }
      ]
    },
    "lrt2": {
      "source_url": "https://www.lrta.gov.ph/train-operating-schedule/",
      "source_name": "Light Rail Transit Authority",
      "verified_on": "2026-09-20",
      "effective_from": null,
      "note": "LRTA publishes a full per-station closing table for both directions, and states that it applies including weekends and holidays, so weekday and weekend are the same figure throughout. Read from the operator's posted schedule image on the page above. A terminus has no departure in the direction it faces, which is why each end carries one null.",
      "opens": {
        "weekday": "04:50",
        "weekend": "04:50"
      },
      "last_departures": [
        { "station_id": "lrt2_recto", "toward_station_id": "lrt2_antipolo", "weekday": "21:25", "weekend": "21:25" },
        { "station_id": "lrt2_legarda", "toward_station_id": "lrt2_antipolo", "weekday": "21:27", "weekend": "21:27" },
        { "station_id": "lrt2_pureza", "toward_station_id": "lrt2_antipolo", "weekday": "21:29", "weekend": "21:29" },
        { "station_id": "lrt2_v_mapa", "toward_station_id": "lrt2_antipolo", "weekday": "21:31", "weekend": "21:31" },
        { "station_id": "lrt2_j_ruiz", "toward_station_id": "lrt2_antipolo", "weekday": "21:33", "weekend": "21:33" },
        { "station_id": "lrt2_gilmore", "toward_station_id": "lrt2_antipolo", "weekday": "21:35", "weekend": "21:35" },
        { "station_id": "lrt2_betty_go_belmonte", "toward_station_id": "lrt2_antipolo", "weekday": "21:37", "weekend": "21:37" },
        { "station_id": "lrt2_araneta_center_cubao", "toward_station_id": "lrt2_antipolo", "weekday": "21:39", "weekend": "21:39" },
        { "station_id": "lrt2_anonas", "toward_station_id": "lrt2_antipolo", "weekday": "21:41", "weekend": "21:41" },
        { "station_id": "lrt2_katipunan", "toward_station_id": "lrt2_antipolo", "weekday": "21:43", "weekend": "21:43" },
        { "station_id": "lrt2_santolan", "toward_station_id": "lrt2_antipolo", "weekday": "21:45", "weekend": "21:45" },
        { "station_id": "lrt2_marikina_pasig", "toward_station_id": "lrt2_antipolo", "weekday": "21:48", "weekend": "21:48" },

        { "station_id": "lrt2_antipolo", "toward_station_id": "lrt2_recto", "weekday": "20:55", "weekend": "20:55" },
        { "station_id": "lrt2_marikina_pasig", "toward_station_id": "lrt2_recto", "weekday": "20:58", "weekend": "20:58" },
        { "station_id": "lrt2_santolan", "toward_station_id": "lrt2_recto", "weekday": "21:01", "weekend": "21:01" },
        { "station_id": "lrt2_katipunan", "toward_station_id": "lrt2_recto", "weekday": "21:03", "weekend": "21:03" },
        { "station_id": "lrt2_anonas", "toward_station_id": "lrt2_recto", "weekday": "21:05", "weekend": "21:05" },
        { "station_id": "lrt2_araneta_center_cubao", "toward_station_id": "lrt2_recto", "weekday": "21:07", "weekend": "21:07" },
        { "station_id": "lrt2_betty_go_belmonte", "toward_station_id": "lrt2_recto", "weekday": "21:09", "weekend": "21:09" },
        { "station_id": "lrt2_gilmore", "toward_station_id": "lrt2_recto", "weekday": "21:11", "weekend": "21:11" },
        { "station_id": "lrt2_j_ruiz", "toward_station_id": "lrt2_recto", "weekday": "21:13", "weekend": "21:13" },
        { "station_id": "lrt2_v_mapa", "toward_station_id": "lrt2_recto", "weekday": "21:15", "weekend": "21:15" },
        { "station_id": "lrt2_pureza", "toward_station_id": "lrt2_recto", "weekday": "21:17", "weekend": "21:17" },
        { "station_id": "lrt2_legarda", "toward_station_id": "lrt2_recto", "weekday": "21:19", "weekend": "21:19" }
      ]
    },
    "mrt3": {
      "source_url": null,
      "source_name": null,
      "verified_on": null,
      "effective_from": null,
      "note": "Not recorded. dotrmrt3.gov.ph publishes no operating hours, and lrta.gov.ph covers LRT-2 only. The figures circulating on aggregator sites disagree with each other and with DOTr-MRT3's own 2022 social post, so none of them is written down here. Until an operator figure is found, the app says nothing about MRT-3's last train rather than something plausible.",
      "opens": null,
      "last_departures": []
    }
  }
}
