Catatan dari produksi
UI/UXMotionDesign Systems

Memoles UI dengan skill design-engineering Emil

Situs ini menjual disiplin rekayasa, jadi ia harus benar-benar disiplin — console bersih, SSG cepat, dua-hex yang menahan diri. Kami menjalankan skill design-engineering Emil Kowalski ke seluruh antarmuka, dan ia menemukan satu hal yang belum dimiliki sistem motion kami: press feedback (respons saat ditekan). Berikut yang kami ubah, perbandingan before/after-nya, dan kenapa kami menggambar perbandingan itu dengan SVG, bukan GIF hasil render Remotion.

Apa itu sebuah "design skill"

Emil Kowalski membuat komponen yang diam-diam dipakai banyak situs — Sonner (toast) dan Vaul (drawer) — dan mengajarkan kerajinannya di animations.dev. Skill-nya adalah selera itu, ditulis sebagai aturan yang bisa diterapkan agent AI: satu file portabel yang merangkum bagaimana antarmuka seharusnya terasa — kapan beranimasi dan kapan tidak, easing-nya apa, secepat apa, serta detail tak kasat mata yang memisahkan "berfungsi" dari "terasa pas".

Anda arahkan coding agent ke skill itu lalu minta polish pass. Ia meninjau CSS asli Anda terhadap aturannya dan mengusulkan perbaikan Before → After yang konkret — bukan kira-kira, melainkan sebuah diff. Ini gerakan yang sama yang kami pakai untuk AI di seluruh situs ini: rangkum penilaian sang ahli, lalu biarkan ia berjalan.

Celah yang ditemukannya: tak ada yang merespons tekanan

Tombol dan card kami sudah terangkat saat hover. Tapi tak ada state :active di mana pun — jadi begitu pengguna benar-benar menekan, tak ada yang terjadi. Antarmuka bereaksi pada kursor yang melintas di atasnya, tapi tidak pada klik-nya sendiri. Padahal itu micro-interaction yang paling terasa di situs mana pun, dan ia bisu.

BEFOREAFTERTekankaku saat ditekanTekanskala 0.96 · ~90ms
Before: tombol hanya tahu soal kursor. After: ia merespons tekanan — turun cepat ke 0.96 lalu mendarat rata, dengan rilis yang gesit. Inti dari elemen yang bisa ditekan adalah ia harus terasa ditekan.

Pemetaan before → after

Satu pass CSS-only, hanya transform/opacity (supaya tetap di GPU), token tak diubah:

ElemenBeforeAfterKenapa
Tombolhanya lift saat hover:active { transform: scale(0.96) }, mendarat ke shadow istirahatTiap CTA kini merespons tekanan — turun cepat, rilis gesit
Card yang bisa diklikhanya lift saat hover:active { transform: scale(0.99) }Card terasa “ditekan” saat di-tap; halus karena ukurannya besar
Panah carouselhanya ganti warnatransform ditambahkan ke transition + :active { scale(0.9) }Tombol bundar terasa mati saat diklik
Accordion FAQjawaban membuka mendadakjawaban fade + naik perlahan selama 0.18sElemen yang muncul tanpa transisi terasa rusak

Rilis sama pentingnya dengan tekanan. Turunnya cepat (~90ms) tapi pantulannya mengikuti base 0.2stegas saat turun, gesit saat naik. Elemen yang bisa ditekan harus terasa mantap saat masuk dan ringan saat kembali.

Aturan di balik perbaikannya

Skill ini bukan sebuah gaya; ia daftar pendek default yang sadar-fisika. Yang menggerakkan pass ini:

Berikut press yang sebenarnya, lengkap dengan specificity-nya — aturan :active harus menang atas hover lift, dan tekanan lebih cepat daripada rilis:

/* turun cepat (~90ms), rilis gesit lewat base 0.2s — dan press menang atas
   hover lift berkat urutan sumber + specificity. */
.rv-btn:active:not(:disabled) {
  transform: scale(0.96);
  transition-duration: 0.09s;
}

Dan karena motion tak pernah wajib, reveal FAQ keluar dengan rapi:

Sediakan jalur reduced-motion

  • Tiap animasi baru punya jalur @media (prefers-reduced-motion: reduce). Fade-and-rise jawaban FAQ cukup dimatikan; panel tetap terbuka, hanya tanpa gerakan.

Jangan rilis animasi tanpa fallback

  • Entrance tanpa fallback reduced-motion adalah bug aksesibilitas, bukan hiasan. "Lebih sedikit dan lebih lembut", bukan "semua atau tidak sama sekali".

SVG atau Remotion untuk before/after?

Perbandingan di atas adalah inline SVG, bukan GIF rekaman. Itu pilihan yang sengaja — Remotion (React → video) sangat bagus, tapi ia alat yang keliru untuk figur yang tertanam di situs seperti ini:

  • Sadar-tema: figur ini berganti warna untuk light/dark dari token --rv-* yang sama. GIF yang di-bake terkunci pada satu tema.
  • Ringan + bisa di-crawl: hanya beberapa ratus byte markup, terbaca oleh search dan answer engine; tak ada aset raster untuk dikirim atau di-cache.
  • Selaras sistem: tiap diagram di sini sudah berupa inline SVG + CSS, bersih-CSP, sadar reduced-motion.

  • Klip mandiri untuk sosial (LinkedIn, X) atau hero landing-page, saat Anda memang mau video hasil render dan tema/SEO tak relevan.
  • Gerak berat dan frame-exact yang tak bisa diungkapkan CSS — partikel, easing yang ingin Anda scrub, urutan yang sinkron dengan audio.
  • Ia berjalan di luar build statis dan menghasilkan file raster — bagus untuk distribusi, keliru untuk diagram dalam artikel.

Patokan: SVG untuk figur yang hidup di dalam halaman; Remotion untuk video yang keluar darinya. Kalau nanti kami memotong klip before/after untuk dibagikan, di situlah Remotion berperan.

Jalankan di UI Anda sendiri

Pass-nya bisa diulang dan rendah-risiko:

  1. Arahkan agent Anda ke skill itu lalu minta polish pass untuk sebuah komponen atau halaman.
  2. Baca tabel Before → After yang ia kembalikan — tiap baris adalah aturan spesifik, bukan tebakan.
  3. Terapkan yang menang sebagai perubahan CSS-only (transform/opacity), tiap :active diverifikasi menang atas :hover-nya lewat specificity.
  4. Validasi: aturan masuk ke cascade, nol error console, reduced-motion dihormati, build bersih. Rilis diff-nya.

Semua ini tak terlihat di screenshot — ia hidup sepenuhnya di tekanan. Itulah intinya: seribu detail nyaris tak terdengar, semua selaras nadanya.

Pertanyaan umum

Apa itu skill design-engineering Emil?

Ia filosofi kerajinan UI Emil Kowalski yang ditulis sebagai aturan yang bisa diterapkan coding agent AI — kapan beranimasi, easing dan durasi mana, press feedback, spring, dan aksesibilitas. Anda arahkan agent ke sana lalu minta polish pass; ia meninjau kode asli Anda dan mengembalikan perbaikan Before → After yang konkret. Emil adalah penulis Sonner dan Vaul serta mengajar di animations.dev.

Apa itu press feedback dan kenapa penting?

Press feedback adalah respons kecil dan cepat yang diberikan elemen saat Anda klik atau tap — biasanya mengecil ke sekitar 96–98%. Ia menegaskan antarmuka mendengar Anda. State hover bereaksi pada kursor yang melintas; press feedback bereaksi pada aksinya sendiri, yang paling dirasakan pengguna. Menambahkannya adalah peningkatan terbesar dalam pass ini.

Pakai SVG atau Remotion untuk menampilkan before/after?

Untuk figur yang tertanam di dalam halaman, pakai inline SVG: ia sadar-tema, ringan, bisa di-crawl, dan bersih-CSP. Pakai Remotion (React → video) saat Anda butuh klip mandiri untuk dibagikan di luar situs — posting sosial, hero landing-page — atau gerak frame-exact yang tak bisa diungkapkan CSS. SVG untuk figur yang hidup di halaman; Remotion untuk video yang keluar darinya.

Sources

  1. Emil Kowalski — skill design-engineering
  2. animations.dev — kursus animasi Emil Kowalski
  3. Remotion — membuat video secara programatik di React
  4. MDN — prefers-reduced-motion