Champion Data Systems

Software Engineer & Product Manager

I currently work with a team of three at an early-stage start-up that provides software and hardware solutions to governments. Because it’s such a small team, I’ve taken a lot of ownership with several of our projects.


Joystick Controller

Tech:

Node, Angular, Raspberry Pi 3, HTML5 Gamepad, SocketIO, Bootstrap4, and a gamepad controller to build this project.

Product Goals:

To allow a user to use the gamepad controller to move and zoom (PTZ), set and go to presets, and camera switching of any of their Champ cameras.

Roles:

Lead on project. Product management, design, code development

Process:

After figuring out the MVP, I began creating tasks in the project trello board. The project app lives on a raspberry pi, which a user can power up and go to a provided url path on their computer. A user can then add cameras with IP and port information. By dragging the camera cards, you can change the order of the cameras. The first four represent buttons A-D on the gamepad controller.

Next, plug in the gamepad controller to your computer. With letters A-D on gamepad, you can change between the first four cameras. Numbers 1-9 represent presets a camera can go to. To set a preset, move joystick to find correct frame, press asterick button, then preset number. The HTML5 Gamepad browser event is how I checked for joystick motion and button presses.

We are currently still prototyping the joystick gamepad.

Captions

Tech:

Node, Angular, Google Cloud Platform, Redis, Flowplayer, Materialize, VTT files, Google Cloud Speech to Text

Product Goals

To generate captions for video content through google cloud speech-to-text API. User can then edit the created text as they watch and listen to the video file.

Roles:

Product management, design, code development

Process

Many of our customers were asking for captions for their video meetings. We decided to try out the google cloud speech to text API to create captions. We took some time learning about the API and google cloud platform and determining a proof of concept. We then planned and sketched the MVP in Confluence and began creating trello tickets for the project. My coworker began working on the upload chunker for streaming content, while I began building the node app to create the editable content interface.

The Google Cloud Speech to Text returns segments, which include time frames, CaptionMedia, and CaptionText objects.

I synced the content time (milliseconds) with the time on the flowplayer video, where the current words being spoken were highlighted during video play. To pause the video, the user can hit return on the keyboard, make the content changes, then hit the return key again to play. Once a user is happy with the captions, they can add them to their video meeting.

Studio Controls

Tech:

Node, Angular, MySQL, Bootstrap, and cameras(Pan, Tilt, Zoom)

Product Goals:

To allow a customer to start streaming, switch between cameras and presets (while streaming), create and edit presets, and add lower thirds. Camera presets can be coordinated with groups, in case certain meetings prefer different camera presets.

Roles:

Lead on project. Product management, design, code development

Responsibilities & Process:

I began white boarding to figure out the minimal viable product and how I’d structure the database. After discussing my plans with the other developer on the team, I then started creating the wireframes for the app. The app consists of a control panel for our camera systems through switching, using pan tilt and zoom, and saving presets for each camera.

I wanted the app to be accessible to people who aren’t used to working with camera systems. I decided to build both a simple and advanced display option. I documented the API structures in Confluence, and began to create trello tickets with date goals to keep track of my progress. After the MVP was completed, I merged the code into production, and my colleague began training and getting feedback from our beta users.

Status Puck

Tech:

Arduino ESP8266, web sockets, C++, AdaFruit_NeoPixel, SimpleTimer, ArduinoJSON

Product Goals:

To convey the status of a customers meeting through color.

Roles:

Lead on project. Product management, code development

Process:

A customer can start their stream and within a few seconds, the Status Puck will change color to indicate when the stream starts and when it begins recording. It connects wirelessly to the customer network and is in constant sync with their CHAMP account.

We do this by placing a small button on the side, which when pushed, allows the puck to be used as an access point (setup mode). A customer can connect to a supplied network name, and then go to champsetup.com. On the webpage, the customer can fill out the wifi network name and password.

Once it's submitted, it leaves setup mode, writes data to a local conf file and tries to connect. Once it connects, it then communicates with a "manager app", which sends it the current status of the customers meeting through web sockets.

  • If there is a network or internal error, the led strip will change to red.
  • If the socket message says it's streaming, yellow.
  • Recording, blue.
  • Streaming and recording, green.
  • If it's idle, it will pulse purple.
  • While in set-up mode, white.

Plug it into any USB port or wall outlet and the puck boots and begins working immediately. You can even have multiple devices in different locations.

Responsibilities

I began by doing research on how the Arduino ESP8266 works, reading a few tutorials on how to use the arduino as an access point, and playing around with simple LED light tutorials. I then began sketching out the best ways to communicate with the status puck, and decided to try to keep the puck as simple as possible, with it mainly listening for messages from the manager app. I began creating trello tasks for myself, to help stay organized. I then worked closely with the other developer on the team to begin prototyping how to display the status puck.

We played around with a few ideas, and eventually settled on one. We then built out the beta prototype with a few tools.

Display Modes

Tech

Raspberry Pi 3, Jessie Lite, Node, Angular, Web Sockets, FBI images, bash scripts, FileSystem

Product Goals

To allow a customer to connect the raspberry pi into a monitor, and be able to see one of three different modes.

  • Status mode. Similar to an on-air sign, a customer can see on screen the status of their meeting. When it says streaming and recording, a committee will know to start the meeting.
  • Agenda mode. A customer can push their agenda items from the champ platform to appear on the screen.
  • Streaming mode. A customer can view the live stream from the screen.

You can switch which mode to view through the champ platform.

Roles:

Lead on project. Product management, design, code development

Process

I met with the other developer, and we began sketching out the communication between the raspberry pi app and the "manager app". We decided on an MVP and chose a response and request format for socket communication. I then began creating Trello tickets to set goals and remain organized. I decided to create a "director app", which is the front-end for choosing which mode, located on the champ platform.

When a customer changes a mode, the director app tells the manager app (through web sockets). The manager app then grabs the correct data to send to the raspberry pi app. When the raspberry pi (minion app) connects to the manager, it asks for the last mode status.

Boards

Tech

Node, Angular, MySQL

Product Goals

To allow a customer to add and manage boards under a group, where they can assign people to board seats and add seat details (term length, start dates, roles etc.)

Roles:

Lead on project. Product management, design, code development

Process

I met with the sales director to gather pain points and needs for the board process with customers. I sketched out the API structure and decided on MVP, mainly with the board manager in mind. I made a wireframe, planned out goals and trello tickets and began to work. The plan for V2 is to create a sign-in platform for board members to gather updates and meeting information, while also connecting with other board members.

C615

Research & Development

C615 is a network of innovative, versatile spaces that houses a bold community of creators, thinkers and doers.


C615 Newspaper

I created the concept, content and design of the C615 newspaper. It was fun to dabble with Illustrator, Indesign, and Photoshop and learn more about the print world. I interviewed a handful of small business owners in Nashville and told their stories throughout the paper. View the completed newspaper here.

Personal Projects


Smart Mirror

This was a fun, personal project. I had been wanting to build something with the raspberry pi, so I decided to try out building a smart mirror. I have a more detailed documentation of the project on my medium post. The mirror is currently up in my living room, and has been doing great the past two years!

Tech:

Raspberry Pi, Raspbian Wheezy, Node/Express, Angular, GpiO, ImageMagick, apicache, BASH, OmxPlayer, moment.js, Bing Static Map with traffic layer, Midori Browser, APIs: The New York Times, Forecast.io, Google Calendar, TheySaidSo

Process

I used set intervals to update each api individually. I’m updating the forecast.io api every two minutes, the bing map with traffic layer every five minutes, quote api every six hours, etc. The smart mirror can connect to my home wifi or my iphone hotspot. The hardest part was building the frame ;)

First Hand News

This was one of my first dev projects. I got the idea of this project from Humans of New York. They did a story on the refugee crisis and interviewed refugees in Europe & the Middle East. Their first-hand stories helped me understand the crisis on a deeper level. I decided it would be interesting to create a platform where you can go straight to the source for news. On my platform, users can create news categories and contribute their own related personal stories to those categories. The stories are rateable, which allows the stories to be ordered by highest rating.

Tech:

I used AngularJS, AngularFire, Firebase, base64, and Bootstrap for this project.

Movie History

Tech

We used Jquery, Handlebars, Javascript, Lodash, Firebase, Stars plugin, Q and bootstrap.

I completed the movie history project with two others, Andri Alexandrou and Mathew Ostrander. We created a web app that allows users to search movies through an API and store and rate movies to their account. View the github code here

Content Generation / Marketing

I created content for Cool People Care, a company that shares ideas every day for ways to make the world a better place. I've written over 100 email posts for Cool People Care's email list of 7,000 subscribers.

Girls to the Moon

I led tech sessions two years in a row with Girls to the Moon, a social enterprise company that launches confident girls through events that build creativity, showcase leadership and inspire possibility. The first year, we created a stop motion video with the raspberry pi, and the second year an intruder alert. I also led with an introduction to tech.