I wanted nice feeling buttons for the device, so I looked at the Cherry MX series of buttons. They are mechanical buttons and have several different options for height/weight and press action. I sampled a few different types and ultimately decided on Chery MX1A-C1NW buttons. The only circuitry needed to support the buttons is debouncing circuitry. The buttons are open circuit when not pressed, and closed circuit when pressed.
The debouncing circuit is necessary to provide glitch free transitions when a button is pressed or released. The RC circuits slow down the rise and fall times so that only one transition is detected for each button press.
I chose a red, green, and blue LED for general purpose. As of right now, I’m just using the red LED to determine if the board has power. The blue LED is controlled by the firmware, and turns on when the BLE device is connected. It turns off when the BLE device is disconnected.