Skip to the content
PCBKitNew board
4 layers40 × 30 mmMethod proof, the printed circuit board in 3D

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

Size
40 × 30 mm
Copper layers
4
Thickness
1.6 mm
Parts
24
Nets
23
Pads
57
Tracks, vias
22, 26
Pours
9
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
16 Aug 2026
Updated
6 Nov 2026

Overview

Method proof 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 4-layer board of 40 × 30 mm with 24 parts on 23 nets, routed with 22 tracks and 26 vias.

It is built around the MSPS003F4SPW20R, MCP1700T-3302E/TT(MS) and CRCW06031K20FKEAC, with the T520B157M006ATE025, T520B476M010ATE035 and B2B-XH-A(LF)(SN) among its other parts. Its parts include 5 capacitors, 3 connectors, 2 ICs, 1 resistor and 1 diode.

Main components

10

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

24
QtyValueFootprintReferences
3FiducialFiducial:Fiducial_1mm_Mask2mmFID1, FID2, FID3
3MountingHoleMountingHole:MountingHole_2.2mm_M2H1, H2, H3
2100nFCapacitor_SMD:C_0603_1608MetricC4, C5
1+3V3method-proof:TestPoint_Pad_D1.0mmTP3
1+3V3_REGmethod-proof:TestPoint_Pad_D1.0mmTP2
1+5V_INmethod-proof:TestPoint_Pad_D1.0mmTP1
11.2kResistor_SMD:R_0603_1608MetricR1
110uFCapacitor_SMD:C_0805_2012MetricC3
1150uFCapacitor_Tantalum_SMD:CP_EIA-3528-21_Kemet-BC2
147uFCapacitor_Tantalum_SMD:CP_EIA-3528-21_Kemet-BC1
15V_INConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ1
1LED_Kmethod-proof:TestPoint_Pad_D1.0mmTP4
1LINK_3V3Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP2
1LINK_5VConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJP1
1MCP1700T-3302E/TTPackage_TO_SOT_SMD:SOT-23U1
1MSPS003F4SPW20RPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU2
1OUTConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ2
1PA1Connector_PinHeader_2.54mm:PinHeader_1x01_P2.54mm_VerticalJ3
1VLMG1300-GS08LED_SMD:LED_0603_1608MetricD1

Questions

How big is the Method proof PCB?

It measures 40 × 30 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Method proof use?

24 parts, built around the MSPS003F4SPW20R, MCP1700T-3302E/TT(MS), CRCW06031K20FKEAC and T520B157M006ATE025. 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 Method proof KiCad files?

From the Resident-X/brew-state repository on GitHub, at the commit this page was made from: the board is hardware/proof/method-proof/method-proof.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 Method proof 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).

More from Resident-X/brew-state

4
  • 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.

    444 partsMIT
  • 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
  • 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

  • 2 layersLab5 SMD, the printed circuit board in 3D

    Lab5 SMD

    maxtk4/elec327finalproject

    Our Final Project for ELEC 327, a robotic Payload for the SAE Aero Design Advanced Competition

    14 parts
  • 4 layers202.3 × 90 mmMythra psu, the printed circuit board in 3D

    Mythra psu

    bad-alloc-heavy-industries/Mythra

    45 parts7BSD-3-Clause
  • 2 layers48.3 × 67.3 mmSmartSole Rev1, the printed circuit board in 3D

    SmartSole Rev1

    juliaestrin/smartsolePCB

    PCB for SmartSole Product

    60 parts
  • 4 layers45 × 45 mmRuuvitag gas, the printed circuit board in 3D

    Ruuvitag gas

    Sharki-66/womo-home-esp32

    Caravan Smart Home Display with esp32

    66 partsMIT
  • 2 layers39 × 82.5 mmAxxSolder, the printed circuit board in 3D

    AxxSolder

    holoindustry/AxxSolder_modded

    Interested in purchasing an AxxSolder 3.2? On my website 5Dimensions you can purchase assembled and tested AxxSolder 3.2 boards with connectors and hardware.

    147 partsGPL-3.0
  • 4 layers120 × 100 mmHotel test illustrative, the printed circuit board in 3D

    Hotel test illustrative

    rbrtwtrs/A2D-Test

    Rev A ESP32-P4 Nano bench simulator/operator1.2. Companion: https://github.com/rovshop/herc-hotel-p4-firmware

    162 parts
  • 2 layers90 × 50 mmSpi flash adapter v1, the printed circuit board in 3D

    Spi flash adapter v1

    Spectating101/hardware-splicer

    Auditable hardware bring-up: donor → KiCad carrier + DRC + bench gates → PROJECT_PACKAGE. Seeking 3 design partners.

    40 partsMIT