<?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: Cecilio Navarro</title>
    <description>The latest articles on DEV Community by Cecilio Navarro (@cecilionavarro).</description>
    <link>https://dev.to/cecilionavarro</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%2F3298048%2Fba964f0c-8836-4b15-9d0b-b05c0dc0cb41.jpg</url>
      <title>DEV Community: Cecilio Navarro</title>
      <link>https://dev.to/cecilionavarro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cecilionavarro"/>
    <language>en</language>
    <item>
      <title>Arduino Project 05</title>
      <dc:creator>Cecilio Navarro</dc:creator>
      <pubDate>Wed, 03 Sep 2025 04:59:39 +0000</pubDate>
      <link>https://dev.to/cecilionavarro/arduino-project-05-5ebg</link>
      <guid>https://dev.to/cecilionavarro/arduino-project-05-5ebg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
When starting an Arduino project, I like to ensure that I understand what I am doing. I have been coding for a while, and my courses at CSUB were mostly in C++. Therefore, when I am learning projects in the Arduino Projects Book and coding, I like to not just copy the code but describe what is happening and then attempt to code the solution myself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building The Circuit&lt;/strong&gt;&lt;br&gt;
I start by looking at the schematic view in the book and then the illustration. I try to insert the wires using the grid on the breadboard. They don’t always line up with the picture. For example, in the book the black, red, and white wires are in a different order than the ones that come on the servo provided in the kit. I always double-check that all my wires are in the correct place logically and not just based on the pictures.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8de16lu5nh1by0cs5af9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8de16lu5nh1by0cs5af9.jpg" alt=" " width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The servo motor comes with female connectors, so I added these header pins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyymf2gwke9zbshaogrot.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyymf2gwke9zbshaogrot.jpg" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding&lt;/strong&gt;&lt;br&gt;
After completing the circuit and making sure that it was wired correctly, I read through the coding section. I wrote down a quick and messy description of what is happening in the code. I would then use this to program it without looking at the book so that I could learn the syntax to program an Arduino. I only allowed myself to look at the Arduino documentation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdp1bywfjk5y9dpzk5j39.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdp1bywfjk5y9dpzk5j39.jpg" alt=" " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I began to code. After getting stuck for a bit on a section, I referred to the book and covered the rest of the code with a sticky note.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuh2m2gpeiz2vkqatpg8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmuh2m2gpeiz2vkqatpg8.jpg" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I heard somewhere that before, when screens were smaller and there was no autocomplete, short concise names were important. However, now this was not a necessity, self documenting code became a thing, and long descriptive names were beneficial. I use this as an excuse to have descriptive variable and funtion names. See how I made the variable names longer when writing them out myself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;Servo.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Servo&lt;/span&gt; &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerPin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potentiometerValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I was stuck for a little bit and then realized that my &lt;code&gt;potentiometerValue&lt;/code&gt; does not come from &lt;code&gt;myServo&lt;/code&gt;, so I needed to change that. I forgot and referred to the documentation, then changed &lt;code&gt;myServo.read()&lt;/code&gt; to &lt;code&gt;analogRead()&lt;/code&gt;. Again, I was not looking at the book or using AI.&lt;/p&gt;

&lt;p&gt;I ended up with the following code. When I compared it to the original, I noticed that I had written const int instead of int const, which is something I now have engrained in me because of this mistake.&lt;/p&gt;

&lt;p&gt;I heard from popular programming YouTuber ThePrimeagen that he doesn’t have all these algorithms memorized line by line. He just remembers the path to them so he can recreate them. This is the approach I take in learning many programming concepts. I memorized what &lt;code&gt;map()&lt;/code&gt; did here, and I was able to recall it later. It needed a value and then the upper and lower bounds for the “from” and the “to.” So, from 0 and 1023 to 0 and 179. These may seem like random numbers, but they are derived from the analog signal (1024) and 180 degrees.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;Servo.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;&lt;span class="n"&gt;Servo&lt;/span&gt; &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerPin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;A0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerValue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potentiometerPin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;potentiometerValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;analogRead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potentiometerPin&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potentiometerValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;potentiometerValue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1023&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;179&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;myServo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Troubleshooting &amp;amp; Success&lt;/strong&gt;&lt;br&gt;
When I finished and uploaded the code, nothing moved. I thought I had messed up the wiring somehow. I also checked my serial connection, and it was giving me weird jumps in numbers. I remembered that when I initially connected it again with the new circuit, it still had the old code stored on it, and the servo was jittering. So I loaded the previous program again. It did nothing, so I thought I had broken the motor. Then I loaded the current program again, and it started to work. That managed to refresh the code on the Arduino and it worked with the same code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learning About Capacitors&lt;/strong&gt;&lt;br&gt;
I understood the circuit but not the point of the capacitors in this case. They were new to me, so I researched them. I saw them explained in parallel to water and a storage tank: if flow is cut to the storage tank, the flow from the storage tank outwards still continues. I realized that their purpose here was to remove jitters, since servo motors may go from no power to needing a lot all of a sudden.&lt;/p&gt;

&lt;p&gt;I learned that voltage allows us to see the difference between two points. Capacitance is measured in farads, and for circuit boards usually in microfarads. The voltage rating on the capacitor is the maximum voltage the capacitor can handle, and if it exceeds this it may explode.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>2 - Making Reusable Sections</title>
      <dc:creator>Cecilio Navarro</dc:creator>
      <pubDate>Fri, 29 Aug 2025 01:58:47 +0000</pubDate>
      <link>https://dev.to/cecilionavarro/2--4ola</link>
      <guid>https://dev.to/cecilionavarro/2--4ola</guid>
      <description>&lt;h1&gt;
  
  
  Hero Section
&lt;/h1&gt;

&lt;p&gt;Originally, for the hero section, I chose to make the picture smaller and place the words around it, but the client preferred a full-sized background instead.&lt;/p&gt;

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

&lt;p&gt;I switched to a full-sized dark background to help the title stand out. I also converted the original &lt;code&gt;.heic&lt;/code&gt; photos to &lt;code&gt;.webp&lt;/code&gt; format to improve website performance, and applied the same optimization to all other photos. I ended up liking this approach as well. I make it a priority to get frequent feedback from clients, so I don’t spend time designing something they might not agree with.&lt;/p&gt;

&lt;p&gt;The hero section was set to 80% of the screen height to avoid giving users the “illusion of completeness” — encouraging them to scroll down while leaving a glimpse of the next section at the bottom.&lt;/p&gt;

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

&lt;p&gt;The two sections were built with a grid and justified to the ends. I used a &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; to size the copyright symbol differently from the surrounding text.&lt;/p&gt;

&lt;p&gt;Next, I created a simple theme and imported a custom font using Neue Montreal and its mono version. The style follows the elegant Helvetica family.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@theme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--color-brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#A52A2A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--color-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#FFCA50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--color-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#FFCA50&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--color-dark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#141413&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--color-light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#F1F0E4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="py"&gt;--font-neue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"NeueMontreal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--font-ppneue-mono&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"PPNeueMontrealMono"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I started making components for all repeated sections, such as headers. While the page doesn’t switch between light and dark themes, I created black and white versions of every component to suit different background colors.&lt;/p&gt;

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

&lt;p&gt;I built the call-to-action and footer sections. Later, I realized manually adding padding to each section wasn’t efficient, so I created a reusable section component that automatically applied font and background colors.&lt;/p&gt;

&lt;h1&gt;
  
  
  Call To Action Section
&lt;/h1&gt;

&lt;p&gt;For the call-to-action, I wanted a small “bento box” on the bottom left corner to balance out the email input on the opposite side. It took several iterations.&lt;/p&gt;

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

&lt;p&gt;Even AI-generated attempts failed, so I broke the problem into simple steps. I stopped trying to design with the original content of the boxes and instead used placeholder text.&lt;/p&gt;

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

&lt;p&gt;Once the grid was done, I made the first box span the full column height.&lt;/p&gt;

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

&lt;p&gt;After that, I made sure to center the leftmost box.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnasxz43nbntr8lpqa1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnasxz43nbntr8lpqa1r.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;br&gt;
I reduced the padding to create a battery-shaped figure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cl7jwouixx9t1w1c7bk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7cl7jwouixx9t1w1c7bk.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;br&gt;
Then, I made sure the other two boxes were left-justified and added borders.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeffczhm1u5frwjhdaqf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeffczhm1u5frwjhdaqf.png" alt=" " width="800" height="312"&gt;&lt;/a&gt;&lt;br&gt;
Finally, I added the icon and realized that I had added a left margin to the component earlier, which caused issues in the beginning. By breaking it into simple steps, I was able to achieve the final design.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faih5gztak1hdqfuc2hx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faih5gztak1hdqfuc2hx8.png" alt=" " width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Frequently Asked Questions Section
&lt;/h1&gt;

&lt;p&gt;For the FAQ section, I again broke everything into its constituent parts and worked on the look before the logic. I used the standard &lt;code&gt;map()&lt;/code&gt; function and put the data into an array of objects.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8f9epn48bhlt7ezkrv2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft8f9epn48bhlt7ezkrv2.png" alt=" " width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had issues with the section closing. The text would erase slowly because of the ease-in-out effect and then snap closed.&lt;/p&gt;

&lt;p&gt;I realized I needed to make the answer its own section, spanning the full width at the bottom, and attach the border to that instead of the FAQ question. The fix required animating the height difference, not just the answer itself. I completed it by toggling the grid rows:&lt;br&gt;
&lt;code&gt;isOpen ? "grid-rows-[1fr]" : "grid-rows-[0fr]"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44e8gnfl2m09kck78vmr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44e8gnfl2m09kck78vmr.png" alt=" " width="800" height="356"&gt;&lt;/a&gt;&lt;br&gt;
I had the answers sticking out, so I hid them. At first, I tried covering the answers by using a background on the questions, but the last answer leaked out.&lt;/p&gt;

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

&lt;p&gt;I eventually had to remove the background and instead hide the overflow of the answers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6frhz7djyemn3xhk6krq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6frhz7djyemn3xhk6krq.png" alt=" " width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Retro Overlapping Text
&lt;/h1&gt;

&lt;p&gt;I wanted text with an overlapping effect. Since this text was about motion, I wanted to visually convey movement.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8aehbjipsvqmes97c33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8aehbjipsvqmes97c33.png" alt=" " width="800" height="282"&gt;&lt;/a&gt;&lt;br&gt;
I set the first text to &lt;code&gt;relative&lt;/code&gt; and then translated the overlapping text to the right. &lt;code&gt;aria-hidden&lt;/code&gt; is used for text you don’t want to be read or highlighted.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;h1 className="relative font-bold text-[12rem]"&amp;gt;
  &amp;lt;span className="relative text-accent"&amp;gt;FUTURE&amp;lt;/span&amp;gt;
  &amp;lt;span className="aria-hidden absolute inset-0 text-brand translate-x-2"&amp;gt;FUTURE&amp;lt;/span&amp;gt;
  &amp;lt;span className="aria-hidden absolute inset-0 text-dark translate-x-4"&amp;gt;FUTURE&amp;lt;/span&amp;gt;
&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>1 - Setting Up A Client Website</title>
      <dc:creator>Cecilio Navarro</dc:creator>
      <pubDate>Thu, 28 Aug 2025 22:58:34 +0000</pubDate>
      <link>https://dev.to/cecilionavarro/1-setting-up-a-client-website-p7l</link>
      <guid>https://dev.to/cecilionavarro/1-setting-up-a-client-website-p7l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Client&lt;/strong&gt;&lt;br&gt;
I am making a website for a mobile detailing business. I start with a simple roadmap when making a website for a client. First, I talk with the client about what they want. Then, I make a list of questions about their business. This is to create the content for the website, and I place it in my notes or in Google Docs. I then interview the business owner and write down the answers to all my questions. This interview allows me to form the paragraphs for the different sections and pages.&lt;/p&gt;

&lt;p&gt;I learned from The Website Architect to only begin forming the layout and design after getting the content. This allows you to make the design custom-fit to the content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design And Ideation&lt;/strong&gt;&lt;br&gt;
I make a mood board on Figma to gather inspiration for the website. I find websites everywhere I can, like from Awwwards.&lt;/p&gt;

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

&lt;p&gt;My wireframing was done on my iPad, and the basic components were created there with the document from earlier. The iPad gives me the ability to quickly edit my big ideas, like changing the layout, without having to gather content and then erase it. I move everything to Figma once I have a feel for the website.&lt;/p&gt;

&lt;p&gt;I form the theme according to the business. This is a site for a mobile detailing business, so I make it car- and retro-themed with checkered icons and colors.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Setup&lt;/strong&gt;&lt;br&gt;
When I move on to coding, I follow what I call "maps," and these guide me through the repetitive procedures of each project. I first make the repository and copy the first three lines GitHub provides when making a new repo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo "# 05-garcia-auto-detailing" &amp;gt;&amp;gt; README.md
git init
git add README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I paste them into the terminal, which initializes the project on my local computer. Next, I copy and paste the next four, making my first commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/cecilionavarro/05-garcia-auto-detailing.git
git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I chose Vite to start my site and paired it with Tailwind CSS. I originally went with ShadCN to learn it, but since ShadCN uses Tailwind, I decided to get a strong foundation in Tailwind first.&lt;/p&gt;

&lt;p&gt;I used the documentation to install Tailwind CSS with Vite and followed the instructions. I erased everything from my &lt;code&gt;index.css&lt;/code&gt; and added &lt;code&gt;@import "tailwindcss"&lt;/code&gt;; at the top. Here is where I would build my themes and add custom fonts.&lt;/p&gt;

&lt;p&gt;I got stuck when making variables for Tailwind the old way, by using a &lt;code&gt;tailwind.config&lt;/code&gt; file, but with Tailwind v4 all we have to do is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@theme&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--color-brand&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#A52A2A&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--font-neue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;"NeueMontreal"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once done with installing Tailwind, I installed React Router DOM for my navigation. This makes Single Page Applications and makes the website pages load faster by not resetting the entire page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Small Details&lt;/strong&gt;&lt;br&gt;
Sometimes we don’t take the time to figure out simple things. When I was first learning to code, I thought ternary operators were difficult, and seeing them made me think a piece of code was complex—until I Googled it and found the structure was just a one-line if-else statement.&lt;/p&gt;

&lt;p&gt;While setting up this project, I realized something obvious that I had not paid attention to: copy path and copy relative path. I thought about it for two seconds and realized that the relative path is relative to the original workspace folder, while copy path copies your entire path from the root folder. I normally would click either one when importing assets, until I thought about it for a second.&lt;/p&gt;

&lt;p&gt;Sometimes we don’t take the time to think through very obvious things, and perhaps that “laziness” is comparable to the saying about how fear is a mile wide and an inch deep.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>1 - Building a Worship Resource Library</title>
      <dc:creator>Cecilio Navarro</dc:creator>
      <pubDate>Thu, 26 Jun 2025 23:20:30 +0000</pubDate>
      <link>https://dev.to/cecilionavarro/1-building-a-worship-resource-library-25f3</link>
      <guid>https://dev.to/cecilionavarro/1-building-a-worship-resource-library-25f3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;br&gt;
My church has used different methods for storing our music resources. Right now, we are using OneDrive with different types of formats for the chords. The brass has their notes scattered, with individual notes on Apple Notes and ad hoc handwritten notes on Keynote.&lt;/p&gt;

&lt;p&gt;I suggested the idea to improve our flow through the project I am presenting today. I have built the minimum viable product and have shown it to our music director. She approved it and said the church would like to invest in it. The following describes just that — the MVP (Minimum Viable Product) built with JavaScript, EJS, and MongoDB.&lt;/p&gt;

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

&lt;p&gt;I brainstormed and wrote down the requirements for my project to start. The main ones are: storing our chords and wind notes here at a centralized location and having tags and labels to quickly and accurately find our songs. Afterward, I sketched out the low-fidelity wireframe. I started off with the Waterfall Model but switched to the Agile Methodology, so I made a Jira account. I like the approach of tackling the basic functionality first and then making incremental improvements. This would help me cut out some of the fogginess from the "I don't know what I don't know" stage. Without this MVP, there may be requirements or features you write down that in practice aren't needed — or requirements you missed.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Main Feature&lt;/strong&gt;&lt;br&gt;
The most important feature is adding a song. Adding a song will contain all the relevant information, like the title, key, chords, wind notes, and tags. In the future: transposition, author, group, and personal notes.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Second Most Important Feature&lt;/strong&gt;&lt;br&gt;
The second most important feature is the 'tags'. They help filter out songs by their properties. For example, if a worship leader is making a setlist and would like a song where the brass has an 'ending' in order to smoothen the transition to another song, they can do so by checking that tag. If they make an altar call, they can select 'ministración' (ministry in Spanish) to find appropriate songs that fit what the moment calls for.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Thoughts&lt;/strong&gt;&lt;br&gt;
I don't know how I will handle the different instances of songs. It makes the most sense to have one source of truth and then transpose to all other keys from it. I have the idea of admins being able to turn off and on the different keys of a song. I would then have to think of how to handle the source of truth there.&lt;/p&gt;

&lt;p&gt;I am still determining how to do things and will start asking more of the right questions along the way. I have now begun the backend and a basic frontend.&lt;/p&gt;

&lt;p&gt;The next step is authentication and JWT. Let's get started!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
