diff --git a/server.js b/server.js
index d56495f9b4911e171bb96a6056dabf53ff4980f2..a051316c17aadba04556779baea4823953d87960 100644
--- a/server.js
+++ b/server.js
@@ -239,6 +239,7 @@ t6.outputs.packet.attach(bridge.inputs.F)
 bridge.outputs.F.attach(t6.inputs.packet)
 //bridge.state.rF = '0'
 */
+
 t7.outputs.packet.attach(bridge.inputs.G)
 bridge.outputs.G.attach(t7.inputs.packet)
 
diff --git a/src/hardware/atkbbb.js b/src/hardware/atkbbb.js
new file mode 100644
index 0000000000000000000000000000000000000000..b242352c960f2b375fecff622e5fbdab15861a7b
--- /dev/null
+++ b/src/hardware/atkbbb.js
@@ -0,0 +1,63 @@
+// boilerplate atkapi header
+const InOut = require('../../lib/inout.js')
+let Input = InOut.Input
+let Output = InOut.Output
+let State = InOut.State
+let Button = InOut.Button
+
+const PCKT = require('../../lib/packets.js')
+
+// a constructor, a fn, a javascript mess
+function ATKBreadBoardServo(port) {
+
+    var atkbbs = {
+        // descriptions are used in UI
+        description: {
+            name: 'Breadboard Servo Signal Generator',
+            alt: 'servo',
+            isHardware: true
+        }
+    }
+
+    atkbbs.state = State()
+    // alias !
+    var state = atkbbs.state
+
+    state.button = Button('SEND')
+    state.onChange('button', onButtonPress)
+    state.servoVal = 0 // 0->100 does 1 -> 2ms duty on 20ms period
+    state.onChange('servoVal', onButtonPress)
+
+    atkbbs.inputs = {
+        packet: Input('headless packet', onPacketReturn) // makes anything into '1' event
+    }
+
+    atkbbs.outputs = {
+        packet: Output('number')
+    }
+
+    function onButtonPress(evt) {
+        var pwm = state.servoVal
+        if(pwm > 100){
+            pwm = 100
+        } else if (pwm < 0){
+            pwm = 0
+        }
+
+        var microval = Math.round(7.5 * pwm)
+        console.log('pwm on line', microval)
+
+        var pwmpack = PCKT.pack32(microval)
+        pwmpack.unshift(141)
+
+        atkbbs.outputs.packet.emit(pwmpack)
+    }
+
+    function onPacketReturn(evt) {
+    }
+
+    return atkbbs
+}
+
+// exports 
+module.exports = ATKBreadBoardServo
\ No newline at end of file