Gappin · personal project · R&D in progress
The deck that measures its own trick.
Bench prototype (phase 0). Real firmware: 1,411 lines, ESP32 + MPU6050, 8×8 matrix, on-board classifier. Nothing here is a render: the numbers came from the code and from measurements.
The problem
Skateboarding has no data. Video is an opaque blob: you can see the kickflip, you can't measure the pop, the height, the spin, the foot. And what a phone in a pocket measures is the body, not the deck. Gappin needed the deck speaking for itself — without changing the weight, the feel or the griptape of whoever rides it.
What the house made
A deck instrumented end to end: sensors that survive a landing, firmware that separates measuring from transmitting across two cores, a protocol that would rather lose a packet than delay it, and the dashboard that turns the stream into reading. AXIS takes its name from the three axes it measures: pitch, roll and yaw.
How it was built
Three decisions from the first prototype did not survive real use and were replaced with numbers in hand: keyboard membrane became Velostat (continuous reading, no contact to break); MQTT over TCP became fire-and-forget UDP (a packet lost at ms 15 must not arrive at ms 300); raw data became quaternions from the Madgwick filter, immune to the gimbal lock a 360° flip causes.
A seven-layer sandwich, invisible under the grip
Two families of conductive-fabric strips cross a whole sheet of Velostat, a carbon-loaded polyethylene whose resistance drops under pressure. Every crossing is an analogue cell from 0 to 255. Fabric, not copper: the deck flexes, and copper tape cracks on the first ollie. Edges pinned with Kapton, the centre free to compress. No solder in the standing area — the connection folds to the side of the deck, near the trucks.
The prototype's 8×8 grid came from a handboard demo. Measuring 13,365 frames of real contact in the replay, the foot sweeps 48 cm along the deck by 5 cm across: it slides lengthwise, from pop to catch, not rail to rail. The measured proposal is 40×10 cells of 2 cm over the whole 80.1 × 20.5 cm deck — a sole covers 20 cells and the flick crosses 15 to 25. It costs 8.1 ms of scanning and the second core. Proposed with numbers; not yet decided.
Two cores: one measures, the other speaks
The ESP32 has two cores at 240 MHz and the firmware uses them as two departments. On core 0, the IMU reads at 200 Hz (±16 g, ±2,000 °/s, a 42 Hz filter against asphalt vibration), Madgwick fuses accelerometer and gyroscope into a quaternion, and the matrix is scanned at 60 Hz through two 16-channel multiplexers. On core 1, it all becomes a 114-byte struct with a sequence number and a timestamp, and leaves as a UDP broadcast. Per 5 ms frame the work takes 1.66 ms: 66% is left over.
The IMU sits at the deck's geometric centre, and that enters the maths: 15 cm off centre, a 1,200 °/s kickflip adds 6.71 g of centripetal term to the reading; at the centre, zero. It is the choice that makes the signal interpretable.
Fire and forget
MQTT runs over TCP, and TCP guarantees delivery: when a packet is lost, it pauses everything and resends the old one. For kinematic telemetry that is poison — the sample from millisecond 15 arriving at 300 destroys the physics. AXIS speaks UDP from a Wi-Fi network it creates itself, with no router, no internet and no pairing: the same protocol as multiplayer games. Eight bytes of header, no retransmission, latency under 5 ms. A one-byte sequence number reveals what was lost; nobody waits for it.
A neural network of 87 → 28 → 9
An event starts at 3 g and is confirmed at 6 g. From there, 1.74 s of acceleration at 50 Hz (decimated from 200) feed a per-axis neural network with 87 inputs, 28 hidden neurons and 9 outputs — the phase-1 flatground tricks — based on Corrêa, Lima, Russomano and Santos (2017). At 70% confidence the deck emits the event: trick name, peak height, landing g, airtime. Classification happens on the microcontroller, before any cloud.
Π(t): where the foot is, and how hard
One instant of the Footprint Map, front foot on the left, back foot on the right. The pop is a sudden peak at the tail; the catch is pressure migrating to the centre and nose; the landing is a symmetric distribution with the g peak on the accelerometer at the same instant; the resting position says whether the skater is regular or goofy.
Live over UDP, forever in Parquet
During the session the stream is live: deck → phone or Gappin Node, never through the internet. The ESP32 keeps a copy on its own flash to sync later if the network fails. Session over, the batch goes up as FlatBuffers and becomes one Parquet file per session: ten minutes at 200 Hz and 60 Hz are 7.58 MB raw and about 450 KB columnar, 94% less, queryable in SQL. The dashboard receives a JSON summary, never the raw data.
One session, six projections
Every trick becomes a W5H record: who, what, where, when and how — the how is the biomechanical tensor, and in place of why comes WOW, the measured impact. Over that timestamped event stream, the Gappin dashboard does not draw one screen: it draws six projections of the same data. Time is the primary axis and colour encodes data — style polarity, smooth to aggressive, runs cyan to magenta across the whole interface; WOW, 0 to 100 with a half-life, sets the intensity.
Underneath, 55,000 entities in SQLite (skaters, videos, brands, tracks) in a typed graph, the UDP receiver in Rust inside Tauri, and React reading the ring buffer at 20 Hz.
Status, measured
What exists: PlatformIO firmware with IMU, 8×8 matrix, Madgwick, UDP and the on-board classifier; a Rust receiver in the Gappin Node; a dashboard with the views above. What is proposed with numbers and not decided: the 40×10 matrix, a custom PCB with ESP32-S3 and ICM-42688-P, a 100-unit run at about US$ 33 each. What does not exist: a production backend, an iOS app. The house writes what it measured.
Credits and sources
Concept, hardware, firmware, protocol and dashboard: Nilo River. Scientific basis of the classifier: Corrêa KN, Lima JCM, Russomano T, Santos MA, “Development of a skateboarding trick classifier using accelerometry and machine learning”, Research on Biomedical Engineering, 2017. Filter: Madgwick AHRS (open source). Documentation: GAPPIN_AXIS_HARDWARE.md, GAPPIN_TECHNICAL_OVERVIEW.md, firmware/axis_deck.