{"id":1807,"date":"2023-06-12T08:41:47","date_gmt":"2023-06-12T12:41:47","guid":{"rendered":"https:\/\/techministry.blog\/?p=1807"},"modified":"2023-06-12T08:41:47","modified_gmt":"2023-06-12T12:41:47","slug":"timekeeper-controlling-timers-through-a-web-ui-and-stream-deck","status":"publish","type":"post","link":"https:\/\/techministry.blog\/?p=1807","title":{"rendered":"TimeKeeper: Controlling timers through a web UI and stream deck"},"content":{"rendered":"\n<p>One of my first projects I shared on this blog <a href=\"https:\/\/techministry.blog\/2018\/11\/29\/server-based-countdown-clocks-with-multiple-client-viewers-using-node-js-and-a-raspberry-pi\/\">over 5 years ago<\/a> was TimeKeeper &#8211; something we use to help manage countdowns to service start times, various production elements, etc. 5 years later, it&#8217;s still running strong and we use it every week.<\/p>\n\n\n\n<p>I recently decided to give some effort toward creating a UI that would allow us to add and edit timers from the web interface, so that we could retire the Ross Dashboard custom panel that I created for it. We still use Dashboard, but for this, it was actually more work for our volunteers to use two tools rather than one &#8211; one for adding\/editing, and one for viewing.<\/p>\n\n\n\n<p>The new UI is simple &#8211; you can add a new timer directly from the page or edit an existing one. For now, I haven&#8217;t bothered with any permissions because our needs are very simple.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/techministry.blog\/wp-content\/uploads\/2023\/06\/screenshot-2023-06-12-at-8.31.06-am.png?w=1024\" alt=\"\" class=\"wp-image-1813\" \/><\/figure>\n<\/div>\n\n\n<p>Editing a timer is just as easy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" src=\"https:\/\/techministry.blog\/wp-content\/uploads\/2023\/06\/screenshot-2023-06-12-at-8.31.12-am.png?w=1024\" alt=\"\" class=\"wp-image-1812\" \/><\/figure>\n<\/div>\n\n\n<p>I also created a Companion 3.0 module for us that allows us to create and modify timers and view them there as well. Now we can easily bump a timer and add 30 seconds if needed just by quickly pressing a button.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/techministry.blog\/wp-content\/uploads\/2023\/06\/screenshot-2023-06-12-at-8.40.29-am.png?w=1016\" alt=\"\" class=\"wp-image-1815\" width=\"495\" height=\"265\" \/><\/figure>\n<\/div>\n\n\n<p>If you use TimeKeeper, <a href=\"https:\/\/github.com\/josephdadams\/TimeKeeper\">go check out the new version<\/a> along with <a href=\"https:\/\/github.com\/bitfocus\/companion-module-techministry-timekeeper\">the Companion module<\/a>!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of my first projects I shared on this blog over 5 years ago was TimeKeeper &#8211; something we use to help manage countdowns to service start times, various production elements, etc. 5 years later, it&#8217;s still running strong and we use it every week. I recently decided to give some effort toward creating a &hellip; <a href=\"https:\/\/techministry.blog\/?p=1807\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;TimeKeeper: Controlling timers through a web UI and stream deck&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[29,50,51,69],"class_list":["post-1807","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-javascript","tag-production","tag-programming","tag-timekeeper"],"_links":{"self":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts\/1807","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1807"}],"version-history":[{"count":0,"href":"https:\/\/techministry.blog\/index.php?rest_route=\/wp\/v2\/posts\/1807\/revisions"}],"wp:attachment":[{"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1807"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1807"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techministry.blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1807"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}