cupping, colour, and collective sensing · what every file is and what to do with it
One page for the whole build, from simulator tuning to the end of the funded period (30 November 2026). The project does not target an exhibition deadline; the whole window goes into building the machine fully. Read it top to bottom once; after that, jump to the phase you are in.
The one rule everything follows. Each cup is self-sufficient: it senses, computes its Five Elements colour, and glows with no network and no computer. Everything else (hub, TouchDesigner, room) is an optional layer above a system that already works. If a change would break that, do not make the change.
The generating cycle (상생): each element feeds the next. When held cups sit adjacent on this circle, light travels between them. It is a fixed contract of the work.
If the browser and the cup ever disagree, the project's core claim breaks. Change the mapping in the TypeScript AND the firmware together, in one pass.
src/fiveElements.tsthe Five Elements (오행) mapping engine: pressure, trend, pulse, regularity, hold become an element and a colour; also the paper's system descriptionsrc/sync.tsthe collective layer: synchronisation score, room colour, and the 상생 circulation reading (score, flow edges, chain)hardware/cup/cup.inothe C++ mirror of the engine plus presence and afterglow, running on the cup itselfEvery push to main auto-deploys to circulatorysensing.com in about 30 seconds. You never deploy manually.
circulation/system.htmlthe live simulator page: three virtual cups, the flow layer, the roomsrc/main.tsthe simulator's code: presence, afterglow marks, light travelling cup to cup, sliders. Tune the interaction here first, hardware secondsrc/cupView.tsthe rendering pieces shared by circulation/system.html and sim.html: the cup panel, colour helpers, the flow layer, and the presence/afterglow display statesim.html / src/sim.tsthe physical computing simulation: the same three cups, but a grip and a heart rate pass through simulated FSR/MAX30102 sensor behaviour (noise, calibration, contact dropout) before reaching the enginesrc/sensorSim.tsthe sensor model sim.html runs: mirrors cup.ino's raw ADC, calibration bounds, IR contact threshold, and beat jitter, with fault toggles for a loose palm seal, a fidgeting hand, and an uncalibrated cuplog.htmlthe process log. One entry per build week: grant report, paper documentation, and curator-facing story in one file.github/workflows/deploy.ymlthe auto-deployhardware/cup/cup.inothe firmware you flash onto each ESP32. The config block at the top (CUP_ID, Wi-Fi, hub address, pins, calibration, PRESENCE, MARK_FADE_S) is the only part edited per cuphardware/cup/README.mdwiring and library guidehardware/TECHNICIAN_BRIEF.txtthe meeting document: real cups + printed insert, sensors, parts list, contracts, safety line. Copy-paste readywokwi/a circuit simulation of cup.ino itself (ESP32 + FSR + LED ring, no hardware required): validates firmware logic before or alongside a real buildhub/hub.tsthe sync hub: listens to cups (OSC port 8000), computes sync + room colour, republishes to TouchDesigner (port 9000), logs every tick to logs/session-*.jsonl: the paper's dataset and the 계 archive feed. Run with npm run hubhub/README.mdports and message schematouchdesigner/RECIPES.mdthe from-zero TouchDesigner path, one concrete artifact per recipe, ending at a festival-ready show patch. Optional by designCirculation_Paper_Draft_and_Figure_Prompts.mdthe paper draft (target ISEA 2027) with its figure plancirculation-figure-prompts.txtthe extracted figure prompts, copy-paste readyCirculation_Monthly_Reports_Aug-Nov_2026.mdthe SCD grant reporting skeleton, August to Novemberpackage.json · tsconfig.json · vite.config.tsbuild configuration, plus package-lock.json, .gitignore, src/vite-env.d.ts, and README.md (the repo's front page)the simulator, live on GitHub Pages or locally with npm run dev
cup.ino, standalone: sense, compute, glow
the hub (npm run hub), and TouchDesigner if used
hosting, auto-deploy, and the public archive of everything
Run in the project folder (~/Projects/circulation).
npm install | once, after cloning on a new machine |
npm run dev | local simulator at the printed localhost address |
npm run hub | the sync hub (needs cups or a test sender on the network) |
npm run typecheck | sanity check the TypeScript |
npm run build | what the auto-deploy runs; push to main and the site updates itself |
/cup id pressure bpm confidence element r g b/circulation/sync, /circulation/agreement, /circulation/room, /circulation/cup/<id>Circulation: Cupping, Colour, and Collective Sensing · SCD Seed Funding 2026 · a cultural coordinate system, not medical advice. The plain-text version of this manual is MANUAL.md in the repository.