Izaias Cavalcanti

Portfolio for Nubank · Senior Motion Designer · São Paulo

Motion that tells people what just changed.

I am Izaias Cavalcanti, a product designer and design engineer with 25+ years where design and engineering meet. I design motion as a system, write it as tokens and code, and ship it with the people who build the product. My research asks why people finish a task and still cannot say what happened. Good motion is one of the answers.

Motion systems as tokens Reduced motion per component Films rendered frame by frame Seven languages Trust where money moves
Lessons I paid for, episode 001. 38.4 seconds, 2,304 frames, every one drawn in code.
  • 4 curvesin Compresso's motion system, and none of them can overshoot
  • 2,304frames per short, every key on a whole frame at 60 fps
  • 7 languagesfor the same Compresso film, one motion
  • 15 regionsshared one authentication design language at Visa
  • 2 to 10designers on the team I grew at Netlex

01 · Motion language

Five principles that decide every movement

They come from the motion specification of my portfolio site and are short on purpose: when a decision is unclear, a principle decides it, and a reviewer can point at the one that was broken.

  1. 1

    Explain the change

    Motion shows where something came from, what replaced it, or what state it is in now. If an animation can be removed without losing information, it is removed.

  2. 2

    Still by default

    Text is legible on the first paint and the main heading never animates. Nothing moves while it is being read.

  3. 3

    Settle, never bounce

    Interface chrome uses curves whose control points stay at or below 1, so overshoot cannot be written. A product may speak its own physics only inside its own frame.

  4. 4

    Input owns the frame

    A response starts in the same frame as the input and is visible within 100 ms. Every animation is interruptible and never blocks the next input.

  5. 5

    Equal in every mode

    Reduced motion, keyboard, screen readers, seven languages and a mid range Android phone receive the same information, through alternatives designed per component.

02 · Lab · Try the system

The tokens, running live in your browser

These are the four curves from Compresso, the open source image engine I design and build, each paired here with one of its durations. This page itself runs on them. Play them, switch on reduced motion, or try to sneak a bouncy curve past the rule.

Four curves, one vocabulary

Full motion. Each dot travels its rail on its own curve and duration.

The rule that cannot be broken

Press Check it.

Why the stagger is capped

Uncapped, 24 ms apart4,776 ms
Capped at 8 steps192 ms

The last row's delay, computed here as you drag. Compresso caps it so a long queue never animates for seconds.

03 · Work · Compresso

A motion system that cannot overshoot, in seven languages

Compresso compresses, resizes and converts photos inside the browser and never returns a bigger file. The engine is open source under MIT, 3.6 KB gzipped, with zero dependencies, and the app is in early access. Its motion is defined once in tokens.css and mirrored in motion.ts, so styles and anything orchestrated in script obey the same system.

Designed into the system, not added on top

  • Every curve keeps both control point y values at or below 1. The comment in the source says it plainly: there are no springs in this app, not even springs tuned not to bounce.
  • Each duration has one job, so a pull request reviewer can say which token is wrong instead of debating a feeling.
  • Staggers are capped at eight steps, so the last of 200 files starts moving 192 ms after the first instead of almost 5 seconds later.
  • Reduced motion is checked in script as well as in CSS, so orchestrated sequences obey the same preference as transitions.
TokenValueJob
ease.standard0.32, 0.72, 0, 1Responses, sheets, colour
ease.entrance0.16, 1, 0.30, 1Arriving and settling
ease.exit0.40, 0, 1, 1Leaving
ease.glide0.65, 0, 0.35, 1Travel with a visible start and end
dur.micro120 msHover, focus, colour
dur.standard240 msSheets, popovers, toasts
dur.entrance360 msContent settling into place
dur.ceremony520 msOne hairline, one ring, once
stagger24 ms, max 8Rows in a queue

File too large

One storyboard, seven languages. All seven cuts run exactly the same 13 seconds, so the motion is identical whether the words run long in German or short in Chinese.

The press

The mark is the mechanism. Two plates close over the photo and the size swaps on the cut, so the film shows the product's one promise in a single gesture.

App Store

The same press, cut for a store listing: the logo resolves out of the gesture the viewer just watched, so the brand reads as a consequence of the motion.

Vertical films at 60 fps, mastered at 2160 × 3840 and shown here at a lighter size.

04 · Work · Lessons I paid for

A frame accurate engine, with gates instead of opinions

A series of eight voiceless shorts about what building products taught me. Each film is 16 bars at 100 BPM: 38.4 seconds, 2,304 frames at 60 fps. Every frame is drawn in code in headless Chromium from type and shapes in the repository, so any frame renders on its own and the same frame always renders the same.

The motion language, enforced by a linter

  • Every key lands on a whole frame. Every hit sits on the sixteenth note grid. Every cut falls on a bar line.
  • One spring for objects: stiffness 260, damping 26, about 1.5 percent overshoot, always exactly 30 frames. Any other length fails the build.
  • Nothing fades. Lines rise 0.32 em out of their own slot in 22 frames, three frames apart, and leave the same way they came.
  • Fonts are self hosted under names no machine can match, so a missing file can never be silently replaced.

Episode 001, version 4: every automatic gate passes. Provenance sign off and the composer's final mix are still open, so it is shown here as a work in progress.

Contact sheet of episode 001, sixteen frames from ticket and hook to the ender, each labelled with its frame number, time and beat.
The review sheet the renderer writes for every version: sixteen settled frames with their frame numbers and beats.

Twelve gates run on every render

  • Grid and motion lintWhole frames, grid hits, bar cuts, 30 frame springs, no fades or blurpass
  • Flashes0 flash pairs inside any one second, 0 red flashespass
  • Contrast89 text boxes checked; the lowest is 6.71:1 against 4.5 neededpass
  • Safe area1,402 text boxes inside the 4:5 feed crop on every ninth framepass
  • Text on text2,517 pairs of settled text, none overlappingpass
  • Colour after encodeLargest shift ΔE 2000 of 0.86 after H.264, against 2 allowedpass
  • Loop seamText moves 0.15 px between the last frame and the firstpass
  • Golden frames16 frames compared with the last render of the same sourcepass
  • ProvenanceEvery asset and number traced to a source; 8 items wait on a capture or approvalpending

Not shown: the gates for copy rules, fonts, loudness and the delivered files.

05 · Work · Volta

Trust where money moves, told as a scroll story and a film

Volta is a pre launch product for Brazilian condos: a neighbour already going to the bakery carries your order on the same trip, arranged over WhatsApp. Payment by Pix is held until delivery and released only when the neighbour confirms a four digit code at the door. The motion has one job: make each step of that handoff visible, so nobody has to trust a screen that just says done.

O vizinho já está descendo. One minute, in Portuguese with captions. The narration voice is AI generated and labelled as synthetic where it is published.

Built for a throttled phone first

  • The first version moved groups inside one large SVG, and every frame repainted the whole building. On a throttled phone the page fell to about 23 frames a second while doing nothing at all.
  • The rebuild paints the building once and gives every moving figure its own layer, animating only transform and opacity, the two properties a browser can apply without painting.
  • Keyframes are written in chapter time, not pixels, so Lucas asks for bread while the reader is on the paragraph where Lucas asks for bread, at any screen size.
  • With reduced motion, each chapter shows one resting frame that still tells its part of the story.

06 · At scale

Systems that many teams and many markets use

Motion at a company the size of Nubank is a design system problem and a people problem. These are the places I have done both.

Visa, via Hyperativa · 2020 to 2021

15 regions

One design language for authentication

As UX Designer on the Global Authentication Redesign I prototyped and standardized one language for authentication across 15 regions, localized for each region's compliance rules, so implementation teams shipped 3x faster.

Netlex · 2021 to 2026

300%

Visual diffs people actually read

As Lead Product Designer for enterprise contract lifecycle management, I designed the Workflow Designer. Its usage grew 300% in six months, audits got 70% faster, and the product reached 100 clients in year one.

Netlex · leadership

2 to 10

Raising the bar with a growing team

I grew the design team from 2 to 10 designers and set the contribution standards for the shared component library in Storybook, the place where craft becomes something a whole team can repeat.

07 · Measuring motion

Did the motion help someone understand?

I wrote From Cognitive Load to Cognitive Distance, a book in 13 chapters on why people complete a task and still cannot explain it, with a practical evaluation framework. With it comes the Cognitive Distance Index, a score from 0 to 100 across four dimensions of understanding. The paper is in peer review at Information Systems (Elsevier).

That is how I would tie motion to outcomes: test whether people can say what changed after a transition, not only whether they finished the task, and read it next to adoption and retention, the way the Workflow Designer was judged at Netlex.

08 · How I work

Design in Figma, motion in code, AI in the loop

I use Claude Code and Cursor every day, and every change is reviewed. Automated gates like the ones above are how I keep AI assisted work honest as it scales.

Figma: Auto Layout, Variables, Dev Mode Prototyping in code CSS transitions and keyframes Framer Motion React and TypeScript Headless Chromium rendering ffmpeg encoding Storybook Design tokens WCAG 2.2 prefers-reduced-motion Web performance budgets Claude Code Cursor AI narration

Studied Human Computer Interaction and Digital Accessibility at the University of São Paulo (USP). Portuguese native, English fluent, Spanish conversational.