Repository navigation
Releases
v2.3.0 - Phase 2 cutover
Phase 2 temporary schedules take effect today, October 11, 2026. This release brings Reroute NJ's line guide, comparison tool, maps, cards, and embeds up to date for the second Portal North Bridge track connection.
Use the tools: reroutenj.org
Phase 2 rider guidance
- Temporary schedules begin Sunday, October 11. Weekday Midtown Direct diversions to Hoboken begin Monday, October 12. Weekend trains still serve Penn Station New York with adjusted timetables.
- Ticket guidance distinguishes Hoboken monthly and weekly passes and FLEXPASS from one-way and round-trip tickets. PATH and ferry cross-honoring is limited to the specified routes.
- Brielle Bridge replacement-bus notices cover October 11–25, including accessible connections at Point Pleasant Beach and Asbury Park. Comparison rankings for affected stations are paused because supported bus-inclusive travel times are unavailable.
- November 15 remains the expected return to regular schedules, subject to safety testing. The site does not automatically declare the cutover complete on that date.
Check NJ Transit's official cutover page for schedules, tickets, and operating updates.
Site changes since v2.2.1
- Added the current service notice across all 11 languages. It opens expanded, supports keyboard-controlled collapse, and keeps the headline and official link visible. The circular Phase 2 marker and rings pulse twice, then settle. Reduced-motion and simplified views disable the animation.
- Updated train counts, weekend service, PATH fares and frequency, ferry links, and route advice. Removed unsupported comparison stations and route recommendations.
- Added GTFS-based rail geometry and map PNG/PDF downloads, revised the site design, and updated newsroom sharing instructions.
- Updated information cards, downloads, and embedded widgets with localized service notices and ticket caveats.
- Expanded the coverage feed to 311 articles. Coverage publication now rejects invalid data before committing or pushing it. Custom card accent values are validated.
Verification and limits
Released from 261520a, including the cutover-day review and fixes in #48.
- Tests passed: 25 Node suites, data validation with zero errors, and six coverage-relevance tests.
- GitHub Pages deployment passed for the same commit. Stale cached static files were purged, and the live scripts and stylesheet were checked against that commit.
- Live browser checks confirmed the notice, circle marker, rings, collapse control, and responsive layout.
Travel times remain planning estimates. Data validation retains warnings for estimate claims and older source checks. Some existing route-result text remains English on translated pages. Reroute NJ is an independent community tool; verify individual departures and live conditions with the operators.
Full changelog: v2.2.1...v2.3.0
v2.2.1
What changed
Fixed: Widget embed showing raw translation keys
NJ101.5 Traffic embedded RerouteNJ's line guide widget and English users saw raw i18n keys (js.schedule_changes, js.before_normal, js.what_you_need_to_know) instead of text. The root cause: widget.html set window._T = {} for English, which is truthy — so when i18n.js checked if (!window._T), it skipped loading the built-in EN fallback object.
- Removed premature
window._T = {}assignments from the English path, catch blocks, and error handlers inwidget.html i18n.jsnow correctly falls through to theENobject for all English embed scenarios
New: i18n sync test suite
Added tests/test-i18n-sync.js with 37 tests validating three layers of translation sync:
- EN object parsing and section coverage
- Runtime
t()call key resolution against en.json widget.htmlEnglish path and error fallback behavior- Script load order and dependency chain validation
This was the third i18n bug in three days (Feb 14-16). The test suite catches all three bug patterns.
Day-one blog post
New article: "The cutover starts today" covering the Feb 15 Portal North Bridge cutover launch. Translated across all 10 languages. Support strip footer added to all pages.
Coverage expansion
86 new articles added to the coverage feed by the automated scraper (111 → 197 total).
Stats
| Metric | v2.2.0 | v2.2.1 |
|---|---|---|
| Test suites | 14 | 15 |
| Test checks | 948+ | 995+ |
| Coverage articles | 111 | 197 |
Full changelog: v2.2.0...v2.2.1
v2.2.0
What's new
Translated JSON-LD structured data
All 90 translated pages now have language-consistent JSON-LD structured data. Previously, translated pages had English-only schemas (WebSite, FAQPage, BreadcrumbList, CollectionPage, Article), creating a semantic mismatch that likely contributed to Google not indexing translated pages. Now each language gets native-language structured data with correct localized URLs.
- 32 new
schema.*translation keys across all 11 language files translate_jsonld()function ingenerate-pages.pyhandles 5 schema types- 548 total translation keys per language (up from ~457)
News coverage feed expansion
- 111 curated articles (up from 18) covering the Portal Bridge cutover
- Pagination with page size controls
- Relevance sorting algorithm
- Mobile-optimized layout improvements
Support buttons
- Multi-option support strip (Venmo, PayPal, GitHub Sponsors) in the footer
- Replaces single sponsor iframe with accessible button design
Accessibility improvements
- Heading hierarchy corrected:
h4→h3in before/after panels, key changes, timeline, transfer headers, and source items - Color contrast improvements: darkened
accent-dark,text-muted, link colors, and Venmo button for WCAG AA compliance - Alert banner text now uses
primary-darkfor better readability - Footer text opacity increased for legibility
Documentation refresh
- README, CLAUDE.md, and AGENTS.md updated with current stats (948+ test checks, 548 keys, 111 articles, updated line counts)
- JSON-LD translation system documented in all project docs
Stats
| Metric | v2.1.2 | v2.2.0 |
|---|---|---|
| Translation keys | ~457 | ~548 |
| Test checks | 698+ | 948+ |
| Coverage articles | 18 | 111 |
| CSS lines | 3,295 | 3,449 |
| Generator lines | 1,556 | 1,788 |
Full changelog: v2.1.2...v2.2.0
v2.1.2
What changed
Coverage scraper redesign
Replaced Firecrawl search with Google News RSS for article discovery. Firecrawl search was hallucinating URLs — generating plausible-looking article links that pointed to nonexistent pages. 9 of the original 27 coverage articles (33%) were either fabricated or irrelevant.
New discovery pipeline:
- Google News RSS as primary article discovery (real, verified URLs)
- Existing RSS feeds for NJ Transit, NJ.com, Gothamist (unchanged)
- Firecrawl for content scraping only (excerpts, metadata)
New validation gates:
- HTTP HEAD request — every candidate URL must return 200
- Content relevance check — scraped text must mention Portal Bridge
- Link health checker (
--check-links) — audits all existing article URLs
About page
Added methodology page (about.html) explaining data sourcing, verification process, and testing approach. Translated into all 10 languages.
Article cleanup
Removed 9 broken/irrelevant articles:
- 3 TAPinto articles with fabricated URL paths
- 4 NYTimes articles returning 404
- 2 NJ Transit pages unrelated to Portal Bridge (parking rates, Presidents' Day schedule)
Coverage feed: 27 → 18 verified articles.
Full changelog: v2.1.1...v2.1.2
v2.1.0
What's new
Test suite and validation
- 14 test files with 698+ checks covering line data structure, transit facts, JS integrity, HTML structure, CSS accessibility, translations, SEO/sitemap, coverage JSON, cross-references, and linguistic accuracy for 5 languages
- Research validation pipeline —
tools/validate-data.pyandtools/validate-research-pipeline.pyfor automated data integrity checking - Citation database —
data/sources.jsonwith 28 verified claims linked to official sources, plusdata/source-registry.jsonwith freshness tracking
Source attribution
- Source links on every impact card in the line guide (
makeSourceFooter()inapp.js) - Source links on commute comparison results (
makeCompareSourceFooter()incompare.js) - Each line in
LINE_DATAnow has asourcesobject linking claims to official NJ Transit URLs
Bug fixes
- Coverage article date corrected from Feb 14 to Feb 13 (UTC timezone error in automated pipeline)
- Replaced broken link to NJ Transit service advisory (404) with permanent travel alerts page
- Replaced broken link to Gateway Program portal-north-bridge page (302 to 404) with working root URL
- Twitter/X naming standardized to just "Twitter" across the codebase
- Card renderer and embed system internationalized for all 11 languages
- Embed preview 404s on translated pages
- Case-sensitive string replacement for embed post title
- Language selector dropping blog/ subdirectory on nested pages
- Blog card title capitalization
- iframe sandbox: added allow-downloads for PNG export
Documentation
- CHANGELOG, AGENTS.md, CONTRIBUTING.md, README, and CLAUDE.md updated with current architecture, test suite docs, and file counts
Full changelog: v2.0.0...v2.1.0
v2.0.0 — Embed system, info cards, and blog
Embed system v2
The embed page has been completely redesigned with a visual configurator and four output formats:
- Iframe — Standard embed that loads the full tool in any web page
- Script tag — Standalone `widget.js` library that creates the embed with a single `<script>` tag
- PNG image — Canvas-rendered info cards (line, station, or summary) exportable as PNG
- HTML download — Self-contained HTML file with all styles and data baked in, works offline
The configurator shows a live preview and generates copy-paste code for each format.
Info cards
Three card types for sharing transit information:
- Line card — Single line impact summary
- Station card — Station-specific route changes
- Summary card — All five affected lines at a glance
All cards render on HTML Canvas for pixel-perfect PNG export at 2x resolution.
Blog
Restructured from a single page to a proper blog architecture:
- Blog index at `blog.html` with post cards
- Individual posts at `blog/{slug}.html`
- Blog added as sixth navigation item across all pages
Two posts:
- "Why we built Reroute NJ" (Feb 12)
- "New: embed Reroute NJ on your website" (Feb 13)
Translations
All new content translated to 10 languages (300+ keys per language). Sitemap expanded to 90 URLs with full hreflang cross-references. Total generated pages: 80 (8 pages × 10 languages).
Architecture changes
- Extracted `js/line-data.js` from `js/app.js` — shared transit data now loaded by cards, widgets, and the main app
- New `js/cards.js` — Card rendering and Canvas PNG export
- New `js/widget.js` — Standalone embed library
- New `js/embed.js` — Expanded embed configurator logic
- `tools/generate-pages.py` — Added PAGE_KEY_MAP for decoupling filenames from translation keys, depth-aware asset path resolution
Full diff: v1.1.0...v2.0.0
v1.1.0 — Complete translations for all pages and languages
What's new
All 5 pages (line guide, commute comparison, news coverage, map, embed & share) are now fully translated into all 10 supported languages: Spanish, Chinese, Tagalog, Korean, Portuguese, Gujarati, Hindi, Italian, Arabic, and Polish.
Translation coverage
- ~175 new translation keys covering content that was previously English-only: Hoboken Terminal wayfinding map, transfer direction cards (PATH, ferry, Bus 126), Secaucus Junction guidance, timeline events, official resources, coverage page filters, map bridge info cards, and the entire embed/share page
- All 10 language files updated with translated values (303 keys each)
- 50 translated HTML pages regenerated with complete content
Bug fixes
- Language persistence: Navigating between pages now stays in the selected language instead of reverting to English
- Active nav link: Regex now correctly translates nav links with
aria-current="page"attribute - Hamburger menu label: Mobile menu label now shows translated text matching the active page
- Compare step 2: Step label replacement now handles both
<div>and<label>wrapper elements - Search placeholder: Entity mismatch fixed (
…vs…) so coverage search placeholder translates correctly - Screen reader label: Direction of travel sr-only span now translates alongside the visible label
- Duplicate skip links: Removed duplicate accessibility skip links from embed and map source HTML
- Duplicate hreflang tags: Generator now skips adding hreflang tags when they already exist in source HTML
Files changed
tools/generate-pages.py— 7 bug fixes + 10 new replacement functionstranslations/*.json— 11 files updated (en + 10 languages){lang}/*.html— 50 regenerated translated pagesembed.html,map.html— Source HTML duplicate skip link cleanup
v1.0.2 — Interactive map with accurate rail line routing
What's new
Map overhaul
The interactive map now shows accurate rail line routing with colored polylines connecting all stations and terminals.
Routing fixes:
- Montclair-Boonton and Morris & Essex lines connect through Newark Broad Street to Hoboken Terminal (their cutover terminal)
- Northeast Corridor and North Jersey Coast lines connect through Secaucus to Penn Station New York
- North Jersey Coast Line properly joins NEC shared track at Rahway
- Raritan Valley Line connects to Newark Penn Station (its cutover terminal)
- Morris & Essex Gladstone Branch renders as a separate fork converging at Summit
Visual improvements:
- Switched from default OpenStreetMap tiles to CartoDB Positron — a muted gray basemap that lets the transit lines pop
- Added colored polylines connecting stations along each rail route
- 10 new station markers for better coverage
Navigation
- Added Map link to the nav bar on all pages (was previously unreachable)
Technical
Route polylines are now defined separately from station markers, allowing accurate rendering of branching lines (M&E Gladstone) and shared track (NJCL/NEC from Rahway north). Still zero-build, zero-dependency (except Leaflet.js CDN for the map page).
Full changelog: v1.0.1...v1.0.2
v1.0.1 — News coverage, interactive map, embed tools, and project restructure
What's new
New tools
- News coverage feed — Filterable feed of 31 curated articles from 14+ sources covering the Portal Bridge cutover. Filter by source, category, or affected line.
- Interactive map — Leaflet.js map showing all affected lines, key stations, and infrastructure like Portal Bridge and Hoboken Terminal.
- Embed tools — Widget generator for newsrooms and publishers to embed reroute tools directly on their sites with customizable options.
- Blog — "Why we built this" post explaining the project's origin, goals, and how riders can contribute.
New features
- Bidirectional travel — The line guide now supports NYC-to-NJ commutes in addition to NJ-to-NYC. Riders heading to New Jersey get the same station-specific guidance.
- Shared utility module — Extracted common functions (
esc()XSS protection, countdown timer, date constants) intojs/shared.jsfor consistency across all pages. - News data feed —
data/coverage.jsonwith structured metadata for each article: source, date, category, affected lines, and travel direction.
Project improvements
- Folder reorganization — Restructured from flat files into
js/,css/,img/,data/directories for better maintainability. - Issue templates — Four templates for bug reports, data corrections, feature requests, and content suggestions.
- Pull request template — Standardized PR checklist for contributors.
- Updated documentation — Refreshed AGENTS.md, CONTRIBUTING.md, and README with new conventions.
Technical
Still a zero-build static site — no npm, no webpack, no framework. The only external dependency is Leaflet.js (CDN) for the map page.
Full changelog: v1.0.0...v1.0.1
v1.0.0 — Initial release
Reroute NJ v1.0.0
Free tools for NJ Transit riders navigating the Portal North Bridge cutover (Feb 15 – Mar 15, 2026).
What's included
- Line guide — Select your NJ Transit line and station to see how the cutover affects your commute, get route alternatives, and figure out what ticket to buy
- Commute comparison — Pick your station and Manhattan destination, see every route option side by side with visual time breakdowns
Lines covered
- Montclair-Boonton (diverted to Hoboken)
- Morris & Essex / Gladstone (diverted to Hoboken)
- Northeast Corridor (reduced service)
- North Jersey Coast (reduced service)
- Raritan Valley (Newark termination)
Features
- Station-specific impact cards with before/after route diagrams
- Route planner with PATH, ferry, and bus options
- Ticket guide with scenario-based recommendations
- Hoboken Terminal navigation guide
- Interactive countdown timer and project timeline
- Fare savings calculator
- Share/copy commute summary
- Responsive design for mobile, tablet, and desktop
Technical
Zero-build static site — no npm, no webpack, no framework. Open index.html in a browser and it works.