Skip to the content
6 layers131 × 125 mmSunbeam em7000, the printed circuit board in 3D

Sunbeam em7000

Resident-X/brew-state

brew-state: bare-metal C state estimation and forward-horizon profiling for the Sunbeam EM7000. Built with Staircase.

Size
131 × 125 mm
Copper layers
6
Thickness
1.6 mm
Parts
444
Nets
282
Pads
1,159
Tracks, vias
4,050, 1,104
Pours
63
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
16 Aug 2026
Updated
6 Nov 2026

Overview

Sunbeam em7000 is an open-source printed circuit board by Resident-X, from the Resident-X/brew-state repository on GitHub, published under the MIT licence. It is a 6-layer board of 131 × 125 mm with 444 parts on 282 nets, routed with 4,050 tracks and 1,104 vias.

It is built around the 74AHCT1G17GWH, BTA204S-600B,118 and HX711, with the MAX31865ATP+T, MOC3052SVM and AMC131M02DFMR among its other parts. Its parts include 150 resistors, 75 capacitors, 29 diodes, 12 transistors and 12 fuses.

Main components

12

README

README.md

brew-state — a model-based controller for a dual-thermoblock espresso machine

Replacing the factory control board in a Sunbeam EM7000 with a controller that actually models the machine: state estimation, a forward horizon, flow and pressure profiling, and a hardware safety chain with no firmware anywhere in it.

This repository is public domain. Take any of it.

How this project is built

Requirements first, then code. The specs/ graph is finished before firmware starts, and this repo is partly an argument that working in that order is faster rather than slower.

That means the graph is the substance here, and anything under specs/ describes the machine as it is meant to be — not as it currently is.

Where to start reading

If you want to know what this machine is meant to do, read the personas and journeys first. They are written to be read by a person, not parsed by a tool:

  • specs/personas/ — three stakeholders. The operator who makes coffee, the builder who designs and commissions it, and the adopter who found this published and owns a different machine.
  • specs/journeys/ — what actually happens: pulling a shot, steaming a jug, serving a group, commissioning the plant, correcting drift, keeping the machine in condition.

If you want to know what constrains it, read specs/obligations/. These are the cross-cutting commitments — electrical and thermal safety, real-time discipline, control-design discipline, verification discipline, open-source maintainability, physical configuration control. The safety obligation is the only one whose authority is external to this project, and it outranks everything else in the graph.

If you want the detail, specs/requirements/ holds the functional and constraint requirements, specs/definitions/ the vocabulary, and specs/decisions/ the choices that have been made and why — including the options that were rejected.

If you are rebuilding this on your own machine, read docs/sunbeam-em7000/reference-machine.md first. Everything specific to our machine — supply voltage, mains frequency, element ratings, protection trip points — lives in that one file. The requirement graph is written without those values so that replacing that file is the whole job.

Two different promises

Be clear about which of these you are:

  • Same architecture (a dual-thermoblock machine): the graph should apply to you, and adapting it should mean supplying your own parameters rather than changing requirements.
  • Different architecture (single boiler, heat exchanger): the requirements will not all fit — an HX group's temperature depends on time since the last shot, which has no representation in a thermoblock's state at any parameter values. What transfers is the method, the tooling and the safety architecture. That is a smaller promise, and it is the honest one.

Reading the graph

Nodes are .req.yaml files — plain YAML with prose in them. Reading needs nothing but a text editor. Changing them is a different matter, and is covered below.

How they connect. A requirement derives-from one or more criteria of the node above it, so the chain runs persona → journey → requirement, with each node carrying numbered criteria (REQ-BREW-TEMP-001.C1) attached by criterion-of. Obligations sit across the top: they are not part of that chain but constrain everything under them, and the safety obligation outranks the lot. Requirements also derive from each other's criteria where one genuinely builds on another. Decisions attach by addresses.

Priorities. Every requirement carries one:

mustthe system is wrong without it
shouldreal value, deliberately ranked below the musts
couldworth having, and shipping without it is not a defect

Priority is about whether the system is wrong, not about when something gets built.

Changing the graph

Do not hand-edit .req.yaml files. The graph is maintained by Staircase, and the engine is what holds it together: it assigns IDs, places files, wires and validates links, enforces the boundary between the requirement and delivery chains, applies the authoring discipline, and records who changed what and when.

Editing a node by hand bypasses all of that, and the failure mode is quiet. The file still parses. What breaks is underneath — a link pointing at something that no longer exists, a criterion orphaned from its parent, a requirement deriving from a retired one, a change landing with no version behind it and no event recording it. Structural validation does not catch most of that, because nothing is malformed. It is simply wrong, and it stays wrong until something downstream fails for reasons that no longer look connected.

That is the whole reason the engine exists. It is not a formatter over some YAML — it is the thing that knows how a systems and delivery graph has to hold together, so that a person changing one node does not have to.

A caveat you should know before relying on this. The engine is not part of this repository and is not currently something you can obtain. So you can read everything here, and you can build from it, but you cannot presently maintain a fork of the graph the way it is meant to be maintained. That is a real limit on what this repo currently offers, and it is tracked in the graph itself rather than hidden — REQ-PUBLISHED-BUILD-PATH-001 requires every tool the path depends on to be obtainable by someone who is not the author, and that criterion is not met today.

Staircase

This project is built with Staircase, whose thesis is that disciplined, requirement-driven, complete-the-first-time engineering produces better software, faster, that stays maintainable. This repo is partly a test of that claim in public, on a real physical thing that can burn someone.

One discipline is worth knowing about while reading: requirements state properties, not mechanisms. You will not find part numbers, sensor technologies, interface choices or tuning constants in specs/. Those are decisions and they live separately. That is also what makes the graph portable to a machine on a different continent running on a different voltage — a requirement that names a mechanism does not travel.

Parts

444
QtyValueFootprintReferences
35TPmain-board:TestPoint_Pad_D1.0mm_TightTP301, TP302, TP303, TP401, TP402, TP403, TP404, TP405, TP406, TP407, TP408, TP409, TP410, TP411, TP412, TP413 +19
2410kResistor_SMD:R_0603_1608MetricR401, R501, R503, R505, R520, R531, R534, R537, R570, R574, R801, R802, R803, R804, R805, R806 +8
19100kResistor_SMD:R_0603_1608MetricR201, R202, R205, R206, R614, R615, R641, R646, R672, R677, R702, R712, R732, R742, R762, R772 +3
19100nCapacitor_SMD:C_0603_1608MetricC201, C521, C605, C611, C612, C641, C642, C646, C647, C670, C672, C673, C675, C677, C678, C791 +3
17100Resistor_SMD:R_0603_1608MetricR523, R524, R527, R528, R670, R671, R675, R676, R701, R711, R731, R741, R761, R771, R821, R826 +1
161kResistor_SMD:R_0603_1608MetricR207, R402, R502, R504, R506, R521, R533, R536, R539, R573, R577, R796, R797, R798, R799, R800
15TestPointmain-board:TestPoint_Pad_D1.0mm_TightTP501, TP502, TP503, TP522, TP523, TP525, TP526, TP527, TP528, TP529, TP530, TP531, TP532, TP570, TP571
13PESD5V0F1BLDiode_SMD:D_SOD-882D501, D503, D505, D520, D521, D522, D525, D526, D529, D530, D531, D570, D571
11100 nFCapacitor_SMD:C_0603_1608MetricC301, C401, C402, C403, C404, C405, C406, C408, C410, C418, C422
90Resistor_SMD:R_0603_1608MetricR301, R302, R522, R642, R643, R647, R648, R690, R691
947nCapacitor_SMD:C_0603_1608MetricC501, C502, C503, C520, C522, C523, C524, C570, C571
9AO3400APackage_TO_SOT_SMD:SOT-23Q701, Q711, Q731, Q741, Q761, Q771, Q821, Q823, Q824
7470Resistor_SMD:R_0603_1608MetricR607, R608, R791, R792, R793, R794, R795
7BAT54SPackage_TO_SOT_SMD:SOT-23D502, D504, D506, D523, D524, D527, D528
50Resistor_SMD:R_1206_3216MetricR540, R541, R542, R543, R544
51MegResistor_SMD:R_1206_3216MetricR101, R102, R103, R104, R403
51nCapacitor_SMD:C_0603_1608MetricC604, C606, C608, C609, C630
520kResistor_SMD:R_0603_1608MetricR532, R535, R538, R571, R575
533Resistor_SMD:R_0603_1608MetricR609, R610, R611, R612, R613
5MF-NSMF012-2Fuse:Fuse_1206_3216MetricF520, F521, F522, F523, F524
4180Resistor_SMD:R_1206_3216MetricR703, R713, R763, R773
42.2kResistor_SMD:R_0603_1608MetricR525, R526, R529, R530
4200Resistor_SMD:R_1206_3216MetricR704, R705, R714, R715
422kResistor_SMD:R_0603_1608MetricR632, R823, R824, R825
4BAS116Package_TO_SOT_SMD:SOT-23D202, D204, D205, D206
4MountingHolemain-board:MountingHole_3.1mm_LidH1, H2, H3, H4
3100nCapacitor_SMD:C_1206_3216MetricC202, C204, C607
3100nF_X2Capacitor_THT:C_Rect_L13.0mm_W6.0mm_P10.00mm_FKS3_FKP3_MKS4C101, C701, C711
31N4148WSDiode_SMD:D_SOD-323D731, D741, D821
3300kResistor_SMD:R_2512_6332MetricR601, R602, R603
3600R@100MHzInductor_SMD:L_0603_1608MetricF601, F602, FB301
3FiducialFiducial:Fiducial_1mm_Mask2mmFID1, FID2, FID3
3LINKConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP761, JP791, JP821
21 uFCapacitor_SMD:C_0603_1608MetricC409, C411
2100Resistor_SMD:R_2512_6332MetricR706, R716
210nCapacitor_SMD:C_0603_1608MetricC640, C645
210uCapacitor_SMD:C_0805_2012MetricC671, C676
21uCapacitor_SMD:C_0603_1608MetricC603, C610
22.2 uFCapacitor_SMD:C_0603_1608MetricC412, C413
220 pFCapacitor_SMD:C_0603_1608MetricC414, C415
222 uFCapacitor_SMD:C_0805_2012MetricC304, C305
227kResistor_SMD:R_0603_1608MetricR764, R774
24.02kResistor_SMD:R_0603_1608MetricR640, R645
24.7 pFCapacitor_SMD:C_0603_1608MetricC416, C417
24.7nCapacitor_SMD:C_0603_1608MetricC203, C205
24.7nCapacitor_SMD:C_0805_2012MetricC601, C602
249.9Resistor_SMD:R_0603_1608MetricR605, R606
25.6MegResistor_SMD:R_0603_1608MetricR203, R204
260.4kResistor_SMD:R_2512_6332MetricR630, R631
282kResistor_SMD:R_0603_1608MetricR765, R775
2BAT54HT1GDiode_SMD:D_SOD-323D201, D203
2BTA204S-600Bmain-board:TO-252-2_TabPin2_TriacT701, T711
2BZX84-C12Package_TO_SOT_SMD:SOT-23Z201, Z202
2DNPResistor_SMD:R_0603_1608MetricR572, R576
2HF32FA-G/005-HSL1main-board:RELAY_HF32FA-G_1H_TYPE1_THTK731, K741
2HX711Package_SO:SOIC-16_3.9x9.9mm_P1.27mmU630, U631
2MAX31865ATP+Package_DFN_QFN:TQFN-20-1EP_5x5mm_P0.65mm_EP3.1x3.1mmU620, U621
2MOC3052SVMmain-board:MOC3052SVM_SMD-6U701, U711
2NX3008NBKPackage_TO_SOT_SMD:SOT-23Q201, Q202
10.4Amain-board:FUSEHOLDER_5x20_XC_BLX-AF731
10.5Amain-board:FUSEHOLDER_5x20_XC_BLX-AF711
10.8Amain-board:FUSEHOLDER_5x20_XC_BLX-AF701
110 uFCapacitor_SMD:C_0603_1608MetricC303
1100Resistor_SMD:R_1206_3216MetricR828
110A_T_250VFuse:Fuseholder_Clip-5x20mm_Bel_FC-203-22_Lateral_P17.80x5.00mm_D1.17mm_HorizontalF101
114D471KVaristor:RV_Disc_D15.5mm_W5mm_P7.5mmRV101
11mmain-board:R_WSK2512_4TR105
132.768 kHzCrystal:Crystal_SMD_3215-2Pin_3.2x1.5mmY402
14.7 nFCapacitor_SMD:C_1206_3216MetricC419
14.7 uFCapacitor_SMD:C_0603_1608MetricC407
147 uFCapacitor_SMD:CP_Elec_6.3x5.2C302
147uCapacitor_SMD:CP_Elec_5x5.4C792
174AHCT1G17Package_TO_SOT_SMD:SOT-353_SC-70-5U201
1750Resistor_SMD:R_0603_1608MetricR604
18 MHzCrystal:Crystal_SMD_5032-2Pin_5.0x3.2mmY401
18.000MHzmain-board:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm_Pin1MarkY601
1AMC131M02main-board:AMC131M02_SOIC-20W_DFM0020AU601
1AO3401APackage_TO_SOT_SMD:SOT-23Q822
1BOOT0_HIConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP401
1BREW_AConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ524

The 358 most common of 444 parts.

More from Resident-X/brew-state

4
  • 4 layers238 × 132 mmCircuit review proof, the printed circuit board in 3D

    Circuit review proof

    Resident-X/brew-state

    brew-state: bare-metal C state estimation and forward-horizon profiling for the Sunbeam EM7000. Built with Staircase.

    60 partsMIT
  • 4 layers92 × 60 mmReview proof, the printed circuit board in 3D

    Review proof

    Resident-X/brew-state

    brew-state: bare-metal C state estimation and forward-horizon profiling for the Sunbeam EM7000. Built with Staircase.

    34 partsMIT
  • 4 layers40 × 30 mmMethod proof, the printed circuit board in 3D

    Method proof

    Resident-X/brew-state

    brew-state: bare-metal C state estimation and forward-horizon profiling for the Sunbeam EM7000. Built with Staircase.

    24 partsMIT
  • 2 layers60 × 20 mmGate proof, the printed circuit board in 3D

    Gate proof

    Resident-X/brew-state

    brew-state: bare-metal C state estimation and forward-horizon profiling for the Sunbeam EM7000. Built with Staircase.

    5 partsMIT

Similar boards

  • 4 layers65.5 × 39 mmHeli avionics, the printed circuit board in 3D

    Heli avionics

    1-max-1/heli-avionics

    Electronics and software for a mini RC helicopter

    78 parts1
  • 4 layers135.1 × 56.9 mmAfterburner, the printed circuit board in 3D

    Afterburner

    CelestineOverflow/Afterburner_PCB

    PCBA Files

    144 partsGPL-3.0
  • 2 layers234 × 58 mmPGA2311 3, the printed circuit board in 3D

    PGA2311 3

    dmsd-lab/AMP8611

    AMP8611 - open hardware integrated stereo power amplifier with a 2-channel input selector, PGA2311 digital volume control and LM3886 power stages

    213 partsCERN-OHL-S-2.0
  • 4 layers75 × 17 mmNref batterypack, the printed circuit board in 3D

    Nref batterypack

    cetola/reform-next-mirror

    The original Open Hardware laptop, reloaded.

    67 parts
  • 4 layers48 × 87 mmWallet, the printed circuit board in 3D

    Wallet

    AmbireTech/ice

    Ambire Ice: secure Safe-focused hardware wallet

    157 parts4
  • 4 layers42 × 42 mmPower Board, the printed circuit board in 3D

    Power Board

    Harveyn4444/TocoSat-powerboard

    The TocoSat power board hardware and software files

    74 parts1
  • 6 layers100 × 160 mmScopefun v2, the printed circuit board in 3D

    Scopefun v2

    snhobbs/scopefun-hardware

    This repository contains Scopefun hardware schematics and pcb layout files.

    840 parts
  • 2 layers129.5 × 83.5 mmColordance brain, the printed circuit board in 3D

    Colordance brain

    ademuri/colordance-circle

    An art project that uses arrays of colored lights around a circle to create kaleidoscopic colored shadows.

    131 parts4Apache-2.0

Questions

How big is the Sunbeam em7000 PCB?

It measures 131 × 125 mm and has 6 copper layers, 1.6 mm thick.

What parts does the Sunbeam em7000 use?

444 parts, built around the 74AHCT1G17GWH, BTA204S-600B,118, HX711 and MAX31865ATP+T. 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 Sunbeam em7000 KiCad files?

From the Resident-X/brew-state repository on GitHub, at the commit this page was made from: the board is hardware/sunbeam-em7000/main-board/main-board.kicad_pcb and its schematic hardware/proof/circuit-review-proof/circuit-review-proof.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Sunbeam em7000 design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).