<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yuki🗻CodeBreath</title>
    <description>The latest articles on DEV Community by Yuki🗻CodeBreath (@tanachu).</description>
    <link>https://dev.to/tanachu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F395407%2F8832cae9-8b04-4d4c-9f90-cc31ab66a6e9.jpeg</url>
      <title>DEV Community: Yuki🗻CodeBreath</title>
      <link>https://dev.to/tanachu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tanachu"/>
    <language>en</language>
    <item>
      <title>Launching the Beta of My Side Project: CodeBreath 🚀 - Making Daily Coding Natural and Fun</title>
      <dc:creator>Yuki🗻CodeBreath</dc:creator>
      <pubDate>Mon, 25 Mar 2024 08:03:00 +0000</pubDate>
      <link>https://dev.to/tanachu/launching-the-beta-of-my-side-project-codebreath-making-daily-coding-natural-and-fun-502e</link>
      <guid>https://dev.to/tanachu/launching-the-beta-of-my-side-project-codebreath-making-daily-coding-natural-and-fun-502e</guid>
      <description>&lt;h2&gt;
  
  
  Introducing CodeBreath: Engineering as Natural as Breathing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CodeBreath&lt;/strong&gt; embodies our mission to integrate daily engineering seamlessly into life, mirroring the simplicity and necessity of breathing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://codebreath.dev"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leveraging GitHub&lt;/strong&gt;, CodeBreath tracks and analyzes coding activities to visualize progress and boost motivation. Through &lt;strong&gt;gamification&lt;/strong&gt;, users can enjoy learning and developing by completing missions and ranking up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje3y7f9io8hvxfy036xa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fje3y7f9io8hvxfy036xa.png" alt="Image description" width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83193ztknlfvfhrrhjm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F83193ztknlfvfhrrhjm9.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv7r7bkrepzmwd1b7829.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiv7r7bkrepzmwd1b7829.png" alt="Image description" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Currently, CodeBreath offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Integration for authentication and commit tracking.&lt;/li&gt;
&lt;li&gt;Gamification features like missions, ranks, and leaderboards.&lt;/li&gt;
&lt;li&gt;Visualization of repository activities with heatmaps, showcasing ongoing streaks and total active days.&lt;/li&gt;
&lt;li&gt;Profile customization and settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technology stack
&lt;/h2&gt;

&lt;p&gt;In selecting our technology stack, we prioritized cost-efficiency, familiarity to ensure good development efficiency, and an overall positive development experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical configuration
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p6gmclmuz5xcp6j653f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8p6gmclmuz5xcp6j653f.png" alt="Image description" width="691" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Remix
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://remix.run/"&gt;Official site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We built the client and server sides using &lt;strong&gt;Remix&lt;/strong&gt;, a React-based full-stack web framework.&lt;/p&gt;

&lt;p&gt;Remix focuses on enhancing user experience through efficient data fetching and optimized page rendering.&lt;/p&gt;

&lt;p&gt;Its familiarity was a key reason for selection, allowing us to leverage previous knowledge and lower the learning barrier for newcomers. Our application incorporates TypeScript, TailwindCSS, and Prisma.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fly.io
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://fly.io/"&gt;Official site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We chose &lt;strong&gt;Fly.io&lt;/strong&gt; for both computing and database services.&lt;/p&gt;

&lt;p&gt;Fly.io offers edge computing, allowing applications to run closer to users for faster, low-latency experiences.&lt;/p&gt;

&lt;p&gt;This aligns well with Remix's SSR (Server-Side Rendering) focus, as Fly.io's edge computing enhances SSR's speed and efficiency.&lt;/p&gt;

&lt;p&gt;We opted for Fly.io not only because of its compatibility with Remix but also due to its free plan option, though pricing may have changed, so it's wise to check for &lt;a href="https://fly.io/docs/about/pricing/#plans"&gt;the latest details&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Initially, our setup included Fly.io for computing and &lt;a href="https://planetscale.com/"&gt;PlanetScale&lt;/a&gt; for databases. However, with the discontinuation of PlanetScale's free plan, which led to a minimum charge of $39 per month, we transitioned to using Fly.io's Postgres service to maintain cost-efficiency.&lt;/p&gt;

&lt;p&gt;Our infrastructure comprises both production and staging environments, doubling the computing and database machines to four in total.&lt;/p&gt;

&lt;p&gt;With the launch of our beta version, we subscribed to Fly.io's Launch plan at $29 monthly. This approach aims at streamlining cost management and operational efficiency for current and future service development, leveraging Fly.io's comprehensive offerings for both computing and databases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Firebase
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://firebase.google.com/?hl=ja"&gt;Official site&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We're also utilizing &lt;strong&gt;Firebase&lt;/strong&gt; for its reliability.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For GitHub authentication, we're using Firebase &lt;strong&gt;Authentication&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;For storing images, Firebase &lt;strong&gt;Storage&lt;/strong&gt; is our choice.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CloudRun Job
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/run/docs/overview/what-is-cloud-run?hl=ja#jobs"&gt;Document of CloudRun Job&lt;/a&gt;&lt;br&gt;
&lt;a href="https://cloud.google.com/scheduler?hl=ja"&gt;Document of CloudScheduler&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At CodeBreath, daily batch processes run at midnight UTC to update mission completion statuses, calculate experience points, and compute rankings based on user activities. These batch jobs are executed with &lt;strong&gt;CloudRun Job&lt;/strong&gt;, scheduled by &lt;strong&gt;CloudScheduler&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The choice of CloudRun was motivated by its cost-effectiveness and our familiarity with GCP from work use. This setup remains free under a certain user count threshold.&lt;/p&gt;

&lt;p&gt;Considering CodeBreath's potential global user base, we plan to stagger job execution times by region, ensuring data processing occurs during off-peak hours for all users.&lt;br&gt;
 Additionally, scalability to handle increased user numbers through parallel task execution is a key future capability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Integrating GitHub
&lt;/h2&gt;

&lt;p&gt;For integrating GitHub with CodeBreath, the service primarily focuses on aggregating GitHub activities, with a keen eye on security and privacy. It collects commit or push timings from GitHub activities.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For public repositories, it directly fetches commit times using GitHub API through scheduled jobs controlled by CodeBreath.&lt;/li&gt;
&lt;li&gt;For private repositories, instead of using GitHub API, it requires users to save a token in secrets and place a workflow file to execute CodeBreath's API on push, avoiding direct repo access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo6xp0qc0yy5ni0kt3fn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgo6xp0qc0yy5ni0kt3fn.png" alt="Image description" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To manage commit times from private repositories without GitHub API, avoiding the need for 'repo' scope OAuth, which grants extensive permissions, CodeBreath utilizes GitHub workflows.&lt;br&gt;
This method triggers CodeBreath's API to capture activity times, ensuring service doesn't need to read the repository directly.&lt;/p&gt;

&lt;p&gt;This approach might limit future feature expansion to public repositories only if certain activity tracking becomes unachievable through workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reflecting on the journey of developing and launching CodeBreath
&lt;/h2&gt;

&lt;p&gt;Reflecting on the journey of developing and launching CodeBreath, a few key learnings stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The fear of SaaS free plan discontinuations is real.&lt;/strong&gt; For systems intended for long-term operation, it's crucial to estimate realistically needed resources and choose SaaS providers accordingly. Free plans often serve as marketing tools and may not last forever.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Large Language Models (LLMs) have significantly boosted development efficiency.&lt;/strong&gt; They've been instrumental in idea generation, logic implementation, and even design tasks. The base designs for mission icons were also generated by ChatGPT.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;There's a growing desire to learn and apply business strategies actively.&lt;/strong&gt; In developing CodeBreath's full version and future projects, there's a focused intent to develop with revenue generation in mind, aiming for a profitable venture.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future Outlook
&lt;/h2&gt;

&lt;p&gt;As we've launched the beta version of CodeBreath, we're just getting started. &lt;strong&gt;Our mission with CodeBreath is to infuse daily engineering routines with new excitement, turning engineering into a habit and ultimately aiding in project success.&lt;/strong&gt; To achieve this, our development will focus on three key areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Habitualizing coding, learning, and blogging activities.&lt;/li&gt;
&lt;li&gt;Offering insights into personal work habits.&lt;/li&gt;
&lt;li&gt;Fostering connections among peers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Guided by this philosophy, we've outlined a &lt;a href="https://trello.com/b/HnPSq2Va"&gt;roadmap&lt;/a&gt; for ongoing development. In parallel, we're eager to explore new service development.&lt;/p&gt;

</description>
      <category>github</category>
      <category>architecture</category>
      <category>sideprojects</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
