OPALA DESIGN SYSTEM
DESIGN SYSTEM GOVTECH 0 → 1

Building a shared design language for digital public services

The official design system for the Government of Piauí's digital services, built at ETIPI — the first design system of a Brazilian state government. A shared foundation of design tokens, components, accessibility standards, writing guidelines and documentation that product teams could actually adopt and scale.

ROLEProduct Designer · Design System team
SCOPEArchitecture · Tokens · Components · Docs
CONTEXTGoverno do Piauí · ETIPI
STANDARDWCAG 2.2 AA
overview
The challenge

The challenge wasn't a missing component library. Different government products had evolved with their own interface decisions — colors, typography, components and interaction patterns varied from one experience to the next. Every new product recreated the same decisions from scratch, and accessibility depended on individual implementations instead of a shared foundation.

Instead of standardizing screens, we needed to standardize the logic behind them — so that a decision made once at the foundation level would propagate to every interface built on top of it.

My role

I was one of the designers on ETIPI's design-system team. Together we shaped the architecture, the token model and naming conventions, the foundations, the component library and its documentation, and the governance that let other teams consume it. Coming from a front-end background, I pushed for every piece to be designed as something engineers would implement and maintain — not as Figma objects.

A design system is not a collection of components. It is infrastructure for making product decisions consistently, at scale — and the first one a Brazilian state government ever had.

architecture decisions

The decisions that shaped Opala were made before any component was drawn. Four of them defined how the whole system would scale.

1

Tokens as the source of truth

Every design decision — color, type, space, elevation, motion — is stored as a token. Components reference tokens, never raw values, so a change at the foundation flows everywhere.

2

A naming taxonomy before a library

We defined a formal grammar for names — system / category / property / modifiers — informed by EightShapes' token-taxonomy work, so designers and engineers read the same name the same way.

3

Mode as a dimension, not a theme

Light and dark are a token modifier, not a second palette. Semantic colors resolve per mode, which kept the system to one model instead of two.

4

Document the documentation

A meta-template — header, variants, properties table, changelog — so every page of the system is written the same way and versioned the same way.

Anatomy of a token name

Reading a token should tell you where it is used and what it does. Every name follows the same seven-part grammar, so a designer and an engineer read it the same way — and a new team member can guess a token they've never seen.

Token grammaropl / pattern / fg / semantics / success / enabled / default
opl
namespace
Opala system prefix
pattern
category
Which layer of the system
fg
property
Foreground, background, border…
semantics
concept
Neutral, semantics, dataviz
success
variant
Primary, success, warning, critical
enabled
state
Enabled, hover, selected, focus, disabled
default
mode
Default or inverse — resolves per theme
How a value resolves — base → scheme → pattern, per mode
base coloropl/scheme/success#299656
→
semantic foregroundopl/scheme/fg/success/default#175330opl/scheme/fg/success/inverse#c1eed3
→
pattern, in a componentopl/pattern/fg/semantics/success/enabled/defaultused by Alert, Badge, Input…
Token data types
colordimensionnumberstringboolean
Naming conventionsbase · modifiers · objects
Base

What the token is: the category it belongs to, the property it changes and the concept it expresses.

categorypropertyconcept
Modifiers

How it varies: the variant, the interaction state, its position on a scale and the mode it resolves in.

variantstatescalemode
Objects

Where it lives: the group, the component and the element inside that component it is bound to.

groupcomponentelement
foundations

Six documented foundations — tokens, color, typography, layout & spacing, naming and writing — each versioned with its own history. Below, the three visual ones: dense by design, because a system has to answer every question a product team will ask.

Coloropl/scheme/*
Primary
#034ea2
Success
#299656
Warning
#fdb913
Critical
#ef4123
Data visualization · 10 steps
Foreground tokens resolve per mode
Primary default#022a59
Primary inverse#aad1fd
Success default#175330
Success inverse#c1eed3
Warning default#946a01
Warning inverse#feedc4
Critical default#8c1d0a
Critical inverse#fbcfc8
Surfaces
Surface main#eef6ff
Surface moderate#c2defe
Scheme surface#f4f5f7
Surface inverted#011b39
Color

Base palette → scheme colors (foreground, background) → pattern colors for surfaces and content, each resolved for light and dark mode. Contrast ratios are built into the tokens, not checked afterwards.

TypographyMontserrat · opl/typo/props/*
Public services
Headline md30px · 700 · 0px
Public services
Headline sm24px · 700 · 0px
Gov.PI Citizen
Title lg20px · 600 · 0.4px
Gov.PI Citizen
Title md18px · 600 · 0.4px
Access services
Body lg20px · 400 · 0.4px
Access government services
Body md16px · 400 · 0.4px
Access government services
Body sm14px · 400 · 0.4px
CONTINUE
Label md14px · 600 · 0.8px
CONTINUE
Label sm12px · 600 · 0.8px
Typography

A size scale with semantic roles — headline, title, body, label — plus line-height, letter-spacing, weight and transformation rules, so hierarchy is a named decision rather than a per-screen choice.

Layout & spacingbase 4px · opl/gap
00px
xs24px
xs8px
sm12px
md16px
lg20px
xl24px
xl332px
xg40px
xg248px
xg356px
Sizes
xs2 16xs 20sm 24lg 36xl 40…
Grid · 12 columns
Breakpoints
xs<576sm576md768lg992xl1200xxl1400
Layout & spacing

Global dimensions on a 4px base, inset and gap tokens, semantic spacing shown on real government screens, responsive breakpoints from extra-small to extra-extra-large, and the grid.

component library

Thirty-plus components — buttons, inputs, selects, checkboxes, radios, switches, chips, badges, tabs, steppers, breadcrumbs, pagination, tooltips, alerts, dialogs, drawers, accordions, cards, carousels, tables, dropdowns and more — each with its own documentation page written from the same template.

Designed as behaviors, not screenshots

Anatomy, variants, states

A reusable component has to account for more than its default appearance. For each one we defined the anatomy, the hierarchy of its elements, the variants that belong inside it and the interaction states it must carry — so accessibility and behavior live in the component itself rather than being added during implementation.

  • What changes when an action becomes disabled?
  • How is keyboard focus communicated?
  • How should validation errors behave?
  • Which variations belong inside the component — and which call for a different pattern?

Every documentation page links to the component's spec, lays out its elements and slots, and points to its associated templates — the same three-part structure across the whole library.

One page, every componentmeta template · v2.0
ButtonDone · v2.0
Documentationlink to spec & usage
Anatomyelements · slots · hierarchy
Variantsfilled · outlined · text · icon
Propertiestable: prop · type · default
Associated templateswhere it appears
Historyversion · date · description
EnabledContinue
HoverContinue
SelectedContinue
FocusContinue
DisabledContinue

The documentation template every component follows, and the five interaction states each one must carry — colored with Opala's own tokens.

iconography

An icon set is only useful if people can find the icon they need. Opala's library is organized into more than fifty semantic categories — from navigation and files to transport, health and public services — each documented and versioned like any other part of the system.

Icon catalogueLucide-based · semantic categories
Shield / Protection
Gallery
Password, key & lock
Corporations
Lists
Map, GPS & location
Calendar
Email
Dashboard
Menu & settings
Messages
Layers & layout
Tags & bookmarks
Science
Search, filter
User & people
Charts
Plants & animals
Save, import, export
Favorites, likes & rating
Code
Tables
Book
Transport
Home & housing
Hardware
Folders
Weather
Alerts, alarms, time
Food & drink
Money, values & currency
Places
Text editing
Documents & files
Arrows
50+categories, each versioned

The catalogue is organized by what people are looking for, not by shape: one documented panel per category, each with its own history.

language & writing

Public services speak to everyone. Opala includes a UX-writing guide — tone and voice, inclusive language, layout, content and a review checklist — so the words in an interface are as consistent and accessible as its components.

Writing guidelinesrecommended · not recommended
Write interactions clearly

Labels on buttons and menus must be objective. Avoid generic words.

RecommendedAceitar (Accept)
Not recommendedOk
Start with the goal of the action

Lead with the objective and the result of the interaction.

RecommendedConsulte seu extrato acessando as opções do perfil. (Check your statement via profile options.)
Not recommendedAcesse as opções do perfil para consultar seu extrato. (Go to profile options to check your statement.)
Careful with acronyms

Spell it out the first time. Up to three letters, all caps; four or more, only the first.

RecommendedSecretaria de Segurança Pública (SSP) · Detran (Public Security Department)
Not recommendedSSP · DETRAN
Tone & voice

Consistent, concise, direct

One institutional voice across every product: speak to one person, prefer the active voice, keep sentences short enough to be read on a phone in a hurry.

Inclusion

Language that leaves no one out

Gender-neutral constructions, respectful terms for disability, no jargon — grounded in the state's own inclusive-communication guidance.

Do / don't

Examples, not rules

Every guideline is paired with a recommended and a not-recommended example, so teams can apply it without interpreting it.

governance

A system other teams depend on needs rules for how it changes. Opala ships with a status vocabulary, a changelog on every page, and a meta-template that makes the documentation itself consistent — a system for documenting the system.

Status symbology8 states
Ignore / References / PlaygroundReference
To start / Needs informationTo start
In progressIn progress
Paused / SuspendedPaused
Under review / Awaiting reviewUnder review
DoneDone
Component reviewComponent review
Documentation being updatedDocs update

Every page and component carries one of eight states, visible from the Figma page list.

Index & changelogentry page
Foundations
Tokens · Color · Typography · Layout · Naming · Writing
Components
30+ documented components
Icons
50+ semantic categories
Meta components
The template that documents the system
In progress
What is being built, visible to everyone
Deprecated
Kept, marked, never silently removed
v2.0Tokens applied across all values and references; foundations and components re-bound to the token model.
v1.0First release: foundations, component library, icon catalogue and documentation template.

The entry page: navigation to every part of the system, plus the global changelog.

Versioned by page

Change is traceable

Each foundation and component page keeps its own history — version, date, description — so a team can see what moved and when, without asking.

Meta components

Documentation as a product

A page template, header, dividers, variant blocks and history tables are themselves components. Writing a new page means filling a structure, not inventing one.

accessibility & the public-sector lens

Government software is not one product. Opala serves citizen-facing services — where clarity and digital literacy matter most — and dense internal systems full of tables, statuses and permissions. Accessibility was treated as a system constraint, aligned with WCAG 2.2 AA, so each requirement became a reusable decision instead of something every team reinterpreted.

Aa

Contrast

Minimum ratios built into the color tokens from the start — in both modes.

⌘

Focus

A consistent, visible focus state defined inside each component.

!

Feedback

Error and disabled states with clear cues that never rely on color alone.

≡

Hierarchy

Type and spacing scales that keep structure legible on any device.

For citizens

Clarity first

Services people use once or rarely, on any device or connection — so patterns favor legibility, guidance and accessible defaults.

For administration

Built for complexity

Operational tools heavy with data, states and permissions — so components hold up under real, unpredictable content.

impact

Opala shifted recurring interface decisions away from individual screens and toward a shared product language — the foundation the Government of Piauí's digital ecosystem now builds on.

For teams

A common foundation

A shared base to design from, instead of solving the same interface problems again on every product.

For products

One recognizable language

A coherent, consistent experience across different government services — without forcing them into one solution.

For users

Accessibility by default

Interaction and accessibility standards addressed once, at the system level, not per implementation.

learnings

The hardest part of a system isn't drawing it. It's deciding where consistency ends and flexibility begins — and writing that decision down.

Consistency vs. flexibility

Teams needed patterns they could trust, and room for products that solve very different problems. Settling when to extend a component versus add one was the most important design decision in the project.

Name things before you build them

The token taxonomy did more for adoption than any component did. A name that reads the same to a designer and an engineer removes a whole category of handoff conversations.

Governance is part of the design

Status, changelogs and a documentation template aren't overhead — they're what turns a Figma file into infrastructure other people can rely on.

The strongest systems don't eliminate design decisions — they eliminate the need to keep making the same ones.

Let's build systems that scale.

©2026 Iana Fonteneles – All Rights Reserved Available for freelance work