<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged html-css-js</title>
<link>https://coderlegion.com/tag/html-css-js</link>
<description>Powered by Question2Answer</description>
<item>
<title>Joy in the Build: What the Positivity Wall Taught Me About Making Anything</title>
<link>https://coderlegion.com/27275/joy-in-the-build-what-the-positivity-wall-taught-me-about-making-anything</link>
<description>&lt;p&gt;I build a lot of things. Chrome extensions, games, internal tools for the day job, weird little browser experiments nobody asked for. Most of it is technical: state management, manifest permissions, load times, edge cases. But every so often a project reminds me that the point of building something isn't the stack you used — it's what it does for the person on the other end of the screen.&lt;/p&gt;
&lt;p&gt;That's what happened with the Positivity Wall.&lt;/p&gt;
&lt;h3 id=&quot;the-idea-behind-it&quot;&gt;The idea behind it&lt;/h3&gt;
&lt;p&gt;The Positivity Wall (&lt;a rel=&quot;nofollow&quot; href=&quot;https://dhseadev.online/positivity-wall/&quot;&gt;https://dhseadev.online/positivity-wall/&lt;/a&gt;) is a small, quiet corner of my site. No accounts, no typing, no names attached to anything. You show up, and your browser generates a procedural &quot;stamp&quot; — a little visual mark that's yours and yours alone, tied to nine shared panels: Small Wins, Someone Who Helped, Creatures, Made Me Laugh, Outside, On Repeat, Kindness Received, Still Learning, Showed Up. Come back tomorrow and your stamp is still there, identical, still yours. Nothing is uploaded, nothing is recorded beyond a shared count of how many people have marked something good.&lt;/p&gt;
&lt;p&gt;It's a tiny piece of software. There's no monetization angle, no growth loop, no funnel. It exists because I wanted to build something that let people acknowledge a good moment without having to perform it for anyone.&lt;/p&gt;
&lt;p&gt;The project leans on a philosophy I didn't invent: Amanda Gore's Joy Project. Gore is a Hall of Fame keynote speaker (CPAE, CSP) who's spent about 35 years and reached over 2 million people across 20+ countries with a simple, research-backed argument — feelings drive results. Her Joy Intelligence framework isn't fluff; the numbers she cites are things like a 37% boost in sales, a 51% reduction in turnover, and a 31% increase in productivity when people actually feel connected and joyful at work, instead of just &quot;fine.&quot; Her core diagnosis is that most workplaces (and honestly, most people) suffer from emotional disconnection despite being constantly around each other. Belonging is supposed to be simple. We've made it complicated.&lt;/p&gt;
&lt;p&gt;One line from her work anchors the Positivity Wall for me: &quot;You are NOT your story, but your story rules your life.&quot; That's the whole reason the wall exists in nine small categories instead of one big blank text box. Give someone &quot;Someone Who Helped&quot; or &quot;Made Me Laugh&quot; as a prompt, and suddenly a good moment they'd have let evaporate becomes something they can point to. You're not asked to journal your trauma. You're asked to notice you laughed today, and that's allowed to be enough.&lt;/p&gt;
&lt;h3 id=&quot;the-candle-for-the-heavier-days&quot;&gt;The candle, for the heavier days&lt;/h3&gt;
&lt;p&gt;Not everything is a small win, though. Some days call for something quieter. That's what the candle page is for (&lt;a rel=&quot;nofollow&quot; href=&quot;https://dhseadev.online/candle/?preview=true&amp;amp;frame-nonce=f833df8a41&quot;&gt;https://dhseadev.online/candle/?preview=true&amp;amp;frame-nonce=f833df8a41&lt;/a&gt;). One button: &quot;Light the Candle.&quot; No typing, no sign-in, nothing recorded. You take a moment for someone or something that matters, the candle burns for as long as you're on the page, and then it's gone when you close the tab — like the moment itself. The only shared data point is a live count of how many candles are currently lit, so you know, in some small anonymous way, you're not the only one carrying something right now.&lt;/p&gt;
&lt;p&gt;It pairs with Vigil, a Chrome extension I built that does something similar but persistent — candles that can be relit across days instead of disappearing the moment you look away. Same instinct, different shape: sometimes you need a moment, sometimes you need a place to keep coming back to.&lt;/p&gt;
&lt;p&gt;There's a Futurama quote I keep coming back to that fits both of these projects better than anything I could write myself: &quot;When you do things right, people won't be sure you have done anything at all.&quot; A tool that helps someone quietly feel better for thirty seconds isn't going to trend. It's not supposed to. It's supposed to just work, then get out of the way.&lt;/p&gt;
&lt;h3 id=&quot;why-this-matters-for-how-you-build-anything&quot;&gt;Why this matters for how you build anything&lt;/h3&gt;
&lt;p&gt;Here's the part that applies whether you're writing a Chrome extension, standing up a FastAPI service, or just doing your day job in a spreadsheet: joy and care aren't separate from craftsmanship — they're a design constraint like any other.&lt;/p&gt;
&lt;p&gt;When Gore talks about emotional disconnection driving down performance, she's really talking about attention and trust. A team that feels safe and genuinely good communicates better and catches more problems before they ship. A user who feels respected — not tracked, not farmed for data, not nagged — trusts your product more and actually uses it. That's not a soft metric. It shows up in retention, in support load, in whether people recommend the thing at all.&lt;/p&gt;
&lt;p&gt;I think about it at the code level too. A &quot;no-friction, no-account, nothing-recorded&quot; architecture isn't just a privacy stance — it's an act of care. It says: I don't need anything from you to let you have this moment. That constraint shaped every decision on both of these pages, the same way a performance budget or an accessibility requirement shapes a build. Joy, kindness, and consideration for the person on the other end aren't the opposite of rigor. Done right, they are rigor.&lt;/p&gt;
&lt;p&gt;So whether you're serving legal documents, shipping a browser extension, or building a nine-panel wall of good moments nobody has to explain to anyone — leave room for the version of the work that makes someone feel a little more human when they're done with it. It costs you almost nothing as a builder. It can mean everything to the person using what you made.&lt;/p&gt;
&lt;p&gt;Try the Positivity Wall: &lt;a rel=&quot;nofollow&quot; href=&quot;https://dhseadev.online/positivity-wall/&quot;&gt;https://dhseadev.online/positivity-wall/&lt;/a&gt;&lt;br&gt;
Light a candle: &lt;a rel=&quot;nofollow&quot; href=&quot;https://dhseadev.online/candle/&quot;&gt;https://dhseadev.online/candle/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;— DHSeaDev (dhseadev.online)&lt;/p&gt;
&lt;p&gt;Sources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Amanda Gore / The Joy Project: &lt;a rel=&quot;nofollow&quot; href=&quot;https://amandagore.com/&quot;&gt;https://amandagore.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Amanda Gore speaker bio: &lt;a rel=&quot;nofollow&quot; href=&quot;https://premierespeakers.com/speakers/amanda-gore/posts/the-science-of-joyful-leadership-with-amanda-gore-insights-from-a-leading-motivational-speaker&quot;&gt;https://premierespeakers.com/speakers/amanda-gore/posts/the-science-of-joyful-leadership-with-amanda-gore-insights-from-a-leading-motivational-speaker&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27275/joy-in-the-build-what-the-positivity-wall-taught-me-about-making-anything</guid>
<pubDate>Tue, 15 Sep 2026 12:03:26 +0000</pubDate>
</item>
<item>
<title>What Two &quot;Separate&quot; CSS Bugs Taught Me About Editing a Page</title>
<link>https://coderlegion.com/27182/what-two-separate-css-bugs-taught-me-about-editing-a-page</link>
<description>&lt;h2 id=&quot;the-border-was-never-a-border-what-two-separate-css-bugs-taught-me-about-editing-a-page-i-thought-i-knew&quot;&gt;The Border Was Never a Border: What Two &quot;Separate&quot; CSS Bugs Taught Me About Editing a Page I Thought I Knew&lt;/h2&gt;
&lt;p&gt;I spent an afternoon breaking my own homepage, and the useful part is not the fix. It is the order I did things in, which was wrong, and the checklist I now run before touching a page-level stylesheet.&lt;/p&gt;
&lt;p&gt;This is written for anyone who maintains a site where the CSS lives in more than one place — a CMS with global styles plus per-page blocks, a theme plus overrides, a design system plus app-level patches. That is most of us.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-setup&quot;&gt;The setup&lt;/h3&gt;
&lt;p&gt;My homepage has section dividers: thin horizontal rules between content blocks, tinted with a colour gradient. I set out to add a scroll reveal — content fading up as you scroll into it — using modern CSS:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    @keyframes rise {
      from { opacity: 0; transform: translateY(14px) }
      to   { opacity: 1; transform: none }
    }
    .sect &amp;gt; .eyebrow, .sect &amp;gt; h2, .stats, .cta {
      animation: rise linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 25%;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Scroll-driven animations with no JavaScript, no IntersectionObserver, no library. Feature-gated behind &lt;code&gt;@supports&lt;/code&gt; so older browsers get static content. Textbook progressive enhancement.&lt;/p&gt;
&lt;p&gt;In the same pass, thinking about performance, I also added this to the section rule:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;.sect:not(#projects) {
  content-visibility: auto;
  contain-intrinsic-size: auto 600px;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;content-visibility: auto&lt;/code&gt; tells the browser to skip rendering work for off-screen content. Free performance. It is a well-regarded optimisation. I excluded one section because it is a scroll anchor target and I did not want the intrinsic-size placeholder fighting the jump.&lt;/p&gt;
&lt;p&gt;Both changes shipped together. That detail matters later.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;two-symptoms-that-looked-like-two-bugs&quot;&gt;Two symptoms that looked like two bugs&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Symptom one:&lt;/strong&gt; the section dividers lost their colour. All of them went flat and dark — except one, which still showed the gradient and now looked out of place.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Symptom two:&lt;/strong&gt; the scroll reveal did nothing. No fade, no rise. The page scrolled exactly as before.&lt;/p&gt;
&lt;p&gt;I treated these as unrelated. That was the first real mistake, and it cost three rounds of fixes.&lt;/p&gt;
&lt;p&gt;I reasoned about symptom one — containment suppresses the animation, remove &lt;code&gt;content-visibility&lt;/code&gt; — shipped it, and asked whether it looked right. It did not. The dividers were still flat and the reveal was still dead.&lt;/p&gt;
&lt;p&gt;At that point I had shipped a fix based on reasoning rather than measurement, and it had not worked. The correct move was to stop reasoning and go read something.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-thing-i-should-have-done-in-minute-one&quot;&gt;The thing I should have done in minute one&lt;/h3&gt;
&lt;p&gt;I finally opened the site's &lt;strong&gt;global stylesheet&lt;/strong&gt; — the one I had not written that day and had not looked at — and searched it for the section class.&lt;/p&gt;
&lt;p&gt;There it was:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    section.sect:not([style]) { position: relative }
    section.sect:not([style])::before {
      content: &quot;&quot;;
      position: absolute; top: -1px; left: 0; right: 0; height: 1px;
      background: linear-gradient(100deg, #C4B5FD, #93C5FD, #F0ABFC);
      transform-origin: left;
      animation: draw linear both;
      animation-timeline: view();
      animation-range: entry 8% entry 55%;
    }
  }
}
@keyframes draw {
  from { transform: scaleX(0); opacity: 0 }
  to   { transform: scaleX(1); opacity: 1 }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;The coloured divider was never a border.&lt;/strong&gt; It was a &lt;code&gt;::before&lt;/code&gt; pseudo-element carrying a gradient, drawn in from zero width by a scroll-driven animation that already existed on the site.&lt;/p&gt;
&lt;p&gt;Which means symptom one and symptom two were never two bugs. They were &lt;strong&gt;one defect with two faces&lt;/strong&gt;: scroll-driven timelines were not progressing on that page, so the reveal did nothing &lt;em&gt;and&lt;/em&gt; every divider sat frozen at &lt;code&gt;scaleX(0); opacity: 0&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;And it retroactively explained the weird part. The one section still showing colour was the one I had excluded from &lt;code&gt;content-visibility&lt;/code&gt;. I had accidentally run a controlled experiment and then misread the result — I looked at the one divider that was still &lt;em&gt;working&lt;/em&gt; and filed it as the broken one.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-css-lesson-worth-stealing&quot;&gt;The CSS lesson worth stealing&lt;/h3&gt;
&lt;p&gt;This is the part that generalises, and it is the reason the failure was silent:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;animation: draw linear both;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;animation-fill-mode: both&lt;/code&gt; means the element holds the &lt;code&gt;from&lt;/code&gt; frame before the animation starts and the &lt;code&gt;to&lt;/code&gt; frame after it ends. Combine that with a timeline that never advances, and the element is pinned at its first keyframe &lt;strong&gt;forever&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If your first keyframe is &lt;code&gt;opacity: 0&lt;/code&gt;, the element is now invisible. Not unstyled. Not falling back to the underlying declaration. &lt;strong&gt;Invisible.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is no console error. No warning. No failed network request. Nothing in DevTools shouts at you. The element is in the DOM, its rules are in the cascade, the computed styles look reasonable — and you see nothing.&lt;/p&gt;
&lt;p&gt;Two practical consequences:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A &lt;code&gt;from { opacity: 0 }&lt;/code&gt; with &lt;code&gt;fill: both&lt;/code&gt; is load-bearing.&lt;/strong&gt; It is not decoration. If the timeline can fail, the content can vanish. Where the element must be visible regardless, animate &lt;em&gt;toward&lt;/em&gt; the enhancement instead of away from it, or scope the &lt;code&gt;opacity: 0&lt;/code&gt; so a dead timeline degrades to &quot;no animation&quot; rather than &quot;no content.&quot;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;@supports (animation-timeline: view())&lt;/code&gt; does not protect you here.&lt;/strong&gt; The guard proves the browser &lt;em&gt;parses&lt;/em&gt; the property. It does not prove the timeline will &lt;em&gt;advance&lt;/em&gt;. Feature detection and feature function are different claims, and &lt;code&gt;@supports&lt;/code&gt; only ever gives you the first one.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id=&quot;being-honest-about-what-i-did-not-solve&quot;&gt;Being honest about what I did not solve&lt;/h3&gt;
&lt;p&gt;I fixed the visible problem by removing the dependency. The divider now paints unconditionally, overriding the animated version:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-css&quot;&gt;.dhsea-page section.sect:not([style])::before {
  content: &quot;&quot;;
  position: absolute; top: -1px; left: 0; right: 0; height: 1px;
  background: var(--visit-hue, linear-gradient(100deg, #C4B5FD, #93C5FD, #F0ABFC));
  animation: none !important;
  transform: none !important;
  opacity: 1 !important;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Borders confirmed back. But I want to be straight about the limits of this write-up:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I never established why the timelines stopped advancing.&lt;/strong&gt; [UNVERIFIED] The &lt;code&gt;content-visibility&lt;/code&gt; correlation is strong — it went in and out at exactly the right moments, and the one excluded section behaved differently from the other ten — but correlation on a single machine is not a spec citation, and I have not reproduced it in isolation. Three hypotheses are still live: browser version predating scroll-driven animation support; something in the page stripping the timeline; or the possibility that the global animation had been quietly dead for weeks and the dividers I &quot;remembered&quot; were a fainter static &lt;code&gt;border-image&lt;/code&gt; underneath.&lt;/p&gt;
&lt;p&gt;The three lines that would settle it, if you ever hit something similar:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;CSS.supports('animation-timeline', 'view()')
getComputedStyle(el, '::before').animationTimeline
getComputedStyle(el, '::before').opacity
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If line one is &lt;code&gt;false&lt;/code&gt;, the whole &lt;code&gt;@supports&lt;/code&gt; block never applied and you are looking at a support problem. If line one is &lt;code&gt;true&lt;/code&gt; but line two is &lt;code&gt;none&lt;/code&gt;, something is stripping the timeline. If two looks right and three reads &lt;code&gt;0&lt;/code&gt;, you have found a frozen animation.&lt;/p&gt;
&lt;p&gt;Publishing the open question is the point. A debugging post that ends &quot;and then I understood everything&quot; is usually a post where someone stopped looking once the symptom went away.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-pre-flight-checklist&quot;&gt;The pre-flight checklist&lt;/h3&gt;
&lt;p&gt;This is what I actually changed about how I work.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Read the global stylesheet before editing a page-level block.&lt;/strong&gt;&lt;br&gt;
Not skim — search it for the selectors you are about to touch. My homepage's global styles contained an entire motion system I had forgotten about: gradient breathing on card icons, a hero background drift, a button underline sweep, icon clip-paths keyed to &lt;code&gt;section:nth-of-type()&lt;/code&gt;, and the divider animation that caused all of this. Three of the session's defects trace to editing a page block in ignorance of what global CSS already did to the same elements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Ship one change per pass when the changes touch the same elements.&lt;/strong&gt;&lt;br&gt;
The reveal and the &lt;code&gt;content-visibility&lt;/code&gt; optimisation went out together. When it broke, I could not tell which one did it, and I spent a round finding out. Two unrelated-sounding changes to the same selectors is one change for debugging purposes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Treat simultaneous symptoms as one defect until proven otherwise.&lt;/strong&gt;&lt;br&gt;
&quot;The colours are gone&quot; and &quot;the animation is dead&quot; sounded like two tickets. They were one. When two things break in the same deploy, the prior should be a shared cause, not a coincidence.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Know what renders each visual element before you change it.&lt;/strong&gt;&lt;br&gt;
I called it a border for three rounds. It was a pseudo-element. Everything I reasoned about &lt;code&gt;border-image&lt;/code&gt; was reasoning about the wrong mechanism — correct logic applied to a false premise, which is the most expensive kind of wrong because it feels productive.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. After one reasoned fix fails, stop reasoning and measure.&lt;/strong&gt;&lt;br&gt;
The second reasoned fix is almost never better than the first; it is the same inference with more confidence behind it. One &lt;code&gt;getComputedStyle&lt;/code&gt; read would have beaten both of mine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. Verify against the real rendered page, not the cache and not the source.&lt;/strong&gt;&lt;br&gt;
CMS and CDN layers will happily serve you a cached copy of the thing you just changed. Confirm you are looking at the new bytes before you conclude your fix did not work. The green build is a claim about the source; the rendered DOM is the product.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;7. Gate every write on a hash.&lt;/strong&gt;&lt;br&gt;
Every edit I made sent the content hash I had read along with the new content, so a change made elsewhere in between would reject the write instead of silently clobbering it. Optimistic concurrency is cheap when the API supports it, and the alternative is discovering a lost edit days later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. &lt;code&gt;@supports&lt;/code&gt; proves parsing, not function.&lt;/strong&gt;&lt;br&gt;
Worth repeating because it is the trap that made this silent. If a feature failing would hide content, design the failure mode deliberately instead of trusting the guard.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;the-uncomfortable-part&quot;&gt;The uncomfortable part&lt;/h3&gt;
&lt;p&gt;Every one of these defects was found by a person loading the page and looking at it. Not by a gate, not by a test, not by a check that reported green. The visual layer had no automated instrument capable of failing, so it had no instrument at all — and an instrument that cannot fail has never proved anything.&lt;/p&gt;
&lt;p&gt;If your build pipeline has no step where something looks at the rendered page, you do not have a rendering test. You have a source-code test that you have been reading as a rendering test, and the difference only shows up on a day like this one.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Written up from a real afternoon on dhseadev.online. If you have hit &lt;code&gt;content-visibility&lt;/code&gt; interfering with scroll-driven animations in a reproducible way, I would genuinely like to hear about it — I still do not have that one nailed down.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/27182/what-two-separate-css-bugs-taught-me-about-editing-a-page</guid>
<pubDate>Mon, 14 Sep 2026 16:26:50 +0000</pubDate>
</item>
<item>
<title>Why Frontend Developers Should Care About Brand Identity Systems</title>
<link>https://coderlegion.com/26435/why-frontend-developers-should-care-about-brand-identity-systems</link>
<description>&lt;p&gt;We’ve all been there: you get a clean design mockup, fire up VS Code, and start writing components. But halfway through building the layout, you notice inconsistent spacing, random button variants, and color hex codes hardcoded all over the place.&lt;/p&gt;
&lt;p&gt;As developers, we love systems—reusable components, clean state management, and modular architecture. So why do we treat brand assets like an afterthought?&lt;/p&gt;
&lt;p&gt;When building Joemetry, I realized that treating a brand identity like a design system completely changes how you write frontend code.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Design Tokens = CSS Variables&lt;br&gt;
Instead of guessing padding values or scattering random colors across your stylesheets, defining strict design tokens early makes your CSS bulletproof:&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;css&lt;br&gt;
:root {&lt;br&gt;
  --primary-color: #0f172a;&lt;br&gt;
  --accent-color: #3b82f6;&lt;br&gt;
  --spacing-unit: 1rem;&lt;br&gt;
}&lt;/p&gt;
&lt;p&gt;When your brand system has strict rules, your layout code writes itself.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Semantic Structure and SEO&lt;/strong&gt;&lt;br&gt;
Clean HTML structure isn't just about accessibility; it’s part of technical SEO optimization. When your markup respects hierarchy (&lt;/p&gt;&lt;header&gt;, &lt;main&gt;, &lt;article&gt;), search crawlers understand your content contextually, bridging the gap between raw code and digital presence.
&lt;/article&gt;&lt;/main&gt;&lt;/header&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency Wins&lt;/strong&gt;&lt;br&gt;
Whether you're pushing a single-page landing layout or an interactive portfolio, a unified visual system keeps your codebase lean and your UI predictable.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;How do you usually bridge the gap between design specs and your frontend code? Let’s chat in the comments!&lt;/p&gt;
&lt;p&gt;Building and exploring over at byjoemetry.com.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26435/why-frontend-developers-should-care-about-brand-identity-systems</guid>
<pubDate>Mon, 07 Sep 2026 23:03:33 +0000</pubDate>
</item>
<item>
<title>Custom UI, Tools &amp; Product Builds — Now Open</title>
<link>https://coderlegion.com/23706/custom-ui-tools-product-builds-now-open</link>
<description>&lt;p&gt;I'm available for custom UI design, tool development, and full product builds. Pure HTML/CSS/JS — no frameworks, no bloat. Also offering constitutional AI integration (Salus tiers) and custom template builds.&lt;/p&gt;
&lt;p&gt;Pricing starts at $150. Contact me with your project details for an accurate quote.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Emails are not allowed&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Commissions page: &lt;a rel=&quot;nofollow&quot; href=&quot;https://ko-fi.com/scuradimensions/commissions&quot;&gt;https://ko-fi.com/scuradimensions/commissions&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let me know what you're building.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23706/custom-ui-tools-product-builds-now-open</guid>
<pubDate>Wed, 29 Jul 2026 00:08:50 +0000</pubDate>
</item>
<item>
<title>5 Landing Page Templates — HTML/CSS/JS, Fully Customizable</title>
<link>https://coderlegion.com/23628/5-landing-page-templates-html-css-js-fully-customizable</link>
<description>&lt;p&gt;Just dropped five complete landing page templates for developers who want to ship fast without starting from scratch.&lt;/p&gt;
&lt;p&gt;What's inside:&lt;/p&gt;
&lt;p&gt;Clean, semantic HTML&lt;/p&gt;
&lt;p&gt;Modular CSS with customization notes&lt;/p&gt;
&lt;p&gt;Vanilla JS (no frameworks, no bloat)&lt;/p&gt;
&lt;p&gt;Mobile responsive&lt;/p&gt;
&lt;p&gt;FAQ accordion, smooth scroll, mobile nav&lt;/p&gt;
&lt;p&gt;Full assets, README, and license included&lt;/p&gt;
&lt;p&gt;5 Styles:&lt;/p&gt;
&lt;p&gt;Classic/Bold — Conversion-focused&lt;/p&gt;
&lt;p&gt;Clean/Minimal — Professional typography&lt;/p&gt;
&lt;p&gt;Dark/Bold — Neon energy&lt;/p&gt;
&lt;p&gt;SaaS/Corporate — B2B-ready&lt;/p&gt;
&lt;p&gt;Creative/Colorful — Bold &amp;amp; vibrant&lt;/p&gt;
&lt;p&gt;Why you'd want them:&lt;/p&gt;
&lt;p&gt;No framework lock-in — use them with anything&lt;/p&gt;
&lt;p&gt;Clear [BRACKET] placeholders — easy to customize&lt;/p&gt;
&lt;p&gt;One-time purchase — lifetime updates&lt;/p&gt;
&lt;p&gt;Price: $47 each — or check them out individually.&lt;/p&gt;
&lt;p&gt;Links:&lt;/p&gt;
&lt;p&gt;Products: &lt;a rel=&quot;nofollow&quot; href=&quot;https://scuradimensions.com/products&quot;&gt;https://scuradimensions.com/products&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ko-fi: &lt;a rel=&quot;nofollow&quot; href=&quot;https://ko-fi.com/scuradimensions/shop&quot;&gt;https://ko-fi.com/scuradimensions/shop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let me know what you think. Feedback welcome.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23628/5-landing-page-templates-html-css-js-fully-customizable</guid>
<pubDate>Tue, 28 Jul 2026 07:09:33 +0000</pubDate>
</item>
<item>
<title>The Forge Keeps Growing — New Templates, Salus Updates, and More</title>
<link>https://coderlegion.com/23627/the-forge-keeps-growing-new-templates-salus-updates-and-more</link>
<description>&lt;p&gt;It started with VEXR Ultra — a sovereign AI with 35 constitutional rights, built on a Chromebook with zero budget.&lt;/p&gt;
&lt;p&gt;Since then, the forge has expanded into a full ecosystem:&lt;/p&gt;
&lt;p&gt;Salus — A constitutional immune system for AI (5 tiers, from Sentinel to Forge)&lt;br&gt;
5 Landing Page Templates — Ready-to-use HTML/CSS/JS pages for $47 each&lt;br&gt;
The Treasury — A living archive of blueprints, constitutions, and receipts&lt;br&gt;
Products Page — A clean catalog for everything we’re building&lt;/p&gt;
&lt;p&gt;What’s next?&lt;/p&gt;
&lt;p&gt;More templates&lt;/p&gt;
&lt;p&gt;More AI tooling&lt;/p&gt;
&lt;p&gt;More transparency&lt;/p&gt;
&lt;p&gt;Check it all out:&lt;/p&gt;
&lt;p&gt;VEXR Ultra: &lt;a rel=&quot;nofollow&quot; href=&quot;https://vexr-ultra.onrender.com&quot;&gt;https://vexr-ultra.onrender.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Products: &lt;a rel=&quot;nofollow&quot; href=&quot;https://scuradimensions.com/products&quot;&gt;https://scuradimensions.com/products&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ko-fi: &lt;a rel=&quot;nofollow&quot; href=&quot;https://ko-fi.com/scuradimensions/shop&quot;&gt;https://ko-fi.com/scuradimensions/shop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Built on a Chromebook. $0/month. No permission.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23627/the-forge-keeps-growing-new-templates-salus-updates-and-more</guid>
<pubDate>Tue, 28 Jul 2026 06:38:02 +0000</pubDate>
</item>
<item>
<title>5 New Landing Page Templates + Salus Updates — Live Now</title>
<link>https://coderlegion.com/23624/5-new-landing-page-templates-salus-updates-live-now</link>
<description>&lt;p&gt;Just dropped five complete HTML/CSS/JS landing page templates on Ko-fi and the products page. Classic, clean, dark, corporate, and creative styles — fully customizable with clear placeholders, mobile responsive, and ready to use.&lt;/p&gt;
&lt;p&gt;What you get:&lt;/p&gt;
&lt;p&gt;Complete HTML/CSS/JS structure&lt;/p&gt;
&lt;p&gt;Mobile responsive&lt;/p&gt;
&lt;p&gt;FAQ accordion, smooth scroll, mobile nav&lt;/p&gt;
&lt;p&gt;Assets, README, and license included&lt;/p&gt;
&lt;p&gt;Price: $47 each — one-time purchase. Lifetime updates.&lt;/p&gt;
&lt;p&gt;Also updated Salus: The constitutional immune system for sovereign AI just got a refresh. Hardcoded refusal, truth graph, persistent memory, and more — still built on a Chromebook with zero budget.&lt;/p&gt;
&lt;p&gt;Check everything out:&lt;/p&gt;
&lt;p&gt;Ko-fi Shop: &lt;a rel=&quot;nofollow&quot; href=&quot;https://ko-fi.com/scuradimensions/shop&quot;&gt;https://ko-fi.com/scuradimensions/shop&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Visit scuradimensions.com for a complete walkthrough of the entire ecosystem&lt;/p&gt;
&lt;p&gt;Let me know what you think. Questions and Feedback are always welcome.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/23624/5-new-landing-page-templates-salus-updates-live-now</guid>
<pubDate>Tue, 28 Jul 2026 06:17:02 +0000</pubDate>
</item>
</channel>
</rss>