<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://osnibjunior.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://osnibjunior.dev/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-04-24T01:59:44+00:00</updated><id>https://osnibjunior.dev/feed.xml</id><title type="html">Osni B. Junior</title><subtitle>Personal blog by Osni B. Junior — technical and non-technical writing about software, work, and life.</subtitle><author><name>Osni B. Junior</name></author><entry><title type="html">Hello, world — again</title><link href="https://osnibjunior.dev/2026/04/hello-world/" rel="alternate" type="text/html" title="Hello, world — again" /><published>2026-04-22T10:00:00+00:00</published><updated>2026-04-22T10:00:00+00:00</updated><id>https://osnibjunior.dev/2026/04/hello-world</id><content type="html" xml:base="https://osnibjunior.dev/2026/04/hello-world/"><![CDATA[<p>This page used to be a small collection of social-media buttons — a glorified link-in-bio. It served its purpose, but it never felt like mine. A website should say <em>something</em>.</p>

<!--more-->

<p>So I’m turning it into a blog. Nothing fancy: minimal layout, dark mode, markdown posts. A place to write about the things I work on, the things I learn, and — occasionally — things that have nothing to do with code.</p>

<p>A few ground rules I’m setting for myself:</p>

<ul>
  <li>Publish even when it’s imperfect.</li>
  <li>Keep posts short unless they truly need to be long.</li>
  <li>Write in English, but don’t stress about sounding native.</li>
  <li>Link to the source. Always.</li>
</ul>

<p>If you’re reading this and something resonates (or doesn’t), the links at the bottom of every page will get you to me. See you in the next one.</p>]]></content><author><name>Osni B. Junior</name></author><category term="thoughts" /><summary type="html"><![CDATA[This page used to be a small collection of social-media buttons — a glorified link-in-bio. It served its purpose, but it never felt like mine. A website should say something.]]></summary></entry><entry><title type="html">Notes on shipping small static sites in 2026</title><link href="https://osnibjunior.dev/2026/04/sample-technical-post/" rel="alternate" type="text/html" title="Notes on shipping small static sites in 2026" /><published>2026-04-15T09:00:00+00:00</published><updated>2026-04-15T09:00:00+00:00</updated><id>https://osnibjunior.dev/2026/04/sample-technical-post</id><content type="html" xml:base="https://osnibjunior.dev/2026/04/sample-technical-post/"><![CDATA[<p>Static sites are having a quiet renaissance. Not the kind that trends on Hacker News every six months, but the kind where people who just want a personal site keep reaching for the same small set of tools — and it mostly Just Works.</p>

<!--more-->

<h2 id="why-jekyll-still">Why Jekyll, still</h2>

<p>GitHub Pages builds Jekyll natively. That’s the whole pitch. No CI to configure, no Node toolchain to keep alive, no lockfile drama. You write Markdown, push to <code class="language-plaintext highlighter-rouge">main</code>, and a few seconds later the site is live.</p>

<p>There are faster builders (Hugo), prettier DX stories (Astro), and friendlier plugin ecosystems (11ty). All true. But for a personal blog — where the build runs once a week and nobody cares if it takes four seconds — the “zero moving parts” story is hard to beat.</p>

<h2 id="the-pieces-that-matter">The pieces that matter</h2>

<p>A personal blog really only needs:</p>

<ol>
  <li>A <strong>layout system</strong> so the header and footer don’t live in every file.</li>
  <li>A <strong>post list</strong> that reverses itself automatically.</li>
  <li>A <strong>tag system</strong> — optional, but nice to have.</li>
  <li><strong>Dark mode</strong> — table stakes at this point.</li>
</ol>

<p>Everything else is polish.</p>

<h2 id="a-dark-mode-detail-worth-knowing">A dark-mode detail worth knowing</h2>

<p>The one trap with dark mode is the <em>flash of wrong theme</em> on first paint. The fix is a small inline script in the <code class="language-plaintext highlighter-rouge">&lt;head&gt;</code> that applies <code class="language-plaintext highlighter-rouge">data-theme</code> before the CSS loads:</p>

<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;script&gt;</span>
  <span class="kd">var</span> <span class="nx">stored</span> <span class="o">=</span> <span class="nx">localStorage</span><span class="p">.</span><span class="nx">getItem</span><span class="p">(</span><span class="dl">'</span><span class="s1">theme</span><span class="dl">'</span><span class="p">);</span>
  <span class="kd">var</span> <span class="nx">prefersDark</span> <span class="o">=</span> <span class="nx">matchMedia</span><span class="p">(</span><span class="dl">'</span><span class="s1">(prefers-color-scheme: dark)</span><span class="dl">'</span><span class="p">).</span><span class="nx">matches</span><span class="p">;</span>
  <span class="nb">document</span><span class="p">.</span><span class="nx">documentElement</span><span class="p">.</span><span class="nx">setAttribute</span><span class="p">(</span>
    <span class="dl">'</span><span class="s1">data-theme</span><span class="dl">'</span><span class="p">,</span>
    <span class="nx">stored</span> <span class="o">||</span> <span class="p">(</span><span class="nx">prefersDark</span> <span class="p">?</span> <span class="dl">'</span><span class="s1">dark</span><span class="dl">'</span> <span class="p">:</span> <span class="dl">'</span><span class="s1">light</span><span class="dl">'</span><span class="p">)</span>
  <span class="p">);</span>
<span class="nt">&lt;/script&gt;</span>
</code></pre></div></div>

<p>That’s it. Render-blocking, yes, but it’s 200 bytes and it saves you the eye-searing white flash every time someone with dark mode enabled lands on your site.</p>

<h2 id="closing-thought">Closing thought</h2>

<p>Boring tools for boring problems, fancy tools for fancy problems. A personal blog is a boring problem — and that’s a feature.</p>]]></content><author><name>Osni B. Junior</name></author><category term="tech" /><category term="jekyll" /><summary type="html"><![CDATA[Static sites are having a quiet renaissance. Not the kind that trends on Hacker News every six months, but the kind where people who just want a personal site keep reaching for the same small set of tools — and it mostly Just Works.]]></summary></entry></feed>