About TTT
I'm Josh McDannel. I've been a software engineer for about 25 years — principal frontend engineer, design systems, the kind of software that has to work every time. I built DEJA.js for my own railroad because the existing options felt stuck in another decade, and I wire my layout the way I'd want any system built: everything on DIN rail, labeled, documented, tested.
Track & Trestle is me offering that to other modelers: the software, the electronics, and the code, done as one system — using inexpensive, off-the-shelf components instead of proprietary hardware that costs ten times as much and locks you in. Any size layout, one yard or a basement empire.

Tamarack Junction
My own railroad — and the proving ground for everything I build.



Tamarack Junction runs on one DCC-EX command station (EX-CommandStation 5.6 on an Arduino Mega) and seven devices: three Arduinos on USB, two ESP32 boards and a Pico W on WiFi, and a WLED light strip. One DEJA Server ties them together over USB serial, MQTT, WebSocket, and HTTP. This is its architecture, drawn from the layout's real configuration.
Turnoutsservo10
- TN NX
- TN N-1
- TN N-2
- TN N-3
- TN N4
- TN N-5
- TN N-6
- TN ENG1
- TN ENG2
- TN TEST
Effects8
- Frog N1frog
- Frog N2frog
- Frog NX1frog
- Frog NX2frog
- TSN Relay Arelay
- TSN Relay Brelay
- TSN Relay Crelay
- TSN Relay Drelay
Turnouts15
- TS SXservo
- TS S-1servo
- TS S-2servo
- TS S-3servo
- TS S-4servo
- TS S-5servo
- TS S-6servo
- TS S-7servo
- TS S-8servo
- TS S-9servo
- PY C1kato
- PY C2kato
- PYDN4kato
- PYIND1kato
- PYS3kato
Effects4
- TSS Relay Arelay
- TSS Relay Brelay
- TSS Relay Crelay
- Tamarack Station North Lightslight
Signals3
- TS Sig 1
- TS Sig 2
- TS Sig 3
SensorsIR10
- PYN S0
- PYN S1
- PYN S2
- PYN S3
- PYN MAIN 1
- PYN SIDING
- PYN S6
- PYN S7
- PYN S8
- PYN S9
Turnoutskato18
- PSX1
- PSX2
- PSX3
- PRET
- PYDS
- PYDS1
- PYDS2
- PY S-4
- PY AD
- PYDN
- PYDN1
- PYDN2
- PY N-3
- PS STR-1
- PS STR-2
- PS STR-3
- PS SID-N
- PS SID-S
SensorsIR4
- PYS S1
- PYS S2
- PYS S3
- PYS S4
Turnoutskato16
- RB SUM-INT
- RB TUNNEL
- RB P-ENT
- RB P-EXIT
- RY RET
- RY ENT
- RY 01
- RY 02
- RY 03
- RY 04
- RY 05
- RB YD08
- RI ENT
- RI LEAD
- RI STR-1
- RI STR-2
Effectspower1
- AC MAIN
Turnoutsservo5
- EN SV-INT
- DM SV-INT
- EN HELIX
- EN PASS
- DM PASS
Effectspin4
- EN16
- EN17
- EN18
- EN19
Turnoutsservo14
- MSY0
- MSY1
- MSY2
- MSY3
- MSY4
- MSY5
- MSY6
- MSY7
- MSY8
- MSY9
- MSY10
- MSY11
- MSY12
- MSY13
Signals1
- MSY Sig 3
Turnoutskato2
- Helix Loop Int
- HX-PY Exchange
Effectsstreetlight8
- Arling Tower
- Jug Mountain Labs
- Thunder City Casino
- High Valley Condos
- Snowbank Tech
- Thunder City 11
- ICBC Bldg
- Streets
- 50-LED strip
- Throttle ↔ Server
- WiThrottle
- DCC-EX
- USB
- WiFi
- DCC track power
- Peripherals
- turnouts — 39 servo, 41 Kato
- 80
- routes
- 51
- locomotives
- 31
- effects and lights
- 25
- IR train sensors
- 14
- automations
- 8
- signals
- 4
- track diagrams
- 9
Counted from Tamarack Junction's DEJA configuration, October 2026.
Under the hood
DEJA.js is built the way I build software for a living: typed end to end, tested on every change, and released on a schedule. It's one TypeScript monorepo — the Throttle app, the DEJA Server, the command-line tools, the device firmware, and the shared packages behind them.
The stack
- Throttle app
- Vue 3, TypeScript, Vite, Pinia, and Tailwind. An installable web app that runs on any phone, tablet, or computer.
- DEJA Server
- Node.js and TypeScript on your layout: USB serial to DCC-EX and Arduino, a built-in MQTT broker for WiFi devices, WebSockets to the app, Bonjour discovery, and the WiThrottle protocol for apps like Engine Driver.
- Devices
- Firmware for Arduino, ESP32, and Pico W, plus WLED lighting — turnouts, signals, sensors, and effects.
- Accounts & data
- Firebase sign-in and real-time databases keep your roster and layout in sync across every device.
- Quality
- Vitest unit and integration tests, Playwright end-to-end tests, a Storybook catalog of every UI component, Sentry error monitoring, and Changesets-managed releases.
Connects to what you already have
The DEJA Server speaks the protocols model railroad gear already uses, so your devices and apps plug in instead of being replaced.
- DCC-EX
- Drives your command station over USB — trains, turnouts, accessories, and CV programming.
- WebSocket
- A live, two-way link between the Throttle app and your layout. A change on one device shows up on every device.
- MQTT
- A built-in broker for WiFi devices: ESP32 and Pico W boards report sensors and take commands with no extra setup.
- WiThrottle
- Run trains from apps you may already use, like Engine Driver. They find the server on your network automatically.
- USB serial
- Arduino boards and DCC-EX connect straight to the server over USB.
- DCC accessory decoders
- Third-party decoders and DEJA's own decoder firmware for turnouts on the track bus.
- WLED
- Addressable LED lighting scenes, run from the same app as your trains.
- QR and room codes
- Operators and visitors join your layout by scanning a QR code or typing a room code.
DEJA Throttle — the most capable DCC throttle
Throttle is the app you and your operators hold. I design every screen in it myself, for one job: running trains.
- Five throttle styles — buttons, slider, dial, dashboard, and a prototype-style lever. Each operator picks their own.
- Plug in a game controller and drive with that instead.
- Phones that support it buzz under your thumb when you press a control.
- Conductor View puts your throttles, the loco you're driving, and your turnouts side by side on one screen — made for a tablet or a dispatcher's desk.
- A UI component library I custom-built for DEJA Throttle: bright, easy to read, and easy to touch.
- Installs like an app on any phone, tablet, or computer.
What it runs: throttles and your roster, turnouts, signals, sensors and block detection, routes, automations, CV programming, lighting effects, and sounds.
dejajs.com (opens in a new tab)