Skip to the content
PCBKitNew board
2 layers64.3 × 24.5 mmIntercom, the printed circuit board in 3D

A silicon assistant.

Size
64.3 × 24.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
62
Nets
48
Pads
349
Tracks, vias
645, 79
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
12 Aug 2026
Updated
7 Nov 2026

Overview

Intercom is an open-source printed circuit board by tylerreckart, from the tylerreckart/arthur repository on GitHub. It is a 2-layer board of 64.3 × 24.5 mm with 62 parts on 48 nets, routed with 645 tracks and 79 vias.

It is built around the ESP32-S3-WROOM-1-N8R8, MAX98357AETE+T and TPS61088RHLR, with the AP2112K-3.3TRG1, MCP73831T-2ACI/OT-HXY and USBLC6-2SC6 among its other parts. Its parts include 26 capacitors, 14 resistors, 6 ICs, 5 connectors and 3 diodes. It belongs with the ESP32 boards of this library.

Main components

12

README

README.md

Arthur

Arthur is my personal silicon assistant. Local-first and on the desktop natively in MacOS and through an experimental hardware device that share the same conversational memory.

This repository is the voice layer: capture, speech, devices, and the spoken reply. The spoken-agent definition is config/arthur.agent.json.

STT and TTS run on the machine that hosts the Intercom daemon. whisper.cpp transcribes, Kokoro speaks, and Arbiter handles reasoning.

Components

Intercom daemon — HTTP on :8090 (POST /v1/utterance, health, cancel) and a WebSocket hub on :8093 (/v1/stream). It owns STT, TTS, the turn pipeline, device sessions, optional Home Assistant fast-path, and speak-back from Arbiter’s notification stream.

Mac desk app (macos/Arthur) — a native SwiftUI window plus a menu-bar droplet. Click the droplet, hold it, or use the global shortcut to talk. The app keeps the full conversation, and uses the same WebSocket, device_token, and device id for shared memory.

Hardware device (firmware/, hardware/) — a thin audio endpoint. Firmware for an ESP32-S3 (Arduino Nano ESP32 or a board with the same pin map) plus I2S mic (INMP441) and amp (MAX98357A) lives in firmware/nano-esp32/intercom-endpoint.

Weather (home via Home Assistant, or any city via Open-Meteo), news (Google News RSS / configured feeds), and markets (Yahoo public quotes) each speak a short line and emit a versioned {type:surface} card on the desk WebSocket. Voice-only devices ignore surface. See docs/api.md.

Build

Daemon needs C++20, CMake 3.20+, SQLite3, OpenSSL, and Threads. It fetches cpp-httplib and nlohmann/json.

bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j

Mac app (Apple Silicon, macOS 26+). Open macos/Arthur/Arthur.xcodeproj, or:

bash
macos/Arthur/build.sh
open macos/Arthur/dist/Arthur.app

Speech tools are not vendored. Install them separately and point intercom.json at the binaries and models:

  • whisper.cpp — whisper-cli, whisper-server, and ggml-base.en.bin
  • Kokoro — kokoro-tts plus the ONNX model and voices bundle. Intercom starts scripts/kokoro_server.py from that venv unless you already have a server running.

Configure and run

Run Intercom beside arbiter --api on the same host.

bash
cp config/intercom.example.json intercom.json
# also keep config/arthur.agent.json where agent_def can find it
# (same directory as intercom.json, or set agent_def to config/arthur.agent.json)

A local intercom.json is gitignored. Set at least:

  • arbiter_token — Arbiter atr_… token (arbiter_base_url defaults to http://127.0.0.1:8080)
  • device_token — bearer the wall button and Mac app send (not the Arbiter token)
  • whisper.binary / whisper.model and kokoro.binary / kokoro.model / kokoro.voices

Then:

bash
./build/intercom --config intercom.json

Default ports, all on listen_host (example config uses 0.0.0.0):

PortRole
8090HTTP: health, utterance, cancel
8093WebSocket duplex (set ws_listen_port to 0 to disable)
8092Warm whisper-server (spawned unless whisper.server_url is set)
8091Warm Kokoro (scripts/kokoro_server.py, same for kokoro.server_url)

GET /health is ready when Whisper and Kokoro are up; Arbiter may still be down. Set whisper.use_server / kokoro.use_server to false to force the one-shot CLI path.

Optional home block: when ha_base_url and ha_token are set, hallway phrases for lights, volume, weather at home, timers, and the next alarm skip Arbiter. Optional news and markets blocks configure RSS feeds and the quote host; both work without API keys (see config/intercom.example.json).

Firmware. Copy Wi-Fi and token into firmware/nano-esp32/intercom-endpoint/secrets.h (gitignored) or edit config.h. INTERCOM_HOST must be the LAN address of the Intercom machine — not 127.0.0.1. WebSocket is on INTERCOM_WS_PORT (8093); set it to 0 for HTTP-only. Flash the sketch in firmware/nano-esp32/intercom-endpoint. Contract: docs/device.md.

Mac. Settings load host, ports, and device_token from intercom.json. Choose the hallway device under Shared memory so this Mac and the wall button keep one conversation. Default global talk shortcut is ⌥Space (change it under Push to talk). Microphone permission is required to speak. Quiet text mode (Arthur menu or Settings → Typing) stops Space from starting push-to-talk so the composer is safe to type in; the global shortcut and menu-bar droplet still talk.

Docs

License

Apache-2.0

Parts

62
QtyValueFootprintReferences
510uFCapacitor_SMD:C_0603_1608MetricC8, C30, C40, C47, C49
51uFCapacitor_SMD:C_0402_1005MetricC2, C23, C42, C43, C44
410kResistor_SMD:R_0201_0603MetricR2, R24, R42, R43
30.1uFCapacitor_SMD:C_0201_0603MetricC7, C22, C31
3220pFCapacitor_SMD:C_0201_0603MetricC3, C5, C6
322uFCapacitor_SMD:C_0805_2012MetricC27, C28, C29
2100nFCapacitor_SMD:C_0201_0603MetricC41, C48
21kResistor_SMD:R_0201_0603MetricR1, R45
2200kResistor_SMD:R_0201_0603MetricR20, R21
24.7uFCapacitor_SMD:C_0402_1005MetricC45, C46
25.1kResistor_SMD:R_0201_0603MetricR40, R41
2600Ω@100MHzInductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolderFB1, FB2
2KMR231GLFSButton_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2SW3, SW4
1180kResistor_SMD:R_0201_0603MetricR22
11S LiPoConnector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalBT2
12kResistor_SMD:R_0201_0603MetricR44
14.7nFCapacitor_SMD:C_0201_0603MetricC25
147nFCapacitor_SMD:C_0201_0603MetricC24
147pFCapacitor_SMD:C_0201_0603MetricC26
156kResistor_SMD:R_0201_0603MetricR23
168Resistor_SMD:R_0201_0603MetricR3
1AP2112K-3.3TRG1Package_TO_SOT_SMD:SOT-23-5U4
1Conn_02x02_Odd_EvenConnector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalJ1
1ESP32-S3-WROOM-1-N8R8RF_Module:ESP32-S3-WROOM-1U3
1ICS-43434Sensor_Audio:InvenSense_ICS-43434-6_3.5x2.65mmMK1
1JS102011SAQNButton_Switch_SMD:SW_SPDT_CK_JS102011SAQNSW2
1LED greenLED_SMD:LED_0402_1005MetricD3
1LED redLED_SMD:LED_0402_1005MetricD1
1MAX98357AETE+TPackage_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm_ThermalViasU1
1MCP73831T-2ACI/OTPackage_TO_SOT_SMD:SOT-23-5U5
1PTT BREAKOUTConnector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_HorizontalJ4
1SS34Diode_SMD:D_SMAD2
1TPS61088RHLRPackage_DFN_QFN:Texas_VQFN-RHL-20_ThermalViasU2
1UART TEST PADSIntercom:UART_TestPads_3PinJ3
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U6
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12J2
1VOLUME BREAKOUTConnector_JST:JST_PH_S3B-PH-SM4-TB_1x03-1MP_P2.00mm_HorizontalJ5
1XAL5030-122MECInductor_SMD:L_Coilcraft_XAL5030-XXXL2

Questions

How big is the Intercom PCB?

It measures 64.3 × 24.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Intercom use?

62 parts, built around the ESP32-S3-WROOM-1-N8R8, MAX98357AETE+T, TPS61088RHLR and AP2112K-3.3TRG1. 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 Intercom KiCad files?

From the tylerreckart/arthur repository on GitHub, at the commit this page was made from: the board is hardware/rev-b/intercom.kicad_pcb and its schematic hardware/rev-a/intercom.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Intercom design in my own project?

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

More from tylerreckart/arthur

1
  • 2 layers101.3 × 39.9 mmIntercom, the printed circuit board in 3D

    Intercom

    tylerreckart/arthur

    A silicon assistant.

    42 parts

Similar boards

  • 2 layers80 × 65 mmYukkuri terminal routed, the printed circuit board in 3D

    Yukkuri terminal routed

    balacccpbule-ux/yukkuri-terminal

    油库里语音伙伴:Android 独立版、PC 原型与 KiCad 硬件设计;中文离线识别、幻想乡口音与 DeepSeek 对话。

    53 parts
  • 2 layers80 × 52 mmQuiet trace, the printed circuit board in 3D

    Quiet trace

    rwrife/quiet-trace

    USB-powered ESP32-S3 ambient sound-level logger for home offices and shared rooms that keeps only privacy-preserving loudness summaries and serves a local history dashboard—never raw audio.

    38 partsMIT
  • 2 layers54 × 31 mmGamer companion, the printed circuit board in 3D

    Gamer companion

    donaldbell/productspeedrun

    Let's see how quickly we can get a product idea off the ground.

    41 parts
  • 4 layers88.1 × 59.4 mmChromapi motherboard v1, the printed circuit board in 3D

    Chromapi motherboard v1

    Mowibox/chromapi_motherboard

    Raspberry Pi control HAT dedicated to the quadruped robot Chromapi.

    139 parts2Apache-2.0
  • 2 layers69.6 × 49.4 mmBoardRev1, the printed circuit board in 3D

    BoardRev1

    richardmcmanusjr/FillErUp

    Senior Design Project - Class of 2024

    40 partsMIT
  • 4 layers60 × 105 mmWalkman - Blobject, the printed circuit board in 3D

    Walkman - Blobject

    ProccyBoi/kiku

    kiku is an open-source portable audio player built around an STM32H523 microcontroller. The project combines Bluetooth audio, local microSD playback, FM radio, a colour display, headphone and speaker outputs, battery…

    142 parts
  • 2 layers100 × 100 mmCopperPilotDrone, the printed circuit board in 3D

    CopperPilotDrone

    CopperPilot/CopperPilotDronePCB

    Flight controller and airframe on one ESP32-S3 board. Fly it from any phone over its own Wi-Fi. Motor traces sized to IPC-2221 for about 3 A.

    109 parts1
  • 4 layers64 × 80 mmIris brainstem, the printed circuit board in 3D

    Iris brainstem

    HeyPCB/iris-brainstem

    Iris Brainstem: power and servo hub of the Iris robot head. 9 V USB-C PD in, 6 V / 5 A servo rail in stitched copper zones (measured), 5 V rail, half-duplex servo bus with ten ports, speaker amp.

    97 partsCERN-OHL-S-2.0