Skip to the content
PCBKitNew board
2 layers110 × 60 mmTTC Map, the printed circuit board in 3D

A Toronto rail explorer and ESP32 LED display built around one transit-state API. The web map shows Lines 1, 2, 4, 5 and 6 over OpenStreetMap, with route search, station details, directional markers and a schematic view.

Size
110 × 60 mm
Copper layers
2
Thickness
1.6 mm
Parts
35
Nets
63
Pads
158
Tracks, vias
363, 29
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
23 Jan 2026
Updated
27 Sep 2026

Overview

TTC Map is an open-source printed circuit board by JackoChan2005, from the JackoChan2005/TTC-Map repository on GitHub. It is a 2-layer board of 110 × 60 mm with 35 parts on 63 nets, routed with 363 tracks and 29 vias.

It is built around the 74HC595 and JMK105BJ105KV-F. Its parts include 12 resistors, 8 diodes, 6 transistors, 4 capacitors and 4 ICs. It belongs with the ESP32 boards of this library.

Main components

2

README

README.md

TTC Map

A Toronto rail explorer and ESP32 LED display built around one transit-state API. The web map shows Lines 1, 2, 4, 5 and 6 over OpenStreetMap, with route search, station details, directional markers and a schematic view.

The project implements GTFS import and validation, bounded NTAS polling, estimated train positions, a shared web/LED state model, the browser interface and firmware for an eight-LED board revision. Contributor history is available in Git; individual ownership and asset permissions are documented in docs/ASSETS.md.

TTC Map geographic explorer

The image records a real-data session on September 12, 2026; it is not a live feed.

text
Toronto Open Data GTFS -> validated SQLite schedules/topology --+
TTC NTAS countdowns -> per-line snapshots and interpolation ----+-> map state
                                                               |-> web explorer
                                                               +-> ESP32 LED frame

Python/FastAPI serves the vanilla JavaScript/SVG frontend. SQLite, pandas and HTTPX handle data; ESP-IDF/PlatformIO builds the firmware. There is no frontend build step and no Node server.

What the map means

  • Filled arrows are NTAS-backed estimates; outlined arrows are scheduled estimates. Neither is GPS. Routes connect station coordinates approximately, not surveyed tracks.
  • Lines 1/2/4 use NTAS when healthy. Line 5 is scheduled unless explicitly enabled after coverage validation; Line 6 is schedule-only.
  • Direction follows API travel order. Unknown direction uses a neutral marker.
  • Departures are scheduled, within a two-minute line-wide window capped at 200 rows. Service alerts, live station arrival boards and journey planning are unavailable.
  • Data health does not imply normal TTC operations. Failed state requests clear train markers; a missing street background leaves the transit overlay usable.

Run on Windows

Install uv, clone this repository, then double-click start.bat or run it from PowerShell:

powershell
.\start.bat

The launcher installs the locked dependencies and starts the server. It keeps Python packages in %LOCALAPPDATA%\TTC-Map\venv, outside OneDrive. Python 3.13 is selected by .python-version; uv can download it if needed. Do not repair or reuse an old OneDrive-managed .venv to run this launcher.

Open http://localhost:8000 for the map, /search/ for timetable search, and /docs or /redoc for the local interactive API reference. Stop with Ctrl+C. For another port: .\start.bat serve --port 8001.

Windows setup and clean-checkout verification includes manual commands, separate-checkout environments and offline rehearsal.

macOS / Linux

Install uv, then open a terminal in this repository and run:

sh
./start.command

On macOS you can also double-click start.command. The launcher installs the locked dependencies into .venv and starts the server. Open http://localhost:8000 and stop with Ctrl+C. Use ./start.command serve --port 8001 for another port or ./start.command refresh for a feed check. If an extracted archive loses executable permissions, run bash start.command.

Equivalent manual commands:

sh
uv sync --locked
uv run --no-sync ttcmap serve

Python 3.12+ is supported by the package; the repository pins 3.13 for development. Use one worker and a local SQLite database. Linux startup has been checked under Ubuntu 24.04 (WSL2); macOS runtime and physical hardware validation remain separate checks. See setup verification.

Commands

Run these after the platform-specific setup. On Windows, set $env:UV_PROJECT_ENVIRONMENT = "$env:LOCALAPPDATA\TTC-Map\venv" first, or use .\start.bat refresh for a feed check.

CommandPurpose
uv run --no-sync ttcmap refreshCheck/rebuild the feed; add --force for a forced rebuild
uv run --no-sync ttcmap build-networkRegenerate exports from the verified cache
uv run --no-sync pytestBackend tests
uv run --no-sync ruff check src testsPython lint
node --test tests/web/*.test.mjsFrontend unit tests, optional Node.js
node scripts/build-schematic.mjsRegenerate schematic after network export

Browser tests use a pinned optional Playwright install; see SETUP.md. There is no separate JavaScript build, type-checker or linter configured.

API and structure

The local API reference reads /openapi.json and can send GET requests without external scripts. All transit routes are below /api/v1:

GET endpointData
/health, /gtfs/statusDataset and per-line source diagnostics
/map-configMatching generation, network and schematic
/network, /layout/{name}Topology or an individual layout
/map-stateEstimated positions; source and optional time selection
/departures?route=1Scheduled departure window
/led-state, /led-state.binBoard frame as JSON or packed bits

Refresh is CLI-only. The former POST /api/v1/gtfs/refresh is removed so a viewer cannot trigger an expensive rebuild. The web refresh button reloads read endpoints.

DirectoryPurpose
src/ttcmap/API, GTFS pipeline, source selection and LED renderer
web/Explorer, timetable and local API reference
shared/Reviewed station identities and generated network/layout exports
firmware/ESP-IDF firmware; local Wi-Fi settings are gitignored
hardware/Integrated KiCad design and eight-LED board map
tests/, scripts/Validation and schematic generation
data/Ignored feeds, database, local validation and private asset archive

Run from an editable repository checkout. A standalone wheel does not include the web/shared/hardware resources and is not a supported deployment package.

Configuration and troubleshooting

Copy .env.example to .env for optional overrides; all fields are in src/ttcmap/config.py. Local paths resolve against the checkout. For OneDrive installations that also need database isolation, configure DATA_DIR and DB_PATH to local storage. Cloud synchronization is not multi-host database coordination.

  • Port occupied: use another port with the launcher/CLI.
  • Transit data unavailable: check /api/v1/health and refresh logs. First import, expired schedules or a failed upgrade can cause 503 responses.
  • Scheduled labels: live observations may be unavailable or disabled for that line.
  • Street map unavailable: use the schematic; OSM tiles are an external service.
  • Firmware connection: follow ESP32_SMOKE_TEST.md. The eight-LED revision does not represent a fully wired station network.

See ARCHITECTURE.md, UI_API_AUDIT.md, validation results and asset/publication status.

Parts

35
QtyValueFootprintReferences
8LEDLED_THT:LED_D3.0mmD1, D2, D3, D4, D5, D6, D7, D8
610kResistor_SMD:R_0805_2012MetricR1, R3, R5, R7, R9, R13
6PMOSMy-Custom-Footprints:SOT95P240X120-3NQ1, Q2, Q3, Q4, Q5, Q7
41.818Resistor_SMD:R_0805_2012MetricR2, R4, R6, R8
25.1kResistor_SMD:R_0805_2012MetricR11, R12
274HC595My-Custom-Footprints:SOIC127P600X175-16NU2, U3
2CL05A104KA5NNNCMy-Custom-Footprints:CAPC1005X55NC3, C4
2JMK105BJ105KV-FMy-Custom-Footprints:CAPC1005X55NC1, C2
1ESP32-DEVKIT-V1My-Custom-Footprints:MODULE_ESP32_DEVKIT_V1U1
1MCP1703Ax-330xxDBPackage_TO_SOT_SMD:SOT-223-3_TabPin2U4
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ1

Questions

How big is the TTC Map PCB?

It measures 110 × 60 mm and has 2 copper layers, 1.6 mm thick.

What parts does the TTC Map use?

35 parts, built around the 74HC595 and JMK105BJ105KV-F. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the TTC Map KiCad files?

From the JackoChan2005/TTC-Map repository on GitHub, at the commit this page was made from: the board is hardware/TTC-map.kicad_pcb and its schematic hardware/TTC-map.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the TTC Map design in my own project?

Its repository states no licence, so its author keeps all rights: ask JackoChan2005 before reusing the design.

Similar boards

  • 4 layers89 × 61 mmBlocky breakout pcb, the printed circuit board in 3D

    Blocky breakout pcb

    o7-machinehum/RTShield

    Breakout board for a RPi.

    95 parts13
  • 2 layers45.7 × 31.8 mmLEDx16 board, the printed circuit board in 3D

    LEDx16 board

    tardate/LittleArduinoProjects

    a collection of "Little Electronic & Arduino Projects", most involving electronics or an Arduino in one way or another!

    36 parts803MIT
  • 2 layers228.6 × 100 mmMongus48, the printed circuit board in 3D

    Mongus48

    ChrisChrisLoLo/beyblock20

    The magnetic, modular, 20-key macropad that can join together to form an ortholinear board

    124 parts335GPL-3.0
  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers100 × 95.1 mmProtoboard-6x4-breakout, the printed circuit board in 3D

    Protoboard-6x4-breakout

    electroniceel/protoboard

    Advanced protoboard layout with 1.27mm pitch for smd parts

    4,745 parts311CC-BY-4.0
  • 4 layers140 × 100 mmDc usv, the printed circuit board in 3D

    Dc usv

    TobleMiner/DC-UPS

    A small DC UPS, designed to keep small appliances like consumer network equipment running during power outages

    351 parts223CERN-OHL-P-2.0
  • 2 layers100.5 × 218.3 mmTraktorino, the printed circuit board in 3D

    Traktorino

    silveirago/traktorino

    The open-source DIY MIDI Controller for DJs.

    96 parts220
  • 2 layers287.8 × 126.7 mmNoName, the printed circuit board in 3D

    NoName

    AlaaSaadAbdo/battoota

    Keyboards

    267 parts188