<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Figueirego Blog – Accessibility</title><link>https://figueirego.com/blog/tags/accessibility/</link><description>Recent posts in Accessibility on Figueirego Blog.</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 19 Oct 2026 04:33:15 -0300</lastBuildDate><atom:link href="https://figueirego.com/blog/tags/accessibility/index.xml" rel="self" type="application/rss+xml"/><item><title>Building my blog, part 2: designing for clarity</title><link>https://figueirego.com/blog/posts/building-the-blog-02-reading/</link><pubDate>Mon, 19 Oct 2026 04:15:50 -0300</pubDate><guid>https://figueirego.com/blog/posts/building-the-blog-02-reading/</guid><description>&lt;p&gt;&lt;img src="https://figueirego-blog-images.s3.us-east-1.amazonaws.com/images/2026/10/building-blog-reading/design-leitura.webp" alt="Reading corner with an armchair, an open book and a computer beside a window at night."&gt;&lt;/p&gt;&lt;p&gt;The old terminal made sense to me, but it could ask too much of a visitor. Someone trying to learn about my work should not have to discover a command to find information. When adapting that area into a desktop, I wanted a more familiar language: open, explore, and close windows.&lt;/p&gt;
&lt;p&gt;That did not solve the entire design. A desktop can also be confusing if everything depends on it. The website has dedicated pages for my background, projects, writing, and contact information; the interactive area is another way to explore. Conventional navigation remains available.&lt;/p&gt;
&lt;p&gt;Getting this combination right was the hardest part of building the site. I wanted it to reflect me and help people understand what they were seeing. Its appearance needed to support that reading.&lt;/p&gt;
&lt;h2 data-hextra-search-id="one-reference-for-presentation-another-for-construction"&gt;One reference for presentation, another for construction&lt;span class="hx:absolute hx:-mt-20" id="one-reference-for-presentation-another-for-construction"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;With Zeno Rocha, I was interested in how he presents himself and gives his work visibility while keeping navigation intuitive. With Akita, the reference was mainly how he built his blog and the ideas around it. These were not two interfaces I intended to combine literally.&lt;/p&gt;
&lt;p&gt;Through experiments with Claude, Antigravity, and then Codex with skills, I refined a direction that needed to fit the rest of my website. An interesting visual result could still have poor spacing, too much information in one place, or unclear interaction.&lt;/p&gt;
&lt;p&gt;This was particularly noticeable with article covers. I wanted to retain the title, summary, author, date, reading time, and topics. When those elements were too close together, a large image did not compensate for the missing hierarchy. The gradient also needed revision: a transition that seemed acceptable in dark mode could form a heavy band in light mode.&lt;/p&gt;
&lt;h2 data-hextra-search-id="give-each-area-a-purpose"&gt;Give each area a purpose&lt;span class="hx:absolute hx:-mt-20" id="give-each-area-a-purpose"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Featured articles present a selection of up to three pieces. Recent articles show the latest publications and can repeat a featured item. The Archive provides a way to explore more content and filter it.&lt;/p&gt;
&lt;p&gt;Topics appear as small labels without a hashtag symbol. A label communicates a category; its appearance should still suggest that it is clickable. Similarly, a return link should explain its destination. A link promising to return to the Archive needs to go there.&lt;/p&gt;
&lt;p&gt;These details can look minor in isolation. Together, they determine whether someone can predict the next step. I began looking at each element&amp;rsquo;s purpose as well as its position in a screenshot.&lt;/p&gt;
&lt;figure class="reader-figure reader-figure-wide"&gt;
&lt;div class="post-cover cover-reader"&gt;
&lt;img class="cover-image" src="https://figueirego-blog-images.s3.us-east-1.amazonaws.com/images/2026/10/building-blog-reading/arquivo-real-en.webp" alt="Blog archive with search, format and year filters, and a topic list." width="1512" height="893" loading="lazy" decoding="async"&gt;&lt;/div&gt;&lt;figcaption&gt;The published Archive in English, captured on October 19, 2026. Search, filters, and topics each serve a different navigation task.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://figueirego-blog-images.s3.us-east-1.amazonaws.com/images/2026/10/building-blog-reading/arquivo-real-en.webp" target="_blank" rel="noopener"&gt;View the full-size screenshot&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-hextra-search-id="motion-should-follow-the-action"&gt;Motion should follow the action&lt;span class="hx:absolute hx:-mt-20" id="motion-should-follow-the-action"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;Featured images appear in grayscale on devices with a mouse and gain color on hover. The first transition felt too abrupt. We adjusted it to give the change time to register, with a slight enlargement of the image.&lt;/p&gt;
&lt;p&gt;The table of contents needed similar attention. Clicking from the first topic to the last should not make the indicator compete for attention with every intermediate section during scrolling. Navigation began treating that movement as an action with a chosen destination.&lt;/p&gt;
&lt;p&gt;These effects need alternatives. A phone does not have a reliable equivalent of mouse hover. Keyboard focus should appear without depending on a slow animation. For people who request reduced motion in their system settings, movement and transitions should be reduced or removed. The preference is read through the &lt;code&gt;prefers-reduced-motion&lt;/code&gt; media query.&lt;/p&gt;
&lt;p&gt;The goal is not to make visitors wait for an effect before using the site. Motion should explain what is changing and let navigation continue.&lt;/p&gt;
&lt;figure class="reader-figure reader-figure-wide"&gt;
&lt;div class="post-cover cover-reader"&gt;
&lt;img class="cover-image" src="https://figueirego-blog-images.s3.us-east-1.amazonaws.com/images/2026/10/building-blog-reading/leitura-sumario-real-en.webp" alt="English article with a sidebar table of contents and Beyond programming selected." width="1512" height="893" loading="lazy" decoding="async"&gt;&lt;/div&gt;&lt;figcaption&gt;An actual screenshot of the English reading view. The table of contents keeps the selected section visible beside the text.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href="https://figueirego-blog-images.s3.us-east-1.amazonaws.com/images/2026/10/building-blog-reading/leitura-sumario-real-en.webp" target="_blank" rel="noopener"&gt;View the full-size screenshot&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-hextra-search-id="reading-in-portuguese-or-english"&gt;Reading in Portuguese or English&lt;span class="hx:absolute hx:-mt-20" id="reading-in-portuguese-or-english"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;The Portuguese blog lives under &lt;code&gt;/pt/blog/&lt;/code&gt;; the English version is under &lt;code&gt;/blog/&lt;/code&gt;. Each article has one file per language. Both share a &lt;code&gt;translationKey&lt;/code&gt;:&lt;/p&gt;
&lt;div class="hextra-code-block hx:relative hx:mt-6 hx:first:mt-0 hx:group/code"&gt;
&lt;div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;# In both files; the title and body are translated.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;translationKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;building-blog-reading&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="hextra-code-copy-btn-container hx:opacity-0 hx:transition hx:group-hover/code:opacity-100 hx:flex hx:gap-1 hx:absolute hx:m-[11px] hx:right-0 hx:top-0"&gt;
&lt;button
class="hextra-code-copy-btn hx:group/copybtn hx:cursor-pointer hx:transition-all hx:active:opacity-50 hx:bg-primary-700/5 hx:border hx:border-black/5 hx:text-gray-600 hx:hover:text-gray-900 hx:rounded-md hx:p-1.5 hx:dark:bg-primary-300/10 hx:dark:border-white/10 hx:dark:text-gray-400 hx:dark:hover:text-gray-50"
title="Copy code"
aria-label="Copy code"
data-copied-label="Copied"
&gt;
&lt;div class="hextra-copy-icon hx:group-[.copied]/copybtn:hidden hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;div class="hextra-success-icon hx:hidden hx:group-[.copied]/copybtn:block hx:pointer-events-none hx:h-4 hx:w-4"&gt;&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The language selector opens the corresponding version when one exists. It does not automatically translate the text. Summaries, labels, image alternative text, and links between parts of a series also need review.&lt;/p&gt;
&lt;p&gt;Search uses a local index containing text, titles, and other editorial fields. It helps find a word inside an article; Archive filters help narrow a collection by criteria. Those are related tasks, but they are not identical.&lt;/p&gt;
&lt;h2 data-hextra-search-id="real-comments-and-the-limits-of-testing"&gt;Real comments and the limits of testing&lt;span class="hx:absolute hx:-mt-20" id="real-comments-and-the-limits-of-testing"&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;I kept the existing Disqus integration. Reaction buttons that only stored a choice in the browser did not provide a real interaction with me, so that proposal was left out.&lt;/p&gt;
&lt;p&gt;Loading comments showed why an attractive screenshot does not prove something works. We had to review the domain authorized in Disqus and test automatic loading. Tool interference and changing browser tabs also affected some checks. Diagnosis needed to distinguish a service failure, website configuration, and a problem in the test itself.&lt;/p&gt;
&lt;p&gt;In production, comments attempt to load automatically. The retry button is a recovery path for failures. Production integration is disabled in previews so experiments do not mix with real discussions.&lt;/p&gt;
&lt;p&gt;Today, I would review a page by following its tasks: find an article, change language, use the table of contents, return to the listing, and locate another subject. I would repeat that with a keyboard, light and dark themes, and a phone-sized viewport. Emulation helps identify layout problems, but it is not the same as testing a physical device. That use is what shows whether the design is doing its job.&lt;/p&gt;
&lt;nav id="series-navigation" class="series-navigation" aria-label="Building my blog"&gt;
&lt;div class="series-heading"&gt;
&lt;h2&gt;Building my blog&lt;/h2&gt;
&lt;p&gt;Explore all 5 parts of the series.&lt;/p&gt;
&lt;/div&gt;
&lt;ol class="series-chapters" role="list"&gt;
&lt;li&gt;
&lt;a class="series-chapter" href="https://figueirego.com/blog/posts/building-the-blog-01-architecture/"&gt;
&lt;span class="series-number" aria-hidden="true"&gt;01&lt;/span&gt;
&lt;span class="series-title"&gt;Idea and architecture&lt;/span&gt;
&lt;svg width="20" height="20" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;span class="series-chapter" aria-current="page"&gt;
&lt;span class="series-number" aria-hidden="true"&gt;02&lt;/span&gt;
&lt;span class="series-title"&gt;Design and reading&lt;/span&gt;
&lt;span class="series-current"&gt;You are here&lt;/span&gt;
&lt;/span&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a class="series-chapter" href="https://figueirego.com/blog/posts/building-the-blog-03-publishing/"&gt;
&lt;span class="series-number" aria-hidden="true"&gt;03&lt;/span&gt;
&lt;span class="series-title"&gt;Publishing&lt;/span&gt;
&lt;svg width="20" height="20" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a class="series-chapter" href="https://figueirego.com/blog/posts/building-the-blog-04-images/"&gt;
&lt;span class="series-number" aria-hidden="true"&gt;04&lt;/span&gt;
&lt;span class="series-title"&gt;Images and automation&lt;/span&gt;
&lt;svg width="20" height="20" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a class="series-chapter" href="https://figueirego.com/blog/posts/building-the-blog-05-seo-rss/"&gt;
&lt;span class="series-number" aria-hidden="true"&gt;05&lt;/span&gt;
&lt;span class="series-title"&gt;SEO and RSS&lt;/span&gt;
&lt;svg width="20" height="20" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" aria-hidden="true"&gt;&lt;path stroke-linecap="round" stroke-linejoin="round" d="M14 5l7 7m0 0l-7 7m7-7H3"/&gt;&lt;/svg&gt;
&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/nav&gt;</description></item></channel></rss>