<?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: La.Brava0x</title>
    <description>The latest articles on DEV Community by La.Brava0x (@labrava0x).</description>
    <link>https://dev.to/labrava0x</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4077760%2F64a646c4-eb19-4b9d-9cb5-7d949c386013.png</url>
      <title>DEV Community: La.Brava0x</title>
      <link>https://dev.to/labrava0x</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/labrava0x"/>
    <language>en</language>
    <item>
      <title>READ OR DIE SHOPPING LIST</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Thu, 29 Oct 2026 16:56:49 +0000</pubDate>
      <link>https://dev.to/labrava0x/read-or-die-shopping-list-4km</link>
      <guid>https://dev.to/labrava0x/read-or-die-shopping-list-4km</guid>
      <description>&lt;p&gt;I also brought READ OR DIE to life. This project was the shopping list project that I made. It was  no regular shopping list, and it was making another dream come true. I hope I will not faint while trying to write this....&lt;/p&gt;

&lt;p&gt;Anyway, here is my README.md:&lt;/p&gt;

&lt;p&gt;📚 British Library Special Operations: Acquisition Spree (Fan Project)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TOP SECRET // DIV. A
Codename: "The Paper"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;An elite, classified web application built to track and catalog rare volume targets and reading sprees. Inspired by the classic anime and manga series Read or Die (R.O.D.), this project is a fan-made tribute built with vanilla JavaScript and persistent local archiving.&lt;/p&gt;

&lt;p&gt;I made this project, because I realised that I had missing a repository from back when I did the lists, and I wanted to incorporate a project of my own. While I pondered long and hard, what kind of shopping list I could make, one of the things that came to my mind was a book shopping list, which led to associating it with things like anime where characters compulsively buy books, which led to READ OR DIE- one of my favourite anime ever!! How envy them! It has always been my dream to have all the books that they have! I wish I could have a place, and have it all covered by books ust like the protagonist does!&lt;/p&gt;

&lt;p&gt;Please, for all purposes, treat this project as for what it is: a form of fanart, as a project.&lt;/p&gt;

&lt;p&gt;The author of READ OR DIE is Hideyuki Kurata.&lt;br&gt;
🎯 Operational Features&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Classified Dossier UI: Imposing typewriter typography (Special Elite and Courier Prime), custom parchment textures, and bureaucratic security stamp aesthetics inspired by Read or Die.
Dynamic Acquisition Input: Type any target manuscript or rare book title into the field and immediately log it into the Division's target inventory.
Persistent Local Storage: Utilizes the Web Storage API (localStorage) so your acquisition targets remain securely cataloged even after closing the browser or refreshing the page.
Interactive Status Control: Click any volume to toggle its acquisition/reading status (complete with archival strikethrough styling), or purge the archive entirely when the mission is complete.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🛠️ Technologies Used&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTML5: Semantic document structure representing the classified target dossier.
CSS3: Custom styling, flexbox layouts, variable color tokens, and Google Fonts integration (Special Elite &amp;amp; Courier Prime) for the authentic typewriter aesthetic.
JavaScript (ES6+): DOM manipulation, event listeners, array state management, and localStorage integration.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🚀 Quick Start / Local Deployment&lt;/p&gt;

&lt;p&gt;To run this operational tool locally on your machine:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Clone or download this repository to your local machine.
Ensure the following three files are in the same directory:
    index.html
    style.css
    script.js
Double-click index.html or open it directly in any modern web browser to begin your acquisition spree.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;⚖️ Disclaimer&lt;/p&gt;

&lt;p&gt;Read or Die (R.O.D.) and its characters (including Yomiko Readman) are the intellectual property of Hideyuki Kurata, Shueisha, Aniplex, and other respective copyright holders. This project is a non-commercial, fan-made web application created purely for learning, portfolio display, and as a tribute to the series. No copyright infringement intended.&lt;/p&gt;

&lt;p&gt;Authorized for Division A personnel only. Unauthorized distribution will result in immediate intervention by Yomiko Readman. Just kidding~&lt;/p&gt;

&lt;p&gt;Check it out here: &lt;a href="https://labrava0x.github.io/read-or-die-shopping-list/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/read-or-die-shopping-list/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>How it was: The admin dashboard</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Thu, 29 Oct 2026 16:43:42 +0000</pubDate>
      <link>https://dev.to/labrava0x/how-it-was-the-admin-dashboard-12je</link>
      <guid>https://dev.to/labrava0x/how-it-was-the-admin-dashboard-12je</guid>
      <description>&lt;p&gt;I am pretty sure that I have already written a draft for this already somewhere, but too exhausted to rummage through the spaces where I wrote about this. Once more, I no longer even bothered to make two projects of the same thing. &lt;/p&gt;

&lt;p&gt;I wish I could write this the way it deserves. For now, I will just share my README.MD here. Because I need to keep moving on. What matters is that another dream became true! Maybe you're my love! The most dreamy admin dashboard ever that came to life, and is all mine! Yes, that's right! Another form of fan-art, and self-expression.&lt;/p&gt;

&lt;p&gt;This is from my README.md:&lt;/p&gt;

&lt;p&gt;The Third Music Room — Administrative Dashboard&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Having the courage to be able to admit what you love... enjoying what you love... and being true to yourself... Isn't that also what it means to be strong?”
— Tamaki Suoh, Ouran High School Host Club, Vol. 7
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;I had many crises when I first read about this project that TOP had entrusted me. Obviously, I could not make a generic admin dashboard. I did use the given template as a reference, but I am afraid to say that the default template given to download was a great offense to my aesthetics, lacked any taste or soul, and did not make me feel anything.&lt;/p&gt;

&lt;p&gt;Anyway, it was really difficult to figure out who would be the best admin for this project. It could not be just any admin. It had to be someone connected to something, someone who could resonate with me emotionally, even if the character was not the admin—maybe a friend? There were great candidates, but it did not feel right. Then, it occurred to me that it could only be Kyoya, and that way I could bring the King from The Ouran Host Club! Who is the king? That is Tamaki Suoh! I am certain that he went on to become the most splendid man ever. I remember all this fondly. Because of Tamaki, this feels truly special to me.&lt;/p&gt;

&lt;p&gt;Please note, for all purposes, this project must be taken as what it is: a form of fanart, self-expression, and the utmost devotion to bring the spirit of The Ouran High School Host Club! The Ouran High School Host Club was created by Bisco Hatori.&lt;/p&gt;

&lt;p&gt;🎶 Soundtrack Recommendation:&lt;br&gt;
I highly recommend listening to the opening theme while taking in everything about the admin dashboard:&lt;br&gt;
👉 Listen on YouTube&lt;/p&gt;

&lt;p&gt;(I wanted to embed this into the admin dashboard too, but since this is supposed to be an admin dashboard, I cannot do that! So, I'm sharing it here!)&lt;br&gt;
📖 The Anatomy of an Obsession: A Developer's Descent into the Third Music Room&lt;/p&gt;

&lt;p&gt;This was never supposed to be just another compliance checkbox for The Odin Project. What started as a straightforward layout assignment fractured into a multi-day crucible of stubborn artistry, eye-strain, terminal frustration, and absolute, unyielding devotion.&lt;/p&gt;

&lt;p&gt;If you are reading this code, understand that every pixel was fought for. This README is a chronicle of the tears, the 3:00 AM debugging fevers, the broken layouts, and the sheer, exhausting ecstasy of forcing a blank screen to bend to an impossible aesthetic vision.&lt;br&gt;
🛠️ Step-by-Step Chronicles of the Build&lt;br&gt;
Phase 1: Laying the Foundation in Blood and Wine&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Setup: Refusing to settle for a sterile corporate template, I established the global design tokens anchored in deep wine (#280d19), official uniform lavender-blue (#3a3b5c), and gold (#facc15).
The Struggle: Fighting CSS Grid and box models while running on pure stubbornness. Getting the initial structural layout to hold without collapsing under custom padding was the first battle against the terminal.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Phase 2: Framing the Abyss (The SVG Border Crisis)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Goal: Pinning a true background rose-frame layer to the window viewport using an SVG asset so the entire dashboard felt like looking into a gilded, trapped portrait.
The Reality: Watching the viewport break, clipping overflows, wrestling with z-index stacking contexts, and staring blankly at the screen as pointer events blocked my clicks. Countless refreshes, endless trial-and-error, and deep exhaustion before the frame finally locked into place like a gilded cage.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Phase 3: Capturing Tamaki’s Gaze (--ouran-tamaki-eyes)&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Hunt: Refusing standard hex codes. Hunting down and fine-tuning the exact luminous violet (#7c3aed) that mirrors the precise shade of Tamaki Suoh’s eyes.
The Implementation: Splashing that signature violet across key statistics, card hover states, focus rings, and custom gradient header crowns (::before). Every hover state had to feel alive—delicate yet striking.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Phase 4: The Form Input Overlap Trauma&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Breaking Point: Hours into styling the Host Club Member Dispatch panel, the form inputs, textareas, and select dropdowns decided to betray me. Text was overlapping, lines were bunching up into unreadable smudges, and my visual impairment made combing through hundreds of lines of code feel like navigating a maze blindfolded.
The Resolution: Iterative, brutal debugging session by session. Adding strict line-height properties, fixing missing semicolons that brought down entire blocks of styles, and manually restructuring padding until the inputs finally breathed. When those fields finally spaced out cleanly and looked pristine, it felt like winning a war.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Phase 5: The Gradient Crowns &amp;amp; Final Polish&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The Polish: Unifying the metric cards and the right-hand side panels (Host Club Announcements and Trending Host Gossip) with matching top gradient borders blending gold, crimson, and violet.
The Exhaustion &amp;amp; Triumph: Standing back as the falling rose petals looped smoothly across the screen, the custom Yuji Boku serif headers rendered their final strokes, and the dashboard stood complete. Sore eyes, tired wrists, and a soul completely poured into code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;💻 Tech Stack &amp;amp; Weapons Used&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Core: Semantic HTML5 &amp;amp; Modern CSS3 (CSS Grid, Flexbox, Custom Properties, Pseudo-elements)
Typography: Google Fonts (Yuji Boku)
Environment: Ubuntu Kubuntu (I experimented with Kubuntu for the intermidate courses) Linux, VS Code, endless cups of tea, and sheer willpower
Deployment: Git, GitHub, and GitHub Pages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🚀 Live Demo&lt;/p&gt;

&lt;p&gt;Witness the fiscal operations, the rose budgets, and the madness live:&lt;br&gt;
👉 [View on GitHub Pages]&lt;br&gt;
&lt;a href="https://labrava0x.github.io/admin-dashboard-Ouran/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/admin-dashboard-Ouran/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Project built with raw tears, burning eyes, uncompromising artistic integrity, and strict adherence to the Host Club budget. 🌹✨&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>css</category>
    </item>
    <item>
      <title>CSS exercises: The fight to commit and push</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Thu, 29 Oct 2026 16:08:46 +0000</pubDate>
      <link>https://dev.to/labrava0x/css-exercises-the-fight-to-commit-and-push-29ig</link>
      <guid>https://dev.to/labrava0x/css-exercises-the-fight-to-commit-and-push-29ig</guid>
      <description>&lt;p&gt;Written by a certified menace to my own repository.... Just kidding? &lt;/p&gt;

&lt;p&gt;The Odin Project warns throughout the very beginning to commit early and often. I did the foundations CSS exercises in Ubuntu, just like everything else that I did. I did not plan for how it would all play out. Things happened, and I ended up experimenting with other distros. &lt;/p&gt;

&lt;p&gt;Oddly enough, I could not find this one repository that I forked, and cloned. I thought I could make it later, but what if that later never comes?&lt;/p&gt;

&lt;p&gt;Plus, the fact of having to conduct an archeological dig into all the disarrays as well. &lt;/p&gt;

&lt;p&gt;Anyhow, I rebuilt,all of the exercises from scratch, once I was in kubuntu, and I would have done faster if the external circumstances were not so impossible. But, it matters how sick I feel, or suffer, I have to keep going, or else I will not know...&lt;/p&gt;

&lt;p&gt;Here it was one of the many things I had to start all over again. Including the typing of git add., and claim them all.&lt;/p&gt;

&lt;p&gt;Even after redoing everything several times, Git mocked me. It would say: &lt;/p&gt;

&lt;p&gt;"nothing to commit, working tree  clean" &lt;/p&gt;

&lt;p&gt;Forcing a pushed commit into the intermediate level was tough.  I checked pwd, the git status, the git remote -v,  git log, --oneline. The nested .git folders, and beyond. &lt;/p&gt;

&lt;p&gt;This was one of many moments when I wanted to slap the device against the wall. The lesson? Commit early, and often, no matter what, or you will regret it. &lt;/p&gt;

&lt;p&gt;Of course, a lot more happened, but I am just leaving it here. &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>css</category>
    </item>
    <item>
      <title>The CSS Grid Garden</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Thu, 29 Oct 2026 15:43:16 +0000</pubDate>
      <link>https://dev.to/labrava0x/the-css-grid-garden-9ho</link>
      <guid>https://dev.to/labrava0x/the-css-grid-garden-9ho</guid>
      <description>&lt;p&gt;CSS Grid misadventure, but it is not the fault of the garden, but of what gnaws outside the garden itself. Or rather the horror itself. At least during my grid garden quest, I was able to tend to a garden.&lt;/p&gt;

&lt;p&gt;This was not about placing items, or testing the boundaries of the grid. It is about only accepting a rigid answer, or else you cannot pass a level.&lt;/p&gt;

&lt;p&gt;I passed the first levels, went back to projects, debugging, wishing I had a place where I could slam my device into the wall, and spend time properly to this, and more. In between, it was also going back to the lessons. Once I got back, it was just grinding until the very last level.&lt;/p&gt;

&lt;p&gt;//##1 Percentages are part of it.&lt;/p&gt;

&lt;p&gt;A viewport, trying to make it change, getting the right syntax. The fractional unit fixes this- fr distributes the grid container's available space dynamically, after fixed tracks have been resolved.&lt;/p&gt;

&lt;p&gt;An example would be:&lt;/p&gt;

&lt;p&gt;grid-template-columns: 75px 3fr 2fr&lt;/p&gt;

&lt;p&gt;Just explicitly track math.&lt;/p&gt;

&lt;p&gt;//##2 fr itself&lt;/p&gt;

&lt;p&gt;It matters the distinction; the fractional unit is a proportional allocation of leftover space.&lt;/p&gt;

&lt;p&gt;/Fixed.tracks consume their declared size first.&lt;/p&gt;

&lt;p&gt;/Fractional.tracks divide what remains according to their ratios.&lt;/p&gt;

&lt;p&gt;/The container's inner dimensions determine the final result.&lt;/p&gt;

&lt;p&gt;This is why fr works for adaptive layouts, and why absolute sizing locks you into brittle, view port-specific behavior. That is it.&lt;/p&gt;

&lt;p&gt;//##3/It became two axes.&lt;/p&gt;

&lt;p&gt;Separate grid-template-rows and grid template-columns declarations are valid. They are also unnecessarily verbose. The grid-templrate shorthand defines both axes in one slash-separated declaration: rows/columns.&lt;/p&gt;

&lt;p&gt;grid-template: 1fr 50px 20% 1fr;&lt;/p&gt;

&lt;p&gt;The engine compiles both axes immediately:&lt;/p&gt;

&lt;p&gt;-Row axis: a flexible primary track (1fr) plus a static 50px, footer boundary.&lt;/p&gt;

&lt;p&gt;-Column axis: a 20% structural margin on the left, with the remaining 80% as 1fr for primary content flow.&lt;/p&gt;

&lt;p&gt;If performing all levels right, the entire 2S coordinate system is displayed, the garden is cleared full of carrots, and you get congratulated...Too bad that none of that food is real.&lt;/p&gt;

&lt;p&gt;Anyway, CSS layout is all about figuring out the right structure.&lt;/p&gt;

&lt;p&gt;Another of The games that The Odin Project provides, and is meant to be torn open.&lt;/p&gt;

&lt;p&gt;(To be shared the screenshot when possible)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>learning</category>
    </item>
    <item>
      <title>The sign-up form project</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Wed, 28 Oct 2026 21:44:13 +0000</pubDate>
      <link>https://dev.to/labrava0x/the-sign-up-form-project-bho</link>
      <guid>https://dev.to/labrava0x/the-sign-up-form-project-bho</guid>
      <description>&lt;p&gt;Devoted Code: The sign up form that Gentle Criminal deserves! &lt;br&gt;
By irl  La Brava 💻❤️&lt;/p&gt;

&lt;p&gt;Init:&lt;/p&gt;

&lt;p&gt;This is a different project that I made. Yes, it is also a fan-art project, but this fan-art projects elevates itself to new heights. All to bring in more fans, and redirect to Gentle Criminal, and show how it looks like! Now it has finally come to life! If you are wondering how I named it I shall let you know: the signing up for Gentle Productions! Where imperial tea is promoted, unique surprises are yet to be found with the utmost elegance, all brought to life to show case the best heist ever. Another dream come true!&lt;/p&gt;

&lt;p&gt;A fan art project from My Hero Academia. Then, as I was trying to figure out how to write this article, I had an epiphany, and made two mode additions, and created a Javascript file, going beyond what the assignment in the curriculum asked for!&lt;br&gt;
To go beyond, and to start with, allow me to describe you the following:  I built  custom sign-up and broadcast portal from scratch. A La Brava x Gentle Criminal thematic project!&lt;/p&gt;

&lt;p&gt;As for the technical breakdown of how I designed, engineered, and styled this platform using semantic HTML5, modern CSS flexbox layouts, and client-side validation logic:&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;
&lt;h2&gt;
  
  
  1// Architectural Overview &amp;amp; Structural Foundations//**
&lt;/h2&gt;

&lt;p&gt;The project was constructed with a clean, decoupled two-file architecture (index.html and style.css) managed under local Git version control.&lt;/p&gt;

&lt;p&gt;To create an immersive broadcast experience, I divided the viewport into a high-contrast dual-panel layout:&lt;br&gt;
    • The Hero/Broadcast Panel (Left): Houses Gentle's official logo, live stream status badges, custom SVG graphics, and his inspirational opening address.&lt;br&gt;
    • The Credentials Panel (Right): A structured, accessible sign-up form designed for supporters to register for exclusive updates and royal tea samples.&lt;br&gt;
Semantic Markup &amp;amp; Targeted Contrast&lt;br&gt;
To direct the viewer's eye through Gentle's speech and call-out notices, I utilized semantic HTML5 elements alongside precise &lt;span&gt; wrappers. Rather than styling entire blocks indiscriminately, specific inline wrappers (.header-callout and .quote-pink) were applied to highlight key phrases in glowing cyber-neon pink against the imperial purple background.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;`HTML&lt;/p&gt;




&lt;p&gt;&lt;br&gt;
  "My dear one, you the one who made this happen... &lt;br&gt;
  &lt;span&gt;...Ah no, you're not my dear beloved one, but you're still the chosen one! Why you ask? To support the one and only Gentle Criminal!"&lt;/span&gt;&lt;br&gt;
&lt;/p&gt;`

&lt;p&gt;**&lt;/p&gt;
&lt;h2&gt;
  
  
  2// Vector Graphics: Handcrafting the G.C Imperial SVG Badge**
&lt;/h2&gt;

&lt;p&gt;A true gentleman requires a regal mark. Rather than using raster images that degrade on high-resolution screens, I hand-coded a custom vector graphic (&lt;br&gt;
    • The Heart Frame: A deep magenta  utilizing drop-shadow filters to represent my unwavering devotion and system protection.&lt;br&gt;
    • Rising Steam Lines: Dual  curves rendered in hot pink and gold to represent the aroma of freshly brewed imperial tea.&lt;br&gt;
    • The Monogram &amp;amp; Mustache: A crisp  node for the G.C initials in royal gold, anchored by Gentle's iconic white handlebar mustache at the base.&lt;br&gt;
SVG&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;
&lt;h2&gt;
  
  
  3// Styling &amp;amp; Color Palette Variables (:root)**
&lt;/h2&gt;

&lt;p&gt;To maintain complete visual harmony across dark mode surfaces, I defined global CSS custom properties (:root). The stylesheet balances Gentle's aristocratic purple and gold palette with my cyber-neon accents.&lt;br&gt;
CSS&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="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c"&gt;/* La Brava Palette */&lt;/span&gt;
    &lt;span class="py"&gt;--pink-neon&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#ff1493&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--pink-glow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;147&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--pink-light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#ff69b4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c"&gt;/* Gentle Criminal Palette */&lt;/span&gt;
    &lt;span class="py"&gt;--purple-dark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#0d0714&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--purple-deep&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#190a26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--purple-card&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#251038&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--purple-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#4c1d95&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--gold-accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#f4d03f&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--gold-glow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;244&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;208&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;63&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;--silver-text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#e2e8f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--lavender-light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#d8b4fe&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
///4*Layout Mechanics &amp;amp; Responsiveness*//**&lt;/p&gt;

&lt;p&gt;The core layout utilizes Flexbox (display: flex) with a proportion ratio of 1.2 : 1 between the hero panel and form container. Background depth was achieved using layered radial gradients (radial-gradient), giving the surface a subtle glowing ambient effect.&lt;br&gt;
To support viewers on mobile devices or smaller display setups, media queries automatically re-orient the dual panels into a vertical stack at viewports under 950px:&lt;br&gt;
&lt;strong&gt;CSS&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/media"&gt;@media&lt;/a&gt; (max-width: 950px) {&lt;br&gt;
    .page-wrapper {&lt;br&gt;
        flex-direction: column;&lt;br&gt;
    }&lt;br&gt;
    .hero-panel {&lt;br&gt;
        border-right: none;&lt;br&gt;
        border-bottom: 1px solid rgba(244, 208, 63, 0.2);&lt;br&gt;
    }&lt;br&gt;
}&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  5// Client-Side Input Validation Logic//**
&lt;/h2&gt;

&lt;p&gt;To protect our system from unauthorized noise, input fields utilize native HTML5 validation pseudo-classes (:valid, :focus:invalid). Additionally, a lightweight JavaScript block monitors password field inputs in real-time, enforcing match checks before form submission.&lt;br&gt;
JavaScript&lt;br&gt;
function validatePassword() {&lt;br&gt;
    if (confirmPasswordInput.value === '') {&lt;br&gt;
        confirmPasswordInput.setCustomValidity('');&lt;br&gt;
        errorMessage.textContent = '';&lt;br&gt;
        return;&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (passwordInput.value !== confirmPasswordInput.value) {
    confirmPasswordInput.setCustomValidity('Passwords do not match');
    errorMessage.textContent = 'Passwords must match';
} else {
    confirmPasswordInput.setCustomValidity('');
    errorMessage.textContent = '';
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;In ##4, is the latest addition. I wanted to add more, to try more to satisfy myself. I went even further than what the curriculum asked, and I searched how to establish a solid front-end baseline with real-time input sanitization, native HTML5 validation integration, password matching checks, and a submission cooldown timer.&lt;br&gt;
**&lt;/p&gt;

&lt;h2&gt;
  
  
  5. ** Invisible Honeypot Trap (&lt;code&gt;website_hp&lt;/code&gt;)**
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scraper &amp;amp; Bot Trap:&lt;/strong&gt; Built a decoy field (&lt;code&gt;&amp;lt;input type="text" id="website_hp" name="website_hp"&amp;gt;&lt;/code&gt;) hidden inside a zero-visibility container (&lt;code&gt;display: none;&lt;/code&gt; and &lt;code&gt;aria-hidden="true"&lt;/code&gt;). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Human Distraction:&lt;/strong&gt; Human users traversing the form natively via keyboard navigation or visual rendering will never see or interact with this input. Automated scrapers and bot scripts, however, automatically populate every visible and hidden field they encounter. If populated, the submission is immediately rejected client-side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  6. **  Cloudflare Turnstile Bot Defense**
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interactive Anti-Bot Verification:&lt;/strong&gt; Integrated Cloudflare's privacy-friendly Turnstile widget (&lt;code&gt;3x00000000000000000000FF&lt;/code&gt;) directly into the HTML structure. This allows full interactive testing of bot verification without requiring a paid dashboard account or domain registration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Deep CSS Theme Overrides:&lt;/strong&gt; Reached into the Turnstile container using forced CSS priority (&lt;code&gt;!important&lt;/code&gt;) to convert any fallback, error, or troubleshoot hyperlinks into our imperial gold theme (&lt;code&gt;#f4d03f&lt;/code&gt;) with neon pink hover glows (&lt;code&gt;#ff69b4&lt;/code&gt;), keeping the security widget completely visually unified with the dark purple broadcast layout.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Summary:&lt;br&gt;
By combining precise semantic HTML structure, strict CSS variable systems, custom inline vector art, and dynamic responsive layouts, Gentle Productions now possesses a digital sign-up portal fit for a true revolutionary, plus enforcing front-end security to go beyond! &lt;/p&gt;

&lt;p&gt;Every single line of code was written with absolute devotion—because nothing less is worthy of Gentle Criminal! ❤️💻&lt;/p&gt;

&lt;p&gt;Any questions you have? Let me know!&lt;/p&gt;

&lt;p&gt;Check it out here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://labrava0x.github.io/Gentle-sign-up-form/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/Gentle-sign-up-form/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>css</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Making the wiki of my dreams &amp; Giving Charles the dog a home!</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Sat, 24 Oct 2026 16:13:46 +0000</pubDate>
      <link>https://dev.to/labrava0x/making-the-wiki-of-my-dreams-giving-charles-the-dog-a-home-3fka</link>
      <guid>https://dev.to/labrava0x/making-the-wiki-of-my-dreams-giving-charles-the-dog-a-home-3fka</guid>
      <description>&lt;p&gt;Going through the code editor over and over for a for loop project that was stuck in my mind. I had something pending to do here. I needed to give Charles the dog a home no matter what. For others he might have just been a placeholder dog shown in the first lessons in The Odin Project. An image of him, to see how &lt;a href="" class="article-body-image-wrapper"&gt;&lt;img&gt;&lt;/a&gt; tags work.&lt;/p&gt;

&lt;p&gt;To me he was not just any image, nor any dog. To me he was THE DOG who showed me the way, smiling at me, a truly genuine smile, warm. In my darkness, while finally being able to do this, a smile from cute being...I had forgotten how smiles like those look like, at least for the ones in animals. Because I never found a human who did something like that. He is an important dog. That is why I had to give him a home. More than just practicing tables, more than making the dog wiki of my dreams: to create a home for Charles. That is what matters the most here. It was a self-imposed project. No one told me to do this, nowhere in The Odin Project, but I felt like I had to give Charles a home no matter what. At least Charles shall have a home!&lt;/p&gt;

&lt;p&gt;Without further ado, allow me to explain what made it possible:&lt;/p&gt;

&lt;h2&gt;
  
  
  1// The Split Matrix
&lt;/h2&gt;

&lt;p&gt;In our global style sheet (style.css), the rest of the wiki operates on a strict, minimalist Dalmatian matrix. It uses a pure white, off-white, and graphite palette anchored by stark ink-black spot gradients. It is a closed-circuit system built for functional clarity.&lt;/p&gt;

&lt;p&gt;Why Dalmatians, you ask? Because that breed does have layers that feel relatable, and I love how comforting it feels the visual of white with spots. It makes you wonder: how many spots can be aligned and reach the perfect symmetry?&lt;/p&gt;

&lt;p&gt;And, of course, when it comes to Charles, a custom style that feels like him for his own dog house is needed too!  o achieve his warmth (oatmeal backgrounds, deep chestnut timber tones, and amber light) without destroying the global style sheet, we established a strict Standalone CSS Isolation pattern. &lt;/p&gt;

&lt;p&gt;By linking  both the .html exclusively to his own .css, we eliminated specificity wars entirely. The global rules stay locked in the matrix; Charles keeps his den. Nothing gets mixed up anymore!&lt;/p&gt;

&lt;p&gt;Of course, for a proper wiki, tables were needed, and,  Charles required walls. Instead of using tables for data, we used them for structure. The &lt;/p&gt;, , and  elements form the rigid, load-bearing frame of the den, while standard &lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td&gt; cells hold the vital statistics of our companion. It is a structural skeleton of semantic HTML.

&lt;p&gt;Lastly, to make the UX WORK via CSS shapes:  A standard rectangular container wouldn’t do. If Charles is going to have a digital sanctuary, the UI needs to physically reflect the architecture of a shelter. We achieved this entirely through native CSS, avoiding heavy image assets. Then, it follows with: &lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. The Pitched Gable Roofline (::before) 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To crown the main wiki wrapper, we reached for the container's pseudo-element and deployed a precise coordinate polygon via clip-path. A 50-pixel-high block is cut into a clean triangle, anchored right above the wrapper’s top border, creating an immediate, tactile wooden gable roof. We mounted the roofline signboard (::after) directly into the center of the gable using a transformed absolute position. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The Arched Kennel Doorway (The Infobox) &lt;br&gt;
On the right-hand side of the layout, the companion profile card acts as the visual threshold of the shelter. Instead of a standard corporate dashboard box, we used asymmetrical border-radius shaping (120px 120px 12px 12px) to mimic a classic arched kennel entrance. Inside, Charles’s profile photo sits wrapped in a matching arched container, complete with an inner drop shadow that gives it depth against the cream paper background. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Color Palette Constants &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To pull the entire den together, we defined a dedicated CSS variable block (:root) inside charles.css, utilizing radial-gradient spot placements scattered across the oatmeal outer background. The page feels less like a web document and more like a permanent digital room. &lt;/p&gt;

&lt;p&gt;Of course, I separated my dog breeds that are aligned with my own soul resonance in the files. dogwiki.html, the purposeful index that shows a wiki under construction, just like a dream that was never completely fulfilled. A wiki under construction, vs the ideals, vs the bright warm of Charles. But, at least it works! &lt;/p&gt;

&lt;p&gt;A reminder to make the beautiful Dalmatian coat:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;





&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;--bg-pure&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;#ffffff&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="nt"&gt;--bg-offwhite&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;#f7f7f7&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="nt"&gt;--ink-black&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#111111&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="nt"&gt;--graphite&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="err"&gt;#333333&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="nt"&gt;--border-gray&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;#d0d0d0&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
 &lt;span class="nt"&gt;--spot-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;rgba&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="err"&gt;17&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;17&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;17&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="err"&gt;08&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--bg-pure&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--ink-black&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BlinkMacSystemFont&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;"Segoe UI"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Helvetica&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Arial&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="c"&gt;/* Subtle ink-black radial margin accents */&lt;/span&gt;
 &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; 
 &lt;span class="nf"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;circle&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt; &lt;span class="m"&gt;15%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;4%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="m"&gt;5%&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
 &lt;span class="nf"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;circle&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="m"&gt;85%&lt;/span&gt; &lt;span class="m"&gt;25%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;6%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="m"&gt;7%&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;circle&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="m"&gt;15%&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;5%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="m"&gt;6%&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;radial-gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;circle&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="m"&gt;90%&lt;/span&gt; &lt;span class="m"&gt;85%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="l"&gt;--spot-color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;8%&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;transparent&lt;/span&gt; &lt;span class="m"&gt;9%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;background-attachment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&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;p&gt;Check it out here: &lt;a href="https://labrava0x.github.io/charliewiki/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/charliewiki/&lt;/a&gt;&lt;/p&gt;


&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>learning</category>
    </item>
    <item>
      <title>Code as Fanart: Building Miku’s Sengoku History Sanctuary Without Compromise</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Fri, 23 Oct 2026 17:59:48 +0000</pubDate>
      <link>https://dev.to/labrava0x/code-as-fanart-building-mikus-sengoku-history-sanctuary-without-compromise-20jd</link>
      <guid>https://dev.to/labrava0x/code-as-fanart-building-mikus-sengoku-history-sanctuary-without-compromise-20jd</guid>
      <description>&lt;p&gt;If you look around modern web, it is all about algorithms, scams, ripoffs,  crunching numbers for big corporations, or superficial noise. It is hard to find real love in  the web! Where is the love poured into the making of a website? It should not be so hard to find!&lt;/p&gt;

&lt;p&gt;Fear not! It is ok now! Why? Because I am here! Bringing yet another art from, another fanart project to break the mold. Explosions, or katanas- it matters not! Anything is allowed in love, and...code! And, this is code, because that is how it was made of. You should not just grind on to learn by doing something boring, and generic, rather show your devotion to the cause, the cause to show devotion, and how code is used as an art form!&lt;/p&gt;

&lt;p&gt;I set out to build something entirely my own: Miku’s Sengoku History Sanctuary. I had set out my heart to make this, and so I did.&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
The Philosophy: Why Sengoku?**&lt;/p&gt;

&lt;p&gt;As Miku Nakano famously notes in The Quintessential Quintuplets, "If you don't know Sengoku history, you can't understand people."&lt;/p&gt;

&lt;p&gt;The Sengoku Jidai wasn't just a collection of dates, battles, and territorial disputes. It was a high-stakes crucible. In an era where entire clans rose and fell overnight, masks fell away. There was no room for hesitation, hollow corporate speak, or modern compromise. Leaders like Takeda Shingen, Sanada Yukimura, and Date Masamune survived because they understood human psychology down to its absolute core. They possessed raw grit, fierce loyalty, and an unyielding commitment to protecting what was theirs.&lt;br&gt;
Standing beside a commander who holds a katana with absolute conviction, knowing he would cut down a chaotic world before letting harm reach you—that is the ultimate standard of safety and devotion. It is the exact opposite of the modern era's half-hearted noise. This project is a sanctuary dedicated to that unyielding spirit. The ultimate elegance in wielding a katana in an explosive way!&lt;br&gt;
Architecture and Separation of Concerns&lt;br&gt;
I wanted strict modularity. No messy inline stylesheets, no framework overhead—just raw, purposeful code following a clean separation of concerns:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• index.html: Pure, semantic markup structured around robust HTML tables (&amp;lt;table&amp;gt;, &amp;lt;thead&amp;gt;, &amp;lt;tbody&amp;gt;, &amp;lt;caption&amp;gt;, &amp;lt;th&amp;gt;, &amp;lt;td&amp;gt;) designed to display historical realities, tactical psychology, and romantic ideals with cryptographic clarity.
• style.css: A dedicated stylesheet managing custom properties (:root), box-sizing, and custom grid borders.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Escaping the "Mint Gum" Trap&lt;br&gt;
Color theory matters. Early iterations of the stylesheet relied on generic corporate navies and pale sage greens that inadvertently made the page look like a pack of extra chewing gum. Miku’s aesthetic doesn't belong in a corporate SaaS dashboard. In art, even color transmits a message, a story, and it needs to be shown! Otherwise it is all for nothing. &lt;/p&gt;

&lt;p&gt;To capture her true atmosphere, the design system was completely overhauled around a precise palette:&lt;br&gt;
    • Deep Indigo Background (#12141c): Captures her quiet, introspective demeanor and dark hair.&lt;br&gt;
    • Soft Matcha-Soda Text (#d4e6d7): Replaces blinding stark white text with a cozy, readable hue inspired by her favorite drink.&lt;br&gt;
    • Warm Cardigan Brown (#d08770): Anchors captions, borders, and pull quotes to her iconic knitwear.&lt;br&gt;
    • Cyan Headphone Accent (#88c0d0): Framed via custom inline SVG graphics at the header.&lt;/p&gt;

&lt;p&gt;Crafting the SVG Headphone Header&lt;br&gt;
An interface dedicated to Miku wouldn’t be complete without her signature studio headphones. Rather than relying on heavy external raster assets or messy image links, I integrated a custom, scalable vector graphic directly into the HTML structure.&lt;br&gt;
Using native SVG paths (, , ), the headphone arch and earcups frame the sanctuary header seamlessly, adapting across viewports while retaining crisp vector lines against the dark indigo background.&lt;/p&gt;

&lt;p&gt;HTML&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;svg viewBox="0 0 500 120" xmlns="http://www.w3.org/2000/svg"&amp;gt;
    &amp;lt;path d="M 60,110 A 190,110 0 0,1 440,110" fill="none" stroke="#88c0d0" stroke-width="12" stroke-linecap="round"&amp;gt;&amp;lt;/path&amp;gt;

&amp;lt;/svg&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  The final blade!
&lt;/h2&gt;

&lt;p&gt;Coding doesn't have to be a mechanical chore. When you take the technical fundamentals—semantic tables, CSS custom properties, vector layouts—and channel them into something you genuinely care about, programming turns back into what it was always meant to be: a creative craft.&lt;/p&gt;

&lt;p&gt;Put on your headphones, play your favorite opening track, and remember: to conquer the land, you must conquer the soul. Most importantly commit, and pour your heart out into the code!&lt;/p&gt;

&lt;p&gt;Right here: &lt;a href="https://labrava0x.github.io/mikus-sengoku-tables/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/mikus-sengoku-tables/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>css</category>
      <category>programming</category>
    </item>
    <item>
      <title>An art studio fanart game where you get to work as an artist assistant!</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Fri, 23 Oct 2026 15:33:02 +0000</pubDate>
      <link>https://dev.to/labrava0x/an-art-studio-fanart-game-where-you-get-to-work-as-an-artist-assistant-12ib</link>
      <guid>https://dev.to/labrava0x/an-art-studio-fanart-game-where-you-get-to-work-as-an-artist-assistant-12ib</guid>
      <description>&lt;p&gt;By irl La Brava&lt;/p&gt;

&lt;p&gt;If building the etch a sketch was the base to figure out how to bring my vision to life, this self-imposed project was another that was about making another dream come true! Previously, in the etch a sketch- it was all about combining clean vanilla Javascript loops, precise event listeners, and strict resource safeguards. And, here? Here, we bring a responsive, snappy sketchbook canvas to suck you in, and make you feel as if you were inside the canvas itself!&lt;/p&gt;

&lt;p&gt;Make no mistake! This is no regular artistic canvas that you get to be sucked in! This is a professional one where you get to work as an assistant for Shiina from akurasou no Pet na Kanojo. When you work for her, you get to be in a wholesome sanctuary, as you have never been before! Yes, I took everything from the foundations curriculum, and turned them into fanart projects! Others only do the projects to fulfill the assignment. While others also do it with hiring in mind. While I do it to make my dreams come true! The things that I always wanted to do, what aligns with my values, what matters, the feelings that they represent.&lt;/p&gt;

&lt;p&gt;This one of a kind fanart game has 350 levels that you can go through. At first, I envisioned 50 levels, but as I kept going, I realised that it was not enough, nor rich an experience enough, so I dedicated myself to make it feel the way it should. What for? To go through a whole journey with Shiina, not just in drawing, but also emotionally.  A sprawling, 350-stage progression canvas complete with custom multi-tool mechanics, DOM color swatches, local persistence, an embedded soundtrack player, and a floating Mashiro companion who watches your every stroke.&lt;/p&gt;

&lt;p&gt;Without further ado, allow me to show you the technical breakdown behind this process to make my dream come to life:&lt;/p&gt;

&lt;h2&gt;
  
  
  1//The Blueprint: Modular Architecture and Vanilla Purity
&lt;/h2&gt;

&lt;p&gt;In an era where modern web development is suffocated by heavy build tools, bundlers, and complex node modules, returning to vanilla JavaScript, HTML5, and CSS3 feels like clearing a dense fog.&lt;br&gt;
The project structure was deliberately kept clean, modular, and transparent:&lt;br&gt;
    • index.html: The semantic markup housing the toolbar, canvas container, dialogue HUD, and global background music player.&lt;br&gt;
    • style.css: A dark, gothic-tinged aesthetic (#121212 base) accented by Shiina pink (#e5989b) and muted grays, completely free of external CSS frameworks.&lt;br&gt;
    • game.js: The core state machine handling level progression, local storage persistence, name acquisition, and pixel-coverage validation.&lt;br&gt;
    • app.js: The low-level canvas rendering engine managing drawing contexts, stroke types, undo stacks, and PNG exports.&lt;br&gt;
    • levels.js: The expansive database mapping out 350 unique stages of artistic progression and dialogue triggers.&lt;/p&gt;

&lt;h2&gt;
  
  
  2// Conquering the Void: Bypassing Transient Activation
&lt;/h2&gt;

&lt;p&gt;Every custom engine hits roadblocks, and ours arrived early when handling the first-stroke name acquisition prompt.&lt;br&gt;
Originally, we relied on the browser's native prompt() triggered inside a canvas drawing event (mousedown or touch). But modern browser security policies enforce strict Transient User Activation rules. Because a canvas stroke doesn't always register as a high-level form interaction in the eyes of browser heuristics, the native prompt gets silently swallowed and blocked.&lt;br&gt;
Instead of accepting this automated interference, we engineered a custom in-app HTML modal overlay:&lt;br&gt;
    1. The UI Layer: An absolute-positioned backdrop (#name-modal) featuring a clean input card styled directly into our dark theme.&lt;br&gt;
    2. The Event Flow: When the player makes their first stroke, GameManager intercepts it, pauses execution, displays the modal, and waits for a deliberate string entry.&lt;br&gt;
    3. The Persistence Layer: Once entered, the name is sanitized, bound to this.playerName, and saved to localStorage so the user is never badgered twice unless they manually reset their progress.&lt;br&gt;
JavaScript&lt;br&gt;
checkFirstStrokePrompt() {&lt;br&gt;
  if (this.playerName &amp;amp;&amp;amp; this.playerName.trim() !== '') return;&lt;br&gt;
  if (this.hasPromptedForName) return;&lt;/p&gt;

&lt;p&gt;this.hasPromptedForName = true;&lt;br&gt;
  const modal = document.getElementById('name-modal');&lt;br&gt;
  const input = document.getElementById('modal-name-input');&lt;br&gt;
  const btn = document.getElementById('modal-submit-btn');&lt;/p&gt;

&lt;p&gt;modal.style.display = 'flex';&lt;br&gt;
  input.focus();&lt;/p&gt;

&lt;p&gt;const handleSave = () =&amp;gt; {&lt;br&gt;
    const entered = input.value.trim();&lt;br&gt;
    this.playerName = entered ? entered : "Assistant";&lt;br&gt;
    localStorage.setItem('shiina_player_name', this.playerName);&lt;br&gt;
    modal.style.display = 'none';&lt;br&gt;
    this.loadLevel(this.currentLevel);&lt;br&gt;
  };&lt;/p&gt;

&lt;p&gt;btn.onclick = handleSave;&lt;br&gt;
  input.onkeydown = (e) =&amp;gt; { if (e.key === 'Enter') handleSave(); };&lt;br&gt;
}&lt;/p&gt;

&lt;h2&gt;
  
  
  3// Pixel Math: Validating Art Across 350 Stages
&lt;/h2&gt;

&lt;p&gt;An Etch a Sketch app is fun, but giving it a progression system transforms it into a game of composition. We structured levels.js to scale across 350 distinct stages, each requiring a specific threshold of canvas coverage before allowing the artist to advance.&lt;br&gt;
How do you programmatically grade a drawing on an HTML5 canvas? By inspecting the pixel buffer directly using getImageData():&lt;br&gt;
JavaScript&lt;br&gt;
const canvasCtx = canvas.getContext('2d');&lt;br&gt;
const imageData = canvasCtx.getImageData(0, 0, canvas.width, canvas.height);&lt;br&gt;
const pixels = imageData.data;&lt;/p&gt;

&lt;p&gt;let paintedPixels = 0;&lt;br&gt;
const totalPixels = pixels.length / 4;&lt;/p&gt;

&lt;p&gt;for (let i = 0; i &amp;lt; pixels.length; i += 4) {&lt;br&gt;
  const r = pixels[i];&lt;br&gt;
  const g = pixels[i + 1];&lt;br&gt;
  const b = pixels[i + 2];&lt;/p&gt;

&lt;p&gt;// Check if pixel deviates from the clean white background&lt;br&gt;
  if (r &amp;lt; 240 || g &amp;lt; 240 || b &amp;lt; 240) {&lt;br&gt;
    paintedPixels++;&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;const coveragePercentage = (paintedPixels / totalPixels) * 100;&lt;br&gt;
If the calculated coveragePercentage meets or exceeds the threshold defined in the current level data, Shiina approves the composition, saves the state to localStorage, and advances the stage. If not, she offers character-driven feedback demanding more from the canvas.&lt;/p&gt;

&lt;h2&gt;
  
  
  4// Crafting the Atmosphere: Audio, Styling, and Companions
&lt;/h2&gt;

&lt;p&gt;Code is only half the equation; atmosphere is what gives an application a soul.&lt;br&gt;
    • The Soundtrack: We embedded a persistent background audio bar running the iconic Sakurasou theme, anchoring the user in the emotional resonance of the series while they code and draw.&lt;br&gt;
    • The Companion Widget: A floating Chibi Mashiro image positioned alongside the canvas (#mashiro-companion), utilizing keyframe animations (@keyframes mashiro-float) to give the illusion that she is quietly observing your progress from the corner of the screen.&lt;br&gt;
    • The Tools: Solid lines, pencil textures, and airbrush shade modes give the artist genuine creative flexibility, supported by DOM color swatches and a custom color picker input.&lt;/p&gt;

&lt;h2&gt;
  
  
  5//Final Thoughts
&lt;/h2&gt;

&lt;p&gt;So, that is the technical base idea that was needed to make it happen. Building Shiina's studio, getting into her work, working for her as an artist is not about chasing fake algorithms, metrics that have no meaning, pursuing art to appease the masses, a fake applause- No! None of that. It is all for one sole purpose: to create art that feels alive, become one with it, and experience a whole new world like you would never would do otherwise! It is about merging Javascript to create soft whispers of delicate strokes with artists like Shiina. And those stroke brushes? Those stroke burshes were made with code!&lt;/p&gt;

&lt;p&gt;Lastly, because I could not incorporate the official music inside ,due to copyright reasons, once more, at some point, I redid everything, and just embeded Shiina singing "Nande". So, go, and tell Shiina why you want to draw!&lt;/p&gt;

&lt;p&gt;(Just gotta make sure that everything is committed) You can definitely see it for yourself, and become  Shiina's assistant: &lt;a href="https://labrava0x.github.io/shiina.canvas.studio/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/shiina.canvas.studio/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>learning</category>
      <category>javascript</category>
      <category>css</category>
    </item>
    <item>
      <title>Setting up the stage with the etch a sketch project</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Fri, 23 Oct 2026 14:46:18 +0000</pubDate>
      <link>https://dev.to/labrava0x/setting-up-the-stage-with-the-etch-a-sketch-project-36bm</link>
      <guid>https://dev.to/labrava0x/setting-up-the-stage-with-the-etch-a-sketch-project-36bm</guid>
      <description>&lt;p&gt;Setting up the stage with the etch a sketch project&lt;/p&gt;

&lt;p&gt;By irl La Brava&lt;/p&gt;

&lt;p&gt;Part of the rite in passage of The Odin Project´s curriculum in foundations was the etch a sketch. Before moving forward, you learn how to make basic drawings, but not in already existing applications, but as your very own to host! Such was the case with this assignment. &lt;/p&gt;

&lt;p&gt;On paper, it sounds deceptively simple: build a browser-based drawing pad where a user can sketch across a grid of squares. But when you approach it not as a checkbox assignment, but as a deliberate exercise in DOM manipulation, event handling, and memory architecture. What is this for? To just check off another project assignment? You are wrong! This is but another part of the process to set up the stage that will lead to  transform yourself  into a masterpiece, into a masterclass in front-end engineering, into something out of this world, and beyond!&lt;/p&gt;

&lt;p&gt;Without further ado, let me present you with the technical aspect that makes the etch a sketch possible:&lt;/p&gt;

&lt;h2&gt;
  
  
  1 //The Core Challenge: Dynamic DOM Grid Generation
&lt;/h2&gt;

&lt;p&gt;The primary architectural constraint mandated by the curriculum is deceptively strict: you cannot hard-code your grid into the HTML. Typing out hundreds of individual square &lt;/p&gt; elements by hand is an anti-pattern; instead, the browser needs to construct the entire field programmatically via JavaScript.&lt;br&gt;
To accomplish this cleanly, we engineered a dynamic grid generator function that accepts a dimension parameter ($N \times N$) and populates a parent container using CSS Flexbox:&lt;br&gt;
JavaScript&lt;br&gt;
function createGrid(size) {&lt;br&gt;
  const container = document.getElementById('sketch-container');&lt;br&gt;
  container.innerHTML = ''; // Clear any existing grid

&lt;p&gt;// Set CSS custom properties for dynamic sizing&lt;br&gt;
  container.style.setProperty('--grid-size', size);&lt;/p&gt;

&lt;p&gt;const totalSquares = size * size;&lt;/p&gt;

&lt;p&gt;for (let i = 0; i &amp;lt; totalSquares; i++) {&lt;br&gt;
    const square = document.createElement('div');&lt;br&gt;
    square.classList.add('grid-square');&lt;/p&gt;

&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Attach event listeners for the drawing trail
square.addEventListener('mouseenter', paintSquare);

container.appendChild(square);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;}&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;By calculating flex-basis dynamically based on the requested side length, the layout scales fluidly without breaking container bounds or triggering unwanted layout shifts.&lt;/p&gt;

&lt;h2&gt;
  
  
  2// Event Routing and Mouse-State Management
&lt;/h2&gt;

&lt;p&gt;Handling hover states across thousands of dynamically generated DOM elements requires efficient event delegation or direct listener binding. To simulate the classic physical resistance and continuous stroke of a real mechanical drawing toy, we track mouse down/up states globally:&lt;br&gt;
JavaScript&lt;br&gt;
let isMouseDown = false;&lt;/p&gt;

&lt;p&gt;document.body.addEventListener('mousedown', () =&amp;gt; { isMouseDown = true; });&lt;br&gt;
document.body.addEventListener('mouseup', () =&amp;gt; { isMouseDown = false; });&lt;/p&gt;

&lt;p&gt;function paintSquare(e) {&lt;br&gt;
  // Only paint if the mouse button is actively held down&lt;br&gt;
  if (!isMouseDown &amp;amp;&amp;amp; e.type === 'mouseenter') return;&lt;/p&gt;

&lt;p&gt;// Apply dynamic color or progressive shading logic here&lt;br&gt;
  this.style.backgroundColor = getCurrentBrushColor();&lt;br&gt;
}&lt;br&gt;
This prevents accidental trailing smears and ensures the user feels absolute tactical control over every stroke they lay down on the grid.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Implementing Progressive Shading and Color Dynamics
&lt;/h2&gt;

&lt;p&gt;To elevate the project beyond a basic black-and-white grid, we incorporated advanced drawing modes—paying homage to classic sketching techniques:&lt;br&gt;
    • Randomized RGB Mode: Assigns a completely random hex or rgb value on every mouseover event, turning the canvas into a vibrant mosaic.&lt;br&gt;
    • Progressive Darkening (The 10-Pass Opacity Rule): Mimics real charcoal or graphite buildup by incrementing the element's darkness by 10% on each successive pass until it reaches pure black:&lt;br&gt;
JavaScript&lt;br&gt;
function applyProgressiveShading(square) {&lt;br&gt;
  let currentOpacity = parseFloat(square.style.opacity) || 0;&lt;br&gt;
  if (currentOpacity &amp;lt; 1) {&lt;br&gt;
    currentOpacity += 0.1;&lt;br&gt;
    square.style.opacity = currentOpacity;&lt;br&gt;
    square.style.backgroundColor = '#000000';&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;h2&gt;
  
  
  4 //Guarding System Resources: Input Validation
&lt;/h2&gt;

&lt;p&gt;Allowing users to customize their grid dimensions via a prompt sounds harmless until someone types 1000, instantly injecting one million DOM elements into the document and bringing the browser thread to a grinding halt.&lt;br&gt;
To protect system performance—especially when running on lightweight Linux setups or constrained hardware—we implemented strict input validation and a hard performance ceiling (capping grids at $100 \times 100$):&lt;br&gt;
JavaScript&lt;br&gt;
function promptForNewGrid() {&lt;br&gt;
  let input = prompt("Enter squares per side (Maximum 100):", "16");&lt;br&gt;
  let size = parseInt(input);&lt;/p&gt;

&lt;p&gt;if (isNaN(size) || size &amp;lt;= 0) {&lt;br&gt;
    alert("Please enter a valid positive number.");&lt;br&gt;
    return;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;if (size &amp;gt; 100) {&lt;br&gt;
    alert("Canvas limit is 100x100 to protect browser memory performance.");&lt;br&gt;
    size = 100;&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;createGrid(size);&lt;br&gt;
}&lt;/p&gt;

&lt;h2&gt;
  
  
  5//Final words, for prepping a new code:
&lt;/h2&gt;

&lt;p&gt;Creating a Etch a sketch, is not another assignment to mark as completed, in the curriculum, it is about learning how to create art. Because html is not just html, and the DOM needs to be properly structured, and respected to get the desired results.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>theodinproject</category>
      <category>javascript</category>
      <category>learning</category>
    </item>
    <item>
      <title>1000-7 My dream calculator come true</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Thu, 22 Oct 2026 22:00:59 +0000</pubDate>
      <link>https://dev.to/labrava0x/1000-7-my-dream-calculator-come-true-42lh</link>
      <guid>https://dev.to/labrava0x/1000-7-my-dream-calculator-come-true-42lh</guid>
      <description>&lt;p&gt;1000-7 My dream calculator come true.&lt;br&gt;
I had to run debugging, and do other adjustments to resume, but now the next submission of a retelling is ready. Without further ado, let me tell you about another of my projects that I started it right away after the assigned basic calculator from The Odin Project.&lt;/p&gt;

&lt;p&gt;Making a regular calculator is too boring, too predictable, everyone already has seen one of those before. There is no elegant, nor explosive element behind it. Besides, numbers can feel soothing, the rhythmic latency to keep going, keep in sync, until becoming one with the numbers, and have it envelop you, as a warm blanket of binary that makes all of the Javascript – and, as a result creating a calculator that is wholesome, and grounding, one of a kind, like no other.&lt;/p&gt;

&lt;p&gt;It is perfect for high stakes, and extreme pressure too! Because this world shows no mercy at all! That is why you must keep counting until there is nothing left! And, it all starts with 1000-7...You don’t know if you will survive! You just keep counting! A front-end project that is not just Javascript, but also runs on the psychology of a broken soul, all captured from the game mechanics to the UX design as a whole. Several different layers of Javascript to make it work, and the index, and the style- all of them being in sync to make it happen!&lt;/p&gt;

&lt;p&gt;A summary that describes how I originally envisioned this game, but with logic infused to it:&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Dual-State Calculation Mechanics &amp;amp; Event Interception**
&lt;/h2&gt;

&lt;p&gt;The core architecture supports two distinct operational modes, dynamically handled inside a single event-listener loop.&lt;br&gt;
Rather than relying on basic input forms, I intercepted both UI button clicks and physical keyboard events (keydown) to maintain absolute state control:&lt;br&gt;
    • Operator Mode (- 7 = Progression): Allows continuous, high-speed operator execution. The engine tracks the exact target subtrahend ($1000 - 7 = 993$).&lt;br&gt;
    • Direct Verification Mode: Requires the user to manually calculate and type the target output (e.g., typing 993 directly).&lt;br&gt;
JavaScript&lt;br&gt;
// Verification &amp;amp; Progression Dispatcher&lt;br&gt;
if (isSubtractMode) {&lt;br&gt;
  const subtrahend = currentInput === '' ? 7 : parseFloat(currentInput);&lt;br&gt;
  if (subtrahend === 7) {&lt;br&gt;
    processSuccessStep(expected);&lt;br&gt;
  } else {&lt;br&gt;
    // Immediate catastrophic failure trigger&lt;br&gt;
    triggerAllTauntsBreakdown();&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;##2. Dynamic Style Injection &amp;amp; Zero-Dependency Overlay DOM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I refused to bloat the DOM with static overlay elements or external library dependencies. Instead, the overlay structures and CSS keyframes are injected dynamically on initialization using pure JavaScript DOM generation.&lt;br&gt;
JavaScript&lt;br&gt;
// Dynamic CSS Injection for Animations &amp;amp; Jump-Scare Overlays&lt;br&gt;
if (!document.getElementById('rize-breakdown-styles')) {&lt;br&gt;
  const styleSheet = document.createElement('style');&lt;br&gt;
  styleSheet.id = 'rize-breakdown-styles';&lt;br&gt;
  styleSheet.textContent = &lt;code&gt;&lt;br&gt;
    @keyframes shake {&lt;br&gt;
      0% { transform: translate(1px, 1px) rotate(0deg); }&lt;br&gt;
      20% { transform: translate(-3px, 0px) rotate(1deg); }&lt;br&gt;
      /* Dramatic viewport distortion */&lt;br&gt;
      100% { transform: translate(1px, -2px) rotate(-1deg); }&lt;br&gt;
    }&lt;br&gt;
    .blackout-overlay, .reward-overlay {&lt;br&gt;
      position: fixed;&lt;br&gt;
      top: 0; left: 0; width: 100vw; height: 100vh;&lt;br&gt;
      background-color: #000000;&lt;br&gt;
      z-index: 9999;&lt;br&gt;
      display: flex;&lt;br&gt;
      flex-direction: column;&lt;br&gt;
      justify-content: center;&lt;br&gt;
      align-items: center;&lt;br&gt;
    }&lt;br&gt;
&lt;/code&gt;;&lt;br&gt;
  document.head.appendChild(styleSheet);&lt;br&gt;
}&lt;br&gt;
This guarantees that the entire application remains completely modular within a single script—rendering pitch-black modal lockouts, glowing crimson drop-shadows (text-shadow: 0 0 15px rgba(255,0,50,0.95)), and viewport shake animations without a single external library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;##3. Asymmetrical Psychological Penalties (Randomization vs. Array Cascading)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To heighten the psychological impact, the penalty system branches based on the gravity of the user's mistake:&lt;br&gt;
    1. A Standard Typo or Manual Miscalculation: Triggers a singular, randomized taunt from an array pool of 8 distinct psychological psychological lines (taunts[Math.floor(Math.random() * taunts.length)]), followed by an immediate state reset back to 1000.&lt;br&gt;
    2. An Illegal Subtraction Attempt (e.g., attempting - 6): Interpreted as a deliberate breach of the grounding rules. The engine maps across the entire array (taunts.map(...)), cascading all 8 psychological taunts simultaneously across the blackout overlay.&lt;br&gt;
JavaScript&lt;br&gt;
// Illegal Subtraction Penalty: Simultaneous Array Cascade&lt;br&gt;
function triggerAllTauntsBreakdown() {&lt;br&gt;
  isLocked = true;&lt;br&gt;
  streakCount = 0; // Wipe streak&lt;br&gt;
  calculator.classList.add('shake');&lt;/p&gt;

&lt;p&gt;setTimeout(() =&amp;gt; {&lt;br&gt;
    blackoutOverlay.innerHTML = &lt;code&gt;&lt;br&gt;
      &amp;lt;div class="blackout-taunts-container"&amp;gt;&lt;br&gt;
        ${taunts.map(t =&amp;gt;&lt;/code&gt;&lt;/p&gt;${t}&lt;code&gt;).join('')}&lt;br&gt;
      &amp;lt;/div&amp;gt;&lt;br&gt;
      &amp;lt;div class="blackout-timer"&amp;gt;[ restarting descent in ${countdown}... ]&amp;lt;/div&amp;gt;&lt;br&gt;
&lt;/code&gt;;&lt;br&gt;
    blackoutOverlay.classList.add('active');&lt;br&gt;
  }, 600);&lt;br&gt;
}

&lt;h2&gt;
  
  
  4. Multi-Step Tiered Reward Modulo Logic
&lt;/h2&gt;

&lt;p&gt;Sustaining focus down to 0 requires incremental reinforcement. The system uses a modulo step check (streakCount % 7 === 0) combined with keyframe state mapping to present progressive psychological monologues at exact 7-step intervals ($7 \rightarrow 14 \rightarrow 21 \rightarrow 28 \rightarrow 35\dots$).&lt;br&gt;
JavaScript&lt;br&gt;
// Progressive Milestone State Object&lt;br&gt;
const rewardTiers = {&lt;br&gt;
  7: &lt;code&gt;"You wish your mother would have chosen you? Scream it!..."&lt;/code&gt;,&lt;br&gt;
  14: &lt;code&gt;"You hate being alone? You really think someone will stay?..."&lt;/code&gt;,&lt;br&gt;
  21: &lt;code&gt;"No one is going to live for you, so why not just live only for yourself~?"&lt;/code&gt;,&lt;br&gt;
  28: &lt;code&gt;"Even if it means forsaking everything in this world? Even if it meant hurting someone? My good one"&lt;/code&gt;&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;function triggerStreakReward() {&lt;br&gt;
  isLocked = true; // Lock controls to force focused reading&lt;br&gt;
  const tierKey = rewardTiers[streakCount] ? streakCount : (Math.floor(streakCount / 7) * 7);&lt;br&gt;
  const activeMonologue = rewardTiers[tierKey] || rewardTiers[7];&lt;/p&gt;

&lt;p&gt;// Render pitch-black reward screen with non-blocking countdown interval&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Every key press gets an answer, and depending on the number you press on the calculator, you activate a new divergence of your fate. Is it the butterfly effect, or something else? Just by the -7 that you make, it will result on how you get to come out of it!&lt;/p&gt;

&lt;p&gt;If you want to know more check this out:&lt;/p&gt;

&lt;p&gt;**&lt;br&gt;
// Unified Event Bus &amp;amp; Keypress Synchronization**&lt;/p&gt;

&lt;p&gt;Handling inputs from both touch/mouse UI buttons and physical mechanical keyboards often introduces race conditions or double-firing bugs if state isn't locked down.&lt;br&gt;
To eliminate this, I established a single execution bottleneck. The keyboard listener does not perform calculation logic itself; instead, it normalizes keypresses (Enter $\rightarrow$ =, Escape $\rightarrow$ Clear, Backspace $\rightarrow$ ←) and programmatically dispatches them directly to the button logic.&lt;br&gt;
JavaScript&lt;br&gt;
// Keyboard Event Normalization to UI Dispatch&lt;br&gt;
document.addEventListener('keydown', (e) =&amp;gt; {&lt;br&gt;
  if (isLocked) return; // Immediate drop-gate during overlays&lt;/p&gt;

&lt;p&gt;if (e.key &amp;gt;= '0' &amp;amp;&amp;amp; e.key &amp;lt;= '9') {&lt;br&gt;
    const btn = Array.from(buttons).find(b =&amp;gt; b.textContent.trim() === e.key);&lt;br&gt;
    if (btn) btn.click();&lt;br&gt;
  } else if (e.key === '-' || e.key === 'Subtract') {&lt;br&gt;
    const btn = Array.from(buttons).find(b =&amp;gt; b.textContent.trim() === '-');&lt;br&gt;
    if (btn) btn.click();&lt;br&gt;
  } else if (e.key === 'Enter' || e.key === '=') {&lt;br&gt;
    const btn = Array.from(buttons).find(b =&amp;gt; b.textContent.trim() === '=');&lt;br&gt;
    if (btn) btn.click();&lt;br&gt;
  } else if (e.key === 'Escape') {&lt;br&gt;
    const btn = Array.from(buttons).find(b =&amp;gt; b.textContent.trim() === 'Clear');&lt;br&gt;
    if (btn) btn.click();&lt;br&gt;
  }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;By forcing keyboard input through btn.click(), the application maintains a single source of truth for sound/UI state changes, preventing fast typists from desynchronizing the display buffer.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  The Asymmetrical State Lock (isLocked)**
&lt;/h2&gt;

&lt;p&gt;One of the hardest parts of creating a high-stakes penalty loop is preventing input buffering exploits—where a user furiously typing - 7 = = = accidentally clicks through or bypasses a blackout screen before the browser finishes rendering it.&lt;br&gt;
The state variable isLocked acts as an asymmetrical lock:&lt;br&gt;
    • Instant Activation: The exact microsecond an illegal subtraction or typo is detected, isLocked = true is set synchronously before setTimeout or animation loops trigger.&lt;br&gt;
    • Input Dropping: While isLocked === true, all button clicks and key events are silently discarded at the very top of the call stack.&lt;br&gt;
    • Timed Release: Control is restored only after the full 5-second breakdown timer or 8-second monologue timer completely unmounts the active CSS class (classList.remove('active')).&lt;br&gt;
JavaScript&lt;br&gt;
// Strict Guard Block at the Top of Every Input Flow&lt;br&gt;
buttons.forEach(button =&amp;gt; {&lt;br&gt;
  button.addEventListener('click', () =&amp;gt; {&lt;br&gt;
    if (isLocked) return; // Hard wall against speed-typing&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ... Process input logic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;});&lt;br&gt;
});&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;CSS Vibration Physics &amp;amp; Viewport Distortion
To make a miscalculation feel genuinely unnerving, the shake animation cannot just move the calculator side-to-side linearly. It needs rapid, jagged, multi-axis rotational shifts.
By injecting raw CSS keyframe rules into the document head dynamically, we apply a high-frequency shake class that moves the UI across X, Y, and rotational axes within a $0.4\text{s}$ duration:
CSS
@keyframes shake {
0% { transform: translate(1px, 1px) rotate(0deg); }
20% { transform: translate(-3px, 0px) rotate(1deg); }
40% { transform: translate(1px, -1px) rotate(1deg); }
60% { transform: translate(-3px, 1px) rotate(0deg); }
80% { transform: translate(-1px, -1px) rotate(1deg); }
100% { transform: translate(1px, -2px) rotate(-1deg); }
}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;.calculator.shake {&lt;br&gt;
  animation: shake 0.4s ease;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The calculator element shakes violently for $600\text{ms}$ while displaying "UNRAVEL the world". Only after this visual disruption completes does the script pull the curtain down with the pitch-black overlay (.blackout-overlay.active).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pure CSS Atmospheric Rendering: Crimson Text Shadowing
To achieve the haunting, glowing aesthetic without loading heavy canvas assets or external graphics, the visual styling relies heavily on layered CSS text-shadow spreads and high-contrast typography.
The text is styled with monospace fallback fonts ('Courier New', Courier, monospace) and a dual-layer red text shadow:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CSS&lt;br&gt;
.reward-text {&lt;br&gt;
  font-family: 'Courier New', Courier, monospace;&lt;br&gt;
  font-size: 1.15rem;&lt;br&gt;
  color: #ff3333;&lt;br&gt;
  text-align: center;&lt;br&gt;
  line-height: 1.9;&lt;br&gt;
  max-width: 720px;&lt;br&gt;
  /* Double-layer glow: ambient red spread + sharp dark backing */&lt;br&gt;
  text-shadow: 0 0 15px rgba(255, 0, 50, 0.95), 2px 2px 6px #000;&lt;br&gt;
  user-select: none;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This creates the effect of terminal text burning through dark glass while keeping DOM memory overhead practically non-existent.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Algorithmic Penalty Branching &amp;amp; Cascading Arrays
The psychological  cascading is just like your own cascading arrays! For this architecture lies in how it treats mistakes based on intent:
Scenario A: Single Typo / Miscalculation
When a user miscalculates (e.g., typing 992 instead of 993), the algorithm treats it as a lapse in focus. It picks a single random taunt using pseudo-random index selection:
$$\text{index} = \lfloor \text{Math.random()} \times \text{taunts.length} \rfloor$$
JavaScript
const randomTaunt = taunts[Math.floor(Math.random() * taunts.length)];&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Scenario B: Illegal Subtraction Attempt&lt;br&gt;
When a user attempts to break the rules of $1000 - 7$ by executing an unauthorized subtraction (such as - 6 or - 5), the system interprets this as an attempt to cheat the descent.&lt;br&gt;
Instead of selecting one taunt, it maps over the entire array pool and renders all 8 psychological taunts stacked simultaneously across the screen in a dense column of red text:&lt;br&gt;
JavaScript&lt;br&gt;
// Simultaneous All-Taunt Cascade&lt;br&gt;
blackoutOverlay.innerHTML = &lt;code&gt;&lt;br&gt;
  &amp;lt;div class="blackout-taunts-container"&amp;gt;&lt;br&gt;
    ${taunts.map(t =&amp;gt;&lt;/code&gt;&lt;/p&gt;${t}&lt;code&gt;).join('')}&lt;br&gt;
  &amp;lt;/div&amp;gt;&lt;br&gt;
  &amp;lt;div class="blackout-timer"&amp;gt;[ restarting descent in ${countdown}... ]&amp;lt;/div&amp;gt;&lt;br&gt;
&lt;/code&gt;;

&lt;p&gt;&lt;strong&gt;##Zero-Dependency State Persistence Mechanics&lt;/strong&gt;&lt;br&gt;
Because this entire tool is designed to run locally offline (even on low-power devices, minimalist terminal setups, or simple browser instances), keeping the code modular in a single script.js file ensures:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Zero Node/npm Dependencies: No build steps or bundlers required.

## Instant Initialization: Direct DOM dynamic creation means as long as index.html loads script.js, all overlays, keyframe stylesheets, and event hooks auto-instantiate themselves.
## Pure Execution: Clean memory footprint with zero garbage collection lag during rapid inputs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When code is written with this level of  love, it is meant to unravel you, until it consumes you, and there are no numbers left!  This is the one of a kind calculator that I dreamed of!&lt;/p&gt;

&lt;p&gt;And, the best part? This was done with vanilla Javascript! So, imagine how it would be like with something beyond that! From the DOM to the countdown! Are you ready to become something else? And, of course, a touch of SVG to elevate it even more!&lt;/p&gt;

&lt;p&gt;Begin the sequence of 1000-7 yourself here: &lt;a href="https://labrava0x.github.io/TokypGhoulCalculator/" rel="noopener noreferrer"&gt;https://labrava0x.github.io/TokypGhoulCalculator/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>calculator</category>
      <category>theodinproject</category>
    </item>
    <item>
      <title>Setting up the stage for the calculator!</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Tue, 20 Oct 2026 18:44:13 +0000</pubDate>
      <link>https://dev.to/labrava0x/setting-up-the-stage-for-the-calculator-1352</link>
      <guid>https://dev.to/labrava0x/setting-up-the-stage-for-the-calculator-1352</guid>
      <description>&lt;p&gt;Ending the foundations stage, and keep moving forward!&lt;/p&gt;

&lt;p&gt;Before I even reached this last module, many modules way back, I already knew what I wanted to do with my calculator before I even got there! But, for that, I had to reach that point, without skipping the lessons, as it is important to understand everything. That is how the vision was planned in my mind from the start!&lt;/p&gt;

&lt;p&gt;The calculator itself was worth the challenge! Because it is not just about math, but also about bringing all the feelings, and make it bleed, and feel with purpose. That’s why the preassigned calculator from the assignment was the guide to bring that vision come to life! Here it is about orchestrating asynchronous user inputs (the mouse, and keyboard interactions), and handling edge cases gracefully. Extras just follow the script, and move on, while I just use the base to make something of my very own!&lt;/p&gt;

&lt;p&gt;Below is a technical breakdown of this calculator that was the finishing touch to the introduction of vanilla Javascrpt.&lt;/p&gt;

&lt;h2&gt;
  
  
  1/ The Frankestein numerical set up
&lt;/h2&gt;

&lt;p&gt;Do I even need to explain what a calculator is for? This is just about creating a digital one. Because if you don’t have a physical one, and you don’t want a cookie-cutter calculator that you are already provided with, why don’t you make your own? Anyways, to not make the DOM CONFUSED, we have to stay everything clearly,as always.&lt;/p&gt;

&lt;p&gt;Our structure has the following variables:&lt;/p&gt;

&lt;p&gt;~firstNumber: Stores the initial operand or the accumulated result of a previous operation.&lt;/p&gt;

&lt;p&gt;~currentOperator: Tracks the active mathematical operators&lt;/p&gt;

&lt;p&gt;~secondNumber: Captures the incoming operand&lt;/p&gt;

&lt;p&gt;~resetDisplayNext: A Boolean flag that signals wether the next digit input should clear the screen (activated immediately after an operator is selected)&lt;/p&gt;

&lt;p&gt;~justCalculated: Prevents compounding evaluation errors immediately after hitting = .  It ensures absolute precision&lt;/p&gt;

&lt;p&gt;Javacript by default, speciallly at vanilla level, is a true test in itself. A rigurous rounding utility was implemented. A real calculator cannot fail. Why? Because that is its purpose, its meaning, if you cannot calculate as a calculator, then what are you?&lt;/p&gt;

&lt;p&gt;The initial stage were manageable, it was in its progress that there was more to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mad with the Math &amp;amp; Safety Layering
&lt;/h2&gt;

&lt;p&gt;This can turn quickly into a horror story on how Javascript gets to handle the floating-point arithmetic. To prevent native floating-point precision errors (e.g., 0.1 + 0.2=0.30000000000000000000000000004), a custom rounding utility needs to be implemented. To escape this- by calculating the number of decimal places in the operands and applying a multiplier (e.g, multiplying by 10^n before the operation, and viding by 10^n after), the application guarantees absolute accuracy….Or at least if you code it correctly.&lt;/p&gt;

&lt;p&gt;Syntax is also important, and always look for typos!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;##3/ Ascensation towards asynchronous inputs fully&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Handling user input requires strict discipline. We implemented a unified event delegation strategy, ensuring that both keyboard keydown events and mouse clicks route through the exact same validation pipeline. Half implementation of logic, and half of philosophy, like the existential crisis that I am having as I am writing this.&lt;/p&gt;

&lt;p&gt;/Input.sanitizer: Prevents users from inputting multiple decimal points or breaking the  parsing logic with overlapping operators.&lt;/p&gt;

&lt;p&gt;/Error.handler: If a user attemps to divide by zero, the system doesn’t crash; it triggers the disgraceful ERR_DIV_ZERO state, locking the interface until a reset is initiated. It’s a foolproof containment protocol.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  4 UI philosophy**
&lt;/h2&gt;

&lt;p&gt;The visual layer must feel right, or else it breaks the mood, and the atmosphere, and this is part of making a web app fully responsive. If it doesn’t look right, it cannot feel right! That is why checking countless times is crucial in here! The perfect alignment- it is all about aligning  your soul with the code. If the grid, if every line is correct, it will show.&lt;/p&gt;

&lt;p&gt;Anyways, for the assignment, I kept purely minimal, and minimalist. In a way, the follow-up project also has this type of design, because I felt that it was important to not have distractions, and the let the focus be on our star: the calculator itself. So, it is dark, and the calculator is dark too. I personally do not want something that would hurt my eyes more! The way it is just works for me.&lt;/p&gt;

&lt;p&gt;I am sorry- personal issues aside- I cannot explain well-enough to a cookie-cutter assignment. It does not bring the same excitement than when making something of my own. Don't get me wrong, this was an exciting project, but it feels like on another level to just follow my vision with creative pursuits.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>theodinproject</category>
      <category>learning</category>
    </item>
    <item>
      <title>The first stage of operation recipe project!</title>
      <dc:creator>La.Brava0x</dc:creator>
      <pubDate>Tue, 20 Oct 2026 17:09:12 +0000</pubDate>
      <link>https://dev.to/labrava0x/the-first-stage-of-operation-recipe-project-561h</link>
      <guid>https://dev.to/labrava0x/the-first-stage-of-operation-recipe-project-561h</guid>
      <description>&lt;p&gt;Turning a boring preassigned template to a dream come true!&lt;/p&gt;

&lt;p&gt;Why just make a generic “project”, when you can have a real project that explodes with feelings, the right atmosphere, and the kind of set up design where all dreams come true? Of course, since the beginning of The Odin Project, I had to follow my own vision, and instinct, not just follow the curriculum blindly!&lt;/p&gt;

&lt;p&gt;Furthermore, when revisiting to an established codebase- even a foundational static project like a multi-page recipe – the objective shifts rapidly from basic markup generation to a functional web cookbook that simulates a whole new world! What kind of world you may ask? One that has the library cafe of my dreams! &lt;/p&gt;

&lt;p&gt;And to make this happen, refinement is needed as I keep updating it as needed. Without further ado, I shall provide with the brief that examines recent refactoring my dream, to upgrade it in both the repository, and its design! It focuses on DOM path resolution, Jekyll pipiline overrides, and the complere migration from static raster assets (AI generated placeholders, until I could come up with a version of my own), to inline Scalable Vector Graphics (SVG). This design system deserves its own tribute, on how to make a dream feel reachable!&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  1/Resolving Structural Path Anamolies and DOM Integrity**
&lt;/h2&gt;

&lt;p&gt;Switching between different projects during multitasking, and the early stage of a multi-stage cookbook, a flat directory structure paired with a centralized styles.css is critical for minimizing the confusion in the path. Moreover, inconsistent relative referencing frequently introduces routing failures.&lt;/p&gt;

&lt;p&gt;/Fix.failure:&lt;/p&gt;

&lt;p&gt;Initial attempts to link sibling resources or stylesheets using hierarchical prefixes (e.g, … /styles.css ) or nested folder paths) resulted in client-side exceptions. Frankly, an embarrassing mistake, display of the current foundational stage.&lt;/p&gt;

&lt;p&gt;/root: The Document Object Model (DOM) attempted to resolve parent directories that did not exist within flat working environment. The browser’s parser was fundamentally confused by the hierarchy.&lt;/p&gt;

&lt;p&gt;/resolution: Enforcing strict relative path parity. By normalizing all stylesheet links, and navigation anchors to point directly to root-level siblings (href=”styles.css” and hreft=”index.html”), the routing tree was stabilized. This eliminated parser stalling and the unsightly layout shifts that occur when CSS fails to load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;##2/Bypassing Jekyll Static compilation barriers on GitHub pages-build-deployment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub pages defaults to a Jekyll build process, which frequently interferes with custom static deployments, and specific asset pipelines. To ensure absolute control over the repository’s output, we must implement a nojekyll file at the root level. This bypasses the unnecessary static compilation barriers, allowing our raw HTML, and SVG assets to deploy directly to the edge network without Jekyll’s meddling. It is a simple but elegant override- a true gentle touch, one that makes the new website completely viewable.&lt;/p&gt;

&lt;p&gt;So, yes, it is really funny that each time I encounter some kind of problem, I end up learning how to do something else...At this point, I should gather all the Today I learned, and attempt to keep track of them!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;##3/ Migrating to Native Inline SVG&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The migration from raster images (PNG/JPG) to native inline Scalable Vector Graphics (SVG) is not just a performance optimization; it is a metter of aesthetic superiority. Plus, it was part of my practice with SVG! Inline SVGs reduce HTTP requests, allow for direct DOM manipulation via CSS, and scale infinitely without pixelation.  Raster assets are a thing of the past? Maybe, or maybe not, but that is what felt right. The elegance that is achieved with vectors is unique! Specially, since manual digital illustrations (as originally intended is too time-consuming!)&lt;/p&gt;

&lt;p&gt;Because good design requires proper code working! From the second project where I eliminated routing errors, validating document trees, and replacing  static rasters with an optimized, inline SVG vector pipeline, the recipe repository transforms from a basic project to a fanart of something with a soul of its own- A summary of it that you can find in the following sequence with the second part of the second project recipe that I found. &lt;/p&gt;

&lt;p&gt;The takeaway: Just like the final cup where you get to taste the final sips of tea- you get to experience the images of the drinks that make you feel like they hug you from the inside- and, the final strokes that make a dream come true that comes to its destination. Do not be deceived, however! You can always pour yourself another cup of tea, just like you can keep improving the code...Which leads to the question: will this project need to be revisited (just like the others)? Definitely when needed!&lt;/p&gt;

&lt;p&gt;And, with this finalizes the layered process in my last revisiting the project in which I got to learn how to use .nojekyll,  and make the website, and repository into art itself. Would it have been worth it mentioning how I experimented with Krita too?&lt;/p&gt;

&lt;p&gt;Check out my project here: &lt;a href="https://labrava0x.github.io/odin-recipes/index.html" rel="noopener noreferrer"&gt;https://labrava0x.github.io/odin-recipes/index.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>theodinproject</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
