<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Design - Stuart Jones]]></title><description><![CDATA[Designs & Code]]></description><link>https://stuart-jones.com/</link><image><url>https://stuart-jones.com/favicon.png</url><title>Design - Stuart Jones</title><link>https://stuart-jones.com/</link></image><generator>Ghost 3.13</generator><lastBuildDate>Tue, 14 Apr 2026 12:55:52 GMT</lastBuildDate><atom:link href="https://stuart-jones.com/tag/design-2/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Sous Chef, The Cooking Stream Companion App]]></title><description><![CDATA[Sous Chef is a comprehensive companion application for hosting cooking shows on the Twitch livestreaming platform.]]></description><link>https://stuart-jones.com/blog/sous-chef-the-cooking-stream-companion-app/</link><guid isPermaLink="false">601b28eeac48ec069c96ddda</guid><category><![CDATA[Design]]></category><category><![CDATA[Projects]]></category><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Stuart Jones]]></dc:creator><pubDate>Sat, 22 May 2021 19:24:36 GMT</pubDate><media:content url="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-03-06-at-3.28.11-PM-1.png" medium="image"/><content:encoded><![CDATA[<h2 id="overview">Overview</h2><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/03/Screen-Shot-2021-02-28-at-4.34.24-PM-2.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-03-06-at-3.28.11-PM-1.png" alt="Sous Chef, The Cooking Stream Companion App"><p>Sous Chef is a comprehensive companion app for hosting cooking shows on the Twitch livestreaming platform. It integrates with every aspect of the streaming experience, providing animated video overlays for rendering show graphics, a web-based control panel for switching cameras and managing other show elements, and integration with Twitch's chat functionality for engaging with audiences.</p><p>The application is built upon a variety of open source tools, including Electron, Express, Socket.io, React, Webpack, and Bootstrap. Sous Chef has a modular architecture, allowing pieces to be added or removed depending on the host's particular needs. It was developed in collaboration with <a href="http://twitter.com/andrewcookslive">@AndrewCooksLive</a>, and its code can be found on <a href="https://github.com/imstubtw/sous-chef">GitHub</a>. Icons and graphics were provided by the <a href="https://mutant.tech/">Mutant Standard</a> alternative emoji set.</p><!--kg-card-begin: html-->
<div class="og-main-interior"><!--kg-card-end: html--><h2 id="features">Features</h2><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/03/Screen-Shot-2021-03-06-at-3.28.11-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><!--kg-card-begin: markdown--><ul>
<li>Runs locally as a native application on both macOS and Windows.</li>
<li>Provides a web-based control panel that can be accessed from any computer, tablet, or smartphone on the host computer's LAN.</li>
<li>Includes integration with <a href="https://github.com/Palakis/obs-websocket">OBS-Websocket</a> plugin for software-based scene switching and device muting.</li>
<li>Locally hosts a web overlay which can be integrated into the Open Broadcaster Software (OBS) or Streamlabs OBS. Overlay elements include:
<ul>
<li>Video inlay panels</li>
<li>Stream info panels (Recipe details, etc.)</li>
<li>Multiple simultaneous timers</li>
<li>Image and Tweet embeds (including animated gifs and Twitter videos.)</li>
<li>Probe thermometer temperature charts and live readouts</li>
<li>iTunes integration for displaying background music details.</li>
<li>Full-screen confetti and other celebratory animations</li>
</ul>
</li>
<li>Supports Twitch's chat API. Can post messages to chat, respond to viewer commands, allow select viewers to trigger overlay actions, and engage viewers with automated trivia questions.</li>
<li>Additionally supports Twitch's event APIs, allowing actions to automatically trigger when users perform standard actions such as following or subscribing.</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h2 id="background">Background</h2><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-09-at-6.31.12-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>This project might take a bit more explaining than usual. I never saw myself as the type of person to co-host a cooking show, but 2020 turned out to be an interesting time for everyone. By now most people are at least passingly familiar with Amazon's livestreaming video platform Twitch. It originally launched as a platform solely dedicated to allowing gamers to livestream their video gaming sessions, but in the years since it launched, they've opened it up to all sorts of non-gaming topics.</p><p>Twitch streams now feature everything from artists painting to live music concerts, or in our case, a homegrown cooking show. Hosting a show on Twitch is a bit like running you own TV show, with a few subtile differences. Most notably, there's a chatroom running alongside every broadcast. Your typical Twitch streamer isn't broadcasting out into the void, but rather interacting with a community of regular viewers. For our stream in particular, <a href="https://twitter.com/andrewcookslive">@AndrewCooksLive</a> handles the bulk of the culinary workload, and I help produce things. (I've been known to occasionally hop in and chop some onions when things get hectic.) It's been a fun way of staying connected to other people during these quarantine times, and stopped us from falling into a culinary rut.</p><p>In addition to having to come up with something new to cook every week, it turns out there is a <em>ton</em> of specialized technology that goes into producing a livestream. Your basic video game stream simply needs a webcam, a microphone, and streaming screen capture software. Your basic cooking stream however typically involves two or three cameras, wireless microphones, streaming software, and usually some additional plugins or programs. That's where Sous Chef comes in. What originally started as a side project to show recipe info and egg timers on our stream has morphed into the glue holding the entire show together.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h2 id="our-setup">Our Setup</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-02-at-4.01.12-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"><figcaption>Can't forget the dog cam!</figcaption></figure><p>While the software's important, I want to touch briefly on the hardware we're working with. Our setup and configurations could be its own specific writeup, but in brief, we're currently using:</p><ul><li>Three Logitech C920 Webcams</li><li>A wireless IP camera</li><li>Two wireless UHF lavalier microphones</li><li>A PC with enough horsepower to handle all of the above</li><li>A kitchen's worth of pots, pans, and accoutrement</li></ul><p>Everything's arranged in the kitchen through a variety of camera arms, tripods, and 3D printed mounts. (It's seriously tricky to hang a camera over a cutting board while still being able to chop efficiently.) Our next big project is to improve the lighting of the show, but for now, it's a pretty solid cooking stream setup for only a few hundred dollars. It also helps that we're currently not entertaining company who might have more than a few things to say about the number of USB cables scattered about our kitchen.</p><p>On the software side of things, you've got one big choice you need to make: Are you going to go with the Open Broadcaster Software's <a href="https://obsproject.com">OBS Studio</a>, or Streamlabs.com's custom <a href="https://streamlabs.com/streamlabs-obs">Streamlabs OBS</a>? OBS Studio is the classic piece of open source software that helped jumpstart the particular streaming revolution that we're currently in, while Streamlabs OBS is a proprietary layer of niceties on top of the open source software to make things run a bit more smoother. For the purposes of Sous Chef, either work. You simply need to be able to create a web browser overlay element, which both support.</p><p>To touch on Streamlabs.com for a moment: Their site touts it as the "All-in-One Live Streaming Software". If this sounds familiar, it's because Sous Chef is essentially a competitor to Streamlabs. Streamlabs can handle onscreen elements, manage chatbots, and even take care of complicated processes like taking money for donation drives. It's essentially the Wordpress of web streaming, if you have any experience in the blog CMS world. Streamlabs.com is the Swiss army knife of live streaming services, while Sous Chef is designed to be more specifically focused on the elements of live streaming that would be useful during a cooking stream. I generally prefer working with OBS Studio to avoid Streamlabs' constant nudging that I pay for a premium subscription, or check out their gallery of paid themes, but I still will occasionally use some of Streamlabs.com's different plugins for non-standard parts of our show. Either way, whichever flavor of OBS you decide to go with, Sous Chef should have something to offer.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h2 id="getting-started-with-sous-chef">Getting Started With Sous Chef</h2><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-12.04.07-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>Sous Chef is structured a bit unusually as far as <a href="https://www.electronjs.org/">Electron</a> applications go. Electron is a NodeJS framework which allows you to create cross-platform desktop applications using standard web technologies like HTML, CSS, and Javascript. In its most simple form, Electron creates a desktop app window, and then wants you to point it at an HTML file, a localhost URL, or an external web URL.</p><p>If you'd like to do something a bit more complicated than serving up a simple index.html file, there are two different approaches. The first is to use the popular <a href="https://create-react-app.dev">Create React App</a> boilerplate project to develop a complex React frontend for your Electron application. The second approach is to create a localhost environment using the <a href="https://expressjs.com/">Express</a> framework to create a robust backend that's also capable of serving the Electron frontend.</p><p>Sous Chef takes advantage of <em>both</em> of these approaches. Express manages a backend API, and serves the Sous Chef control panel to any browser on the local network. Create React App handles the inner workings of the control panel itself, and brings along some niceties for developing a complex React application like module hot-reloading. When working in dev mode, Create React App will host the frontend on its own localhost port using webpack, and Electron and Express will both just reference this instance. When compiling the application, Create React App will compile the application down to an index.html file that the Express instance manages serving.</p><p>So at a high level, the application structure looks something like this:</p><!--kg-card-begin: markdown--><ul>
<li>sous-chef/ (Top-level app folder)
<ul>
<li>plugins/ (Express back-end modules)
<ul>
<li>recipe.js</li>
<li>timer.js</li>
<li>...</li>
</ul>
</li>
<li>public/ (Create React App flat files)
<ul>
<li>favicon.ico</li>
<li>index.html</li>
<li>...</li>
</ul>
</li>
<li>src/ (Create React App React modules)
<ul>
<li>index.css</li>
<li>index.js</li>
<li>Control/
<ul>
<li>Control.js</li>
</ul>
</li>
<li>Overlay/
<ul>
<li>Overlay.js</li>
</ul>
</li>
<li>...</li>
</ul>
</li>
<li>main.js (App entry point, manages Electron &amp; Express configs)</li>
<li>package.json (App configs)</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p>Go ahead and run <code>npm install</code>. While npm fetches all the required packages, go ahead and take a look at the package.json file's script section. At the risk of losing you to another bulleted list, you can see the various commands that will finally allow us to finally get this bad boy up and running.</p><!--kg-card-begin: markdown--><ul>
<li>&quot;start&quot;: &quot;cross-env PORT=3000 react-scripts start&quot;
<ul>
<li>Launch the application's Create React App</li>
</ul>
</li>
<li>&quot;electron&quot;: &quot;wait-on tcp:3000 &amp;&amp; electron-forge start&quot;
<ul>
<li>Launch the application's Electron main.js component only after it sees a service running on port 3000.</li>
</ul>
</li>
<li>&quot;dev&quot;: &quot;concurrently -k &quot;BROWSER=none npm start&quot; &quot;npm:electron&quot;&quot;
<ul>
<li>Use concurrently to launch the <code>start</code> and <code>electron</code> scripts at the same time. Supress Create React App's standard browser-opening behavior.</li>
</ul>
</li>
<li>&quot;build&quot;: &quot;cross-env PORT=80 react-scripts build&quot;
<ul>
<li>Build the Create React App instance using port 80.</li>
</ul>
</li>
<li>&quot;make&quot;: &quot;cross-env PORT=80 react-scripts build &amp;&amp; electron-forge make&quot;
<ul>
<li>Build the Electron application using port 80.</li>
</ul>
</li>
<li>&quot;package&quot;: &quot;cross-env PORT=80 react-scripts build &amp;&amp; electron-forge package&quot;
<ul>
<li>Build the Create React App instance using port 80, then make and package the Electron application for distribution.</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><p>As you can see, these scripts typically build on top of each other. <code>npm run dev</code> launches <code>npm start</code> and <code>npm electron</code> together, while <code>npm run package</code> kicks off <code>npm run build</code> and <code>electron-forge package</code> at the same time. Along with the packages I've already discussed, you've probably noticed that Sous Chef takes advantage of the <a href="https://www.electronforge.io">Electron Forge</a> toolkit to streamline the build and distribution process.</p><p>You're <em>almost</em> ready to get started. There's just one last piece that needs taking care of. Sous Chef uses the <a href="https://dev.twitch.tv/">Twitch</a> and <a href="https://developer.twitter.com/">Twitter</a>  APIs for fetching data and interacting with 3rd party services. You'll need developer API keys for both websites, so head over to their developer sections, register, and create a new dev application. Once you've got Twitch's client ID, go ahead and copy the format in <code>.twitch-keys_example.json</code> to create <code>.twitch-keys.json</code>. Paste your client ID into the new file's json. Do the same for <code>.twitter-key_example.json</code>. You'll need to put your Twitter consumer key, consumer secret, and bearer token into <code>.twitter-key.json</code>. Twitter can take a few days to create a dev account for new users, so go ahead and do this process now if you're thinking about using Sous Chef.</p><p>Alright, that's everything! Go ahead and fire up <code>npm run dev</code>, and you should see Sous Chef start. If everything looks good, you can use <code>npm run package</code> to create a nice compiled application with a single icon to click.</p><h2 id="using-sous-chef">Using Sous Chef</h2><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-03-06-at-3.28.11-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><h3 id="basic-setup">Basic Setup</h3><p>Once you've got OBS up and running, you'll need to integrate its overlay into your OBS scenes. Create a browser overlay element, and make sure it's the same resolution and size as your screen. Set the source to Sous Chef's overlay URL. There's a few options for this, which can be found in the Config tab of Sous Chef. There's the human-friendly <code>http://souschef.local/overlay</code> for system's with Apple's Bonjour multicast DNS service installed, <code>http://[Your IP]/overlay</code> as a fallback for systems without Bonjour, and <code>http://localhost/overlay</code> if you don't need to access Sous Chef on your LAN. If Sous Chef is running in dev mode, make sure to put <code>:3000</code> after the domain.</p><p>If you'd like to create a scene without the video inset panel, add the query string parameter <code>?noInset=true</code> to the end of the URL.</p><p>If you haven't already, go install the <a href="https://github.com/Palakis/obs-websocket">OBS-Websocket</a> plugin. This will allow Sous Chef to remotely control OBS from outside of the OBS application. You may keep OBS-Websocket's settings at their defaults. If you need to change the default port or would like to add authentication, these settings are managed in /plugins/obs.js via the obs-websocket-js package.</p><p>The "Now Playing" iTunes integration does not require any specific configuration. If you're using iTunes on Windows, iTunes on the Mac, or Apple's new Music app on the Mac, Sous Chef will automatically show song information and cover art when a new track starts playing.</p><p>The Sous Chef control panel is divided into three main sections: Cook, Prep, and Config. </p><h3 id="cook-tab">Cook Tab</h3><!--kg-card-begin: markdown--><h4 id="sceneswitchinghotkeys">Scene Switching &amp; Hotkeys</h4>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.57.34-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The top of Sous Chef has your classic scene-switcher interface. The button layout is designed to mimic <a href="https://www.partsnotincluded.com/diy-stream-deck-mini-macro-keyboard/">Dave Madison DIY Streamdeck project</a>. We've got one at the base of the stove, so it's nice to have the same button layout mapped in software as well. It provides a quick interface to move between the stove, cutting board, and kitchen cameras, as well as quick actions such as muting the microphones or toggling confetti.</p><h4 id="active-timer">Active Timer</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.57.25-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The Active Timer panel lists the timers currently being displayed on the overlay. Once a timer expires, the control panel will play a whistle sound effect, and the expired time will begin to flash red. There will also be an attention-grabbing red flashing boarder on the overlay itself. Timers can be canceled or restarted at any time. The scene Switching and Active Timers panels are responsive, so they'll be displayed side-by-side if the control panel is large enough.</p><h4 id="new-timer">New Timer</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.50.10-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The New Timer panel provides an interface for creating new timers. Users can optionally give the timer a unique name, and either provide a specific amount of minutes and seconds, or use one of the provided hotkeys for common timer amounts.</p><h4 id="show-image">Show Image</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.50.19-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>Sometimes a a picture is worth a thousand words, and you'd just like to show your viewers a specific image from somewhere on the web. The Show Image panel allows you to create a pop-up image panel on the overlay software. It accepts an image URL, and provides options for rotating images in the case that OBS's browser element has difficulty reading a camera's rotation EXIF data. The control panel provides a small thumbnail of the currently displayed image so that the producer can have immediate feedback as to whether or not anything is currently being displayed on the overlay.</p><h4 id="show-tweet">Show Tweet</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.50.52-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>Similar to the Show Image panel, the Show Tweet panel allows you to embed a tweet from Twitter.com on the overlay. The embed panel supports Twitter video and Twitter's .gifv videos, allowing you to quickly show off some animated content.  </p><h4 id="probe-thermometer-control">Probe Thermometer Control</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.49.13-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>This section could honestly be a standalone blog post. After a few streams involving frying, we realized that there's not much for the audience to watch while the oil warms up. There's a number of fry recipes that rely on maintaining a particular fry oil temperature, so we decided why not feed two birds with one scone and display our probe thermometer's output on the overlay itself?</p><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Nov-24-2020_23-27-48-3.gif" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>This is of course easier said than done. We'd been using the reliable <a href="https://www.thermoworks.com/ChefAlarm">Thermoworks Chef Alarm</a>, but it doesn't provide any Bluetooth or Wifi connectivity that we could piggyback off of for the overlay. Rather then investing in a new thermometer, I decided to build a small probe-thermometer-to-PC adapter using an Arduino-based microcontroller. The Arduino reads the electrical resistance of the probe thermometer, passes it through the <a href="https://github.com/giannivh/SmoothThermistor">Steinhart–Hart equation</a> to determine how hot the probe is, and then sends the data to the PC with a basic USB serial signal. There's even a small seven-segment display built in for some immediate feedback.</p><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Nov-24-2020_23-09-21-2.gif" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The Probe Control panel in Sous Chef lets you control what you'd like to do with this thermometer data. Once you selected the proper serial port, you can either display the current temperature, or you can show a live-updating plot of the data with a Chart.js graph. There's also the ability to set an alarm to go off when a target temperature is reached.</p><h4 id="toggles">Toggles</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.51.00-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>Alright, this one's a bit more straightforward. There's a few less-frequently used overlay elements such as confetti or an announcement banner. This panel does what it says on the tin, and allows you to toggle these on and off.</p><h4 id="remote-producers">Remote Producers</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.51.08-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>Part of streaming is letting your audience get in on the fun. A few of the overlay's elements have been tied to chat commands like <code>!cuttingboard</code> or <code>!confetti</code>. The Remote Producers panel allows you to grant permissions to specific users to take over producing responsibilities for the stream.</p><h3 id="prep-tab">Prep Tab</h3><h4 id="recipe-drink">Recipe &amp; Drink</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.51.16-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The Recipe and Drink panels control a small overlay element which let people know what's on the menu for the evening, and what cooking beer you're enjoying during the stream. The URL section controls a small chat bot which responds to !recipe or !drink.</p><h4 id="reminders-bot">Reminders Bot</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.51.25-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The Reminders Bot is a Twitch chatbot which posts specific messages at a regular interval. This is usually used to remind people of ongoing charity drives and other events.</p><h4 id="trivia-bot">Trivia Bot</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.51.51-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>We've been experimenting with a Trivia Bot recently as a way to boost viewer engagement. It's currently managed through a small trivia.json file stored within Sous Chef itself. The trivia bot will post a message at a regular interval, allowing people to score points for various stream prizes.</p><h3 id="config-tab">Config Tab</h3><h4 id="twitch-integration">Twitch Integration</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.52.00-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The aforementioned Twitch integration is controlled through Twitch's OAuth API. Sous Chef requires two separate logins. Collecting stream event data requires the broadcaster to log in, while posting chat bot messages requires the specific chat bot account to login.</p><h4 id="obs-integration">OBS Integration</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.52.05-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The camera switching components rely on OBS's websocket plugin. The connection kicks in automatically when Sous Chef launches, but its status can be double-checked here if something's gone wrong.</p><h4 id="sous-chef-information">Sous Chef Information</h4><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2021/05/Screen-Shot-2021-05-22-at-1.52.12-PM.png" class="kg-image" alt="Sous Chef, The Cooking Stream Companion App"></figure><p>The application has two main web endpoints: The control panel interface, and the overlay itself. The Sous Chef Information panel provides links to these pages in a variety of forms for testing purposes. The most user-friendly of these links is the souschef.local Bonjour networking (mDNS) URL. If the client machine does not have Bonjour installed however, a direct IP option may be used as well.</p><h1 id="closing-thoughts">Closing Thoughts</h1><p>Sous Chef has been a fun quarantine project. It's helped me learn a lot about NodeJs, React, and integrating with 3rd party services and clients. The app is currently fine-tuned to our cooking stream's specific needs, but if it looks like something you would be interested in using, don't hesitate to reach out to me with ideas. All of the code is up on my <a href="https://github.com/imstubtw/sous-chef">Github</a> for forking as well.</p></div>]]></content:encoded></item><item><title><![CDATA[Give Back Case Study]]></title><description><![CDATA[Give Back is a case study for a community volunteering and charitable giving platform design to allow corporate team members to more easily connect with causes in their local area.]]></description><link>https://stuart-jones.com/blog/give-back-case-study/</link><guid isPermaLink="false">5e94b273017a114be0c9615e</guid><category><![CDATA[Projects]]></category><category><![CDATA[Design]]></category><dc:creator><![CDATA[Stuart Jones]]></dc:creator><pubDate>Mon, 13 Apr 2020 19:41:23 GMT</pubDate><media:content url="https://stuart-jones.com/content/images/2020/04/Cycling-Enthusiast-Persona-2-2.png" medium="image"/><content:encoded><![CDATA[<h1 id="summary">Summary</h1><img src="https://stuart-jones.com/content/images/2020/04/Cycling-Enthusiast-Persona-2-2.png" alt="Give Back Case Study"><p>Give Back is a community volunteering and charitable giving platform design to allow corporate team members to more easily connect with causes in their local area. It uses personalized results to proactively recommend events to local team members.</p><p>This product design was conducted as part of the Austin Coding Academy's Product Design Academy program. It served as the overall capstone of the course. For more details on the final design, as well as the Adobe XD file, please view this accompanying blog post.</p><!--kg-card-begin: html-->
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="problem-statement">Problem Statement</h1><p>Team members do not know what community volunteering and charitable giving opportunities are going on in their local areas.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="research-data">Research Data</h1><p>Employees who volunteer in their local community consistently score higher on all measures of job satisfaction than those who don't. Creating a strong culture of volunteerism not only improves the company's public image, but it strongly contributes to talent retention.</p><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2020/04/Capture-3.PNG" class="kg-image" alt="Give Back Case Study"></figure><p>Currently 52% of team members of team members engage in volunteering events. The company's 2030 social impact goal is to increase this metric to 75%. I believe with this new platform's personalized recommendations, 60% engagement would be an engaging goal to strive for.</p><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2020/04/Capture2.PNG" class="kg-image" alt="Give Back Case Study"></figure><figure class="kg-card kg-image-card"><img src="https://stuart-jones.com/content/images/2020/04/Capture-2-2.PNG" class="kg-image" alt="Give Back Case Study"></figure><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="customer-research-survey">Customer Research Survey</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Survey.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Customer Research Survey</figcaption></figure><p>A brief <a href="https://forms.gle/zbJZP3oFSK91t1gN9">customer research survey</a> was created using Google Forms. It features branching logic to gain further insights based off of whether or not the respondent currently volunteers, or if they did not participate in volunteering events in 2019.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="user-interview-questions">User Interview Questions</h1><p>Additionally, a set of user interview questions were created for a moderated guided discussion. The initial hypothesis of the interviews was that users were having trouble discovering new volunteering opportunities.</p><ol><li>Have you volunteered in the past?</li><li>What sort of volunteer activities do you enjoy?</li><li>What motivates you to volunteer?</li><li>How do you hear about new volunteer opportunities?</li><li>Do these opportunities generally align with your interests?</li><li>Are you satisfied with the amount of time you're donating?</li><li>Who do you typically volunteer with?</li><li>What do you think about our current volunteering tool?</li><li>Do you ever donate to charities online?</li><li>Do you use Dell's charity portal to make matching donations?</li></ol><p>At the end of the interviews, the hypothesis was proven correct. I proceeded to conduct several additional exercises to better understand the potential applicaton's users.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="personas">Personas</h1><p>Three personas were created based off of my interviews. They briefly summarize the different attitudes I encountered when it came to work-sponsored volunteering.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Cycling-Enthusiast-Persona-2-1.png" class="kg-image" alt="Give Back Case Study"><figcaption>Cycling Enthusiast Persona</figcaption></figure><p>The cycling enthusiast persona was key to developing the event-driven features of Give Back. They participate in several different charity bike rides throughout the year, but volunteer in a largely cause-independent fashion.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Cause-Focused-Persona-1.png" class="kg-image" alt="Give Back Case Study"><figcaption>Cause-Focused Volunteer</figcaption></figure><p>Conversely, the cause-focused volunteer is centered around a breast cancer survivor. Due to their personal connection with the cause, they will generally drop everything to participate in a breast cancer research or support related volunteer activity.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Low-Interest-Volunteer-Persona-1.png" class="kg-image" alt="Give Back Case Study"><figcaption>Low-Interest Volunteer</figcaption></figure><p>Finally, the low interest volunteer represented users who generally just volunteered during team-sponsored events. They were a useful case to study, because even though they rarely volunteered, they could name multiple charities that they felt strongly about and supported.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="empathy-map">Empathy Map</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Empathy-Map-1-2.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Empathy Map for Cycling Enthusiast</figcaption></figure><p>In addition to the persona exercise, an empathy map was also created for the cycling enthusiast. This alternative format to the persona card was useful for capturing the thoughts and feelings of the users I interviewed.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="journey-maps">Journey Maps</h1><p>As the last step of the user research, journey maps were created for several use cases. These design artifacts were useful when envisioning how different functionality would work in the tool.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Map2.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Cycling Enthusiast Journey Map</figcaption></figure><p>The Cycling Enthusiast knows what volunteer events they like to participate in. They're a cyclist, and want to know about upcoming charity bike rides. This user is proactive enough to log into the site well before events and register their interest. They map go the additional step of enabling email communications to hear about upcoming charity rides.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Map3.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Cause-Focused Event Coordinator Journey Map</figcaption></figure><p>The Event Coordinator comes from the other direction. They're running a volunteer opportunity in town, and are looking to get the word out on their event. The more ways they can spread the word and engage their volunteering teams, the better.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Map1.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Low-Interest Volunteer Journey Map</figcaption></figure><p>The Late Planner is not significantly engaged with community volunteering. They typically join events when their team is going as a group, or when their organization is targeting a specific volunteering goal. They primarily interact with the site when they are looking for events happening in the near future, or geographically close to their home or office.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="mood-board">Mood Board</h1><p>Finally, the application design process was ready to begin. A digital mood board was created with various images from past volunteering events to create an impression of what Give Back was aiming to enable.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/image-4.png" class="kg-image" alt="Give Back Case Study"><figcaption>Give Back Digital Mood Board</figcaption></figure><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="key-performance-indicators">Key Performance Indicators</h1><p>In addition to the 2030 goal of getting 75% of the company's team members volunteering, Give Back is tracking the following KPIs:</p><ul><li>Number of volunteer activities performed.</li><li>Number of hours volunteered.</li><li>Number of charitable donations made.</li><li>Amount of charitable donations raised.</li><li>Number of employees with a personalized out user profile.</li><li>Decreased amount of time to perform common tool actions.</li></ul><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="sketches">Sketches</h1><p>I created several pen-and-paper sketches of key pages of the application. These sketches tested several different layouts, such as a list-based category page and a search-based category page.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/IMG_3358-2.jpg" class="kg-image" alt="Give Back Case Study"><figcaption>Two Home Page Sketches</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/IMG_3354-2.jpg" class="kg-image" alt="Give Back Case Study"><figcaption>Two Category Page Sketches</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/IMG_3355-2.jpg" class="kg-image" alt="Give Back Case Study"><figcaption>Two Event Detail Page Sketches</figcaption></figure><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="lo-fi-wireframes">Lo-Fi Wireframes</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Give-Back-Wireframe-Home.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Lo-Fi Wireframes</figcaption></figure><p>Once the general idea was sketched, I created a set of lo-fi wireframes using Adobe XD. These wireframes allowed me to test and prototype different interactions. If you would like a closer detail of my lo-fi wireframes, they're avalible on the <a href="https://xd.adobe.com/view/ac1189bd-9317-48ce-5d91-631199154a44-da20/">Adobe XD preview site</a>.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="design-system">Design System</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Dell-Design-System.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>The Dell Design System</figcaption></figure><p>Before the hi-fi wireframes could be created, I needed to determine which design system or UI framework I would be working with. As part of this product design exercise, my course was also giving us an opportunity to work with a real-world corporate design system. My Give Back design mockup uses the <a href="https://www.delldesignsystem.com/">Dell Design System</a> for it's branding guidelines and core components. I also created a few additional volunteer-centric components which did not exist as part of the Dell Design System.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="hi-fi-wireframes-prototype">Hi-Fi Wireframes &amp; Prototype</h1><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://stuart-jones.com/content/images/2020/04/Dell-Give-Back-Hifi-Screenshot-2-1.PNG" class="kg-image" alt="Give Back Case Study"><figcaption>Hi-Fi Wireframes</figcaption></figure><p>The final high fidelity wireframe for the Give Back project was once again created in Adobe XD. The tool made it quick and easy to test different page designs, as well as work with Dell Design System components. The high fidelity wireframes focus on five key pages of the application, demonstrating a straightforward user flow for joining an event. If you'd like to browse the full mockup, it is available on the <a href="https://xd.adobe.com/view/27b779c3-6630-4373-519a-8b50e62b56dd-5186/?fullscreen">Adobe XD preview website</a>. Additionally, I've created a dedicated <a href="https://stuart-jones.com/new/blog/give-back-design-mockup/">blog post</a> to discuss the final design of the site, and the way the different portions of the site are structured.</p><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="elevator-pitch">Elevator Pitch</h1><p>Now that the overall Give Back design had been created, I still needed to be able to successfully pitch the idea. The first component was a 30-second elevator pitch succinctly summarizing Give Back's value proposition and differentiating factors.</p><blockquote>Dell Give Back is a community engagement and charitable donation platform designed to engage Dell team members with their local area. It gives personalized recommendations based on the types of events users like to perform, the charities they like to support, and the causes they care the most about. This new platform not only supports its Legacy of Good goals, but it helps support Dell's people strategy as well. Employees who are engaged with their community score higher across every job satisfaction metric.</blockquote><!--kg-card-begin: html--></div>
<div class="og-main-interior"><!--kg-card-end: html--><h1 id="pitch-deck-presentation">Pitch Deck &amp; Presentation</h1><p>The last asset created for the Give Back product design was a basic <a href="https://xd.adobe.com/view/e6721b4b-3d6c-413f-54f0-d3710d2a6eba-9043/?fullscreen">pitch deck</a>. At the end of the course, we were each given a five minute time slot to present our work. I created my presentation within Adobe XD, so the interactive mockup could be embedded with the slides.</p></div>]]></content:encoded></item></channel></rss>