v0.01 — stardate

The quest for the perfect motion tool

At Pixelpillow we find that motion is an integral part of creating modern web experiences. Problem though, is that - while there are many tools available - most of them lack important features we need for a seamless transitions from design (Figma in our case), to motion design, to development.

We have our fair share of experience with motion tools and tinkered with al lot of em (Flash ✝︎, After Effects, CSS transitions, GSAP, Principle, etc…) but none of them fullfilled all of our wishes. So we decided to again embark on our journey for the perfect motion tool.

Our wish list:

Seamless Figma integration

As a designer, you've invested countless hours perfecting your design in Figma—giving layers neat names, setting up auto-layouts, and more. It would be a waste of your time to recreate the same design in a motion tool or HTML/CSS. You want a motion tool that takes your design from Figma one-to-one via an import or plugin. Bonus points if it has two-way integration, so you can use animations in your Figma prototypes.

Frictionless developer handoff

This is the most significant part for us, something that many motion tools lack. Designers must document each interaction, which is extremely time-consuming and can lead to misinterpretation of the animation by someone without motion design skills. Developers usually must guess motion values, install unfamiliar software, click through settings, and manually convert them into code.

Different animation properties per object

Many motion tools allow you to animate from 'state 1' to 'state 2' with the same duration and easing for all objects. However, to create more realistic en beautiful motion, it is necessary to be able to set the duration and easing per object (e.g. opacity, position, etc.).

On the left you see the effect when all properties animatie at the same time: the label is still in view when de button is already shrinking. On the right the correct version

Interactivity

Looking at an animation is different from interacting with one. We are designing for an interactive medium, so it's important to experience how an animation ‘feels’ when you hover, drag, etc. For instance, if you have a grid of cards that animate on hover, you want to know how it feels when you quickly hover over all the cards with your mouse because for a number of items you will probably tone down your motion a bit because it can quickly become to overwhelming.

Nice to haves:

Reusable components

Working with components can be beneficial when constructing layouts, as any changes are reflected in all parts at the same time, which can save time.

Scroll based animatie

Scroll based animations are a common use case. It’s convenient if we could prototype these as well.

Let’s compare!

We've tested and used numerous tools in recent years. These include solutions not specifically for motion, but can be (mis)used for this purpose, such as Webflow and Framer. As designers, we're also quite skilled with a more code-based approach, often using a combination of HTML/CSS and GSAP in CodePen. When comparing the tools we know against our criteria, this is what it looks liked:

Winners

Figma

For basic micro-animations, such as hovering over a button or card, the most obvious choice is Figma. The main benefit of this is that you can incorporate motion at an early stage in the design process, making alterations simple, and use the animations in your prototypes

ProtoPie

For more intricate animations Protopie is the best fit, mostly due to their thoughtfulness regarding the developer handoff process, which eliminates obstacles between design and frontend. Lets see how all our criteria are met when using ProtoPie:

What makes Protopie an ideal choice?

Figma integration is almost seamless via a Figma plugin

Developer handoff is very well thought out. Developers can easily inspect objects, attributes, and values being animated, and this is also represented graphically in a timeline.

Objects can be animated independently, with presets for easing but also the ability to customise them.

Many possibilities in terms of triggers, also for mobile

Captains log

Date
Done
Learned
Hr
03-10-2021
Scribble animations & home onload
Debugged scribble animations.
Isolating timelines makes debugging way faster.
2
Added home onload animation.
Trigger after assets load, not just DOMContentLoaded.
1
26-07-2021
Reader page
Connected Airtable API to new 'reader' page.
Airtable paginates results — need to handle the offset or you'll miss records.
3
Designed and styled the page.
Design with a fixed dataset first, hook up the API after.
2
24-07-2021
Maker page resize
Added onResize event to maker page so titles stay centered.
GSAP breaks CSS positioning.
1
05-07-2021
Date script
Wrote script to automatically display stardate and copyright date.
JS months are zero-indexed. Classic.
2
24-06-2021
Photo selection & title animations
Photo selection and editing.
Less photos, more impact.
2
Title animations.
Conflict between CSS positioning and GSAP is still tricky.
1
23-06-2021
Draggable photos
Made photos draggable.
Went easier than expected.
1
19-06-2021
ScrollTrigger & responsive styling
Implemented ScrollTrigger on maker page.
scrub ties animation progress to scroll position — good for parallax stuff.
3
Responsive fluid styling.
Fluid sizing + CSS custom properties = much less breakpoint juggling.
2
13-06-2021
Stylesheet structure
Refactored stylesheet structure using @import (postcss-import plugin).
Split files are so much easier to navigate than one giant CSS file.
1
Base styling for maker page.
Layout first, cosmetics later. Saves a lot of rework.
2
12-06-2021
CSS & layout refactor
Structured style.css by separating layout, typography and cosmetics.
Separation of concerns in CSS makes debugging way faster.
2
Updated layout content wrapper for more flexibility and added utility classes.
Keep utility classes single-purpose or they get unpredictable fast.
1
10-06-2021
PostCSS & Git
Configured PostCSS to compile all CSS files. Updated config in package.json and eleventy.js.
A glob (*.css) in the build command saves having to list every file manually.
2
Added mixin support to PostCSS via postcss-mixins.
Works like Sass mixins. No need to switch preprocessors.
1
Figured out how to stage files individually and make separate commits in Git.
Cleaner commits, less chaos in the history.
1
30-05-2021
GSAP tooling
Added GSAP code hinting and linting to VS Code.
Autocomplete for GSAP methods saves a surprising amount of time.
1
29-05-2021
Animation & positioning
Researched animation layout, positioning and performance. Did Codepen experiments.
Differences between animating left/top/right/bottom vs translateX/translateY, and how this translates to GSAP values.
3
22-05-2021
Changelog layout and animation
Animated changelog width and position based on vw.
Use the same positioning system in GSAP as in your stylesheet, otherwise unexpected effects. Don't set left: 100vw in CSS and then use x: 300 in GSAP.
1
Fixed scrolling changelog layover (codepen) using GSAP DrawSVG plugin.
Using only opacity for a layover is a bad idea — the element stays clickable when invisible. Always place an actual DOM element on top.
2
Designed homepage scribbles.
Colors are hard.
1
27-03-2021
SVG animations homepage
Attempted to implement SVG animations in Eleventy.
Failed. Eleventy appears to modify SVG markup during build. To be continued.
2
Animated 'scribbles' SVGs (codepen) using GSAP DrawSVG plugin.
DrawSVG cannot animate external SVGs. Inline SVGs cannot be used as CSS backgrounds or pseudo-elements.
2
Designed homepage scribbles.
Colors are hard.
1
22-03-2021
CSS Grid
Styled changelog table using CSS Grid.
CSS Grid positioning.
2
Designed changelog table.
What looks simple in design is sometimes hard in practice.
1
11-03-2021
Templating
Implemented Nunjucks templates and partials for footer, header, content and changelog.
Terminal error messages save a lot of time — if you actually read them. Both .md and .html files work as a base. What frontmatter is.
3
Researched templating languages.
How Nunjucks and Liquid work and how to set up a basic structure.
1
25-02-2021
Motion!
Animated menu, changelog and links.
GSAP x:0 is not absolute 0 — it's 0 from the element's starting position in the DOM. If CSS sets left: 100px, GSAP x:0 animates to 100px.
4
22-02-2021
Link animations & stagger
Animated Captain's log link.
How to remove an event listener using removeEventListener.
2
Added stagger animation to changelog.
GSAP stagger animates a list in sequence with barely any code.
1
18-02-2021
Setting up typographic foundation
Implemented fonts and styling for responsive typography.
Nothing new.
2
Set up a fluid typography system. Worked on homepage text and styling.
How to use clamp() to scale type fluidly between a min and max.
4
17-02-2021
Setting up personal site framework
Set up Eleventy as static site generator.
How to configure Eleventy using the terminal.
4
Gitlab setup.
What an SSH key is and why you need one. How to commit directly from VS Code.
2