{"id":759,"date":"2024-02-13T14:34:58","date_gmt":"2024-02-13T22:34:58","guid":{"rendered":"https:\/\/www.nathanbak.com\/?p=759"},"modified":"2026-01-02T19:59:39","modified_gmt":"2026-01-03T03:59:39","slug":"better-by-december","status":"publish","type":"post","link":"https:\/\/nathanbak.com\/?p=759","title":{"rendered":"Better by December"},"content":{"rendered":"\n<p>At the end of 2022 I had scheduled vacation days, but plans fell through and I found myself with extra time to kill.  I generally do better when I have something to keep me out of trouble, so I built a web application.<\/p>\n\n\n\n<p>With the new year rapidly approaching I was starting to think about goals that I had for 2023 and how to track them.  I <a href=\"https:\/\/www.nathanbak.com\/?p=477\" data-type=\"post\" data-id=\"477\" target=\"_blank\" rel=\"noreferrer noopener\">again<\/a> wanted to do 10,000 sit ups and 10,000 pushups over the year.  Also, my Wife and I wanted to go on 150 walks together.  In addition to goals, I also wanted track other things such as the books I read and the number of days I played guitar.  The hope was by doing those things I&#8217;d be a better person by the next December.<\/p>\n\n\n\n<p>For those who might be interested in the basic architecture, here&#8217;s a summary of the various pieces I built and\/or assembled:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>I have a &#8220;december-back&#8221; repository on Github (currently the repository is private) which does most of the work for the service.  I wrote that in Golang.<\/li>\n\n\n\n<li>I have a &#8220;december-front&#8221; repository on Github (currently the repository is private) which provides the web user interface for the service.  I wrote that in JavaScript\/TypeScript using React.<\/li>\n\n\n\n<li>The &#8220;december-front&#8221; project is built using npm and the resulting artifacts are stored in an AWS S3 bucket and delivered via Cloudfront.<\/li>\n\n\n\n<li>The &#8220;december-back&#8221; project is packaged into a Docker image and published to a registry via a Github action.<\/li>\n\n\n\n<li>Docker containers are spun up in AWS ECS (Elastic Container Service) on Fargate.<\/li>\n\n\n\n<li>Route53 on AWS takes care of domain registration for betterbydecember.com and also provides all the DNS goodness and ensures requests are correctly directed to the front or back end.<\/li>\n\n\n\n<li>An EC2 Load Application Load Balancer can direct traffic to one of two different regions and also takes care of all the https certificate goodness.<\/li>\n\n\n\n<li>All the data is stored in a DataStax Astra database since it&#8217;s &#8220;<a href=\"https:\/\/www.nathanbak.com\/?p=594\" data-type=\"post\" data-id=\"594\" target=\"_blank\" rel=\"noreferrer noopener\">a database I want to use<\/a>&#8220;.<\/li>\n<\/ul>\n\n\n\n<p>The web app is available at <a href=\"https:\/\/www.betterbydecember.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.betterbydecember.com\/<\/a> and anybody can try it out.  It&#8217;s been over a year since the basic functionality was complete and I started using it to track my progress.  I met my 2023 goals and feel like I became Better by December.  Now that 2024 is in full swing, I&#8217;ve set new goals and am actively working towards becoming Better by December.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the end of 2022 I had scheduled vacation days, but plans fell through and I found myself with extra time to kill. I generally do better when I have something to keep me out of trouble, so I built a web application. With the new year rapidly approaching I was starting to think about &hellip; <a href=\"https:\/\/nathanbak.com\/?p=759\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Better by December&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[25,19,10],"class_list":["post-759","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-betterbydecember","tag-golang","tag-making"],"_links":{"self":[{"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/posts\/759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nathanbak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=759"}],"version-history":[{"count":3,"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/posts\/759\/revisions"}],"predecessor-version":[{"id":762,"href":"https:\/\/nathanbak.com\/index.php?rest_route=\/wp\/v2\/posts\/759\/revisions\/762"}],"wp:attachment":[{"href":"https:\/\/nathanbak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nathanbak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nathanbak.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}