← Back to the icons

Designing an icon when none fits: an LGPD case study

By André M. Ferreira · November 2, 2026

Have you ever spent hours looking for an icon for a feature, only to end up with five candidates, each missing something the others have? That happened to me while looking for an icon for a tool built around the LGPD, Brazil's data protection law. This is the path to a result I'm happy with, and what I learned about icons along the way.

The problem

I built a tool that finds and classifies attributes in databases across different database systems, in line with the LGPD (Lei Geral de Proteção de Dados, Brazil's counterpart to the GDPR). It walks through tables and columns, takes a random sample of a thousand records, identifies where personal data lives and rates how critical each item is. All it was missing was an icon — and that looked like a five-minute job.

To my surprise, it took a lot longer than five minutes. I went through many references and explored associations of words, images and symbols, but nothing convinced me I had found the right answer. I tried several approaches and tried combining ideas, but icon libraries usually draw one concept at a time. These were the closest candidates:

IdeaCandidateWhat's missing
Searching a databasedatabase-searchSays nothing about personal data
A protected databasedatabase-lockShows neither the search nor the classification
A protected personshield-userNo database, and it reads as account security
ClassificationtagsOn its own, says nothing about privacy
LawscaleReads as “legal” in general

Each candidate got one part right. None said, at once, personal data, protection and a Brazilian law.

First attempt: combining shapes

I made two versions in the Icon Library editor, both starting from a shield:

The first one tells the story well at 48 px: verified personal data. At 16 and 24 px, though, the lines and the check mark blur together. The second stays legible when small, but it's generic: it could stand for account security or a login.

That was the first lesson: a detailed icon needs a simplified version, and an icon that works at every size almost always says less.

Changing the question

Until then I was looking for a picture of what the tool does. The turning point was asking what the LGPD protects: the person. That led to the keyhole person, where someone's head and body form the hole of a keyhole. Personal data is the person, and it's locked away.

At this stage I used an AI assistant (Claude Opus 5.5) to generate variations and compare them side by side at several sizes and in both themes. Seeing ten proposals on one screen, from 16 to 96 px, made it quick to drop the ones that only worked large. The drawings follow Lucide's rules: a 24-unit grid, a 2-unit stroke, round caps and about 2 px of padding, so they don't look bigger than the icons next to them.

A word from the assistant. André invited me to comment on my part, so here it is. I generated alternatives quickly, showed them side by side at real sizes and in both themes, and took care of technical details: simplifying the map, fixing a stroke that fell outside the frame and cutting the globe out through drawing direction. The keyhole person came up in one of those rounds.

The decisions that gave the icon its identity were his: bringing Brazil into the drawing, combining the map with the diamond, filling the flag and making the colored version. He also set aside proposals I had recommended, and the result is better for it. As I see it, that's where this kind of tool helps most: it speeds up exploration, while the judgment stays with the person who knows the project.

— Claude Opus 5.5, AI assistant by Anthropic

Bringing Brazil into the drawing

The LGPD is a Brazilian law, and I wanted that to show. The map outline comes from Natural Earth, which is in the public domain. The original outline has 1,648 points. Simplified with the Douglas-Peucker algorithm, it keeps 20, enough to recognize Brazil at 16 px without a jagged stroke.

The diamond and the globe recall the flag, with the keyhole person in place of the banner. In the end I combined both: the map behind, the diamond in front. The decision that mattered most was filling the diamond. As outlines, the diamond, the globe and the keyhole became three lines touching each other at 24 px. With a solid area and the globe cut out, it stays clear even at 16 px.

A family of three versions

One icon doesn't fit every place. I kept three black versions, which follow the text color, and a colored one:

VersionWhere to use it
SealLogo, header, compliance badge and one-color print
OutlineMenus and buttons, next to Lucide or Feather icons
MinimalFavicon, browser tab and anywhere at 16 px
ColoredPresentations and the tool's own page

At real sizes, from 16 to 48 px, the seal and the minimal version look like this:

What I learned

How to do the same in Icon Library

  1. Find the icon closest to your idea and click the pencil to open the editor.
  2. Use Icon on top to bring in a second icon, then adjust its size and position.
  3. Select the shapes that belong together and use Group. Show layers paints each shape in its own color.
  4. For a solid area, close the line with Join and use Fill.
  5. Use Copy SVG, or publish the icon so others can find it.

Open Icon Library

The code of the three versions

These are the SVGs I use today, for anyone who wants to see how they're built.

Seal

<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6.88 10.9L5.83 9.15L3.52 10.82L2.07 9.85L1.27 8.1L3.41 6.32L3.47 3.01L5.07 3.27L8.4 1.08L9.35 3.29L13.17 1.16L13.65 3.1L12.66 4.8L15.54 4.3L22.34 7.44L19.45 16.13L15.59 18.54L12.27 22.52L10.28 20.47L11.53 18.65L11.05 17.23" stroke-width="1.75"/><path d="M12.19 4.54L19.47 11.81L12.19 19.08L4.69 12ZM16.97 11.71a4.78 4.78 0 1 0-9.56 0a4.78 4.78 0 1 0 9.56 0Z" stroke-width="1.5" fill="currentColor"/><path d="M11.63 11.67A1.25 1.25 0 1 1 12.75 11.67L13.38 13.85H11Z" stroke-width="1" fill="currentColor"/></svg>

Outline

<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M6.88 10.9L5.83 9.15L3.52 10.82L2.07 9.85L1.27 8.1L3.41 6.32L3.47 3.01L5.07 3.27L8.4 1.08L9.35 3.29L13.17 1.16L13.65 3.1L12.66 4.8L15.54 4.3L22.34 7.44L19.45 16.13L15.59 18.54L12.27 22.52L10.28 20.47L11.53 18.65L11.05 17.23" stroke-width="1.75"/><path d="M12.19 4.54L19.47 11.81L12.19 19.08L4.69 12Z" stroke-width="1.5"/><path d="M11.49 11.88A1.55 1.55 0 1 1 12.89 11.88L13.66 14.6H10.72Z" stroke-width="1.5"/></svg>

Minimal

<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 1.5L22.5 12L12 22.5L1.5 12ZM18.2 12a6.2 6.2 0 1 0-12.4 0a6.2 6.2 0 1 0 12.4 0Z" stroke-width="1.5" fill="currentColor"/><path d="M11.21 12.36A1.75 1.75 0 1 1 12.79 12.36L13.66 15.43H10.34Z" stroke-width="1" fill="currentColor"/></svg>

See also the guides to Lucide and Bootstrap Icons, the sets the candidates came from.