<?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: Khahliso Sekoto</title>
    <description>The latest articles on DEV Community by Khahliso Sekoto (@khahliso).</description>
    <link>https://dev.to/khahliso</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%2F4111154%2Fd61e1e6b-f0a2-42a1-8979-a7651e77a61b.jpeg</url>
      <title>DEV Community: Khahliso Sekoto</title>
      <link>https://dev.to/khahliso</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/khahliso"/>
    <language>en</language>
    <item>
      <title>Building for Digital Inclusion: A Deep Dive into Form Architecture and Advanced Native Validation</title>
      <dc:creator>Khahliso Sekoto</dc:creator>
      <pubDate>Tue, 15 Sep 2026 11:28:00 +0000</pubDate>
      <link>https://dev.to/khahliso/building-for-digital-inclusion-a-deep-dive-into-form-architecture-and-advanced-native-validation-496c</link>
      <guid>https://dev.to/khahliso/building-for-digital-inclusion-a-deep-dive-into-form-architecture-and-advanced-native-validation-496c</guid>
      <description>&lt;p&gt;Hey DEV community! 👋&lt;/p&gt;

&lt;p&gt;September marks Deaf Awareness Month (and International Month for Deaf People). As developers and technical professionals, it is easy to get caught up in building flashy UI transitions, complex frameworks, or heavy animations. But true platform optimization starts under the hood with structural integrity and digital inclusion.&lt;/p&gt;

&lt;p&gt;I have been systematically engineering my technical foundations through The Odin Project. For my latest milestone project, I moved past basic layouts to build a fully functional, high-performance Sign-Up Form entirely from scratch.&lt;/p&gt;

&lt;p&gt;Instead of relying on heavy third-party UI libraries or template wrappers, I wanted to strip things back to native web mechanics. My goal was to focus heavily on semantic structure, clean data flow paths, and inclusive visual design patterns that support assistive technologies and users who rely on clear, predictable visual interfaces.&lt;/p&gt;

&lt;p&gt;Here is a breakdown of the architectural layouts, validation structures, and UX principles I engineered into this Minimum Viable Product (MVP).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🧱 Form Architecture &amp;amp; Semantic Accessibility (A11y)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A common mistake when building web forms is prioritizing visual spacing over structural accessibility. If a form relies on generic &lt;/p&gt; wrappers instead of true semantic tags, screen readers, field-navigating browser extensions, and custom assistive devices will struggle to map out the user flow.

&lt;p&gt;For this project, I prioritized accessible element pairing. Every interactive text entry block follows a strict programmatic layout:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phone Number
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Why this setup matters for business operations:Flawless Accessibility: &lt;/p&gt;

&lt;p&gt;•Explicitly binding the  attribute to the matching  tells assistive software exactly what information belongs where.&lt;br&gt;
• Reliable Data Routing: Setting proper data flow methods like method="POST" ensures form payloads travel securely. As a Technical VA, this foundational logic allows me to step into tools like Zapier or Make and immediately trace exactly why an automation webhook is dropping data between a landing page and a company CRM database.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🛡️ Data Gatekeeping: Native Constraints vs. Follow-up Friction&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In database management, "garbage in equals garbage out." When businesses run open intake portals without structural constraint limits, users often submit incomplete values, mismatched entries, or vague one-word data blocks. This results in team friction and endless, tedious follow-up emails.&lt;/p&gt;

&lt;p&gt;To solve this, I implemented strict data validation rules natively into the markup layout:&lt;/p&gt;

&lt;p&gt;•Mandatory Submissions: Leveraging explicit required attributes prevents users from triggering form submissions with empty critical fields.&lt;/p&gt;

&lt;p&gt;•Smart Attribute Filtering: Using targeted input parameters like type="tel" and type="password" instructs mobile operating systems to automatically pull up the correct, user-friendly numerical keypad layout.&lt;/p&gt;

&lt;p&gt;By safeguarding input fields right at the front gate, I ensure that data matches exact structural business criteria before it ever leaves the client screen. This saves server processing loads and keeps corporate databases perfectly organized.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🎨 Intelligent Visual Feedback with Modern CSS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Error messages that flash aggressively the moment a page loads create a frustrating, high-friction user onboarding experience. Good user interfaces should be responsive, clean, and intuitive.&lt;/p&gt;

&lt;p&gt;To manage this elegantly, I leveraged modern CSS pseudo-classes to build a predictive visual feedback loop:&lt;/p&gt;

&lt;p&gt;/* Interactive border focus glow when a field is active */&lt;br&gt;
.input-group input:focus {&lt;br&gt;
    border-color: #2563eb;&lt;br&gt;
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.2);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;/* Smart error handling that waits for user interaction */&lt;br&gt;
.input-group input:user-invalid {&lt;br&gt;
    border-color: #ef4444;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The Engineering Strategy Behind the Selection:&lt;/p&gt;

&lt;p&gt;1.The Active Ring (:focus): When a user highlights a text box, the border smoothly transitions to a distinct blue hue (#2563eb) paired with a high-contrast focus ring shadow. This provides immediate, accessible clarity on where the cursor is currently resting.&lt;/p&gt;

&lt;p&gt;2.The Predictive Error Trigger (:user-invalid): Unlike the traditional, aggressive :invalid selector, the modern :user-invalid pseudo-class is intelligent. It remains silent while the user is typing and only flashes a clean validation red (#ef4444) after the user interacts with the input, types an incorrect format, and moves their cursor away.&lt;/p&gt;

&lt;p&gt;This keeps the user interface clean, reassuring, and completely stress-free for neurodivergent individuals or individuals navigating with high-contrast screen magnification tools&lt;/p&gt;

&lt;p&gt;💼 Bridging Tech and Business Operations&lt;/p&gt;

&lt;p&gt;This milestone isn't a bloated marketing website—it is an airtight, responsive Minimum Viable Product (MVP) built on tidy layout rules and predictable code hygiene.&lt;/p&gt;

&lt;p&gt;I am actively expanding my development portfolio through The Odin Project, and I am open to international and local Technical VA, IT Support, or junior operational opportunities!&lt;/p&gt;

&lt;p&gt;If your startup or engineering team needs a remote partner who understands semantic data flows, speaks the language of your development group, and can confidently manage your platform integrations autonomously—let's connect!&lt;/p&gt;

&lt;p&gt;📂 Explore the Build:&lt;/p&gt;

&lt;p&gt;💻 Clean Source Code Repository: &lt;a href="https://github.com/KhahlisoSekoto/sign-up-form.git" rel="noopener noreferrer"&gt;https://github.com/KhahlisoSekoto/sign-up-form.git&lt;/a&gt;&lt;br&gt;
🌐 Live Interactive Form Demo: &lt;a href="https://khahlisosekoto.github.io/sign-up-form/" rel="noopener noreferrer"&gt;https://khahlisosekoto.github.io/sign-up-form/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I would love to get your feedback! Devs, take a look at the repo structure, try out the input inputs, and let me know your thoughts on my code layout or validation logic in the comments below! 🚀&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Day 2: The Evolution of CSS Resets (And the Game of Layout "Whack-A-Mole")</title>
      <dc:creator>Khahliso Sekoto</dc:creator>
      <pubDate>Tue, 08 Sep 2026 09:20:21 +0000</pubDate>
      <link>https://dev.to/khahliso/day-2-the-evolution-of-css-resets-and-the-game-of-layout-whack-a-mole-20f</link>
      <guid>https://dev.to/khahliso/day-2-the-evolution-of-css-resets-and-the-game-of-layout-whack-a-mole-20f</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;I’m on a self-taught web development journey, studying every Monday to Friday. This morning, I dove into Day 2 of the Intermediate CSS path on The Odin Project, and I wanted to document exactly what I uncovered about browser defaults, resets, and modern layout strategies.&lt;/p&gt;

&lt;p&gt;Ever wondered why an unstyled HTML page still has bold headings and underlined links right out of the box? &lt;/p&gt;

&lt;p&gt;🌐Every web browser comes pre-loaded with its own built-in layout rules, known as user-agent stylesheets. They exist for a great reason—ensuring the web is legible, accessible, and responsive by default, even if a site has no custom CSS.&lt;/p&gt;

&lt;p&gt;But for frontend developers, these defaults present a major challenge. Modern browsers might be 99% similar today, but that leftover 1% can cause frustrating surprises. Without a solid baseline strategy, writing vanilla CSS can quickly turn into a frustrating game of "whack-a-mole":&lt;/p&gt;

&lt;p&gt;You find yourself repeatedly overriding unwanted default element margins.&lt;/p&gt;

&lt;p&gt;You battle weird browser-specific layouts like -webkit-text-size-adjust.&lt;/p&gt;

&lt;p&gt;Worst of all, you wrestle with core defaults defined by the CSS specification itself—like box-sizing: content-box—which causes elements to break out of their parent boundaries the second you add padding or borders.&lt;/p&gt;

&lt;p&gt;The Evolution of the Canvas: How We Handle the Game&lt;/p&gt;

&lt;p&gt;Over the years, the frontend community's philosophy on handling these defaults has undergone a massive shift:&lt;br&gt;
1️⃣ The Reset (The Nuclear Option)In the early 2000s, tools like Tantek Çelik’s undohtml.css (2004) and Eric Meyer's legendary Meyer Reset (2007) took an aggressive approach. They explicitly wiped the slate completely clean—forcing margins, paddings, and borders for dozens of elements to absolute zero. Many developers even used the ultra-minimalist global hack:css* {&lt;br&gt;
    margin: 0;&lt;br&gt;
    padding: 0;&lt;br&gt;
}&lt;br&gt;
Use code with caution.But as modern experts point out, legacy rules like the Meyer reset are now "long in the tooth"—they haven't been updated in over a decade, and the modern web works differently.&lt;/p&gt;

&lt;p&gt;2️⃣ The Normalize (Broad Retention)Along came Nicolas Gallagher’s Normalize.css, shifting the spirit entirely. Instead of destroying useful defaults (like header hierarchies), it embraced the browser's goal of out-of-the-box legibility while surgically targeting only actual cross-browser bugs and discrepancies.&lt;/p&gt;

&lt;p&gt;3️⃣ The Hybrid Framework EraToday, modern frameworks blend the best of both worlds. A prime example is Tailwind CSS, which ships with a built-in tool called Preflight. It combines a normalization engine to remedy browser oddities with a zero-margin clean slate, layered on top of opinionated global defaults like box-sizing: border-box.&lt;/p&gt;

&lt;p&gt;💡 Rethinking the "Reset": The Modern Shift&lt;/p&gt;

&lt;p&gt;⚖_As modern browsers faithfully implement standard CSS specifications, the massive layout and spacing discrepancies of the 2000s are mostly gone. The goal is no longer just about squashing browser bugs—it's about creating sensible baseline defaults for your workflow.&lt;/p&gt;

&lt;p&gt;In fact, modern tools take a creative liberty with the classical definition of a "reset":&lt;/p&gt;

&lt;p&gt;Don't Nuke Common Sense: Josh W. Comeau notes that modern resets shouldn't aggressively strip away all browser defaults just for the sake of a blank slate. There is no point in wiping out common-sense features—like forcing an &lt;em&gt; tag to lose its default italic styling!&lt;/em&gt;&lt;/p&gt;
&lt;em&gt;

&lt;p&gt;The Tailored Baseline: Instead of an off-the-shelf framework, developers like Matt Brictson suggest using a concise utility like modern-normalize paired with personal, strategic tweaks. His approach leverages modern logical properties (padding-inline, max-inline-size) for automatic international language support, alongside smart overrides like ul[role="list"] { list-style: none; } to protect screen-reader accessibility on Safari.&lt;/p&gt;

&lt;p&gt;The Workflow Accelerator: Josh's configuration is less about fixing browser errors and more about boosting the development experience. He injects properties like interpolate-size: allow-keywords; at the root so layouts animate smoothly from 0 to auto natively, applies text-wrap: pretty; to dynamically banish typographic orphan words, and drops isolation: isolate; on framework roots (#root, #__next) to create a z-index firewall that stops third-party portal modals from getting trapped underneath application layers.&lt;/p&gt;

&lt;p&gt;⚠️ The Golden Rule of Resets&lt;/p&gt;

&lt;p&gt;No matter which strategy you choose, there is one rule the community universally agrees on: Never try to apply a CSS reset to an existing codebase. Because resets fundamentally disrupt elemental styles, injecting one late in the game will completely unravel your established layouts. Save them for day one of a brand-new project!&lt;/p&gt;

&lt;p&gt;The Takeaway 🚀&lt;/p&gt;

&lt;p&gt;Baseline setups are deeply personal and highly opinionated. Whether you lean on a surgical normalizer, a framework hybrid engine like Tailwind's Preflight, or an enhanced modern layout baseline built on top of modern CSS standards, your baseline simply reflects how you prefer to control your layout canvas.&lt;/p&gt;

&lt;p&gt;What does the top of your production stylesheet look like? Are you still using a traditional blank-slate reset, or have you shifted toward an opinionated modern baseline workflow? Let me know in the comments! 👇&lt;/p&gt;

&lt;/em&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Building for Everyone: Deep Diving into Advanced HTML Tables &amp; Web Accessibility (a11y)</title>
      <dc:creator>Khahliso Sekoto</dc:creator>
      <pubDate>Mon, 07 Sep 2026 15:02:38 +0000</pubDate>
      <link>https://dev.to/khahliso/building-for-everyone-deep-diving-into-advanced-html-tables-web-accessibility-a11y-3a30</link>
      <guid>https://dev.to/khahliso/building-for-everyone-deep-diving-into-advanced-html-tables-web-accessibility-a11y-3a30</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;Continuing my journey through the Full Stack JavaScript path on &lt;strong&gt;The Odin Project&lt;/strong&gt;, today I shifted focus over to a module that separate amateur layouts from production-grade engineering: &lt;strong&gt;Advanced HTML Tables and Accessibility (a11y)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tables seem straightforward at first glance, but formatting complex data data accessibly requires deep intentionality. Here is a quick summary of my core takeaways today:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What Tables Are NOT For 🚫&lt;br&gt;
The most fundamental rule: tables are strictly meant for &lt;em&gt;tabular data&lt;/em&gt;. In the early days of the web, developers used tables to layout entire pages. Today, that is a massive anti-pattern. Architecture belongs to CSS Flexbox/Grid; tables belong strictly to organized data sets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Building for Assistive Tech &amp;amp; Visual Impairment &lt;br&gt;
Data means nothing if a screen reader can't map out the relationships between headers and metrics. I learned how to move past simple grids to create a genuinely accessible structure using:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;&amp;lt;caption&amp;gt;&lt;/code&gt;: Acts like a title/summary for the table so screen reader users can quickly understand its context without reading every row.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;scope="col"&lt;/code&gt; &amp;amp; &lt;code&gt;scope="row"&lt;/code&gt;: Creates clear linear relationships for primary grids.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;id&lt;/code&gt; &amp;amp; &lt;code&gt;headers&lt;/code&gt; attributes: An advanced method where you give headers a unique ID and explicitly link specific data cells to them. This is crucial for multi-layered tables where a cell might correspond to multiple tiered categories.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;categories.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Structural Segregation (&lt;code&gt;&amp;lt;thead&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;tbody&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;tfoot&amp;gt;&lt;/code&gt;)&lt;br&gt;
Instead of just stacking rows blindly, intermediate HTML segments data systematically. &lt;code&gt;&amp;lt;thead&amp;gt;&lt;/code&gt; manages header tags, &lt;code&gt;&amp;lt;tbody&amp;gt;&lt;/code&gt; wraps the core looping items, and &lt;code&gt;&amp;lt;tfoot&amp;gt;&lt;/code&gt; handles the calculation/summary row at the bottom. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Grouping &amp;amp; Spanning (&lt;code&gt;&amp;lt;colgroup&amp;gt;&lt;/code&gt;, &lt;code&gt;colspan&lt;/code&gt;, &lt;code&gt;rowspan&lt;/code&gt;)&lt;br&gt;
I practiced using &lt;code&gt;&amp;lt;colgroup&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;col&amp;gt;&lt;/code&gt; to isolate entire vertical column stripes for unified structural styling right from the top of the element, alongside combining grid blocks horizontally and vertically without causing layout clipping.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What's your approach?
&lt;/h3&gt;

&lt;p&gt;To the tech community: Accessibility (a11y) is often treated as an afterthought, but building it directly into your semantic HTML makes life so much easier. &lt;strong&gt;What are your go-to tools or extensions for testing screen-reader behavior while developing locally?&lt;/strong&gt; Let's swap tips below! 👇&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>html</category>
      <category>a11y</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Finished The Odin Project Foundations &amp; What I've Learned So Far</title>
      <dc:creator>Khahliso Sekoto</dc:creator>
      <pubDate>Mon, 07 Sep 2026 09:47:08 +0000</pubDate>
      <link>https://dev.to/khahliso/how-i-finished-the-odin-project-foundations-what-ive-learned-so-far-i55</link>
      <guid>https://dev.to/khahliso/how-i-finished-the-odin-project-foundations-what-ive-learned-so-far-i55</guid>
      <description>&lt;p&gt;Hey everyone! 👋 &lt;/p&gt;

&lt;p&gt;I'm incredibly excited to share that I have officially crossed a major milestone on my self-taught software engineering journey: &lt;strong&gt;I've completed the Foundations path of The Odin Project and officially selected the Full Stack JavaScript track!&lt;/strong&gt; 🚀&lt;/p&gt;

&lt;p&gt;When I first started, the terminal felt like a foreign language and managing files via git version control felt completely overwhelming. Looking back now, it's amazing to see how much has clicked.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Builds I'm Most Proud Of
&lt;/h3&gt;

&lt;p&gt;During the fundamentals phase, everything is about getting your hands dirty with real code. Two projects stood out to me as the ultimate tests of what I had learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Etch-a-Sketch Canvas:&lt;/strong&gt; This was a massive breakthrough for my JavaScript skills. It forced me to move past static variables and understand dynamic DOM manipulation, nested loops to generate grid squares, and handling live mouse hover event listeners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Landing Page:&lt;/strong&gt; My first deep dive into modern responsive layouts. I focused heavily on writing clean, semantic HTML structure and mastering the layout alignment control of CSS Flexbox.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can check out my progress, repositories, and current focus right here:&lt;br&gt;
👉 &lt;strong&gt;My GitHub Profile:&lt;/strong&gt; [://github.com]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/KhahlisoSekoto" rel="noopener noreferrer"&gt;https://github.com/KhahlisoSekoto&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  📐 What's Next: Diving into Intermediate Assets (SVGs)
&lt;/h3&gt;

&lt;p&gt;To jumpstart the Full Stack JavaScript path, I kicked off my week with the intermediate HTML/CSS module focusing on &lt;strong&gt;Scalable Vector Graphics (SVGs)&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Coming out of the lesson, a few engineering concepts really stuck with me regarding asset choice and performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vector vs. Raster Mechanics:&lt;/strong&gt; Traditional pixel grids (PNGs/JPEGs) struggle and pixelate when resized. Because SVGs rely on math equations in an HTML-like XML structure, they scale infinitely with zero drop in resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Embedding Trade-off:&lt;/strong&gt; Learning the choice between embedding an SVG &lt;em&gt;inline&lt;/em&gt; (total control for CSS/JS animations, but leaves a heavy DOM footprint that can hurt initial page caching) vs. &lt;em&gt;linked&lt;/em&gt; (cleaner markup using standard &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tags, but acts as a frozen asset). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowing Limitations:&lt;/strong&gt; SVGs are incredibly efficient for UI frameworks and icon systems (like Feather Icons), but completely the wrong tool for photorealistic rendering where high textures cause massive code bloat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  💬 Let's Connect!
&lt;/h3&gt;

&lt;p&gt;To the self-taught dev community or anyone currently pushing through The Odin Project: &lt;strong&gt;What was the biggest breakthrough concept or project that made frontend programming finally click for you?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Let's discuss workflows below! 👇&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>html</category>
    </item>
    <item>
      <title>Dynamic DOM Manipulation &amp; Hover Mechanics: Cracking the Etch-a-Sketch Project</title>
      <dc:creator>Khahliso Sekoto</dc:creator>
      <pubDate>Sat, 05 Sep 2026 13:09:03 +0000</pubDate>
      <link>https://dev.to/khahliso/dynamic-dom-manipulation-hover-mechanics-cracking-the-etch-a-sketch-project-3cjo</link>
      <guid>https://dev.to/khahliso/dynamic-dom-manipulation-hover-mechanics-cracking-the-etch-a-sketch-project-3cjo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwryhgm0mv16uxe74r7s.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpwryhgm0mv16uxe74r7s.jpeg" alt=" " width="800" height="1136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another milestone unlocked! &lt;/p&gt;

&lt;p&gt;Today I finished building my browser-based Etch-a-Sketch project as part of The Odin Project Foundations curriculum. &lt;/p&gt;

&lt;p&gt;This project was a fantastic challenge that pushed me to dive deep into:&lt;br&gt;
-Dynamic DOM Manipulation — using JavaScript loops to generate grids on the fly.&lt;br&gt;
-Advanced Flexbox Layouts — calculating pixel dimensions and border boxes perfectly without breaking rows.&lt;br&gt;
-Event Listeners — capturing mouse movements to create interactive, hover-based drawing mechanics.&lt;/p&gt;

&lt;p&gt;It felt incredible to wrap things up, document it in my README, and push the final build straight to GitHub via the terminal! &lt;/p&gt;

&lt;p&gt;Try it out live: &lt;a href="https://lnkd.in/dmtJMm7U" rel="noopener noreferrer"&gt;https://lnkd.in/dmtJMm7U&lt;/a&gt;&lt;br&gt;
View the source code: &lt;a href="https://lnkd.in/drgtVEa8" rel="noopener noreferrer"&gt;https://lnkd.in/drgtVEa8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Onwards to the next challenge! &lt;/p&gt;

&lt;h1&gt;
  
  
  TheOdinProject #WebDevelopment #JavaScript #CSSFlexbox #CodingJourney #BuildInPublic #FrontEnd
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
