

Intercom
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
12ESP32-S3-WROOM-1-N8R8
SMD,25.5x18mm-104.5dBm -40℃~+65℃ 2.4GHz 20.5dBm 330mA 3V~3.6V 97mA Bluetooth5.0 ESP32-S3R8 On-board PCB Antenna UART、SPI、I2C、GPIO、I2S、USB SMD,25.5x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesMAX98357AETE+T
TQFN-16-EP(3x3)-40℃~+85℃ 2.4mA 2.5V~5.5V 3.2Wx1@4Ω 77dB 92% Automatic mute/no-noise switch、Enable/shutdown function、Filterless architecture Class D TQFN-16-EP(3x3) Audio Amplifiers ROHSMaxim Integrated (Analog Devices)Audio AmplifiersTPS61088RHLR
VQFN-20-EP(3.6x4.6)-40℃~+85℃@(TA) 1 10A 1uA 2.2MHz 2.7V~12V 4.5V~12.6V Adjustable Boost Boost Built-in Yes VQFN-20-EP(3.6x4.6) DC-DC Converters ROHSTexas InstrumentsDC-DC ConvertersAP2112K-3.3TRG1
SOT-25-5-40℃~+85℃@(Ta) 1 250mV@(600mA) 3.3V 50uVrms 55uA 600mA 65dB@(1kHz) 6V Fixed Over Current Protection、Thermal Shutdown、Enable control Positive SOT-25-5 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSDiodes IncorporatedVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsMCP73831T-2ACI/OT-HXY
SOT-23-5LBattery ManagementHXY MOSFETUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)MPZ2012S601AT000
0805-55℃~+125℃ 1 100mΩ 2A 600Ω@100MHz ±25% 0805 Ferrite Beads ROHSTDKFerrite BeadsKMR231GLFS
SMD,4.6x2.8mm-40℃~+85℃ 1.9mm 2.8mm 32V 3N 4.6mm 50mA Gull Wing Round Button SPST Surface Mount,Vertical SMD,4.6x2.8mm Tactile Switches ROHSC&KTactile SwitchesICS-43434
LGA-6(3.5x2.7)-26dB -40℃~+85℃ 0.98mm 1.65V~3.63V 2.65mm 3.5mm 550uA 64dB I2S Omnidirectional Omnidirectional pickup LGA-6(3.5x2.7) MEMS Microphones ROHSTDK InvenSenseMEMS MicrophonesJS102011SAQN
SMD-40℃~+85℃ 3.5mm 300mA 5,000 cycles 6V 9mm Black Rectangular Columnar SMD(SMT) Tab SPDT Surface Mount, Right Angle SMD Slide Switches ROHSC&KSlide SwitchesSS34
SMA(DO-214AC)-55℃~+125℃ 3A 40V 500uA@40V 550mV@3A Independent SMA(DO-214AC) Schottky Diodes ROHSMDDSchottky DiodesXAL5030-122MEC
SMD,5.5x5.3mm1.2uH 10.4A 11.4mΩ 12.5A ±20% SMD,5.5x5.3mm Power Inductors ROHSCoilcraftPower Inductors
README
README.mdArthur
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.
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -jMac app (Apple Silicon, macOS 26+). Open macos/Arthur/Arthur.xcodeproj, or:
macos/Arthur/build.sh
open macos/Arthur/dist/Arthur.appSpeech tools are not vendored. Install them separately and point intercom.json at the binaries and models:
- whisper.cpp —
whisper-cli,whisper-server, andggml-base.en.bin - Kokoro —
kokoro-ttsplus the ONNX model and voices bundle. Intercom startsscripts/kokoro_server.pyfrom that venv unless you already have a server running.
Configure and run
Run Intercom beside arbiter --api on the same host.
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— Arbiteratr_…token (arbiter_base_urldefaults tohttp://127.0.0.1:8080)device_token— bearer the wall button and Mac app send (not the Arbiter token)whisper.binary/whisper.modelandkokoro.binary/kokoro.model/kokoro.voices
Then:
./build/intercom --config intercom.jsonDefault ports, all on listen_host (example config uses 0.0.0.0):
| Port | Role |
|---|---|
| 8090 | HTTP: health, utterance, cancel |
| 8093 | WebSocket duplex (set ws_listen_port to 0 to disable) |
| 8092 | Warm whisper-server (spawned unless whisper.server_url is set) |
| 8091 | Warm 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
docs/api.md— HTTP and WebSocket contract, Arbiter mapping, speak-back, Kokorodocs/device.md— PCM format, PTT flow, ESP32 endpoint, colocationconfig/intercom.example.json— daemon configconfig/arthur.agent.json— spoken-agent definition
License
Apache-2.0
Parts
62| Qty | Value | Footprint | References |
|---|---|---|---|
| 5 | 10uF | Capacitor_SMD:C_0603_1608Metric | C8, C30, C40, C47, C49 |
| 5 | 1uF | Capacitor_SMD:C_0402_1005Metric | C2, C23, C42, C43, C44 |
| 4 | 10k | Resistor_SMD:R_0201_0603Metric | R2, R24, R42, R43 |
| 3 | 0.1uF | Capacitor_SMD:C_0201_0603Metric | C7, C22, C31 |
| 3 | 220pF | Capacitor_SMD:C_0201_0603Metric | C3, C5, C6 |
| 3 | 22uF | Capacitor_SMD:C_0805_2012Metric | C27, C28, C29 |
| 2 | 100nF | Capacitor_SMD:C_0201_0603Metric | C41, C48 |
| 2 | 1k | Resistor_SMD:R_0201_0603Metric | R1, R45 |
| 2 | 200k | Resistor_SMD:R_0201_0603Metric | R20, R21 |
| 2 | 4.7uF | Capacitor_SMD:C_0402_1005Metric | C45, C46 |
| 2 | 5.1k | Resistor_SMD:R_0201_0603Metric | R40, R41 |
| 2 | 600Ω@100MHz | Inductor_SMD:L_0805_2012Metric_Pad1.05x1.20mm_HandSolder | FB1, FB2 |
| 2 | KMR231GLFS | Button_Switch_SMD:SW_Push_1P1T_NO_CK_KMR2 | SW3, SW4 |
| 1 | 180k | Resistor_SMD:R_0201_0603Metric | R22 |
| 1 | 1S LiPo | Connector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_Horizontal | BT2 |
| 1 | 2k | Resistor_SMD:R_0201_0603Metric | R44 |
| 1 | 4.7nF | Capacitor_SMD:C_0201_0603Metric | C25 |
| 1 | 47nF | Capacitor_SMD:C_0201_0603Metric | C24 |
| 1 | 47pF | Capacitor_SMD:C_0201_0603Metric | C26 |
| 1 | 56k | Resistor_SMD:R_0201_0603Metric | R23 |
| 1 | 68 | Resistor_SMD:R_0201_0603Metric | R3 |
| 1 | AP2112K-3.3TRG1 | Package_TO_SOT_SMD:SOT-23-5 | U4 |
| 1 | Conn_02x02_Odd_Even | Connector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_Horizontal | J1 |
| 1 | ESP32-S3-WROOM-1-N8R8 | RF_Module:ESP32-S3-WROOM-1 | U3 |
| 1 | ICS-43434 | Sensor_Audio:InvenSense_ICS-43434-6_3.5x2.65mm | MK1 |
| 1 | JS102011SAQN | Button_Switch_SMD:SW_SPDT_CK_JS102011SAQN | SW2 |
| 1 | LED green | LED_SMD:LED_0402_1005Metric | D3 |
| 1 | LED red | LED_SMD:LED_0402_1005Metric | D1 |
| 1 | MAX98357AETE+T | Package_DFN_QFN:TQFN-16-1EP_3x3mm_P0.5mm_EP1.23x1.23mm_ThermalVias | U1 |
| 1 | MCP73831T-2ACI/OT | Package_TO_SOT_SMD:SOT-23-5 | U5 |
| 1 | PTT BREAKOUT | Connector_JST:JST_PH_S2B-PH-SM4-TB_1x02-1MP_P2.00mm_Horizontal | J4 |
| 1 | SS34 | Diode_SMD:D_SMA | D2 |
| 1 | TPS61088RHLR | Package_DFN_QFN:Texas_VQFN-RHL-20_ThermalVias | U2 |
| 1 | UART TEST PADS | Intercom:UART_TestPads_3Pin | J3 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U6 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HRO_TYPE-C-31-M-12 | J2 |
| 1 | VOLUME BREAKOUT | Connector_JST:JST_PH_S3B-PH-SM4-TB_1x03-1MP_P2.00mm_Horizontal | J5 |
| 1 | XAL5030-122MEC | Inductor_SMD:L_Coilcraft_XAL5030-XXX | L2 |
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 mm

Similar boards
- 2 layers80 × 65 mm

Yukkuri terminal routed
balacccpbule-ux/yukkuri-terminal
油库里语音伙伴:Android 独立版、PC 原型与 KiCad 硬件设计;中文离线识别、幻想乡口音与 DeepSeek 对话。
53 parts - 2 layers80 × 52 mm

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 mm

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 mm

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 mm

- 4 layers60 × 105 mm

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 mm

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 mm

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